Unity Shader 光照基础内容

2021-09-02
2 min read

光照可以说是整个计算机图形学里面最重要的部分了,当展现物体时如何模拟真实世界中的光照环境,这往往是很复杂的。

由于光是可以散射的,一个物体不仅仅可以接收来自直接光源的照射,还可以接收来自周围环境的散射光,而在渲染时,要计算周围环境的散射光就无疑加大了计算量,因为周围环境远比光源复杂多了。

下面就是一张很逼真的光照渲染实例:

如果说这是用手机拍的照片,可能我都分不出来哪里有问题,而计算机模拟真实感渲染就是追求这一目标吧。

下面是一张缺少周围环境光的渲染实例:

可以很明显地看到下图很多地方都是黑色,而在现实世界中就不会一片黑,

要实现图一那样真实感的渲染,还是有不少东西要学的,尤其是数学方面,很多公式的推导和计算都是凝聚了学术界大佬心血的。

当然,学习也是一个由浅入深的过程。

学习光照,可以先从局部光照开始入手,然后再进入到全局光照,局部光照和全局光照都可以算是光照模型中的一种。

局部光照

局部光照是一种比较简单的光照模型,它仅处理直接照射到物体表面的光照,不处理周围光照的光照。

因此,局部光照要相对简单一些,只要算光源对物体的影响就好了,而且它是一种经验模型,和实际的物理现象是不对的。

局部光照又可以分为以下几种模型:

  • Lambert 漫反射模型
  • Phong 光照模型
  • Blinn-Phong 光照模型

简单总结就是 Lambert 模型是处理漫反射的,Phong 模型是在前者基础上加上镜面反射处理的,而 Blinn-Phong 模型又是在前者基础上做了计算优化。

后面会一个一个过这几个计算模型,并且在这几个模型上拓展了很多渲染方面的技巧内容。

全局光照

全局光照就复杂多了,常常听到的光线追踪就是实现全局光照的一种方法。

全局光照模型不同于局部光照经验模型,它是基于光学物理原理的,会考虑到光在现实世界中的反射、散射、透射等,另外还有光的辐射度,能量衰减等物理现象。

由于全局光照的计算量巨大,实时渲染的难度就很大,但这也是未来的发展方向了。

全局光照主要有如下的实现方向:

  • 光学追踪
  • 路径追踪
  • 光子映射
  • 辐射度
  • 球谐光照

每个方向都是一块难啃的骨头了,后面再深入到这块的学习吧,先把局部光照的基础打好。

小结

光照模型分为局部光照和全局光照。局部光照的发展比较稳定了,光照模型就是 Lambert 和 Phong 等,而全局光照还在随着硬件升级不断发展前进中。

参考

  1. https://zhuanlan.zhihu.com/p/49474631

原创文章,转载请注明来源:    Unity Shader 光照基础内容


欢迎关注微信公众号:音视频开发进阶