Thursday, June 18, 2015

Doubled Face Shader的解法

一般常用的方式都是直接作兩面poly就解決,但是對於布料之類具備物理特性的內容就會有問題(兩面poly的話就會有兩個面在飄來飄去)

解法#1:在Standard.shader中加入Cull Off 設定
這個方式雖然可以讓另一面透出來,但是卻沒辦法有正確的顏色,因為在背面演算時,光線的法線是相反的,所以光線的顏色進不了眼睛

結論:失敗


解法#2:兩面計算
在shader中作兩次pass,一次算正面,一次算背面,算背面的那次要把所有的法線都做反向

DoubledMaterialCloth.shader
在Cull Front的pass中
#define _BACKFACE_RENDERING 1

UnityStandardCore.cginc
在VertexOutputForwardBase vertForwardBase (VertexInput v)中
#ifdef _BACKFACE_RENDERING
float3 normalWorld = UnityObjectToWorldNormal(-v.normal);
#else
float3 normalWorld = UnityObjectToWorldNormal(v.normal);
#endif
結論:解決 !