バーチャル3Dクリエイター神部まゆみです(*^-^*)
この記事ではunityで窓ガラスの透過と鏡面反射をいじってみたからそのメモです。
前回までの記事はこちら。








追記:
ビルドしたらリアルタイム反射しなかったのは、品質設定で「リアルタイムリフレクションプローブ」にチェックが入ってなかったからでした。




詳しくは記事の最後に追記してあります。
やりたいこと:窓ガラスをうっすら鏡面反射させる
以前鏡面反射については書いたけど、それをちょっと透過させたい。




できれば外側から見た時も反射できたらいいけど…。
そこまではどうだろ。
床も反射させられそう
窓ガラスをうっすら反射させられるなら、床もピカピカに反射させられそう。
これができればかなり良い感じにキレイな部屋を作れる気がする。
なんかハッタリが効きそうだから「おお!この部屋を作った人は技術力があるに違いない!」と思わせることはできそう(笑)。
まぁそこまでやるかはわからないけどね(;^_^A
窓ガラスを鏡面反射させるために試行錯誤した経過
単純に反射させるだけならすぐできたけど、調整に手こずった(~_~;)
あとビルドしたらリアルタイムで反射しなくなったりしました。
試行錯誤しながらやったからとっちらかってる感じだけど、私の備忘録だから思い出せるように色々詰め込んで書いておく。
後で復習しながら追記とか修正したりするかも。
リフレクションプローブを配置する
とりあえずガラスと同じ座標に設置する。
パラメーター設定とかは忘れていたから、↓の過去の私が書いた記事を参考にした(笑)。




これでガラスに設定したスタンダードシェーダーのメタリックをいじるとちゃんと反射できた!
transparentだから普通に透過してくれてる感じかな。
窓枠もピッカピカにしちゃってるから反射してるけど…。
まぁキレイではあるからこれでも良いかな。
外側の窓には反射しないみたい
部屋の外側から見たけど反射しないみたい。
なんか窓枠にだけは反射してるのが謎だけど…。
リフレクションプローブにも外側は空しか映ってないっぽい?映す角度の問題とか?
リフレクションプローブを複製して、ちょっと外側に移動させたら映った!
設定次第かもしれないけど、とりあえず外側にも設置したらちゃんと映った。
ちゃんと設定すれば一個でもいけるのかな?
まぁとりあえずできたからいいか。
ボックスサイズを広くすると周りのオブジェクトも反射するっぽい
全ての窓ガラスにリフレクションプローブを設置しないとダメかと思ってたけど、リフレクションプローブを置いてない左側の窓ガラスも反射していた。
これはボックスサイズを広めに設定したからかな?
ボックスサイズを広くしすぎると反射がヘンになるっぽい(~_~;)窓ごとに設定したほうがいいかも
外側に置いたリフレクションプローブのせいで別の窓に変な映り方をしている(-_-;)
外側のリフレクションプローブのボックスサイズを調整したら、こっちの窓には映らなくなった。
ボックスサイズを変えると反射の見え方が全然変わってくるので、上手く調整したほうがいいかも。
やっぱり範囲を狭くして、ガラスごとにリフレクションプローブを設置したほうがいいかも。
リフレッシュモードをeveryframeにすればリアルタイムで反射できる
これやらないとキャラを動かしても反射に反映されなかった。
でもこれ結構重そう(~_~;)
スタンダードアセットのThirdPersonCharacterControllerを使って動かしました。
ボックスサイズあたりのパラメーターは調整の余地があるけど、まぁだいたいできたからいいかな。
それにしても、自分で作ったキャラを動かせるからunityはやめられませんな( *´艸`)
やっぱり両側にリフレクションプローブはあまりよくないかも?
↑のGIFを見るとなんかダブってぼやけた感じになってるけど、部屋の外側のリフレクションプローブを消したらいい感じになった。
外からも上手く反射させたいけど、パラメーターの調整次第なのかな?
ボックスサイズはXYZで指定できるから、うまく位置を調整すればいけそうだけど。
とりあえず今のところは部屋の外なんて作ってないからいいか…。
WebGLビルドしてみたら反射しなくなった(-_-;)
エディターでは普通にリアルタイムで反射していたけど、ビルドすると窓には何も映らなくなってしまった…。
なんか強制的にベイクされている感じ?
unityマニュアルによると、WebGLでもリフレクションプローブのリアルタイムはサポートされてるみたいなんだけどなぁ。






こちらの先輩のwebGLもちゃんとリアルタイムで反射してるっぽいけど。






PCにplatformスイッチしてもダメだったから設定の問題っぽい?
少なくともwebGLの仕様ではなさそう。
via scriptにしないとダメってことかな?
リフレクションプローブのコンポーネントに、なんかそんな感じのエラーが出ている。
Baking of this reflection probe should be initiated from the scripting API because use the type is ‘Realtime’
リアルタイムになってるからスクリプトから起動してねって感じ?
リフレクションプローブをリアルタイムじゃなくてベイクにしたら映ったが…
静的(static)にしたオブジェクトだけが、ベイクしたリフレクションプローブに映るらしい。
映したいオブジェクトを静的にして、リフレクションプローブのライトマップをベイクしたら、ビルドしても映った。
でも動かない静的なものは反射してるけど、キャラを動かしてもダメっぽい。
これもしかして、ビルドすると強制的にベイクさせられるとか?(-_-;)
上の先輩はvia scriptで動かしてたけど、カメラを変えたり同じスクリプトを入れてみたりしたけどダメでした。
ライトマップとかビルド設定の問題とかかなぁ…。WebGL2.0は設定してるんだけど。
まぁリアルタイムにすると重くなるらしいからベイクでいいか…。
部屋の中は人物以外ちゃんと映ってるし。
人物モデルも静的にしたら、初期状態のTポーズでは映った(;^_^A
とりあえずベイクでは動いたので、一応VRで動作確認してみる
VRで見るとモチベーションが上がるし、動作チェック用に貼っておく。
少しずつ部屋ができていく実感が湧くからね。
↓はOculus Quest2のoculusブラウザで見れたWebVR。
PCから見るとベッドの下が映るだけなので無理です(;^_^A
うっすらでわかりづらいけど、ちゃんとベイクしたやつは映ったぞ( *´艸`)
PCからのwebGLも
↓はPCからのWebGL用。矢印キーかwasdで動かせます。部屋の外には出れません。
これで銃を装備させたらTPSになりそう( *´艸`)
まぁ色々あったけど映せたから良かった。
こうやって動かしていると、ゲームとかも作りたくなってくるね(笑)。
ところどころ詰まったり大変だけど、少しずつできていく過程が嬉しいからunityはやめられませんね( *´艸`)
おわりに
一応反射できたことはできたから、とりあえずはこれで良いかな。
まぁあんまり重くなるのもアレだし。
床の反射もやりたかったけど長くなったから後にしよう。
なんにせよもう少し勉強が必要ですね(;^_^A
2023/06/10追記:品質設定で「リアルタイムリフレクションプローブ」のチェックが外れていたことが問題でした
多分これが原因っぽいです。




品質(Levels)ごとに設定が違うので、↓のPCVRではunityエディターの再生ボタンを押したらリアルタイム反射したけど、
webXR(webGL)ビルドしたら下のQuestのほうの品質でビルドされたので、リアルタイムリフレクションプローブのチェックが外れていてリアルタイム反射しなかった。
とりあえず全部の品質で「リアルタイムリフレクションプローブ」にチェックを入れてビルドしてみると良いかも。
全部の品質で「リアルタイムリフレクションプローブ」にチェック入れたら、webXR(webGL)ビルドしてもちゃんと動きました。
しかしMeta Quest2 + Metaブラウザで一応動作確認できたけど、かなりモッサリして重かった(;^_^A
ベイクすれば普通に動いたので、WebXRの場合は割り切らないとダメかも。
軽いプロジェクトならいけるだろうけど、環境と相談してやったほうが良さそう。
品質設定は要注意ですね(;^_^A