Unity Kajiya Hair Shader Mod by Normals

时间:2022-09-23 00:26:31

Unity Kajiya Hair Shader Mod by Normals

Unity Kajiya Hair Shader Mod by Normals

Shader "HairShader"
{
Properties
{
_MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {}
_Color ("Main Color", Color) = (0,0,0,1)
_SpecularTex ("Specular (R) Gloss (G) Anisotropic Mask (B)", 2D) = "gray" {}
_SpecularMultiplierT ("Specular Multiplier T", float) = 5.0
_SpecularMultiplierN ("Specular Multiplier N", float) = 10.0
_SpecularColor ("Specular Color", Color) = (0.5,0.5,0.5,1)
_Cutoff ("Alpha Cut-Off Threshold", float) = 0.5
_GlossInterp ( "Gloss Interploter", Range(-1,1)) = 0
_WaveSpeed ("Wave Speed", Vector) = (1,1,1,1)
_WaveSize ("Wave Size", float) = 0.1
_WavePhase ("Wave Phase", float) = 0.02
}

SubShader
{
Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}

Cull Off
ZWrite On
ZTest LEqual

CGPROGRAM
#pragma surface surf Aniso vertex:vert
#pragma target 3.0

struct SurfaceOutputAniso
{
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Specular;
fixed Gloss;
fixed Alpha;
fixed AnisoMask;

half3 tangentV;
};

struct Input
{
float2 uv_MainTex;
half3 tangentV;
};

float4 _WaveSpeed;
float _WaveSize;
float _WavePhase;

void vert(inout appdata_full v, out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input, o);

float3 waves = _WaveSize * v.tangent.xyz;
float3 freq = _Time.y * _WaveSpeed.xyz;
v.vertex.xyz += cos(freq + v.vertex.xyz * _WavePhase) * waves;
o.tangentV = v.tangent.xyz;
}

sampler2D _MainTex, _SpecularTex;
float _SpecularMultiplierT,_SpecularMultiplierN, _GlossInterp, _Cutoff;
fixed4 _SpecularColor, _Color;

void surf (Input IN, inout SurfaceOutputAniso o)
{
fixed4 albedo = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = lerp(albedo.rgb,albedo.rgb*_Color.rgb,0.5);
o.Alpha = albedo.a;
clip (o.Alpha - _Cutoff);
fixed3 spec = tex2D(_SpecularTex, IN.uv_MainTex).rgb;
o.Specular = spec.r;
o.Gloss = spec.g;
o.AnisoMask = spec.b;
o.tangentV = IN.tangentV;
}

inline fixed4 LightingAniso (SurfaceOutputAniso s, fixed3 lightDir, fixed3 viewDir, fixed atten)
{
half3 h = normalize(lightDir + viewDir);
float NdotL = saturate(dot(s.Normal, lightDir));

half3 T = normalize(cross( s.Normal, s.tangentV));
half3 L = normalize(lightDir);
half3 V = -normalize(viewDir);

float sq1 = (1.0-abs(dot(T, L)));
float sq2 = (1.0-abs(dot(T, V)));
float aniso = abs(dot(T,L) * dot(s.Normal,V));
aniso += sq1 * sq2;
aniso = pow(aniso, _SpecularMultiplierT);

float blinn = pow(dot(s.Normal, h), _SpecularMultiplierN) * s.Gloss;

float spec = saturate(lerp(blinn, aniso, s.AnisoMask + _GlossInterp) * s.Specular) * _SpecularColor;

fixed4 c;
c.rgb = spec;
c.a = s.Alpha;
return c;
}
ENDCG

}
FallBack Off
}

Unity Kajiya Hair Shader Mod by Normals的更多相关文章

  1. Unity Diffuse Metal Shader Mod

    Shader "MetalShader" { Properties { _MainTex ("Base (RGB) RefStrGloss (A)", 2D) ...

  2. unity之初识shader

    自己做个总结先.当然文中很多内容都是从各位大神的文档当中看的.我只是站在巨人的肩膀上.       首先什么是shader?其实就是一个在显示屏当中的显示程序,俗称着色器.它可以定义物体在硬件显示屏当 ...

  3. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  4. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

  5. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  6. unity 内置shader

    几个有用的Unity 内置shader: (一)Standard RenderingMode:Opaque为实体渲染,更改Color的透明通道不会有影响:Cutout会把图片的透明通道显示出来,非严格 ...

  7. Unity内置shader 下载

    Unity内置shader  4.3.1 版本的  其他版本可以自己修改名称 下载地址 http://download.unity3d.com/download_unity/builtin_shade ...

  8. Unity 3d中Shader是什么,可以吃吗?

    众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写s ...

  9. 【Unity Shaders】Shader中的光照

    写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已.当然,我相信这是因为我们写得少...不过这也是由于官方文档对这方面介绍很少的缘故, ...

随机推荐

  1. Bootstrap学习应用

    1.栅格式布局:     栅格只有12格  主要用于没有设计经验,自行设计网页. 起步:     导入一个CSS文件 和两个JS文件  BOOTATRAP.MIN.CSS  ---   /*IE(ht ...

  2. Oracle笔记2-数据库设计

    数据库的设计 软件开发的流程:立项->需求分析->概要设计->详细设计->实现->测试->交付->维护 [含数据库设计] 通过需求分析,就可以抽取出关键业务中 ...

  3. 采用指数退避算法实现ajax请求的重发,全部完成时触发回调函数

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. 使用Dubbo的SPI扩展机制实现自定义LoadBalance——方法一 修改Dubbo源代码

    一. 拉取源码 到Dubbo官网 https://github.com/apache/incubator-dubbo/tree/2.5.x 下载源码,解压. 二. 导入IDEA 选择解压后的源码目录, ...

  5. (openssl_pkey_get_private 函数不存在)phpstudy开启openssl.dll 时提示httpd.exe 丢失libssl-1_1.dll

    下载libssl-1_1.dll  丢到apache目录下的bin目录下(貌似要32位的)

  6. 控件布局_LinearLayout的嵌套

    import android.os.Bundle; import android.app.Activity; public class Layout03 extends Activity { @Ove ...

  7. selenum threding多线程运行 实例

    1.配置相关驱动 chrome驱动 下载驱动,配置到环境变量中 如 xxxxchrome.jar 将其新建目录c:/driver---将目录 配置到环境变量 firefox驱动 下载驱动,将gecko ...

  8. English trip V1 - 辅导课 VOCABULARY BRUSH UP(1-6) 词汇刷新 SA:Winona

    1.How Do you Feel Now?            形容词  adj.  = adjective                     Describe people and thi ...

  9. C Primer Plus note5

    error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token| 遇到这种情况,不要看这里显示了三个错误,就很着急.静 ...

  10. asp.net超过字数限制用省略号...表示

    显示8个字,多于8个字, 用...表示           <asp:Repeater runat="server" ID="MsgLists">  ...