Edited at

Unity3Dで影生成するときだけローポリのモデルを使用する

More than 5 years have passed since last update.

Unityの影生成は便利ですが、デフォルトでは描画用と影生成用に同じモデルを使用するため、単純に考えて2倍の描画コストがかかってしまいます。

そこで、影生成専用のローポリモデルを使用することを考えます。

スクリーンショット 2013-10-02 20.19.50.png

Mayaの削減機能を利用して、頂点数をおよそ1/3にしたモデルを用意しました。

このモデルにオリジナルと同じ骨を入れて、Unityにインポートします。

スクリーンショット 2013-10-02 20.27.21.png

描画用のモデルの階層の中から、MeshRendererを探し、Cast Shadowsのチェックを外しておきます。

このMeshRenderがアタッチされたGameObjectを複製します。

スクリーンショット 2013-10-02 20.28.49.png

複製されたSkinnedMeshRendererに、先ほどインポートしたモデルを設定します。

Cast Shadowsにチェックを入れ、Receive Shadowsのチェックを外します。

これで、描画用と影生成用、二つのオブジェクトが重なった状態になりました。

このままでは通常のレンダリングパスにおいても、影生成用モデルが描画されてしまいます。

そこで、通常時にレンダリングしないようにシェーダを定義します。


ShadowCaster.shader

Shader "Custom/ShadowCaster" {

SubShader {
UsePass "VertexLit/SHADOWCASTER"
}
FallBack off
}

このシェーダを元にマテリアルを作成し、影生成用モデルに設定します。

これで作業は終わりです。

スクリーンショット 2013-10-02 20.10.46.png

スクリーンショット 2013-10-02 20.10.31.png

Statsを見ると、頂点数が減っていることが確認できますね。