Unity Shader 光照基础内容
光照可以说是整个计算机图形学里面最重要的部分了,当展现物体时如何模拟真实世界中的光照环境,这往往是很复杂的。
由于光是可以散射的,一个物体不仅仅可以接收来自直接光源的照射,还可以接收来自周围环境的散射光,而在渲染时,要计算周围环境的散射光就无疑加大了计算量,因为周围环境远比光源复杂多了。
下面就是一张很逼真的光照渲染实例:
如果说这是用手机拍的照片,可能我都分不出来哪里有问题,而计算机模拟真实感渲染就是追求这一目标吧。
下面是一张缺少周围环境光的渲染实例:
可以很明显地看到下图很多地方都是黑色,而在现实世界中就不会一片黑,
要实现图一那样真实感的渲染,还是有不少东西要学的,尤其是数学方面,很多公式的推导和计算都是凝聚了学术界大佬心血的。
当然,学习也是一个由浅入深的过程。
学习光照,可以先从局部光照开始入手,然后再进入到全局光照,局部光照和全局光照都可以算是光照模型中的一种。
局部光照
局部光照是一种比较简单的光照模型,它仅处理直接照射到物体表面的光照,不处理周围光照的光照。
因此,局部光照要相对简单一些,只要算光源对物体的影响就好了,而且它是一种经验模型,和实际的物理现象是不对的。
局部光照又可以分为以下几种模型:
- Lambert 漫反射模型
- Phong 光照模型
- Blinn-Phong 光照模型
简单总结就是 Lambert 模型是处理漫反射的,Phong 模型是在前者基础上加上镜面反射处理的,而 Blinn-Phong 模型又是在前者基础上做了计算优化。
后面会一个一个过这几个计算模型,并且在这几个模型上拓展了很多渲染方面的技巧内容。
全局光照
全局光照就复杂多了,常常听到的光线追踪就是实现全局光照的一种方法。
全局光照模型不同于局部光照经验模型,它是基于光学物理原理的,会考虑到光在现实世界中的反射、散射、透射等,另外还有光的辐射度,能量衰减等物理现象。
由于全局光照的计算量巨大,实时渲染的难度就很大,但这也是未来的发展方向了。
全局光照主要有如下的实现方向:
- 光学追踪
- 路径追踪
- 光子映射
- 辐射度
- 球谐光照
每个方向都是一块难啃的骨头了,后面再深入到这块的学习吧,先把局部光照的基础打好。
小结
光照模型分为局部光照和全局光照。局部光照的发展比较稳定了,光照模型就是 Lambert 和 Phong 等,而全局光照还在随着硬件升级不断发展前进中。