D-Creationへいらっしゃいませ。
ここではLightWave3D用プラグインやら変態絵やら変態妄言やら死ぬまでの暇つぶし的人生の進捗状況やらを垂れ流してます。

ファイルの扱い、リンクについて
プラグイン等のファイル自体の無断転載はご遠慮願います。
このサイトへのリンクは自由ですが、プラグインはバージョンアップなどでファイル名が変わるため、それらファイルへの直接リンクをする場合は注意してください。

管理人 : DHM
メール : dhm◎d-creation.sakura.ne.jp
(@を文字に直してください)
バナー

2018年12月18日

【不定期連載】Lightwave3Dノード入門その3

今回はレイアウトの状態によるノードの挙動の変化についての説明です。
LWのノードは自由度が高く、サーフェイスからモーションまで多くの要素をノードでコントロール可能です。
しかし、全てのノードが全ての場面で使えるわけではありません。

例えば、シーンに適当なアイテムを追加し、モーションパネルのモディファイヤからNodal Motionプラグインを追加します。
これはノードによって位置、回転、スケールをコントロールできるプラグインですが、ここでノードエディターの左側のリストを確認すると……
181218_001.jpg
サーフェイスのノードエディターと比較すれば一目瞭然、モーション側には一部のレイトレースノードとマテリアルカテゴリが表示されていません。
これは各ノードプラグインのプログラム内で表示を制限しているためです。
例えばマテリアルノードですが、モーションにはマテリアルタイプの接続が存在しません。
マテリアルは同タイプ同士でしか接続できないため、使えないものを表示しても邪魔ということで非表示設定にされているのだと思われます。
ただ、この設定は任意のためサードパーティー製のプラグインの中には使えない場所でも表示される場合があります。

一方のレイトレースノードですが、RayCastGeometryだけが表示されています。
こちらも使用できないノードを非表示設定にしているわけですが、非表示にしている理由が異なります。
LW2015以降、レイアウトにはレンダリングを行うために
・サーフェイスプレビュー(色・質感設定パネルなどにあるの球のレンダリング)
・VPR
・本レンダリング
の3つの方法があります。
このレンダラーが動作している状態はレンダリングセッションと呼ばれ、Nodal Motionで表示されなかった
2つのレイトレースノードはレンダリングセッション中しか動作しません。
実際には各種マテリアルノードなども内部でレイトレースを使用していますが、処理の中で現在レンダリングセッションかをチェックし、レイトレースが使用できない場合はダミーのデータを返したり処理をスキップしています。

仮にNodal Motionでレイトレースノードが使えたとしても、作業中のOpenGLビューとレンダリングでモーションが変わってしまい実用的ではありません。
しかし、Unityなどのゲームエンジンでもレイキャストを使用してオブジェクトの接触をチェックするなどレンダリング以外の目的でも便利に使用できるため、LWでも新たにレンダリングセッション以外でも使用できるレイキャスト機能としてRayCastGeometryノードが提供されています。
リファレンスのRayCastGeometry使用例でも自動で地形の凹凸に沿って球を動かすための判定に使用しています。
通常のRayCastノードとRayCastGeometryノードの使い分けですが、基本使用できる場面ではRayCastノードを優先すべきです。
リファレンスの注意書きにもありますがRayCastGeometryノードはゲームエンジンのようにリアルタイムでレイキャストを行っているようなものなので処理が重いという欠点があります。
一方RayCastノードはレンダリングセッションでしか動作しない代わりに、レンダリング用に事前処理を済ませたシーン情報を使用するため非常に高速です。
posted by DHM at 04:07| Comment(0) | TrackBack(0) | ノード入門

2018年12月06日

【不定期連載】Lightwave3Dノード入門その2

今回は各ノード間を通る値の話です。
まだまだ基礎の話が続きますが、ノード単体の挙動の前に各ノード間のデータの流れを知ることが重要と考えています。
逆にここを覚えればNewtekのフォーラムで公開されている優れたプリセット群を読み解いてアレンジしたりとできることの幅が広がるはずです。

前回の接続タイプ説明では整数や小数とだけ記載しましたが、実際のノード設定パネル上では距離や角度、パーセントと様々な単位が混在しています。
これらの各単位がそれぞれスカラー値でどう扱われるかが以下になります。

パーセント 100% = 1.0
距離 1.0m = 1.0
角度 約57.295°= 1.0

例えば、0.5の値をパーセント入力に接続すると50%に、距離なら50cmになります。
特殊なのが角度で、中途半端な値になっていますがこれはLW内部ではラジアンと呼ばれる角度単位に変換されるためです。
ラジアンについての詳細は省きますが、90°でπ/2、180°でπ、360°で2πという値となります。
度からラジアンへの変換は度に180/πを掛けます。
逆の変換はラジアンへπ/180を掛けるので、57.295*3.1415926/180.0でだいたい1.0となります。

実際に出てくる値を確認するのに楽な方法はサーフェイスノードを使ってレンダリング画像に出力してみることです。
181206_001.jpg
181206_002.jpg
DiffuseShadingのRGBにそれぞれ100%、1.0m、57.295°を接続してレンダリングしてみます。
角度が変換されたBlueの部分には多少の計算誤差は出てしまいますが、ちゃんとRGB1.0の白として出力されています。
LW2018の場合はレンダーバッファを作成してそちらに接続すれば同じことができます。
サーフェイスノードの設定で思い通りの結果にならない場合は途中のノードをこの方法で出力して値を確認しながら組み立てるとやりやすくなると思います。

次は異なるタイプ同士の接続について。
ノードエディターを操作していると、整数を小数に接続したり、3つの値をもつベクターを1つの値しか持たないスカラーに接続したり、あるいはその逆もできてしまいます。
前者は1つの値同士なので何となく結果も予想できますが、後者はどうなのかといった疑問が出てきます。

異なるタイプ同士を接続した場合は、LW内部で適切な値に変換されるようになっています。
接続線にグラデーションがかかりますが、あそこで変換されているイメージです。
しかし、ファンクションやマテリアルといった特殊な挙動や数値データ以外の接続タイプではエラーメッセージが表示されて接続できないものもあります。

これらの情報はリファレンスに表として記載されているのでそちらを参照するのがわかりやすいでしょう。
LW2015ならLW2015ReferencesJ.pdfの1785ページにあります。
大体は予想した通りのシンプルな変換になっていると思いますが、ひとつだけ注意点があります。
それはカラーとベクターの3要素のタイプを整数やスカラーの1要素に接続した場合、カラーとベクターとでは挙動が異なる事です。
ベクターから1要素に接続した場合はXやHといった先頭の要素だけ渡されます。
しかし、カラーの変換をリファレンスで見ると「CCIR601 輝度の値」と書かれています。
これは映像信号の規格に基づいて色から輝度を算出してその値を渡します。
輝度を求める式は
輝度Y = 0.299*R + 0.587*G + 0.114*B
となっており、単純な平均ではないことがわかります。
そのため、カラーをスカラーに変換して使いたい場合はToolカテゴリにあるColor Scalarノードを挟むことをお勧めします。
Color Scalarノードは平均値や最大値、赤のみなど様々な方法で色を変換できるので思い通りの処理ができます。
posted by DHM at 14:38| Comment(0) | TrackBack(0) | ノード入門