各向异性头发效果

作者: 热爱生活的阿坤 | 来源:发表于2018-01-17 16:17 被阅读133次

一 概览


本文讲解了各向异性头发效果的原理,Shader的具体实现,以及部分注意事项。
社会你坤弟,人怂话又多,这次先上Demo: AnisotropicHair

二 原理


1 面片模型

配合基本颜色贴图来模拟发丝的效果。

2 基本贴图

3 高光走向

Kajiya-Kay模型:利用切线(tangent)方向来计算高光强度。

4 两层高光

Marschner模型:两层高光,并为第二层高光添加噪点。

三 Shader实现


1 Diffuse Lighting

fixed4 albedo = tex2D(_MainTex, i.uv);
half3 diffuseColor = albedo.rgb * _MainColor.rgb;

2 两层高光

//获取头发高光
fixed StrandSpecular ( fixed3 T, fixed3 V, fixed3 L, fixed exponent)
{
    fixed3 H = normalize(L + V);
    fixed dotTH = dot(T, H);
    fixed sinTH = sqrt(1 - dotTH * dotTH);
    fixed dirAtten = smoothstep(-1, 0, dotTH);
    return dirAtten * pow(sinTH, exponent);
}
            
//沿着法线方向调整Tangent方向
fixed3 ShiftTangent ( fixed3 T, fixed3 N, fixed shift)
{
    return normalize(T + shift * N);
}

fixed3 spec = tex2D(_AnisoDir, i.uv).rgb;
//计算切线方向的偏移度
half shiftTex = spec.g;
half3 t1 = ShiftTangent(worldBinormal, worldNormal, _PrimaryShift + shiftTex);
half3 t2 = ShiftTangent(worldBinormal, worldNormal, _SecondaryShift + shiftTex);
//计算高光强度        
half3 spec1 = StrandSpecular(t1, worldViewDir, worldLightDir, _SpecularMultiplier)* _SpecularColor;
half3 spec2 = StrandSpecular(t2, worldViewDir, worldLightDir, _SpecularMultiplier2)* _SpecularColor2;

3 结合起来

fixed4 finalColor = 0;
finalColor.rgb = diffuseColor + spec1 * _Specular;//第一层高光
finalColor.rgb += spec2 * _SpecularColor2 * spec.b * _Specular;//第二层高光,spec.b用于添加噪点
finalColor.rgb *= _LightColor0.rgb;//受灯光影响
finalColor.a += albedo.a;

四 注意事项


1 半透明渲染次序错乱

头发挽起来的部位出现在了前面:

通过添加一个写入深度的Pass可解决此问题:

Pass
{
    ZWrite On //写入深度,被遮挡的像素将不能通过深度测试
    ColorMask 0 //不输出颜色
}

2 半透穿透

但随之而来却产生了另外一个问题:下层头发被剔除之后,上层头发直接和背景色进行了混合

除了调整贴图alpha值之外,还可在通过在新添加的Pass中添加一个基本的颜色来解决此问题:

half4 finalColor = half4(0, 0, 0, albedo.a);
finalColor.rgb += (albedo.rgb * _MainColor.rgb) * _LightColor0.rgb;
return finalColor;

3 高光方向

为确保头发的高光走向为沿着发根到发尖,需要设置模型的轴向为Y轴朝上(和Unity一致)


同时UV方向也要和模型方向一致


相关文章

  • 各向异性头发效果

    一 概览 本文讲解了各向异性头发效果的原理,Shader的具体实现,以及部分注意事项。社会你坤弟,人怂话又多,这次...

  • 头发种植有效果吗

    头发种植有效果吗?有许多朋友问我植发是什么?跟毛囊移植、毛发移植、移植头发是一回事吗?其实不管是植发种植衣是毛发移...

  • PS——泼墨水彩风格报制作

    1、Ctrl+J 复制图层,图像—调整—阈值。 -----黑白图像 2、滤镜—风格化—扩散(各向异性)。 --...

  • 各向异性扩散滤波器

    转自:matlab练习程序(各向异性扩散) - Dsp Tian - 博客园 要是用来平滑图像的,克服了高斯模糊的...

  • 各向异性和各向同性

    在微观层面,材质可以简单地划分为两个基本类型:各向同性(isotropic)和各向异性(anisotropic),...

  • 电磁法进展笔记

    大纲 进展 频率域各向异性 交叉梯度约束的联合反演 1 进展 正演: 假设的前提==》简化问题 地下水、油...

  • 握紧我的世界 米雪

    高光没用笔,百度了个修正液,效果太差。头发的立体效果没出来。

  • 各向异性+反光板

  • “白头发”的神奇效果

    早晨起床洗漱,在对着镜子整理头发时猛然发现两边鬓角生出几根白发。“唉……“,一声轻叹从嘴里滑出,自己才刚步入不惑,...

  • 治白头发,还没效果

    我在网上看到有人介绍用梳子天天梳头发可以治白头发,我有白头发好几年了,一直染发,去年,我又一次看到有人通过梳头治白...

网友评论

    本文标题:各向异性头发效果

    本文链接:https://www.haomeiwen.com/subject/mfjrgxtx.html