Yamabe.Michiyoshi返信ひと通り公式の基礎チュートリアルが終わったので、ヘルプ参照したり、ググりつつ基本を固めたい。間違いを発見した時、遠慮なく突っ込んでいただけると喜びます。・コンテキスト処理を行う状況や分野のこと。ModelingやAnimationなど、処理を行う分野が分かれており、内部に作れるノードの種類も変わる。Operators音声データや関数の組み合わせから波形を組み立てて、任意のパラメータに出力できる。OperatorsSurfaceオペレーションを行うノードのことを一括りにSOPノードなどと呼ぶようだ。SOPなどという書き方をよく見かける)SOPに関しては、コンテキストの一種とは言い難いと思う。Operator色調補正や画像合成を行える。Groupノードは、同じ名前でSOP、DOP、VOPなど複数のネットワーク内で作成、使用できるが、所属するネットワークのコンテキストタイプに応じて全く別の働きを持つ。そのため、どのコンテキストに属しているか明示する意味合いもあるのだろう。パラメータに関してAttributeとは各コンポーネントが持つ固有の値のこと。コンポーネントとは、Point/Vertex/Primitiveなどのオブジェクトを構成する要素のこと。GeometryのPointが持つ[P]AttributeはPointの座標を表す。ParticleのPointならVelocityなども持つ。同様に、Vertexノード、Primitiveノードを接続することで、それぞれに対応するAttributeを追加することができる。※これらのノードを通った時に通ったデータが持っている情報から、Addした各Attributeを計算し下流で使えるように有効化するという方があってる気がする。Viewで確認できる。簡易的な内容は、ノードを中ボタンクリックで表示できるポップアップウインドウでも確認できる。Expression各種パラメータボックスには、直接計算式を記入することができる。これは数値型のパラメータにかぎらず、例えばファイルパスなどを格納する文字列パラメータでも同じ。変数Expressionには変数名を記入することができる。$FF(浮動小数点型のフレームナンバー)など。この変数名は、そのまま計算に用いることができる。Helpで調べると良い。リストアップされている変数の中に、特定のノード内で使えるものとそうでないものがあるという、一見して不思議な動作を考察。変数が見つからず、Expressionが正しく評価できない場合、ノードアイコンが赤い斜線で装飾される。この状態でノード上にカーソルを置き、中ボタンを押すと以下のエラーが確認できる。(下図は別のノードで表示したものなので、パスが違うが)調べた限り、ある変数名が任意のノード中で使えるかどうかを判断するのは、試行錯誤による判断が必要という意見がよく見つかるように思えた。ここに記載されていない変数も使用できるケースが有るのでややこしい。SOPノードを経由することで作成される変数は、下流で確実に使える状態になっているので、まずはこれらのノードを使用し明示的に変数を作成したあとで、下流で使用する。SOPを使用して任意の値を明示的にAttributeの形で保持し、下流で使用する。オペレータへ入力するデータの型についてオペレータが操作する対象の型に対し、処理対象として入力するデータの型が適合しているか明確に意識する必要がある。ExtrudeなどはPrimitive型のデータを元に処理されるので、Primitive型のデータを入力しなければ正しく処理は行われない。ExtrudeノードのGroupパラメータに与えられるからである。BevelはPointに対する処理を行う。よって、Groupノードによる下流オペレータへ渡すコンポーネントのフィルタ処理は、渡したいコンポーネントの型を元にフィルタするのが望ましい。オペレータから出力されるデータの型についてオペレータへの入力が要件を満たしている場合は何事も無く処理後のデータが出力される。Geometryデータが出力される。※入力が要件を満たしておらず、ノードのステータスがWariningであれば入力されたデータは何も手を加えることなく下流のノードへ渡されるようだ。ExpressionからAttributeを参照する参照したいAttributeを保持するコンポーネントの型に応じて、それぞれ以下の関数を使う。attrib_index)Numeric配列型AttributeAttribCreateを使用すれば、複数の数値を保持する配列型のAttributeを作成することができる。この配列型の値を使用する際、インデックスに応じて以下のように指定する。・Vector型Attributeの可視化ビューポート上で任意のAttributeの状態を可視化できる。Attributeを追加する。左から順にGeneric/Text/Vector/Scene上図のボタンを押すと、下図のようなウインドウが現れる。Object).・Text文字で値を表示する。これは、数値も文字列として表示される。context.Attributeの所属クラス変換と全要素を使用する計算AttribPromoteノードを使用して、任意のAttributeを、別のクラスのAttributeに変換できる。同時に、Attributeに含まれるすべての値から平均値や最小値、最大値、などいくつかの用意された条件にマッチする値を抜き出すこともできる。Name変換先のAttribute名を指定し、新規作成する。Original変換元アトリビュートを削除するか決定する。Attributeを別のノードにコピーするAttribCopyノードを使って、任意のAttributeを写しこむ。Attributeのコピーは、各コンポーネントのインデックスがマッチするもの同士で行われる。パラメータ設定はだいたい見たとおり。Group未記入ならオブジェクト全体の指定クラスからコピー元となるオブジェクトセットを探す。Type未記入ならオブジェクト全体の指定クラスからコピー先となるオブジェクトセットを探す。Matchコピー元と先に指定した名前のAttributeがある場合にアトリビュート値のコピーを行う。Classどのクラスのデータをコピーするか指定する。Variableローカル変数名もまとめてコピーし、下流で使えるようにするか決定する。Attributeを転送するAttribTransferノードを使い、距離を元にAttributeを転送できる。・Attributesタブ一様に転送するAttributeの指定ができる。・Conditionsタブ距離に応じた転送が行える。Yamabe.Michiyoshi返信https://vimeo.com/8447016https://vimeo.com/8447185https://vimeo.com/8447373Partコンテキストパーティクル操作のためのコンテキスト。これを使わなくてもobjコンテキスト内ではパーティクルが作れた。Partコンテキストを使うことでどんな利点があるのか気になる。(POP)ノードポイントエミッタ基本的なパラメータはpopnet-oldなどと同じ。Groupパラメータ上流で作られたグループを保持し、このノードで作られるグループをフローに追加する。・Varianceパラメータ(Attributes)初速のランダムベクトル。±入力されたベクトルの範囲でランダム化される。(POP)ノードパーティクルからパーティクルを発生させる。これを使用して、任意のパーティクルから速度を持たないパーティクルを発生させれば、パーティクルの軌跡が作成できる。(POP)ノードパーティクルをパーティクルに追従させる。引きつけの速度などはFollowタブで設定。(POP)ノード任意ノードとパーティクルのCollisionを検知できる。Eventパラメータには、このCollisionが有効になった際に発生するCollisionイベントの名前を記入する。このイベント名は、後で以下の関数などで使う。)この関数に与えられた名前を持つEventが発生した時、関数はTrueを返す。Activationなどに仕込めば、Collisionイベント発生時にのみパーティクルを発生させるような事が可能。(POP)ノードパーティクル版のmergeノードCurl-Noise(POP)ノードパーティクルにNoiseを与える。ポジションや速度、外力として与えるなど、様々な選択ができる。Samplingを上げると、Constタイプで時間に対しスムースに作成されるパーティクルの間隔がスムースになる。同じように操作しているつもりだけど、何故かうまくスプライトの割り当てができない。バージョン違いによる差異だろうか。チュートリアルでは、一度popnetに対してスプライトを当ててから、別のパーティクルに当て直しているように見えるこの手順は一旦スキップする。・Instance(POP)オペレータオブジェクトインスタンス・Render(POP)オペレータパーティクルをそのままレンダリングする際の見た目を決定するColor(POP)オペレータパーティクルのカラーや透明度を指定するProperty(POP)オペレータ任意のタイミングで、任意のアトリビュートを操作できる。ObjectにmotionPath_curveを指定Positionにスタートフレームで0、エンドフレームで1となるようにキーを打つ。これで時間を動かすと、カーブに沿ってボックスが動くようになる。3・Trailノードを使ってボックスの頂点の軌跡を取り出す※この時、trail_emitter内のboxノードに直接Trailノードをコネクトしても、trail_emitter内に存在するbox自体は、ローカルな空間内では動いていないので軌跡が作成されない。グローバル空間での動きを元にTrailを作成する必要がある。Mergeノードを作成する。このノードは、パスを指定してどこからでもジオメトリデータを取得できる。パラメータリストの下部で呼び込みたいオブジェクトのパスを指定する。Transform情報はbox自身の移動情報を使用するので、以下のように設定する。MergeにTrailノードを接続すると、Trailが正しく有効になる。4・エフェクトの発生点を作成するtrail_emitterを非表示にしておき、後面を選択後に削除。blastノードが作られ面の削除が行われる。Selectedをオンにする。することで、選択されていなかった面が削除される。Polygonsにする同じ番号を持つ頂点同士が接続される。デフォルトの設定では、ここで作られるポリゴンのラインは閉じているため、急激なカーブを行う箇所などでは面が見えてしまう。開いたカーブにするため、以下のパラメータをオフにする。Createノードを作成。optionApplyやAcceptを押すと、Customの項目にrankが追加されたことがわかる。これがオンになっていると、同名のアトリビュート値が各ポイント上に表示されるはずだが、なぜかされない。ちなみに、このカスタム表示を使えば、各頂点上の法線方向なども視覚的にわかりやすく表示できるようになるらしい。SOPノードにパラメータが表示されてしまうのでオンにして隠しておく。SOP内で生成されるものとで分けておくと良い。12・RampParameterを作成し、コネクトするTrailエフェクトのぶれ具合をramp制御したいのでRampParameterを作成し、コネクトしておく。RampParameterノードは0〜1の値を受け取り、それぞれの値に応じた値を出力する。Rampの動作は以下のようにしておくNameに$OSという名前の変数を使うと、ノード名そのものがここで作られるパラメータ名として使われる。VEX内部で生成するパラメータはこのパターンで命名するのが楽かも。Float型のParameterノードを作成。1,1,1にしておく。ままだと、Noiseがかかっていないように見えてしまう)15・MultiplyノードにNoise計算用ノードをコネクト16・Noiseと元々のカーブを加算する最後に、Multiplyで作られたNoise成分と、元々のカーブのポイントを足し合わせる。Multiplyの計算結果は、あくまでもノイズ成分。これを、元々のカーブに足し合わせることで、Noiseの加わったランダムなカーブが出来上がる。Yamabe.Michiyoshi返信パーティクルアトリビュートを個別に取り出しやすくするsourceノードにAttribCreateノードを接続する。AttribCreate内でNameに任意のアトリビュート名。Valueに変数名を使用することで、任意の変数に名前をつけて明示的に外に出せるようだ。マルチパスレンダリングMantraノード内、Outputタブ。Planesで+ボタンから出力するパスが追加できる。Variableの項目右端のプルダウンから簡単に指定可能。Typeは変数の型を指定。Vector型として定義されているパスをFloatなどで出力するとどうなるのか?後でテストする。Nameは出力されるファイル名のようだ。Quantizeでピクセルのビット深度の指定。Builderを作成し、オブジェクトへアサインする必要がある。Variableでつけた名前をNameパラメータに指定する。ExportパラメータをAlwaysにしてレンダリングするとマルチパスレンダリングされたことがわかる。ウインドウ上部のチャンネル名プルダウンから、表示するチャンネルを指定できる。上図は、Velocityチャンネルを表示。MPlayについてIキーを押すとカーソルの下にあるピクセルの各種情報が表示される以下のボタンを押すと、現在表示されているチャンネルに含まれる値の範囲を最大限引き伸ばして表示できる。Pictureパラメータにファイルパスをファイル名込でセット。拡張子を記入しておくと、自動的にその拡張子のフォーマットで書き出される。ここにipとだけ記入しておくと、MPlayで直接レンダリングされる。Settingsコンポジット作業は、imgコンテキスト内で行う。Viewで確認できる。ノードベースのコンポジットソフトと同じように、素材ノードの下流に各種処理ノードをつなげて処理を進める。Networkノードを作り、カットごとなどある程度の単位でサブネットワークを作るのが良い。イメージファイルの読み込みはfileノードから行う。Copyノードでイメージファイルから任意のチャンネルを取り出したり、取り出した画像にBlurやExpand,Limitなどといった画像処理ノードををつないでマスクを生成するなどしながら画像合成を行う。レンダーノードのmerge複数のレンダーノードを作成し、mergeノードにまとめると、mergeノードのRenderボタンからまとめてレンダリングできる。Body剛体シミュレーション。通常通り、ジオメトリが作成され、restにつながっている。restノードはソリッドテクスチャをオブジェクトへ追従させるために使うノードらしい。Objectノードで受け取っている。Solver実際にシミュレーションを行うノード。Engineパラメータで、使用するソルバを指定する。Bullet以外を使うことは殆ど無いんじゃないだろか以降のコネクションには、ここでリジッドボディに関連するジオメトリをまとめるmergeノードと、重力等の外力ノードが並ぶ。これに続けてWindノードなどをつないで外力を足すことも可能。Plane無限遠のCollisionオブジェクトを足すことができる。Stateタブにて設定。ObjectのCollisionsタブにて設定Modeの変更可で処理の高速化ができそう。オブジェクトがどのようなCollision形状を使用して衝突判定を行うかを決定する。Geometryをオンにし、一度初期フレームに戻る。DivisionsパラメータでCollision形状の精度を調整する。当然だが、極力少ない面の数で構成されるように調整するのが良い。シミュレーションのパフォーマンス調整AutoDopNetworkのパラメータで行う。Stepで1ステップを何分割して計算するか指定。このへんはその他のシミュレーションツールと同じ考え方で良さそう。ObjectのPhysicalタブで行う。このへんもMayaなどと同じ考えで設定できそう。Scale:静止摩擦が限界を迎えた後の摩擦係数。説明を読む限り、Frictionは静止摩擦で、それに対してこの数値を掛けあわせた値が動摩擦係数として動作するということらしい。よって、この値が0の場合は、滑り出したら摩擦係数0の状態で動作するようになる。逆に、1の場合は常に静止摩擦の値で摩擦係数が発生することになる。Temperature:温度。浮力や発火の検知に用いる値らしい。燃料オブジェクトにこの剛体が接した時、燃料オブジェクトの発火温度をこの値が上回っていたら発火させる。この発火処理がどのように行われるかは現時点では不明。Objectを作成すると、AutoDopNetworkにRBDオブジェクトが追加される。Objectはいったんmergeノードにまとめられた上で各ソルバノードへジオメトリの出力を行うようだ。RBDオブジェクトの追加も同様。閉じていない形状のRBDオブジェクトデフォルト設定では、RBDオブジェクトは閉じていない形状でも閉じてい状態で計算される(Bulletの制限?)ボールはチューブの内側に落ちず、チューブが持つボリュームに乗る。これを防ぐには、チューブの表面に厚みをもたせ、形状を閉じておく必要がある。カーブ上に散布するオブジェクトの向きここでは、散布されたオブジェクトをそれぞれ次のオブジェクトに向けるある一点のオブジェクトに向いてほしい方向は「次のポイントの位置-現在のポイントの位置」で表わせる。pointノードについてもう少しpointノードのinput2は、ポイント参照用のオブジェクトを入力できる。参照用オブジェクトを使用すれば、法線方向の計算などで使用することができる。上図の例では、上見えているカーブを複製し、複製されたカーブを少し下にずらしている。複製されたカーブなので、各頂点番号は一致している状態。ここで、上のカーブをpointノードのinput1に、下のカーブをinput2へ接続し、pointノードのNormalに以下のエクスプレッションを仕込む。$TZ2-$TZ$TX2はinput2側の頂点位置を指す。することで、input1の各頂点法線は、input2の各頂点との差分ベクトルを持つようになる。Dominoチュートリアルこのチュートリアルでは、まずドミノピースを並べるためにカーブを作成する。その後、カーブをResampleし、等間隔で頂点をもたせる。最終的には、このカーブが持つ各頂点上にピースを複製して散布する。Resample済みのカーブを受け取るSortノードを作成し、ソート方法をShiftにした上でOffsetパラメータを変更すると、各頂点番号が循環する。ここでは、この性質を利用して、全く同じ形状で一つ頂点番号がずれたカーブを法線方向計算のための参照先として利用する。頂点数が同じで、元の頂点の並びが同じカーブ同士なら、片方のカーブ上にある頂点番号を一つシフトすると$TXと$TX1の差は、ちょうど隣り合う頂点の位置の差分となる。よって、この値をNormalに与えれば各頂点の法線は、強引ではあるが次の頂点方向を向くようになる。この時、末端のポイントだけは正しい方向を向けられないので、DeleteノードをPointノードの後ろに配置し、ポイントの削除を行う。オブジェクトの頂点上にRBDオブジェクトを散布する任意のオブジェクトを選択した状態で以下を押すすると、ダイアログが開く。Point〜の違いが不明なので調べる。その後、散布したいオブジェクトを選択し、Enterキーで決定。散布された各オブジェクトは、通常通りRBDオブジェクトとして動くようになる。あとは、地面を配置してドミノをスタートさせるオブジェクトを作り、最初のピースを倒すだけ。Bodyオブジェクトとして扱われる。Bodyオブジェクトとして扱う。Bodyが作成できる。家具など、力が加わることで破壊され、他と切り離されるまでは結合を保とうとする振る舞いが作成できる。シェルフ内で当該機能が見つけられなかった。別の方法で作る方法を探る。Constraint)剛体に制限を与えることができる。Locationで定められた位置にゴール位置が固定される。ノードバネで剛体をつなぐコンストレイン。Forceは、バネが切れる力のしきい値のようだ。低めの値にしておくと、一定の速度がかかった時にバネが消えて、剛体は自由落下する。Constraint等がある。使用するソルバによって使えるコンストレインが変わるらしい。Parameterノード内で操作する。Yamabe.Michiyoshi返信Particleノード入力は、左から順にソースオブジェクト、コリジョンオブジェクト、フォースオブジェクト。パーティクルは、ソースオブジェクトのポイントの位置からIDの順にしたがって発生する。リアルタイムプレイバックオプションあまり変わってるように見えないけど、タイムスライダ右側の時計アイコンのオンオフで全フレームを極力高速に連続再生するか、設定されたフレームレートを守って再生するかを決められる。パーティクルの初期設定ソースオブジェクトからpointノードに接続し、Particleタブの中で初速等を設定する。Normalにするこの法線パラメータも初速として考えることが可能。初速と同様にY=-9.8とすると全く同じ動きをする。パラメータ名と動作をより正確にマッチさせるなら、Velocityパラメータに$NX,$NY,NZを元にするエクスプレッションを仕込むのが正しい気がする。パーティクルをランダムな位置から発生させるにはソースオブジェクトをScatterに接続し、オブジェクトの表面に一度パーティクルを散布し、散布されたパーティクルをパーティクル発生点にする。Sortノード入力されたコンポーネントのIDの並びを任意のルールでソートする。ソースオブジェクト上のパーティクル発生位置を固定しながら、発生順だけをランダム化したい場合に使うと便利。Collisionオブジェクトパーティクルが衝突するオブジェクト。このオブジェクトは体積を持っているべき。形状を作成したら、particleノードの2番目の入力にコネクトするデフォルトでは、Collisionオブジェクトにパーティクルがヒットした際の動作は「消滅」に設定されている。Contactに設定すれば、Collisionオブジェクトにヒットしたパーティクルが跳ね返るようになる。Tangent/Normalのようだ。Collisionヒット時にそれぞれの方向にどの程度の倍率で力が変化するかを指定できる。Planeパラメータは、強制的に発生させるCollisionバウンディングボックスと言える。オブジェクトを使用するCollisionより高速かつパーティクル抜けがないので、室内シーンなどでは積極的に使うのがいいように思う。PlaneをCollisionオブジェクトより高い位置に設定した例パーティクルのSplitCollisionヒット時にサブパーティクルを発生させることができる。設定すると、単純にパーティクルがCollisionヒット時に分裂するような状態が作れる。Time:シミュレーション開始時点までに事前計算を行っておく秒数。カットの開始時にある程度パーティクル数を出しておきたい場合に使用する。Inc:パーティクルの評価タイミングの精度。細かくすればするほど評価精度が高まる。通常は1/$FPSで良くて、早過ぎるパーティクルなど、精度が求められるパーティクルだけ高精度化するのがいい。すると、ソースオブジェクトの頂点が、発生したパーティクルに追従するようになる。この性質を利用すれば、ソフトボディが簡単に作れそう。Varianceはパーティクル寿命のランダム幅(秒)Magnetノード任意のGeometryをMetaBallによって変形できるノード。Activation:0=パーティクルは発生しない、それ以外は発生する。Activation:0=パーティクルは発生しない、それ以外は発生する。Mesh1パーティクルの発生点として2つのポイントで構成されるラインを作成2ラインの中心にピボットを移動し、transformにつなげて回転させる。Velocityを持たせて移動するように設定する。Rateを$NPTとし、ソースオブジェクトが持つ頂点数分を毎フレーム生成するように指定。Pointsにし、Nを2にする。することで、パーティクルが2つ発生するごとに一つのグループにまとめられ、それぞれが別のPolyLineオブジェクトとして扱われるようだ。5Skinノードにコネクトし、面を貼って完成popnet内でのパーティクルグループpopnetノード内で、パーティクルのグループを作れる。Nameに入力、Createタブ内、Ruleタブでグループに含める条件を入力することで、条件に当てはまるパーティクルをここで作成したグループに含めることができる。下図は、パーティクルIDを走査し、偶数と奇数でグループを分け、それぞれのグループに別々のカラーとフォースを割り当てた例。Groupパラメータに、ここで作ったグループ名を入力することで、グループごとの編集が可能になる。Ruleタブ内にあるEnableを忘れずにオンにしておくこと。これを忘れると当然効果が現れない。パーティクルの寿命が尽きた時、全パーティクルが持つIDが変化してしまうため、一工夫して変化させない仕組みを作る必要があるようだ。Treesで、以下のオプションをオンにする。こんなかんじでフルネーム表示される。アトリビュートの型アトリビュート名の左右にあるボックスは、コネクタであり、値の型ごとにカラーが決まっている。このへんは他のDCCツールのノードエディタと同じ概念。異なる型同士を接続sる場合は、変換ノードを間に挟む。Vector等がある。各コネクタの上にカーソルを置いて待つとコネクタの詳細情報がポップアップするこれは、型の確認に使える。SOPノードのボタンノードの右側にはボタンが有る。左から順にデバッグ/バイバス/表示モード切り替え。デバッグは後に説明がありそうバイパスはそのノードを一時的に無効化する表示モードは、全アトリビュート表示、コネクト済みアトリビュートのみ表示、全アトリビュート非表示を切り替えられる。頂点移動の例Noiseを使用してGridを変形する。Position(Vector)を取得し、Noiseノードに渡す。この時、特にグループなどが指定されていなければ、global1には入力されたメッシュ上にある全頂点が含まれる。2Noiseノードの計算結果をDisplacementノードに渡し、移動後の頂点位置を出力する。SOPの計算結果を出力するためのOutputノードに、変形後の頂点位置を渡すことで、変形が完了する。SOP内ではトポロジの変更を行うノード(smoothやsubdivideなど)が作れないようだ。SOPはすでにあるメッシュなどに対し、何らかの処理をするためのものだと思う。SOPの上流で完了させておく必要がありそうだ。SOPと同じ要領でシェーダーネットワークを編集できるようだ。Variablesノード内のアトリビュートを適宜切り替えて使用する。VOPノードの動作は、このノードから出力される値をもとに行われるようだ。Modelノード一般的なシェーディングノード。だいたいこれを使っとけば問題ないらしい。ダブルクリックすると中身を見ることができる。複雑なネットワークが組まれていることがわかる。contentsを選択すると、ノード名が赤色になり、内部のノードネットワークが編集可能になる。順にノードをコネクトすれば良さげ。Builderノードへ持たせることができる。Parameterを選択こうすると、ノードのパラメータの左側に突起が出現し、Promoteされたことがわかる。Builderノードのパラメータを確認すると、パラメータが追加されたことがわかる。Promoteは、パラメータリストに表示されている各パラメータの右端にあるボタンからも行える。選択するPromote済アトリビュートのExposePromoteは、実際には、実体アトリビュートとアトリビュートへのエイリアスの間に値を中継するためのノードが挿入されて行われる。選ぶことで、中継ノードが表示される。上図はdisplacementnml1のscaleアトリビュートはPromote済みで、それをExposeした様子。この中継ノードを操作すると、値の範囲やタイプなど、パラメータの振る舞いを変更することができる。Propertiesノード任意のパラメータを持たせるためのデフォルトでは何のパラメータも持たないノード。Interfaceで任意のパラメータを追加して使用する。MaterialパラメータをGeometryノードに渡すGeometryのMaterialパラメータ欄右端のプルダウンから以下のメニューを選択すると、geometry内のmaterialタブにシェーダが持っているパラメータのエイリアスがまとめて表示されるようになる。この操作により外へ出されたパラメータは、マテリアル本体が共有されていても、値は共有されないようだ。ひとつのシェーダを使いまわしてバリエーションを作成することができる。これが、アトリビュートとチャンネルの違いということなのだろうか?ちょっとぴんとこないので、あとで調べる。Networkノードを作成するとオブジェクトに、シェーダーを埋め込むことができるようだ。その後、GeometryノードのMaterialタブにて使用するシェーダーを選ぶ際、以下のようにオブジェクトツリー内のシェーダーが選択できる。選択してからマテリアル指定を完了すると、相対パスでマテリアルが指定されるため、Geometry自体が階層を移動してもマテリアルのアサインは保たれる。Displacementの最適化Displacementはデフォルトの設定では、欠けが発生するなどして、正しくレンダリングされない(チュートリアル中に理由が詳しく述べられているようだけど、よく聞き取れず)これを回避するためには、Propertiesノードを作成し、レンダリング用の特別なアトリビュートを作成と、シェーダネットワーク末端のCollectノードへ接続する。Boundの値を上げることで、精度が上がり、正しくレンダリングできるようになる。Expression?VOPで作成するノードグラフは、実際にはVEXコードをグラフィカルに表示しているだけのようだ。Compilerの項目がある。これが意味するところは、リアルタイムにVEXがコンパイルされ、最適化された状態で常に使用されるということなんじゃないだろうか。※当ブログの内容は、個人的な研究記録です。所属組織の業務とは一切関係ありません。