Unity shader: Bank BRDF
2015-08-15 15:56
393 查看
Back BRDF是一种 模拟 金属表面 的 各向异性 光泽的经验模型,具体公式参照 GPU 编程与CG 语言之阳春白雪下里巴人 中120页的公式(10-14)
效果如下:
Shader "Custom/Bank-BRDF" { Properties { _AmbiColor ("Main Color", Color) = (1, 1, 1, 1) _Ak ("Ambient Coef", float) = 1 _DiffColor ("Diff Color", Color) = (1, 1, 1, 1) _Dk ("Diff Coef", float) = 1 _SpecColor ("Spec Color", Color) = (1, 1, 1, 1) _Sk ("Sk", float) = 1 _Sp ("Sp", Range(0, 5)) = 1 } SubShader { Pass { CGPROGRAM #include "UnityCG.cginc" #pragma vertex vert #pragma fragment frag float4 _AmbiColor; float _Ak; float4 _DiffColor; float _Dk; float4 _SpecColor; float _Sk; float _Sp; struct v2f { float4 pos : POSITION; float3 normal : TEXCOORD0; float3 light : TEXCOORD1; float3 view : TEXCOORD2; float3 targent : TEXCOORD3; }; v2f vert(appdata_base v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.normal = v.normal; o.light = ObjSpaceLightDir(v.vertex); o.view = ObjSpaceViewDir(v.vertex); o.targent = cross(v.normal, o.view); return o; } float4 frag(v2f i) : COLOR { float3 l = normalize(i.light); float3 t = normalize(i.targent); float3 v = normalize(i.view); float3 n = normalize(i.normal); float lt = dot(l, t); float vt = dot(v, t); float nl = dot(n, l); float nv = dot(n, v); float4 ambi = _AmbiColor * _Ak; float4 diff = _Dk * _DiffColor * saturate(nl); if (nl <= 0 || nv <= 0) return ambi + diff; float p = sqrt(1 - lt * lt) * sqrt(1 - vt * vt) - lt * vt; float f = _Sk * pow(p, _Sp); float spec = f * _SpecColor * saturate(dot(l, n)); return ambi + diff + spec; } ENDCG } } FallBack "Diffuse" }
效果如下:
相关文章推荐
- unity3d ngui3.7 新手引导遮罩和高亮实现
- Unity Shader: Cook-Torrance
- Unity3D 5.1.2破解(亲测有效)
- 使用Unity3D的50个技巧:Unity3D最佳实践(下)
- Unity Asset(1)Pocket RPG Weapon Trails 武器拖尾效果
- unity3D实际的原始视频游戏开发系列讲座10它《战斗:外来入侵》在第一季度游戏开发
- Unity Critter地图导出到服务器配置
- Unity用shader显示物体线框
- unity, 显示像素图,以及iOS下像素图变模糊解决办法
- Unity学习
- unity, iOS集成微信
- Unity Shader 学习笔记 (二) 简单颜色Shader
- Unity3D视图与iOS视图结合
- Unity人工智能学习—确定性AI算法之追踪算法二
- (大数据工程师学习路径)第三步 Git Community Book----高级技能
- 关于在3dmax 导入再导出FBX到unity中的尺寸选项问题
- Unity AssetBundle爬坑手记
- Unity Shader 学习笔记 (一) 创建Shader自带代码解读
- (大数据工程师学习路径)第三步 Git Community Book----中级技能(下)
- Unity3d Shader 代码高亮插件