!!!汚れを付ける乗算シェーダ http://japan.unity3d.com/gallery/demos/live-demos#sewer が参考になります。 「Shaders/multiplyCull+1.shader」のように乗算で重ねて描画することで汚れを表現します。 !!Shaderファイルの作成 「Shaders/multiplyCull+1.shader」ファイルを作成。 中身は以下のように記述。 Shader "Multiply+1" { Properties { _MainTex ("Multiply Leak", 2D) = "white" {} } Category { Tags { "Queue" = "Transparent+1" } Blend Zero SrcColor Lighting Off ZWrite Off Fog { Color (1,1,1,1) } BindChannels { Bind "Color", color Bind "Vertex", vertex Bind "TexCoord", texcoord } // マルチテクスチャに対応しているGPU用. SubShader { Pass { SetTexture [_MainTex] { combine texture * primary } SetTexture [_MainTex] { constantColor (1,1,1,1) combine previous lerp (previous) constant } } } // 性能がよくないGPU用(シングルテクスチャのみの表現). SubShader { Pass { SetTexture [_MainTex] { constantColor (1,1,1,1) combine texture lerp(texture) constant } } } } } !!Tags 参考: http://docs-jp.unity3d.com/Documentation/Components/SL-SubshaderTags.html Tags { "Queue" = "Transparent+1" } の指定は「Queue」でオブジェクトの描画する順番を判定します。 「Transparent」は奥から順番に描画されます(半透明のガラス、パーティクルなど)。デプスバッファへの書き込みを行わない場合に主に指定。 「Transparent+1」とすることで、不透明のジオメトリの描画の次に描画されます。 形状(Geometry)は、シーンのHierarchyで列挙した昇順でレンダリングされます。 そのため、まったく同一位置に面が存在する場合(特に半透明の形状がある場合に)ソートされずに隠れてしまうことになります。 この場合は、TagsのQueue指定で制御してあげる必要があります。 !!Blend 参考: http://docs-jp.unity3d.com/Documentation/Components/SL-Blend.html Blend Zero SrcColor Blend で、すでに存在するピクセルとどのように合成するかを指定します。 Sourceは計算された色、Destinationは画面にすでにある色になります。 「Blend Zero SrcColor」を指定すると、元にある色に対してテクスチャ色で乗算します。 Blend SrcAlpha OneMinusSrcAlpha とすると、SrcColorでアルファブレンド。 Blend One One とすると、SrcColorで加算合成になります。 !!2つのSubShader SubShaderを2つ記載することで、はじめの処理が実行できない場合(GPUが貧弱な場合)は2つめのSubShader内の処理が実行されます。 ---- {{lastmodified}}