感谢原作者,链接见转载。
头发各项异性高光:该shader需使用三张texture进行合成,可以像KaJiYa调节光照环,另外也可以调节Tilling影响发丝,立方体纹理影响整体效果。

Shader "Unlit/CharHair"
{Properties{_BaseMap ("BaseMap", 2D) = "white" {}_CompMask ("ComMase", 2D) = "white" {}_NormalMap("bumpMap",2D) = "bump"{}_SpecIntensity("_SpecIntensity",Range(0,20))= 1_SpecShininess("_SpecShininess",Range(0,20))= 1[Header(IBL)]_EvnMap("cube map",Cube) = "white"{}_Tint("tint",Color) = (1,1,1,1)_Expose("Expose",float) = 1_Rotate("Rotate",Range(0,360)) = 0[Header(Aniso)]_AnisoMap("anis",2D) = "gray"{}_SpecColor1("specColor 1",Color) = (1,1,1,1)_SpecShininess1("_SpecShininess 1",Range(0,1)) = 0.1_SpecNoise1("_SpecNoise1",float) = 1_SpecOffset1("_Specffset1",float) = 0_SpecColor2("specColor 2",Color) = (1,1,1,1)_SpecShininess2("_SpecShininess 2",Range(0,1)) = 0.1_SpecNoise2("_SpecNoise 2",float) = 1_SpecOffset2("_Specffset 2",float) = 0_RoughnessAdjust("_RoughnessAdjust",Range(0,1)) = 1}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{Tags{ "LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase// 这是两种写法 #pragma shader_feature _SPECCHECK_ON#pragma multi_compilr _ _IBLCHECK_ON#include "UnityCG.cginc"#include "AutoLight.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;float4 tangent : TANGENT;};struct v2f{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;float3 pos_world : TEXCOORD1;float3 normal_dir : TEXCOORD2;float3 tangent_dir : TEXCOORD3;float3 binormal_dir : TEXCOORD4;};sampler2D _BaseMap;float4 _BaseMap_ST;sampler2D _NormalMap;float _SpecShininess;float4 _SpecIntensity;float _RoughnessAdjust;// iblsamplerCUBE _EvnMap;float4 _EvnMap_HDR;float4 _Tint;float _Expose;//  anisosampler2D _AnisoMap;float4 _AnisoMap_ST;float4 _SpecColor1;float _SpecNoise1;float _SpecShininess1;float _SpecOffset1;float4 _SpecColor2;float _SpecNoise2;float _SpecShininess2;float _SpecOffset2;v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord, _BaseMap);o.normal_dir = normalize(UnityObjectToWorldNormal(v.normal));o.tangent_dir = normalize(UnityObjectToWorldDir(v.tangent.xyz));o.binormal_dir = normalize(cross(o.normal_dir, o.tangent_dir)) * v.tangent.w;o.pos_world  = mul(unity_ObjectToWorld,v.vertex).xyz;return o;}fixed4 frag (v2f i) : SV_Target{fixed4 base_color_ = tex2D(_BaseMap, i.uv);fixed4 base_color = base_color_;fixed4 spec_color = base_color_;half roughtness = saturate(_RoughnessAdjust);fixed3 normal_data = UnpackNormal(tex2D(_NormalMap,i.uv));half3 light_dir = normalize(UnityWorldSpaceLightDir(i.pos_world));half3 view_dir = normalize(UnityWorldSpaceViewDir(i.pos_world));half3 normal_dir = normalize(i.normal_dir);half3 tangent_dir = normalize(i.tangent_dir);half3 binormal_dir = normalize(i.binormal_dir);float3x3 TBN = float3x3(tangent_dir,binormal_dir,normal_dir);normal_dir = normalize(mul(normal_data.xyz,TBN));// Direct diffuse 直接光漫反射//half diff_term = saturate(dot(light_dir,normal_dir));half diff_term = dot(light_dir,normal_dir);// 半兰伯特模型: 将【-1,1】 映射到【0,1】,  对于负数(背光面),也会右明暗变化!!!!!!half half_lambert = (diff_term + 1) * 0.5;half direct_diffuse = diff_term * _LightColor0.xyz * base_color.xyz;//Direct specular 直接光 镜面反射half2 uv_aniso = i.uv * _AnisoMap_ST.xy + _AnisoMap_ST.zw;half aniso_noise = tex2D(_AnisoMap,uv_aniso).r - 0.5;half3 half_dir = normalize(light_dir + view_dir);half NdotH = saturate(dot(normal_dir,half_dir));half TdotH = dot(tangent_dir,half_dir);half NdotV = saturate(dot(view_dir,normal_dir));// 求出各项异性高光的 衰减值 float aniso_atten = saturate(sqrt(saturate(half_lambert/NdotV)));// spec1//  加上baseColor  ,有一个渐变的过渡float3 spec_color1 = _SpecColor1.rgb + base_color;float3 aniso_offset1 = normal_dir * (aniso_noise * _SpecNoise1 + _SpecOffset1);binormal_dir = normalize(binormal_dir + normal_dir * aniso_offset1);// 除以光滑度float BdotH1 = dot(binormal_dir,half_dir)/ _SpecShininess1;// float3 kajiya = sqrt(1 - BdotH1 * BdotH1)float spec_term1 = exp(-(TdotH * TdotH + BdotH1 * BdotH1)/ (1+ NdotH));float3 final_spec1 = spec_term1 * aniso_atten * spec_color1 * _LightColor0.xyz;// spec2float3 spec_color2 = _SpecColor2.rgb + base_color;float3 aniso_offset2 = normal_dir * (aniso_noise * _SpecNoise2 + _SpecOffset2);binormal_dir = normalize(binormal_dir + normal_dir * aniso_offset2);float BdotH2 = dot(binormal_dir,half_dir)/ _SpecShininess2;float spec_term2 = exp(-(TdotH * TdotH + BdotH2 * BdotH2)/ (1+ NdotH));float3 final_spec2 = spec_term2 * aniso_atten * spec_color2 * _LightColor0.xyz;// 正常的镜面反射// half3 half_dir = normalize(light_dir + view_dir);// half NdotH = saturate(dot(normal_dir,half_dir));// half smoothness = 1- roughtness;// half shininess = lerp(1,_SpecShininess,smoothness);// half spec_term = pow(NdotH,shininess);// half3 direct_specular = spec_term * spec_color * _LightColor0.rgb * _SpecIntensity;// InDirect spec 间接光镜面反射float3 reflect_dir = reflect(-view_dir,normal_dir);roughtness = roughtness * (1.7 - 0.7 * roughtness);float mip_level = roughtness * 6;half4 color_cubemap = texCUBElod(_EvnMap,float4(reflect_dir,mip_level));float3 evn_color = DecodeHDR(color_cubemap,_EvnMap_HDR);// 用系数 乘以 金属色half3 evn_specular = evn_color * _Expose * spec_color;//float3 final_color = direct_diffuse + direct_specular  + evn_specular;float3 final_color = direct_diffuse + final_spec2 + final_spec1 + evn_specular;return fixed4(final_color,1);}ENDCG}}
}

【KaJiYa改进】Shader头发效果相关推荐

  1. Shader头发效果

    头发各项异性高光: (1)KaJiYa的介绍: 跟KaJiYa的略有区别但是 背后原理一样,实际效果比kjy好 用一张图来说明kjy的原理: 代码中求衰减用到的函数 exp(x): (2)代码中大体思 ...

  2. Android关于绘图中Shader 的效果(中级)

    Android关于绘图中Shader 的效果(中级) 关于绘图中Shader 的效果 本人对API中Shaser的参数理解不够深刻 所以只能测试来看 效果一下就看出来了 Shader mShade=n ...

  3. 研究人员利用黑猩猩改进动物模拟技术 效果显著!

    文章来源:ATYUN AI平台 曼彻斯特大学的研究人员正在利用计算机模拟黑猩猩行走,来提高我们对动物行走方式的理解,同时也提高我们用来做实验的技术. <英国皇家社会开放科学>杂志发表的研究 ...

  4. shader镜子效果错误

    shader镜子效果错误 今天实现了下Unity shader的镜子效果,但是离谱的是跟着书上敲出来的代码,放在书上提供的场景中效果是正常的,我自己搭的场景就出现了左右都会映射,而且一层接一层.可能解 ...

  5. 工作改进方法及效果怎么写

    工作改进方法是指采取的措施,以提高工作效率和质量.这些措施可以是技术上的,也可以是管理上的. 具体的工作改进方法可以包括: 引入新技术:通过掌握新技术或设备,可以提高工作效率和质量. 改进流程:通过分 ...

  6. [Unity Shader]凌波微步效果

    [Unity Shader]凌波微步效果 相信很多人都看过天龙八部,里面的段誉有一个技能就是凌波微步:移动的时候人先到,衣角跟随其后.说白了就是移动时有一个残影跟着他.下面先看下最终效果 下面我们看如 ...

  7. unity给头发添加物理_Unity学习笔记 Vol.64 使用Spring Bone给角色添加头发效果

    摘要 在游戏中,让我们的角色拥有一头柔顺的秀发,可以使角色显得更加生动.在UnityChan模版我们可以从中借鉴Unity酱的飘逸的头发的实现方法.下面我们来具体研究一下. 实现方法 UnityCha ...

  8. 【Unity Shader 消融效果_案例分享】

    1.实现逻辑 消融效果主要是利用了Shader中的clip()函数,也就是透明测试功能,在ASE中叫"Opacity Mask". 消融效果是基于一张"Noise&quo ...

  9. Shader玉石效果

    (1)效果图如下: (2)效果分析: 1.边缘 :"高亮" "通透"效果 . 2.非边缘的"厚重"效果 3.光滑的反射"环境&qu ...

最新文章

  1. SAP QM初阶事务代码QA11对检验批做UD时出现很多UD Code的选择集?
  2. cve-2017-12629 apache solr xxe rce 漏洞分析
  3. 取消管理员取得所有权_企业取得违约补偿款是否一律应缴增值税呢?
  4. 【转】X分钟速成c++
  5. 【机器学习】模型压缩大杀器!详解高效模型设计的自动机器学习流水线
  6. 简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗
  7. Python+matplotlib动画演示转盘抽奖过程
  8. c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
  9. Pytorch基本操作
  10. 2019年华南理工大学程序设计竞赛(春季赛)-H-Parco_Love_GCD
  11. 【手掌识别】基于matlab形态学手掌长宽检测【含Matlab源码 1382期】
  12. mysql 递归查询所有父级
  13. 【TabularData】DNN和表格数据分析建模综述
  14. SpringJDK动态代理实现
  15. Windows中如何对电脑硬盘进行分区
  16. 流程型与离散型制造的区别【老外的分析】
  17. 企业工程项目管理系统平台(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
  18. Visual Studio 2019 下Python的开发环境搭建
  19. 网管软件禁止网购木马偷梁换柱
  20. 解决浏览器连不上校园网问题

热门文章

  1. 获取图片的旋转角度信息
  2. 模拟开关选型、多路复用器选型
  3. android控件显示顺序控制
  4. Activity 的 isFinishing()、isDestroy()
  5. 【数据库】把SQL数据库从一个服务器迁移到另一个服务器的方法(备份-还原)
  6. python-sift-kmeans-svm图片分类
  7. 网络工程师笔记——数字签名与数字证书
  8. 6轴和9轴的IMU姿态估计
  9. 深入浅出解释旋转变换矩阵
  10. MySQL小练习(仅适合初学者,非初学者勿进)