- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!汚れを付ける乗算シェーダ
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}}