そういうわけで、今度はカメラから見えない位置にあるオブジェクトを自動的に非表示にするXPressoを作ってみました。
↓のような状態が・・・
こうなります↓
もっと消したいYo!って場合は、カメラのユーザデータであるところの「Culling Width」ってパラメータを+側に振るともっと効くようになります。が、振り過ぎると破綻しますw
↓カメラの向きを変えても大丈夫w
カメラの画角を変えても大丈夫です(^o^)
そんで、XPressoはどうなってるかというと・・・
上の図のようになってます。
まずこのXPressoがなにをしているのかというと、まずカメラの向いている方向と、非表示にしたり表示したりしたいオブジェクトの成す角度を求めます。それがカメラのFOVより大きければカメラの見える範囲の外ということで非表示にするって処理になります。(正確には得られた角度がFOVの半分より大きければ非表示でいいんだけど、際の部分が消え過ぎなので、CullingWidthってパラメータを作って微調整するようにしますた)
内積ノードを使って角度を求める部分のノード構成はCinema4Dのヘルプのまんまですw
「Camera01_null」ってのをカメラの向いている方向前方に置いていて、これとカメラの位置からカメラのベクトルを作って、表示/非表示を切り替えるオブジェクトとカメラの位置座標からもう一つのベクトルを作ります。「Camera01_null」の位置は「絶対位置」にする必要があります。
後は前回のXPressoと合体させればいいのかな。それともタグを2つつけて優先順位付けでいいんだろうか?