第六节:游戏中大气和云的渲染
最后更新于
最后更新于
Sky and Cloud
Vegetation
Terrain
Height Map
Contour Map
Expressive Heightfield Terrains
Lod 近处密,远处稀疏
Adaptive Mesh Tessellation 网格细分
当 FOV 越来越窄的时候,地面在屏幕上显示的会越来越大,所以网格远处的精度需要相应的增大。
Two Golden Rules of Optimizatioin
View-dependent error bounds
Distance to camera and fov
Error compare to ground truth
正方形网格用四个等腰直角三角形组成
永远切分等腰直角三角形最长一边
相邻三角形需要切分的同样密,来防止裂边
使用无 T 分裂的等腰直角三角形组合成地形
但是实际上游戏上用的不多
效率、绘制都没有问题
但是作为地形数据和保存,地形数据的序列化需要使用另外一种格式,反序列化后的渲染可以用这种格式
最大范围有个上线,不会完全归一,比如 512 * 512 米
用磁盘上的一块区域,比如一张纹理来表达
这个地形数据组织是场景地形和资源管理的总和,可以搭配上上方三角形网格生成方案来渲染
Stitching
四叉树管理的地形数据反序列化成为不同密度的三角形。为了保持连续,可以使用 Stitching 方法,退化密度高的三角形,出现面积为 0 的三角形。来粘合不同密度的地块解决 T-junction 问题。
直接从高度图生成三角形后,通过三角形简化生成三角形数量很少的地形
根据游戏内容的不同,需要使用不同的算法
借助 GPU 来程序化生成 LOD 地形
即渐变的网格密度变化
Mesh Shader Pipeline DX12 以上
实时的可变形的地形
可以做出泥土,雪地的凹陷
地型变化的效果,物理碰撞的更新更难做
不基于高度图的地型
比如悬崖,洞穴,一般使用放置物体在上面,不属于地形一部分,属于场景一部分
可以去掉地型上三角形的顶点,让 GPU 不渲染周围三角形,用物体填充来弥补
基于体素的表示
空间上划分体素,每一个体素里大概总共可能会有 15 种不同的近似平面,每个体素用一个字节的数据记录近似平面的表示的编号。
Transvoxel Algorithm, voxel 也可以做 LOD
基于 volumetric 的表达,在未来有希望做出纯动态地型
材质混合
简单的 Alpha 混合,并不自然
叠加高度后的混合
叠加 Bias,一点小 Hack
和 3D Texture 不一样,3D Texture 的采样需要三线性插值的采样。
Texture Array 每层之间没关系,是 Texture Index + 双线性插值采样
使用 IndexMap + TextureArray 采样地面纹理
Color Mapping : Albedo 着色
Bump Mapping 法线纹理影响光照模型
Parallax Mapping 视差贴图 :使用 Ray Martching 的方式着色表面,出现遮挡
Displacement Mapping 曲面细分 :完全和细化网格是一致的
昂贵的材质混合
Many Texturing ,每个像素大量的 Texture Array 纹理采样和线性插值
Huge Splat map ,加载了很大张的纹理,但是大部分的像素是用不到的
最主流的地型绘制方案
CPU,内存,显卡,硬盘之间的数据交互
现在一般是 CPU 调度内存和显存
次世代的 DMA 可以支持硬盘和显存
浮点数在大数字时,小数部分变短,精度变低
Camera-Relative Rendering ,基于摄像机空间的渲染运算,标准做法
SubLevel,基于子场景空间坐标系的渲染运算
Speed Tree ,植被渲染中间件
场景中的细节可以预烘培进入 Virtual Texture
使用经验公式去拟合大气散射现象
大气散射通过一个介质分为四个阶段
Transmittance :光线被介质的衰减
Increase factor :光线进入眼睛的能量
太阳光是由不同波长即不同颜色的光线组合而成的白色
介质直径小,光线波长越短散射越厉害
蓝紫光波长短
拟合方程
Rayleigh Scattering Equation
散射对光的波长不敏感
雾 Fog,光晕 Halo of Sun
Mie Scattering Equation
大气的吸收效应
臭氧
甲烷
沿着视线的方向,对太阳光的积分
Precomputation Cost
Authoring and Dynamic Adjustment of Environments
Runtime Rendering Cost
Simplify Multi-scattering Assumption
假设对于空间上某个点四面八方的入射光是均匀的
Fixed view position and sum position to remove 2 dimensions out of LUT
Generated a 3D LUT to evaluate aerial-perspective effects by ray marching
Mesh-Based Cloud Modeling
Billboard Cloud
Volumetric Cloud Modeling
Weather Texture 存云的厚度
Noise Functions
Perlin Noise 棉花丝感觉
Worley Noise 泡泡感觉
Cloud Density Model
Rendering Cloud by Ray Marching