On this page |
このノードは、 Select Input パラメータで、出力する入力を指定します。入力の番号は0から始まります。 このパラメータをエクスプレッションで制御したり、アニメーションさせることができます。
例えば、$F - 1
エクスプレッションを使えば、フレーム1では1番目の入力に、フレーム2では2番目の入力などに切り替えることができます。
最初の4フレームでは1番目の入力を、それ以降のフレームでは2番目の入力を使用するには、($F >= 5)
エクスプレッションを使います
(>=
などのブール演算子は、Falseで0
、Trueで1
を返すので、そのSwitchノードはエクスプレッションがFalseの時に入力0を、Trueの時に入力1を選択します)。
Tip
失敗してエラーを返す可能性のあるノードをバイパスするためにSwitchノードをよく使用します。 これをする方法は、 Select Input パラメータに以下のエクスプレッションを使います:
if (strmatch("*Error:*", run("opinfo " + opfullpath("../" + opinput(".", 1)))), 0, 1)
このエクスプレッションを使えば、Switchノードは、エラーがなければ 2番目の 入力を使用し、エラーがあれば 1番目 の入力に切り替えることができます。
このエクスプレションは、2番目の入力(opinput(".", 1)
。入力番号は0から始まるので、1
は2番目の入力を参照します)のオペレータ情報文字列(runエクスプレッション関数を使って、opinfo HScriptコマンドをコールします)を取得します。
strmatchがエラー文字列を見つければ、if関数は0を返します(1番目の入力を使用)。そうでないなら1を返します(2番目の入力を使用)。
エラーではなく警告を出すSOPを取り扱う時は、以下のエクスプレッションを使います。例えば、Object MergeノードがSwitchノードの2番目の入力に接続されていて、そのノードがジオメトリを読み込んでいない時は警告を出します:
if (strmatch("*Warning:*", run("opinfo " + opfullpath("../" + opinput(".", 1)))), 0, 1)
パラメータ
Select Input
出力する入力番号(0から始まります)。このパラメータをエクスプレッションで制御したり、アニメーションさせることができます。
Examples
The following examples include this node.
CopyAnimation Example for Copy channel node
このサンプルでは、Copy CHOPを使って、チャンネルをコピーして、それらのチャンネルをジオメトリに適用する方法を説明しています。
CountImpacts Example for Count channel node
このサンプルでは、Count CHOPを使って、DOPシミュレーションのインパクトを数える方法を説明しています。
このサンプルでは、Count CHOPの値を使って、ティーポットのコピーを生成します。
DynamicLights Example for Dynamics channel node
このサンプルでは、Dynamics CHOPを使って、DOPシミュレーションからインパクトデータを抽出して、そのデータを修正して、シーンのライトを制御する方法を説明しています。
HoldLight Example for Hold channel node
このサンプルでは、Hold CHOPとDynamics CHOPを使って、新しいインパクトが発生するまで、DOPシミュレーションのインパクトの位置にライトを固定する方法を説明しています。
Lookup Example for Lookup channel node
このサンプルでは、Lookup CHOPを使って、イベントまたはトリガーに基づいてアニメーションを再生する方法を説明しています。
Keyboard Example for MIDI Out channel node
このサンプルでは、MIDI Out CHOPを使ってMIDIデータを書き出し、MIDI In CHOPを使ってMIDIデータを読み込む方法を説明しています。 書き出したMIDIは、ジオメトリベースになっていて、読み込んだMIDIは他のジオメトリを制御しています。
NoiseTransform Example for Noise channel node
このサンプルでは、Noise CHOPを使ってアニメーションを生成して、それをジオメトリに適用する方法を説明しています。
AnimationSequence Example for Sequence channel node
このサンプルでは、3つの別々のオブジェクトからアニメーションを取得して、4つ目のオブジェクトへ1つのアニメーションとしてシーケンス化させる方法を説明しています。
BridgeCollapse Example for Apply Relationship dynamics node
このサンプルでは、Apply Relationship DOPを使って、自動的に拘束を伝搬させて、崩壊する橋のRBDシミュレーションを作成する方法を説明しています。
AnchorPins Example for Constraint Network dynamics node
このサンプルでは、異なるアンカー位置がピン拘束に影響を与える方法を説明しています。
AutoFracturing Example for Copy Objects dynamics node
このサンプルでは、Multi Solverと併せてCopy Object DOPを使って、他のオブジェクトと衝突した際に自動的にRBDオブジェクトを半分に割る方法を説明しています。
Stadium Crowd Example Example for Crowd Solver dynamics node
スタジアムのセットアップを説明した群衆サンプル。
このセットアップは、スタジアムの群衆を作成します。 回転するcheer_bboxオブジェクトをエージェントの境界ボックスとして使用しています。 エージェントがそのオブジェクトの中に入ると、座っている状態から応援している状態へ推移します。 数秒後には、応援している群衆がまた座っている状態に戻ります。
Note
アニメーションクリップは、シーンを再生する前にベイクするのに必要です。これは、サンプルをCrowdsシェルフから作成した場合に自動的に行なわれます。 そうでない場合は、シーンファイルを希望の場所に保存し、'/obj/bake_cycles' ROP NetworkのRenderをクリックして、ファイルを書き出します。 それらのファイルのデフォルトのパスは、${HIP}/agentsです。
Tip
群衆の一部だけをもっと高速にプレビューしたいのであれば、/obj/crowdsource/switch_all_subsectionにSwitchノードがあります。 そのスイッチを0に設定すると、すべてのエージェントが表示され、1に設定すると、一部のみが表示されます。
Street Crowd Example Example for Crowd Solver dynamics node
2つのエージェントグループによるストリートのセットアップを説明した群衆サンプル。
このセットアップは、2つのエージェントグループを作成します。 黄色のエージェントがゾンビで、ストリートのパスに沿います。青色のエージェントがぶらついている歩行者で、ゾンビが近づくと走ります。
エージェントの状態を変更するトリガーは、crowd_sim DOPNETでセットアップします。 ゾンビのグループは、信号との距離と信号の色を使用し、信号が赤になると停止状態に変わります。 生存者のグループは、ゾンビが近づくと走行状態に変わります。
Note
アニメーションクリップは、シーンを再生する前にベイクするのに必要です。これは、サンプルをCrowdsシェルフから作成した場合に自動的に行なわれます。 そうでない場合は、シーンファイルを希望の場所に保存し、'/obj/bake_cycles' ROP NetworkのRenderをクリックして、ファイルを書き出します。 それらのファイルのデフォルトのパスは、${HIP}/agentsです。
DensityViscosity Example for FLIP Solver dynamics node
このサンプルでは、ソリッドオブジェクトと作用する異なる密度と粘度を持つ2つの流体について説明しています。
TeapotUnderTension Example for Gas Surface Tension dynamics node
このサンプルでは、ティーポットの形をした液体のブロッブを作成しています。 そして、表面張力によって、ブロッブを球状に平滑化しています。
このサンプルでは、RBDオブジェクトで押しつぶされる草をシミュレーションしています。 Furオブジェクトで草の葉を表現し、Wireオブジェクトで動きをシミュレーションしています。 単一のFurオブジェクトで草を表現し、その近辺の草の葉がそれに合わせて動きます。 硬さが異なるオブジェクトを追加すれば、不均一な動きを表現することができます。 "Complex Mode"を有効にすると、2つのオブジェクトを使って草が表現されます。 それぞれのカーブに設定した硬さは、Wireオブジェクトの"Angular Spring Constant"と"Linear Spring Constant"パラメータで調整することができます。
EmittingObjects Example for RBD Packed Object dynamics node
このサンプルでは、SOP Solverを使って、新しいRBDオブジェクトを作成して、それを既存のRBD Packed Objectに追加する方法を説明しています。
rbdsmokesource Example for Smoke Object dynamics node
ぼんやりとした四面体がボックス内を跳ね回って、その煙の連続的な放出で臨場感を出しています。
DentingWithPops Example for SOP Solver dynamics node
このサンプルでは、たくさんの重要なDOPの概念を組み合わせています。
-
最初に、POP SolverとRBD Solverのオブジェクトを両方使って、双方向にお互い反応させます。 RBDオブジェクトは、パーティクルに影響を与え、パーティクルはRBDオブジェクトに影響を与えます。
-
次に、実際にRBDオブジェクトにMulti-Solverを使って、RBD SolverとSOP Solverを組み合わせます。 RBD Solverは全体のオブジェクトの動きを制御し、一方でSOP Solverはジオメトリを凹ませます。
-
最後に、SOP SolverはRBD SolverからImpact情報を抽出してジオメトリを凹ませます。 SOP Solverは、DOPエクスプレッション関数を使って、この情報を抽出します。
その結果、パーティクルをぶつけられるトーラスのシミュレーションになります。 パーティクルはトーラスで跳ね返り、トーラスが動きます。 さらに、各パーティクルの衝突によって、トーラスが少し凹みます。
VisualizeImpacts Example for SOP Solver dynamics node
このサンプルでは、SOP SolverでカスタムガイドジオメトリをRBDオブジェクトに追加することで、RBDシミュレーション内のImpactデータを可視化する方法を説明しています。
このサンプルでは、Impactの位置と強さを示す緑の線を持つ3つのトーラスがグリッドに落下します。 フォースを可視化するために、補助的なジオメトリデータとして実際のトーラスに追加しているので、RBD Solverは完全にそのエフェクトを無視します。 SOP Solverを独立したSOP Networkとして使うことで、RBDオブジェクトからImapctの可視化を抽出することもできます。
FractureExamples Example for Voronoi Fracture Solver dynamics node
このサンプルでは、実際にHoudiniでボロノイ破壊を使う7つの方法を含んでいます。 特に、破壊シミュレーションでVoronoi Fracture SolverとVoronoi Fracture Configure Objectのノードの使い方を説明しています。 アニメーションを再生するなら、それらのサンプルのディスプレイフラグをオンにし、セットアップをテストするなら、各サンプルの中に入ってください。
SimpleVortex Example for Vortex Force dynamics node
このサンプルでは、何個かのボールを使って、Vortex Force DOPで生成したフォースを可視化しています。
このサンプルで注目すべき特徴は以下の通りです:
-
ジオメトリエリアライト
-
減衰ランプ制御
-
サーフェスモデルのスペキュラーレイヤー
サンプルでは、NURBSカーブに基づいたジオメトリライトを構成しています。 ライトの減衰には、カラーキーを使うことで、異なるライトの色をライトからの距離に応じて生成することができます。 ground plane shaderは、2つのスペキュラーコンポーネント(広いコンポーネントと狭い光沢コンポーネント)でサーフェスモデルを使って、複数レイヤーの外観を生成します。
TransparentShadows Example for Light object node
このサンプルでは、ディープシャドウマップを使って透明シャドウを設定する方法を説明しています。 シーンには、影を落とす透明なグリッドを配置しています。 レンダラーには、マイクロポリゴンレンダリングを使用しています。
AmbientOcclusion Example for Mantra render node
アンビエントオクルージョンは、レイトレーシングによって開いた空間内に柔らかいDiffuseライティングを高速に生成するための技術です。 これは、あるポイントを中心にどれだけの大きさの半球がシーン内の他のサーフェスで塞がるのか調べて、塞がる箇所が多い場所ほど、より暗いライティングを生成する方法で計算されます。 この技術は、完全なグローバルイルミネーションほどの負荷をかけずに、そのGI(グローバルイルミネーション)のような効果が必要な時に役に立ちます。
これに特化したサンプルとして、アンビエントオクルージョンのライトといくつかのジオメトリをデジタルアセットの形式で用意しています。 このサンプルでは、Environment Lightを使用し、そのパラメータにアクセスしやすいように、そのパラメータをプロモートしています。
サンプル数を減らすことで、レンダリングでノイズが発生する代わりにレンダリング時間を短くすることができます。 以下のレンダリングでは、上図と同じシェーダを使用していますが、サンプル数をデフォルトの256から16に減らしています。 この値は、LightのRender Optionsタブの Sampling Quality で設定しています。
環境マップ
滑らかな環境マップを持っていれば、グローバル背景カラー(ホワイト)を環境マップの値に置き換えることができます。 また、Sky Environment MapタブのSky Environment Mapも有効にすることができます。
Volume Rendering - ファイル参照の煙 Example for Mantra render node
ボリュームレンダリングは、高品質な煙、雲、飛沫、炎などのボリュームエフェクトを統合したレンダリングを可能にするレンダリング手法です。
ボリュームレンダリングは、多くのタイプのボリュームエフェクトのレンダリングに適しています。Mantraボリュームによるレンダリングが特に適したシーンは以下のとおりです:
-
詳細な"hero"(メインとなる)の雲、煙、炎
-
インスタンス化した雲、煙、炎のフィールド(視界)
ボリュームレンダリングがまったく適さないシーンは以下のとおりです:
-
単一の均一なフォグを持つシーン
この特化したサンプルでは、bgeoファイル(1フレームのみ)を煙の流体シミュレーションからエクスポートして、それをFile SOPを使って参照しています。VEX Volume Cloudを使ったマテリアルを、Volume Objectのトップレベルで、このボリュームデータに割り当てています。シェーディングモードでこのシーンを見るには、環境変数の HOUDINI_OGL_ENABLE_SHADERS を1に設定します。
品質/パフォーマンスの制御
ボリュームレンダリングは、Ray Marchingを使って、ボリューム内に入り込みます。Ray Marchingは、画像内の各ピクセルに対して均一に光線に沿って入り込むことで、ボリューム内にシェーディングポイントを生成します。ボリュームのRay Marchingの品質と速度を変更する方法が2つあります:
-
Mantra ROPの Properties タブの Sampling サブタブの Pixel Samples パラメータ。 Pixel Samples を増やせば、ピクセル内にRay Marchingを増やすことができるので、品質が良くなります。さらに、ボリュームに対してアンチエイリアスとモーションブラーの品質が良くなります。
-
Mantra ROPの Properties タブの Sampling サブタブの Volume Step Rate パラメータ。 Volume Step Rate を上げれば、ボリューム内部のサンプルが増えるので、品質が良くなりますが、パフォーマンスが悪くなります。別々のシャドウ品質をシャドウに使うことができます。
変更すべきパラメータは、ピクセルのアンチエイリアスで必要な品質に依存します。 Pixel Samples を増やすよりも、 Volume Step Rate を小さくする方が良いです。なぜなら、 Volume Step Rate が小さいほど正確なレンダリングができるからです。
以下のレンダリングでは、 Pixel Samples を2×2、 Volume Step Rate を1にしています。シャドウの細部に注目してください。
以下のレンダリングでは、 Pixel Samples を4×4、 Volume Step Rate を0.25にしています。シャドウの細部が消えて、ボリュームが少し透明になっています。品質レベルは、ほぼ同じです。
Down Hill Lava Flow Example for Material shader node
このファイルでは、傾斜が低い箇所にCrust(地殻)が集まって硬化する溶岩の流れを作成しています。このアニメーションは、シェーダで作成していて、ジオメトリそのものはアニメーションしていません。
Note
Lava(溶岩)マテリアルのパラメータのほとんどを、サーフェスノードで作成したPointアトリビュートで上書きしています。
AgentRelationshipBasic Example for Agent Relationship geometry node
このサンプルでは、単純な親子エージェントのセットアップ方法について説明しています。
CurveTexturing Example for Attribute Create geometry node
AttribCreate SOPは、色々なオブジェクト固有のアトリビュートを作成する時に使用します。新しく作成したアトリビュートにはラベルと値を設定することが可能です。
このサンプルでは、レンダリング時のカーブの幅を設定するためにAttribCreate SOPで線幅アトリビュート名の"width"を作成しています。Switch SOPで以下の2つのバージョンを切り替えることができます。
-
1つ目のAttribCreate SOPでは、X軸方向に一定幅のアトリビュートを作成しています。
-
2つ目のAttribCreate SOPでは、エクスプレッションでカーブの幅を調整することで先細りの効果を表現しています。
このアトリビュートはレンダリング時にMantraで使われます。結果を確認するには、ビューポートのレンダリングアイコンを右クリックして、"render_example"を選択してください。
BoundingBox Example for Bound geometry node
このサンプルでは、ジオメトリから境界ボックスを作成する方法を説明しています。
StampRandom Example for Copy Stamp geometry node
このサンプルでは、Copy SOPを使って、色々なオブジェクトを指定したテンプレートジオメトリにランダムにコピーしています。それをするためにCopy SOPのStamp機能を使っています。さらに、全体のプロセスがプロシージャルなので、コピーするジオメトリのタイプと数、使用するテンプレートの種類を決めるオプションがあります。
Copy SOPのStampタブ内に"switch"という名前の変数を作成しています。この変数はSwitch SOPのSelect Inputパラメータの入力値を駆動します。同様に、Copy SOPは入力ジオメトリをランダムな数だけテンプレートのポイントにコピーすることができます。
DeltaMushDemo Example for DeltaMush geometry node
このサンプルでは、Delta Mush SOPを使用したボーン変形の平滑化の方法を説明しています。
LowHigh Example for Dop Import geometry node
このサンプルではRBDオブジェクトに対応するために低解像度と高解像度のセットアップをする方法を説明しています。 どちらの解像度もDOP Import SOPを参照して、低解像度ジオメトリでシミュレーションをして、その結果を高解像度ジオメトリに転送してレンダリングしています。
EdgeFracture Example for Edge Fracture geometry node
このサンプルでは、EdgeFracture SOPを使って、入力メッシュのエッジに沿わせて様々な粉砕を行なう方法を説明しています。
FacetVariations Example for Facet geometry node
このサンプルでは、Facet SOPを使って、指定したオブジェクトを滑らかにしたり、多角化したりする方法を説明しています。 また、ポイントが結合できることも説明しています。
右矢印キー(次のフレームに移動)を押すと、各サンプルが表示されます。
PathAnalysis Example for Find Shortest Path geometry node
これは、FindShortestPathとAttribWrangleによる測定に基づいた"中心軸"パスを優先にする高度なサンプルです。これは、壁への近接を回避するのに役に立ちます。
空間内でもっと簡単に確認するには、Display OptionsダイアログのOptimizationタブにあるCulling > Remove Backfacesをオンにします。 Switchノードを使って別の中心軸測定を可視化してみてください。パスの中心軸を考慮しない同じサンプルを、違いがわかるようにSOPネットワーク内の端に置いています。
このサンプルでは、ForEach SOPを3つのモード(グループ、アトリビュート、ナンバー)で使い方を説明しています。 ローカル変数をサポートしないSOP(例:Magnet)は、このサンプルで示す3つのモードのどれかを使えば、ローカル変数をサポートするようにできます。
FurBallWorkflow Example for Fur geometry node
このサンプルでは、Fur SOPとMantra Fur Procedural SHOPをアニメーションするスキンジオメトリに適用する方法を説明しています。 CVEXシェーダを使って、ジオメトリに割り当てられたアトリビュートに応じて髪の毛の見た目を定義しています。
このサンプルでは、Layer SOPとVEX Layered Surface SHOPを使用することで、別々のUVセットに複数のシェーディングレイヤーを持たせる方法を説明しています。
MatchTopologySphere Example for Match Topology geometry node
このサンプルでは、Match Topology SOPを使ってポイント番号とプリミティブ番号を揃える方法を説明しています。
Tracking Points、Reference Points、Assume Primitives Matchの機能は、完全な一致を得るために使用します。
PolysoupTorus Example for PolySoup geometry node
このサンプルでは、Polysoup SOPを使って、高解像度ポリゴンをメモリ使用量が少ない単一プリミティブに変換する方法を説明しています。
RayWrap Example for Ray geometry node
Ray SOPは、あるサーフェスを他のサーフェス上に投影します。
これは、投影元のサーフェスの法線と投影先のサーフェスとの衝突を計算しています。
このサンプルでは、Ray SOPでGridサーフェスをSphereサーフェス上に投影しています。 Facet SOPは、投影したGridの法線を修正しています。
RBDConstraints Example for RBD Constraints From Lines geometry node
このサンプルでは、RBD Constraints from Lines、RBD Constraints from Curves、RBD Constraints from RulesのSOPの使い方を説明しています。
BasicRest Example for Rest Position geometry node
Rest Position SOPは、変形するサーフェスにシェーダを密着させるために、サーフェス法線に基づいたアトリビュートを作成します。
すべてのプリミティブがrest
アトリビュートをサポートしていますが、二次曲線/曲面のプリミティブ(円、チューブ、球、メタボール)に関しては、Rest Position(静止位置)の移動のみサポートしています。
つまり、Rest Normal(静止法線)は、それらのプリミティブタイプでは正しく動作しません。
ジオメトリを変形したり、ボリュームまたはソリッドのマテリアル/パターンをシェーダに割り当てる時のみ、Rest Position SOPを使用してください。
Mantraでポリゴンやメッシュに対してFeathering(境界ぼかし)を使う場合は、Rest Normal(静止法線)が必要になります。 NURBS/Bezierは、Rest Position(静止位置)を使って正しいRest Normal(静止法線)を計算します。
その効果を確認するために、レンダリングをセットアップする必要があります。
Rest適用なし Rest適用あり
DoorWithPolkaDots Example for Scatter geometry node
このサンプルでは、入力ジオメトリを再修正したり壊すことでトポロジーが変わってしまっても、整合性を保つようにポイントをばら撒くScatter SOPの使い方を説明しています。 これは、テクスチャ空間にポイントをばら撒くオプションで実現しています。
VoronoiSplitWeights Example for Voronoi Split geometry node
このサンプルでは、Voronoi Split SOPのWeight Attributeオプションを使って、パワーダイアグラム(ラゲールボロノイ図)を作成する方法について説明しています。
TransformFracturedPieces Example for Transform Pieces geometry node
このサンプルでは、Transform Pieces SOPを使って、低解像度ジオメトリによるDOPリジッドボディ破壊シミュレーションの結果から、 高解像度ジオメトリをトランスフォームする方法を説明しています。
RampParameter Example for Parameter VOP node
このサンプルでは、Ramp Parameter VOPノードを使って、PyroシミュレーションのTemperature(温度)アトリビュートでパーティクルの色を制御する方法を説明しています。
RaytraceVopShader Example for Ray Trace VOP node
このサンプルでは、VOP VEXネットワークを使って、単純なレイトレースシェーダについて説明しています。 シェーダプロパティを修正するには、マテリアル内にPropertiesシェーダを作成して、Outputシェーダノードに接続します。 そして、レンダリングパラメータをPropertiesノードに追加します。 例えば、反射の数を制御するには、reflect limitパラメータを追加します。