完整资源:
前情提要:
从0开始编写minecraft光影包(0)GLSL,坐标系,光影包结构介绍
从零开始编写minecraft光影包(4)泛光性能与品质优化
从零开始编写minecraft光影包(5)简单光照系统,曝光调节,色调映射与饱和度
从零开始编写minecraft光影包(8)中级水面绘制 水下阴影与焦散
前言
上次的博客我们完成了水下特效的绘制,即阴影和焦散。这次我们来搞一点赛艇的东西。。。
反射
在上一篇博客中,我们只是简单绘制了水体的特效,可是我们的水面还是不够漂亮,因为它始终缺少反射的效果。
而在现实世界中,我们在日出日落的时候,水面会反射天空的颜色:
所以在该部分,我们将绘制水面,使其能够反射来自天空的光线!
要想正确的绘制某像素的反射,这意味着我们接收该像素的反射光。我们必须知晓该像素反射的光线的颜色
换句话说,我们要知道,从“镜子”中看到了谁?这就需要计算反射光线:
如图所示,我们只需要知晓
- 入射光线方向
- 反射点的法线方向
即可计算出反射光线的方向。而因为眼坐标系是以相机为原点的,那么入射光线的方向,又等于眼坐标中的坐标。
利用 GLSL 帮我们封装好的 reflect
函数,我们可以轻松求出反射光线的方向。
其中第一个参数是入射光线的方向,第二个参数是反射点的法线。
在求出反射光线之后,我们还希望知晓反射光线对应的天空颜色是什么,还记得我们在