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

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

c5dc54a7f5699dcfcb8a3f31cc96f112.png

代码框架以下:框架

f2b5b620f0af506ddebe1700161c06bd.png

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

e61b5ecd6460cde5b634e3447fd04c2b.png

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

fa533705739c9824f2d5b79837a5a41f.png

a948d0cef84ee8bdc48230fe3545866f.png

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

1e3ceadae1a295983a586dbfd388a15b.png

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

911d7ec38a0f1da19a7294cee7e5d273.png

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

63cdb89241c664fa8f9c92e635d2ae97.png

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

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

efef7516d3197151c7a62d4108493fde.png

编译后的文件是这样的:class

3f14dca5339d92b5682248ecc9d9675a.png

编译的文件是unity本身搞定的,不少东西不须要编程者操心,固然,在编写顶点片断着色器代码的时候就须要本身搞定。

下面来看看Standard.Shader:

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

d74ca6d8489c8a92af18efbdb07e7e78.png

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

f810c3e9fe8ba52af2a5dbdae4f18aea.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值