Effekseer icon indicating copy to clipboard operation
Effekseer copied to clipboard

Add prefab feature.

Open numanicloud opened this issue 4 years ago • 1 comments

Add prefab feature, so that you can place effect as a node in another effect.

This is specifications discussed in text chat (japanese):

プレハブ

基本

  • 通常のノードと同様なUIで提示される。つまり、リボンや軌跡などと同じレベルの種類としてプレハブがある。そのようなノードをプレハブノードという。
  • ノードの種類としてプレハブを指定すれば、プレハブとして取り込むエフェクトファイルを設定するUIが提示される。
  • 通常のノードを右クリックすると、メニューからそのノードをプレハブ化するコマンドを選択できる。こうすると新たなエフェクトファイルができる。
  • あるノードをプレハブ化すると、そのノード以下の子ノードも全て新たなエフェクトファイルに含まれる。
  • GUI上のプレハブノードの下には、プレハブとして読み込んだエフェクトの子孫ノードも全て表示される。
  • プレハブノード以下のノードに対して、パラメータを上書きすることができる。後述。

上書き機能

エフェクトをプレハブとして読み込むと、プレハブノードの下もノードツリーができる。この部分ノードツリー内のノードに属するパラメータも、ユーザーが編集することで上書き設定とすることができる。そういったノードを編集してもプレハブ側のエフェクトファイルには影響が無いが、エフェクトをエクスポートする際には上書きする値の方が使用されるし、GUI上でも上書きする値の方が表示される。

エクスポート

プレハブノードを持つエフェクトをエクスポートする際には、プレハブの中身のノードを取り出して、プレハブ内の全てのノードも一緒にシリアライズする。

ノードツリー上の見せ方

  • あるエフェクトAが、Rootノードと、その子ノード「X」ひとつだけを持つなら、それをプレハブとして読み込むと、GUI上ではプレハブノードの位置がRootノードと一致し、プレハブノードの子としてXが表示される。

動的パラメータ、プロシージャルモデル

動的パラメータとプロシージャルモデルは特定のエフェクトに属するリソースのようなもので、エフェクト内にあるノードから参照することができる。エフェクト内にプレハブがある場合、それぞれの持つ動的パラメータやプロシージャルモデルの見せ方が重要である。

仕様

便宜上、動的パラメータ、プロシージャルモデルのことをまとめて「設定データ」と呼ぶことにする

  • 「設定データ所有者」は、自分がどのような設定データを持っているのかを知ることができる。
  • プレハブノードは設定データ所有者である。
  • ルートノードは設定データ所有者である。
  • プレハブ内のノードが設定データを参照している場合、親エフェクトがそれを上書きして別の設定データを参照するようにできる。
  • あるノードに設定データを参照させる際、有効な選択肢として、そのノードからルートノードまで辿って行った際に見つかった全ての設定データ所有者が持つ全ての設定データが提示される。

プレハブの更新

エフェクトAからエフェクトBをプレハブとして参照しているときに、後からエフェクトBを編集した場合、その変更がエフェクトAの中にあるエフェクトBにも反映されるのか?

エフェクトBが変更された場合、そのときエフェクトAをEffekseerで編集中でなければ、次にエフェクトAを編集するときにはエフェクトBの最新の設定が反映されていて欲しい。

ただ、エフェクトAをEffekseerで編集中であっても、やはりその変更が読み込まれてほしい。即座の反映が難しければ、リロードの機能が欲しい。

numanicloud avatar Nov 25 '20 14:11 numanicloud

恐らく、以下のリストを上から順に対応していくのがやりやすいかも。issueを分けた方がよさそう

プレハブノードを追加する

  • 新たなノードタイプ「プレハブ」を追加する
  • ノードタイプ「プレハブ」に対してプレハブファイルのパスを指定するUIを提示する。
  • 新たなノードタイプ「プレハブサブノード」を追加する。これはプレハブノード内の子孫ノードのことである。
  • ビュー上で再生時にプレハブノードの中身も、プレハブでないノードと同様に表示される。
  • エクスポート時にプレハブの中身を取り出して、プレハブでないノードと同様にシリアライズする。

上書き設定をできるようにする

  • ノードツリーUI上にプレハブサブノードが表示されるようにする。

    • ver1: プレハブサブノードを追加・削除しても、エクスポート結果には影響しない。
    • ver1: プレハブサブノードのパラメータはUIに表示されず、編集できない。
    • ver2: プレハブサブノードを追加・削除するコマンドが禁止される。
    • ver3: プレハブサブノードのパラメータを編集すると、上書き設定として扱われる(後述)
  • プレハブ(サブ)ノードに対する設定項目を、元のノードであるかのように編集できる。

  • プレハブ(サブ)ノードに対して設定したパラメータは、上書き設定として保存される。

  • ビュー上の表示において、上書き設定の値が使用される。

  • エクスポート時のノード設定として、上書き設定の値が使用される。

ノードをプレハブ化するコマンドを実行できるようにする

プレハブ化というより、エフェクトプロジェクトファイル化する、というほうが近い

  • ノードをプレハブ化するコマンドを提供する。コンテキストメニューに出すのがよさそう
    • ver1: 子ノードを持たないノードをプレハブ化できるように。
    • ver2: 子ノードを持つノードをプレハブ化できるように。
    • ver3: 無制限の再帰構造を持つノードをプレハブ化できるように。

動的パラメータを上書き設定にも使えるようにする

  • エフェクトプロジェクトを経由して、対応する設定データ(動的パラメータなど)へアクセスできるようにする。
  • プレハブノードを経由して、対応する設定データへアクセスできるようにする。
  • プレハブ内のノードにおける設定データへの参照を上書き設定として編集するとき、エフェクトプロジェクトの設定データも使用できるようにする。
  • 以上の設定データの対応を、使用できるデータ種別を広げる。
    • ver1: 動的パラメータ
    • ver2: プロシージャルモデル
    • 必要であれば: 今後設定データの種類が増える可能性を見据えて抽象化する

エフェクトファイルの更新を反映させる

  • エフェクトプロジェクトを開くとき、プレハブノードとして置かれているエフェクトファイルが更新されているなら、更新されている状態のプレハブを使用する
  • エフェクトプロジェクトを編集中でも、プレハブノードとして置かれているエフェクトファイルが更新されたら、プレハブの中身を更新する

numanicloud avatar Dec 16 '20 16:12 numanicloud