我正在尝试为松树上的纹理添加闪闪发光的效果。我尝试按照其他线程中的建议使用此处的代码http://developer.amd.com/wordpress/media/2012/10/Shopf-Procedural.pdf (P.22)。但我无法将它应用于我的着色器。
float glitter (float3 pos, float3 viewVec){
float3 fp = frac(0.7 * pos + 9 * snoise3D( pos * 0.04).r + 0.1 * viewVec);
fp *= (1 - fp);
float glitter = saturate(1 - 7 * (fp.x + fp.y + fp.z));
return glitter;
}
void surf (Input IN, inout SurfaceOutputStandard o) {
float glitterValue = (glitter(IN.worldPos, IN.viewDir));
glitterValue = clamp(0.0f, 1.0f, glitterValue);
float2 uv_polar = cartesianToPolarCord(IN.uv_MainTex);
float factor = pow(uv_polar.x * 1.1f, 5.0f);
factor = clamp(0.0f, 1.0f, factor);
factor = lerp(factor, factor * (snoise2D(IN.uv_MainTex * 5.0f) * 0.5f + 0.5f), 0.3);
fixed4 c = lerp(_TreeColor, _SnowColor, factor);
//c = glitterValue;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
树最初看起来像这样:
现在我希望我的闪光功能的结果会在纹理中产生许多小的白色火花。因此,如果我只使用来自 flash 函数的值(取消注释 c = flashValue 列)作为颜色,则树应该变成黑色,并带有许多白色的小火花。
但它看起来更像这样:
我是从我的闪光功能中得到错误的值,还是我只是错误地应用它们?