标签:... dotTH float shader StrandSpecular Unity tangent 各向异性 float3
hairJit 贴图
float StrandSpecular(float3 T, float3 V, float3 L, float exponent, float strenth)
{
float3 H = normalize(L + V);
float dotTH = dot(T, H);
float sinTH = sqrt(1.0 - dotTH * dotTH);
float dirAtten = smoothstep(-1.0, 0.0, dotTH);
return dirAtten * pow(sinTH, exponent) * strenth;
}
float3 ShiftTangent(float3 T, float3 N, float shift)
{
float3 shiftedT = T + shift * N;
return normalize(shiftedT);
}
片元着色器(fragment shader)
...
binormal = cross(normal, tangent) // 次法线可以由法线和切线算出
...
fixed spec = dot(worldNormal, worldHalfDir);
tangent = ShiftTangent(binormal, worldNormal, hairJit + _AnisoOffset);
fixed3 specular1 = _LightSpecColor.rgb *
StrandSpecular(tangent, worldViewDir, worldLightDir, _Shininess1 * 20, _SpecIntensity1);
fixed3 specular2 = _LightSpecColor.rgb *
StrandSpecular(tangent, worldViewDir, worldLightDir, _Shininess2 * 20, _SpecIntensity2);
...
这样就得出与发丝方向垂直的高光了
标签:...,dotTH,float,shader,StrandSpecular,Unity,tangent,各向异性,float3 来源: https://blog.csdn.net/A13155283231/article/details/94882511
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。