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
原创粉丝点击