2015-07-10 17 views
0

我希望將3D紋理對象的未點亮區域更改爲特定顏色。使用特定顏色的3D紋理對象的未點亮區域 - 着色器

希望這張照片可以解釋更好一點。 enter image description here

到目前爲止,我發現了一個着色器,它可以將一個未點亮的區域變成透明的,這很酷但不完全正確。我相當肯定,將這個過程變成一個特定的顏色而不是透明的,你有任何指示或建議來獲得這種效果嗎?或者如果你知道一個着色器已經做到了這一點,那將是驚人的!

(這是使一些透明的方式着色器)

http://answers.unity3d.com/questions/283985/a-shader-with-transparent-lit-area.html

提前感謝非常感謝!

回答

0

聽起來像你只是想用你的「unlitColor」和「litColor」之間的'lerp'作爲lerp因子使用點(normal,lightDirection)。

喜歡的東西:

float nDotL = saturate(dot(surfaceNormal, vectorToLight)); 
float3 unlitColor = float3(0, 0, 0.5); // Or whatever color you like 
float3 litColor = colorFromTheTexture; 
float3 finalColor = lerp(unlitColor, litColor, nDotL); 
+0

嗨亞當,感謝您抽空回覆的時間。我想知道是否有可能爲我分解你的代碼。什麼是surfaceNormal和vectorToLight?這段代碼是否會寫入着色器本身?再次感謝! – Jim

+0

SurfaceNormal將是一個標準化的3D矢量(方向),指向背離物體表面的方向。這些數據通常存儲在每個頂點,並且來自頂點緩衝區,並且每個像素進行插值。 VectorToLight是另一個3D歸一化矢量,指向像素所在的世界空間點的光線。兩者都是非常標準的概念,通常用N和L表示。 –

相關問題