从最简单的SurfaceShader开始层层解剖unity的标准光照模型

我们新建一个Standard Surface Shader,单击showgenerated code打开该表面着色器被编译成vfShader之后的代码。

 

代码框架如下:

每个重要的pass的片段程序中都进行了标准光照模型的处理,我们提取其中一个

打开Unity安装目录Editor\Data\CGIncludes中的UnityPBSLighting.cginc文件找到这两个方法。

LightingStandard_GI()函数处理全局光照,输出一个UnityGI型的全局光照参数,传入到LightingStandard方法中。

LightingStandard()方法中计算一些参数传入核心的UNITY_BRDF_PBS()方法中。

我们打开UnityStandardBRDF.cginc找到BRDF1_Unity_PBS()方法

这里就是对BRDF光照模型的实现(BRDF1_Unity_PBS是正品,BRDF2_Unity_PBS是高仿,BRDF3_Unity_PBS是山寨,效果是依次降,性能依次升)。

另外Lighting.cginc中还封装了Lambert和BlinnPhong光照模型,把光照模型改成Lambert。

编译后的文件是这样的:

编译的文件是unity自己搞定的,很多东西不需要编程者操心,当然,在编写顶点片段着色器代码的时候就需要自己搞定。

下面来看看Standard.Shader:

下载"Standard" Shader 并打开,找到第一个pass的主体。

打开UnityStandardCore.cginc文件找到片段程序,发现也是用的该光照模型。(以其中一个通道为例)

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值