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的更多相关文章
- Unity Diffuse Metal Shader Mod
Shader "MetalShader" { Properties { _MainTex ("Base (RGB) RefStrGloss (A)", 2D) ...
- unity之初识shader
自己做个总结先.当然文中很多内容都是从各位大神的文档当中看的.我只是站在巨人的肩膀上. 首先什么是shader?其实就是一个在显示屏当中的显示程序,俗称着色器.它可以定义物体在硬件显示屏当 ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- 【Unity Shaders】Shader学习资源和Surface Shader概述
写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...
- unity 内置shader
几个有用的Unity 内置shader: (一)Standard RenderingMode:Opaque为实体渲染,更改Color的透明通道不会有影响:Cutout会把图片的透明通道显示出来,非严格 ...
- Unity内置shader 下载
Unity内置shader 4.3.1 版本的 其他版本可以自己修改名称 下载地址 http://download.unity3d.com/download_unity/builtin_shade ...
- Unity 3d中Shader是什么,可以吃吗?
众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写s ...
- 【Unity Shaders】Shader中的光照
写在前面 自己写过Vertex & Fragment Shader的童鞋,大概都会对Unity的光照痛恨不已.当然,我相信这是因为我们写得少...不过这也是由于官方文档对这方面介绍很少的缘故, ...
随机推荐
- sqlserver2005唯一性约束
[转载]http://blog.163.com/rihui_7/blog/static/21228514320136193392749/ 1.设置字段为主键就是一种唯一性约束的方法,如 int p ...
- Shell编程之Shift的用法
位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常 ...
- ios 字符串替换方法
string=[string stringByReplacingOccurrencesOfString:@"-"withString:@"/"];
- Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction policies
Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction pol ...
- CSS 创建
当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表 内部样式表 内联样式 外部样式表 当样式需要应用于很多页面时,外部样式表将是理想的选 ...
- EA UML 建模——类图
Enterprise Architect(EA) 是一个功能比较强悍的建模工具,本篇文章仅使用其 UML 建模功能,其他更多功能,可以Google. 一.简单梳理C#中类与类.类与接口.接口与接口的关 ...
- 关于Java中的数组转变成字符串问题
1.用StringBuilder private static String arraytoString(int arr[]){ StringBuilder sb=new StringBuilder( ...
- 亲手用模块化方式写一个jquery QQ表情插件。
在回复或是评论的时候,很多时间都需要有回复表情的功能,然后而需要插入QQ表情可以是最常见的. 插件也写多很多个了,这次写插件就下了一个决定.就是使用模块化来开发. 最后在我的源代码中有这样子一段: v ...
- android按行读取文件内容的几个方法
一.简单版 import java.io.FileInputStream; void readFileOnLine(){ String strFileName = "Filename.txt ...
- 将VIM配置成强大的IDE(二)
将VIM配置成强大的IDE(二) 前面我们已经安装好了vundle这一款强大的插件管理工具. 下面,当然是配置我们需要的插件了. 在VIM下面通过命令 help vundle 我们可以知道,VUNDL ...