Unity Skin Shader Optimized
Shader "Skin Shader" {
Properties {
_MainTex ("Diffuse (RGB)", 2D) = "white" {}
_SpecularTex ("Specular (R) Gloss (G) SSS Mask (B)", 2D) = "yellow" {}
_BumpMap ("Normal (Normal)", 2D) = "bump" {}
_BRDFTex ("BRDF Lookup (RGB)", 2D) = "gray" {}
_CurvatureScale ("Curvature Scale", Float) = 0.005
_Fresnel ("Fresnel Value", Float) = 0.2
_BumpBias ("Normal Map Blur Bias", Float) = 1.5
}
SubShader{
Tags { "Queue" = "Geometry" "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf SkinShader fullforwardshadows
#pragma target 3.0
#pragma glsl
struct SurfaceOutputSkinShader {
fixed3 Albedo;
fixed3 Normal;
fixed3 NormalBlur;
fixed3 Emission;
fixed3 Specular;
fixed Alpha;
};
struct Input
{
float2 uv_MainTex;
INTERNAL_DATA
};
sampler2D _MainTex, _SpecularTex, _BumpMap, _BRDFTex;
float _BumpBias, _CurvatureScale, _Fresnel;
void surf (Input IN, inout SurfaceOutputSkinShader o)
{
float4 albedo = tex2D ( _MainTex, IN.uv_MainTex );
o.Albedo = albedo.rgb;
o.Normal = UnpackNormal ( tex2D ( _BumpMap, IN.uv_MainTex ) );
o.Specular = tex2D ( _SpecularTex, IN.uv_MainTex ).rgb;
o.NormalBlur = UnpackNormal( tex2Dlod ( _BumpMap, float4 ( IN.uv_MainTex, 0.0, _BumpBias ) ) );
}
inline fixed4 LightingSkinShader( SurfaceOutputSkinShader s, fixed3 lightDir, fixed3 viewDir, fixed atten )
{
s.Normal = normalize( s.Normal );
s.NormalBlur = normalize( s.NormalBlur );
float NdotL = dot( s.Normal, lightDir );
float3 h = normalize( lightDir + viewDir );
float specBase = saturate( dot( s.Normal, h ) );
float fresnel = pow( 1.0 - dot( viewDir, h ), 5.0 );
fresnel += _Fresnel * ( 1.0 - fresnel );
float spec = pow( specBase, s.Specular.g * 128 ) * s.Specular.r * fresnel;
float2 brdfUV;
float NdotLBlur = dot( s.NormalBlur, lightDir );
brdfUV.x = NdotLBlur * 0.5 + 0.5;
brdfUV.y = _CurvatureScale * dot( _LightColor0.rgb, fixed3(0.22, 0.707, 0.071 ) );
float3 brdf = tex2D( _BRDFTex, brdfUV ).rgb;
float m = atten; // Multiplier for spec and brdf.
m *= saturate( ( (NdotLBlur * 0.5 + 0.5) * 2.0) * 2.0 - 1.0);
fixed4 c;
c.rgb = (saturate(s.Albedo * lerp(saturate(NdotL) * atten, brdf * m, s.Specular.b )) + spec * m) * _LightColor0.rgb * 2;
c.a = 1;
return c;
}
ENDCG
}
FallBack "VertexLit"
}
Unity Skin Shader Optimized的更多相关文章
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
- Unity Built-in Shader详解二
这次主要讨论Unity自带的Shader中Transparent Shader Family 这个家族的Shader一共7种,原理和类型与Normal中的上差不多,只不过这些Shader是用在半透明或 ...
- 对Unity一个Shader编译Bug的分析(Unrecognized sampler 'samplerunity_lightmap)
写在前面 Unity的用户量越来越大,越来越有钱,这几年摊子也铺的越来越大,所以各个版本总是有很多Bug.对于一些Bug官方在ReleaseNote里的说明是很不详细的,而对于一些渲染相关的Bug,有 ...
- 关于Unity中Shader的使用
在游戏的开发过程中,程序员不太会自己去写shader,因为写起来很麻烦,而且只有Unity会报错,编译器也没有什么提示. 通常是拿别人的shader改一改,当然,程序员还是要能看懂和会一点shader ...
- 关于Unity中Shader的基础认识
Shader也叫着色器,是Unity里面比较难的一个点,网上有很多别人写好的shader,我们可以下载下来用或者修改学习. Shader可以做出很多非常不错的效果,因为它是插在渲染管道里面的程序,一来 ...
- 关于Unity中Shader的内置值
Unity provides a handful of builtin values for your shaders: things like current object's transforma ...
- Unity的shader学习2
下面继续看基于surface的shader代码,基本与Vertex&Fragment shader差不多,只是不能写pass,然后只需要声明surface函数,就能处理所有的事情. Shade ...
- Unity的shader学习1
先来看一段我们项目常见的Shader代码,这个是Vertex&Fragment shader,目前已经不常用了,不过还是适合我们理解一些基础知识和理解一些比较老的shader 代码.下次我们再 ...
- unity, 替换shader渲染(Rendering with Replaced Shaders)
实现特效,尤其是一些后处理特效,经常需要将各物体的shader替换为另一套shader进行渲染到纹理,再后再进行合成或以某种叠加方式叠加到最后的画面上去. 再复杂一点儿的,可能不同的物体所用的替换sh ...
随机推荐
- SVN库迁移过程总结
一.背景:老SVN是安装在32位服务器上:现在64位服务器上安装了新版本SVN服务,所以需要将SVN从老服务器上迁移到新服务器上. 1.SVN Server下载:https://www.visuals ...
- hibernate 对象状态异常:object references an unsaved transient instance - save the transient instance before flushing
我的问题出在,删除的对象对应的表中有一个外键,关联着另外一个表,可是另外一个表中没有数据,所以报了这个错误. 参考http://www.cnblogs.com/onlywujun/archive/20 ...
- Mac Zip命令
mac终端命令 zip -[parameter] [yourName].zip someFileOrDiectory -q 表示不显示压缩进度状态 -r 表示子目录子文件全部压缩为zip //这部比较 ...
- HTTP状态吗汇录
页面Http状态查询工具说明 建议直接Ctrl+F来查找状态码 如果向您的服务器发出了某项请求要求显示您网站上的某个网页,那么,您的服务器会返回 HTTP 状态代码以响应该请求. 如果向您的服务器发出 ...
- cocos2dx系列笔记(1)- windows环境配置前篇
cocos2dx升级之旅,请多指教~ 本篇是本人搭建cocos2dx-Windows 64位环境的配置说明,仅供参考. 开发准备 搭建环境肯定需要准备好所有工具,只有把工具都准备好了,才能撸起袖子干活 ...
- 217. Contains Duplicate(C++)
217. Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your ...
- hdu_1003_Max Sum
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- HDU 题目分类
转载自新浪博客,, http://blog.sina.com.cn/s/blog_71ded6bf0100tuya.html 基础题: 1000.1001.1004.1005.1008.1012.10 ...
- 不为人知的Locked
在属性面板上,有一个Locked属性,什么时候添加上去的,真是没有注意到,它的说明为:确定是否可以移动控件或调整控件的大小,默认是为false的,设置为true以后,当前选中的控件会在左上角出现一个锁 ...
- Bootstrap_排版_表格
一.基础表格 <table class="table"> <thead> <tr> <th>表格标题</th> < ...