今回は RayTrace ノードを使って、隠れているオブジェクトを透過表示するテストをしてみました
過去に「前髪を透過するまゆ毛」をやっていました
毛先をちょっとだけ透過させるタイプですね
マスク画像を使えば MMD モデルのような表現ができることが分かりましたが、もっとハッキリとまゆ毛を出したいと、あの時思ったわけです
そこでノードを使う考えに至ったわけですが、実はほとんど触ったことがありません

じゃっく
まあ ほぼモデリングばかりだったんで
ノードの繋ぎ方が分からない
RayTrace ノードもどんな機能なのか分かっていない
なので、他のソフトではどうやっているのか探りながら進めてみた結果、何とかうまくいきました
LightWave の情報も壊滅的に無いので、情報共有のつもりで記録していきます
RayTrace について
RayTraceノードのことがよく分からなかったので、LightWave のマニュアルを読んでみました
色と反射と屈折を評価するもの
最初マニュアルを読んでも、いまいちピンと来なかったのですが、自分の中でかみ砕いていくと恐らくこんな感じなことかと思います
ある場所から飛ばしたレイ(光線)が別の物体に当たって、跳ね返ってきた光情報
- 色
- 反射
- 屈折
を評価(判別)するもの

じゃっく
跳ね返ってきた別の物体の情報を受け取る、で良いかな?
使用するため条件と仕様について
使うにあたっての条件と仕様もあったので、こちらも確認
- 位置入力と方向入力はどちらも、ワールド座標で指定する必要がある
- もし何も当たらなかった場合は長さ出力には -1 、色出力には黒が出される
とりあえずワールド座標系に繋げば良いようです
古いが RayTrace の解説動画があった
バージョンが古くて画面も違いますが、LightWave の RayTrace ノードについての解説動画がありました
RayTrace ノードについては 5 分 20 秒あたり
この動画を参考にノードを組んでいきます
準備
まずは準備から
色と名前を付けたオブジェクトを用意する

4 つのオブジェクトを用意して、それぞれのサーフェイスの名前と画像を設定します
- hair:茶色
- skin:肌色
- eye_brow:黒色
- mirror:画像設定無し
テストではありますが、自作モデルに当てるつもりでこの名前にしました
保存したらレイアウトにソイヤッとぶん投げます
レイアウトに各オブジェクトを配置する

レイアウトに持ち込んだら、ミラー→髪→まゆげ→肌の順になるように置きます
これで準備 OK
手順
RayTrace ノードを使って透過テストをしてみます
手順はこんな感じ
流れは髪とミラーに必要なノードを入れて繋げて、VPR かレンダリング画像で確認して終わりです
・・・テストなせいか、いつもよりかなり省略しちゃっていますw
でもまあ 大雑把に書くと流れはこんな感じですね
髪にノードを繋げていく

まずは髪の hair から
色・質感編集から「ノード編集」をクリック

じゃっく
サーフェイスをダブルクリックでも可

ノード編集画面が開くので、そこからガチャガチャ設定していきます
必要なノードはこちら
- Invert:入力値を反転
- BoxStepF: 0 か 1 で出力
- RayTrace:光情報を受け取る
- Color Scalar:色を大きさへ
もしかしたら機能に解釈違いがあると思うので、ふ~ん そうなんだ、程度で受け取ってもらえるとありがたいです

ノードを画像のように接続
一部のノードは数値を変える必要があると分かったので、以下のように設定してみました
- BoxStepF:開始 0.5
- BoxStepF:終了 1.0
- Color Scalar:モード最少
ミラーにノードを繋げていく

次にミラーにもノードを設定していきます
必要なノードは、この二つだけ
- Vector:向きと大きさ
- RayTrace:光情報を受け取る

ミラーのノードはこんな感じで繋げます
映し出すだけなので簡単ですね
Vector ノードは光線が飛ぶ向きを指定できるので、以下のように設定しました
- X:0.0
- Y:0.0
- Z:1.0
Vector ノードを使っているのは Input にある Ray Direction に繋いでも、何も起こらなかったので使っています
結果を確認
VPR かレンダリングして確認
モヤモヤした感じじゃなくて、ちゃんと隠れているはずのパーツがはっきり見えますね

じゃっく
ウホォッ!ちゃんと透過されてる
良かった
目的の表現ができました
ひとまずテストは完了です
まとめ
テストの結果を見て、自分なりに軽くまとめてみました
- Invert ノードは受け取った値を反転
- Vector ノードは向きと大きさを指定
- RayTrace ノードは光や色情報を受取る
- BoxStepF ノードは 0 か 1 で出力する
- ColorScalar ノードは色を大きさに変換
今回は RayTrace ノードを使って、隠れているオブジェクトを透過させてみました
正直分からないことが多すぎて、かなり時間がかかってしまいました

じゃっく
全然情報が無いから・・・
もう ChatGPT ことチャッピーに聞いてみたり、古い動画漁ったり大変でしたね・・・
ただ、BoxStepF ノードが IF 文判定っぽいことをするノードだったので、割とこれ結構重要だったなと後で気付きました
とりあえず目的の表現はできたんで、今後何かを透過させたいときは、このノードを使った方法が良さそうです
一方で、今回はペラペラのオブジェクトで試しましたが、厚みを持たせたらどうなるのか
ここはまた別の機会に試してみようと思います
それでは、お疲れさまでした~
おまけ
BoxStepF の出力結果を確認するには?

BoxStepF ノードから出た値をクリップに繋げば良い、というところまでは分かりました
ただ、頭の中で想像しながらやっていたので、ちょっと視覚的に分かりにくい

じゃっく
分かりやすくしたい
BoxStepF ノードから出る値は 0 か 1
そこで Standard の Color に繋いでみたところ、白黒で表示されました
マスク画像は
- 黒:何も影響を与えない
- 白:何らかの影響を与える
この場合は白の部分だけクリップ(切り抜き)の影響を受けている
だから、こちら側に見えているんだと思います
色で情報を見たいときとは、Standard の Color に繋げば良いと勉強になりました
エッジを出すとちょっと違和感出る

なんとなくエッジを出してみたら、若干おかしい部分を発見
端っこあたりに違和感を感じます

じゃっく
えっ??
なぜか画像の色でエッジが出ちゃっています
いや、エッジの描画もなんかおかしい気が・・・
まだ設定が足りないのかバグなのかは不明
ただ、想定した結果じゃないのは確かです
ちなみに、この時に使っているバージョンは 2024.2
今後の課題の一つとして、頭の片隅に入れておきます
参考資料
使用ツール
- 3DCG
- LightWave3D
- 動画
- Bandicam
- ScreenToGif
- 画像
- CLIP STUDIO PAINT PRO