Unity Shaders and Effects Cookbook (1-5)使用2D渐变纹理模拟BRDF(双向反射分布函数)
来源:互联网 发布:金三立官网软件 编辑:程序博客网 时间:2024/06/06 10:50
BRDF,双向反射分布函数,简单理解为 入射光在不透明物体上,同事反射到观察者方向 和 出射光方向。
转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
首先用PS创建一个渐变图片,先用 前景色到背景色渐变 ,然后前景色到透明渐变。
上面也说了,BRDF 是入射光 同时反射到 出射光 和 观察者眼睛方向的,所以这里我们要选择 需要视角方向的前向着色
仍然以基本的漫反射光照模型为例,主要修改下面代码。
1、使用 需要视角方向的前向着色
//需要视角方向的前向着色inline float4 LightingBasicDiffuseWithViewDir(SurfaceOutput s,fixed3 lightDir,half3 viewDir,fixed atten){float difLight=dot(s.Normal , lightDir); //根据法线与光照方向的夹角计算cos值float rimLight=dot(s.Normal , viewDir);float hLambert=difLight * 0.5 + 0.5;float3 ramp = tex2D(_RampTex,float2(hLambert,rimLight)).rgb;float4 col;col.rgb=s.Albedo * _LightColor0.rgb * (ramp);col.a=s.Alpha;return col;}
2、指定光照模型
#pragma surface surf BasicDiffuseWithViewDir
完整Shader代码
Shader "CookBookShaders/BRDF" {Properties {_EmissiveColor("Emissive Color",Color) = (1,1,1,1) //设置默认值_AmbientColor("Ambient Color",Color) = (1,1,1,1)_PowValue("Power Value",Range(0,10)) = 2.5_RampTex("Ramp Texture",2D) = "" //添加_RampTex属性接受一个Texture}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM#pragma surface surf BasicDiffuseWithViewDirfloat4 _EmissiveColor;float4 _AmbientColor;float _PowValue;sampler2D _RampTex;struct Input {float2 uv_MainTex;};void surf (Input IN, inout SurfaceOutput o) {float4 c;c=pow((_EmissiveColor+_AmbientColor),_PowValue);o.Albedo = c.rgb;o.Alpha = c.a;}//需要视角方向的前向着色inline float4 LightingBasicDiffuseWithViewDir(SurfaceOutput s,fixed3 lightDir,half3 viewDir,fixed atten){float difLight=dot(s.Normal , lightDir); //根据法线与光照方向的夹角计算cos值float rimLight=dot(s.Normal , viewDir);float hLambert=difLight * 0.5 + 0.5;float3 ramp = tex2D(_RampTex,float2(hLambert,rimLight)).rgb;float4 col;col.rgb=s.Albedo * _LightColor0.rgb * (ramp);col.a=s.Alpha;return col;}ENDCG} //FallBack "Diffuse"}转自 http://blog.csdn.net/huutu http://www.thisisgame.com.cn
运行效果,右边的球就是BRDF效果,可以下载例子项目观看:
主要的是 我们使用了需要视角方向的前向着色,然后根据 法线 和 视角方向角度计算 COS 值 得到 rimLight ,以 hLambert 和 rimLight 作为UV值去采样,从而得到图中效果。
示例工程下载:
http://pan.baidu.com/s/1dDNTotj
0 0
- Unity Shaders and Effects Cookbook (1-5)使用2D渐变纹理模拟BRDF(双向反射分布函数)
- Unity Shaders and Effects Cookbook (1-4) 创建 Ramp Texture(渐变纹理)控制漫反射着色
- 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
- Unity Shaders and Effects Cookbook (2-1) 修改 UV 坐标实现纹理贴图的滚动 模拟水流效果
- Unity Shaders and Effects Cookbook (5-1)LitSphere lighting model
- Unity Shaders and Effects Cookbook (2-4) 压缩和混合纹理贴图:使用灰度图存储插值信息
- Unity Shaders and Effects Cookbook (4-3)遮罩反射
- Unity Shaders and Effects Cookbook (2-5) 如何使用法线贴图
- Unity Shaders and Effects Cookbook (4-1)(4-2)静态立方体贴图的创建与使用
- unity-Unity 5.x Shaders and Effects Cookbook(2nd)
- Unity Shaders and Effects Cookbook (4-5)Cubemap与菲涅尔反射
- Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见
- Unity Shaders and Effects Cookbook (D-1) 设置 ZTest 来实现遮挡半透效果
- Unity Shaders and Effects Cookbook (3-1) 使用Unity 内置的Specular Lighting - BlinnPhong
- Unity Shaders and Effects Cookbook (3-5) 金属软高光
- Unity Shaders and Effects Cookbook Chap 1 读书个人小结
- 【Unity Shaders and Effects Cookbook】Diffuse Shading
- 【Unity Shaders】《Unity Shaders and Effects Cookbook》总结篇
- git github
- 两个重要的宏 offsetof 和 container_of
- 获取Android设备唯一标识码
- 搜索指定期刊内的文章
- android获取手机信息大全
- Unity Shaders and Effects Cookbook (1-5)使用2D渐变纹理模拟BRDF(双向反射分布函数)
- Mac下Sublime+Latextools遇到的fontspec编译问题
- AsyncTask原理
- 建立交叉编译环境
- Chromium网页Layer Tree创建过程分析
- mysql使用总结
- Mac NTFS 解决方法
- 人员登记,双向循环链表
- Android Studio 常见问题