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

More than 1 year has 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を見ると、頂点数が減っていることが確認できますね。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.