Cinema4Dメモ

Cinema4Dという3DCGソフトに関するメモ書きです。

カメラから見えない位置にあるオブジェクトを動的に非表示/表示する

2016-02-28 00:32:34 | Cinema4D設定、操作

そういうわけで、今度はカメラから見えない位置にあるオブジェクトを自動的に非表示にするXPressoを作ってみました。

↓のような状態が・・・

こうなります↓

もっと消したいYo!って場合は、カメラのユーザデータであるところの「Culling Width」ってパラメータを+側に振るともっと効くようになります。が、振り過ぎると破綻しますw

↓カメラの向きを変えても大丈夫w

カメラの画角を変えても大丈夫です(^o^)

そんで、XPressoはどうなってるかというと・・・

上の図のようになってます。

まずこのXPressoがなにをしているのかというと、まずカメラの向いている方向と、非表示にしたり表示したりしたいオブジェクトの成す角度を求めます。それがカメラのFOVより大きければカメラの見える範囲の外ということで非表示にするって処理になります。(正確には得られた角度がFOVの半分より大きければ非表示でいいんだけど、際の部分が消え過ぎなので、CullingWidthってパラメータを作って微調整するようにしますた)

内積ノードを使って角度を求める部分のノード構成はCinema4Dのヘルプのまんまですw

「Camera01_null」ってのをカメラの向いている方向前方に置いていて、これとカメラの位置からカメラのベクトルを作って、表示/非表示を切り替えるオブジェクトとカメラの位置座標からもう一つのベクトルを作ります。「Camera01_null」の位置は「絶対位置」にする必要があります。

 

後は前回のXPressoと合体させればいいのかな。それともタグを2つつけて優先順位付けでいいんだろうか?


カメラからの距離に応じて表示するオブジェクトを切り替える

2016-02-25 14:08:15 | Cinema4D設定、操作

昨年11月にFF11を現役復帰したため、全く更新していませんでした。めちゃくちゃ快適になっててワロタ。

さて、ゲームだとカメラから遠いオブジェクトはローポリで近づくとハイポリに切り替えて描画の負担を軽減してますが、Cinema4Dで出来るのかと思って、XPressoでやってみました。

球体がハイポリオブジェクト、正多面体がローポリ用ってことにして、同じ位置に重ねていて、それに上のXPressoを付けて、MoGraphでコピーし、編集可能にしてます。

カメラと球体の距離を計算して、それをカメラのユーザデータで作った「LOD設定距離」の値と比較し、遠ければポリゴン数の少ない正多面体を表示し、近ければ球体を表示するようになってます。