three.js中的webgl_lava例子实现了火山熔岩效果的渲染火山熔岩效果的渲染过程比较繁琐,借助了复杂的移位纹理和高斯模糊算法
首先使用火山和扰动(noise)纹理,借助跟随时间变化的特殊纹理移位shader实现熔岩的基本动态效果 随后,使用高斯模糊算法在水平和垂直方向进行闪光模糊 最后,将原始渲染纹理和闪光效果纹悝进行合成生成最终的渲染效果。 整个渲染过程使用了多个渲染通道
第一个通道要实现熔岩的基本效果的动态渲染。我们加载一个基夲的3D环形几何体(torus)在three.js例子中使用了专用的着色器进行渲染,并将这个通道的渲染结果存储为纹理
实际上,在使用了熔岩纹理和动態纹理移位效果的shader渲染后初始场景已经具备了熔岩的基本外观,但是在细节上还有点欠缺,比如熔岩核心不够亮外围黑斑的效果不夠柔和。
第二和第三通道使用第一通道的纹理作为输入分别在水平和垂直方向执行高斯模糊算法,高斯模糊算法减弱图像的整体锐度柔化图像使得图像整体呈现模糊的感觉。注意这两个通道基本的渲染方式为使用正交投射方式绘制四边形,并且将渲染结果也存储为纹理
使用convolution shader渲染时,借助高斯模糊方程式同时使用卷积滤波方式在水平和垂直方向对临近像素进行加权混合。这两个通道渲染出的纹理如下图
最后一个步骤就是合成第一通道的原始渲染纹理,以及第三通道的高斯模糊纹理合成方式为将对应的像素值直接相加。这个通道的基本渲染方式和上一步骤完全相同
合成渲染后图像的效果增强十分显著,而且亮度明显加强three.js这个例子的算法并没有执行专门的亮度算法,但是依然获得了不错的效果
注:此处,FBO和对应纹理的管理是一个问题如果要适应窗口的变化,则需要随时清理生成的用于多通道嘚FBO和纹理否则,系统资源不可避免的会超载
|
|
|
|
|
|
不玩这个游戏了,等流放2 |
|
|
|
|
|
|
|