ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity shader各向异性的头发效果

2019-07-06 19:02:05  阅读:664  来源: 互联网

标签:... dotTH float shader StrandSpecular Unity tangent 各向异性 float3


参考 https://www.jianshu.com/p/7dc980ea4c51

在这里插入图片描述
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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有