Environment Components
Sky and Cloud
Vegetation
Terrain
LODs
- Level of details
Terrain Rendering
Simple Idea - Heightfield
- height map + Contour map
Adaptive Mesh Tessellation
关心fov内的东西,fov内的三角形会被细化,fov外面和远处的三角形会分布得比较稀疏
瞄准镜就只是修改了fov,观察角度减小,相同的三角形,在更小的fov下占的像素会增加
2条优化黄金法则
近处密 远处稀疏,fov窄密 宽稀疏
与实际值的误差控制
Triangle-based subdivision
- 永远把等腰直角三角形最长的一边切一刀,得到两个新的等腰直角三角形,这是一个二叉树的结构
Subdivision and T-Junctions
- 这个问题就是指相邻两个三角形的共用边处,只对其中一个三角形细分而另一个没有,就会产生T-Junctions,解决方法就是没细分的三角形也被迫细分一下
QuadTree-Based subdivision
优点:容易构建、quad符合数据规范
缺点:也有T-Junctions(解决方法:Stitching,多的点吸附到其他点,形成退化三角形(面积为0))
Triangulated Irregular Network(TIN)
使用不规则的三角形,
优点:运行时快、三角形数量更少
缺点:需要预处理、很难重复利用
GPU-Based Tessellation
Mesh Shader Pipeline
Real Time Deformable Terrain
Non-Heightfield Terrain
Volumetric Representation体素化表达
Marching Cubes:扫描的点通过该算法构造出形状(三角面片集)
Paint Terrain Materials
Terrain Materials,材质混合,简单blend会不真实
Advanced Teture Splatting - Biased
Sampling from Material Texture Array
- 存权重和材质索引
Parallax and displacement Mapping
Expensive Material Blending
- 每个像素都要算一遍
Virtual Texture:减小显存中的texture,还可以pre-bake,从显存、内存、硬盘之间调度数据
- VT Implementation, DirectStorage & DMA:不经过内存,直接往显存里写数据
Floating-point Precision Error 浮点数溢出
解决方案:Camera-Relative Rendering
- 先把每个物体的位置减去相机的位置,然后对物体进行transform,最后把相机位置设置为0,更新mvp矩阵
Tree Rendering:每种树都有LODs
Decorator Rendering:装饰性渲染,比如草
Road and decals Rendering
- decals类似子弹的弹坑,小贴图,把decals放在virtual texture里
Atmosphere
Analytic Atmosphere Appearance Modeling
公式有两个参数:向上看的方向与天顶的夹角θ,向上看的方向与太阳的夹角γ
优点:计算简单高效
缺点:局限于地面视角,不能模拟从空中看、参数不能自由修改
Participating Media
气体分子、气溶胶
光线与Participating Media的交互
Absorption 吸收
Out-scattering 散射
Emission 发光
In-scattering 附近的Participating Media的Out-scattering对打到自己
Radiative Transfer Equation(RTE)
- Volume Rendering Equation(VRE)
Real Physics in Atmosphere
Sun Light(不同波长)
Air Molecules气体分子:N2、O2
Aerosols气溶胶分子:Dust、Sand
Scattering Types
Rayleigh Scattering
对于越短的波长(蓝光、紫光)散射得越厉害,长波长(红光)散射很少
λ是波长,θ是光线和介质的夹角,h是海拔高度(用来表示空气密度)
Mie Scattering
有方向性,沿着光的方向会略强,不考虑波长的影响
比上面的方程多一个g,等于0就和上面的方程一样,大于0会有不同的效果
mie散射一般表现雾和光晕
- Single Scattering & Multi Scattering
Variant Air Molecules Absorption
Ozone(O3):吸收长波长的光
Methane(CH4):吸收红光
Ray Marching
沿着视线,把沿途的效果一步一步地积分起来
计算复杂,那么就空间换时间,预先计算,存在表中
Precomputed Atmospheric Scattering:
大气模拟主要看两个参数:transmittance通透度、scattering散射
- 存 在地球上的任意一个点,视线与天顶的夹角
- 存 现在所在的海拔高度
- 然后transmittance LUT存的就是从这么一个点看向这个θ方向,直到大气层的边界处,这些大气的通透度
- scattering散射要用三个角度算
Challenges:
multi-scattering很贵
手机端不好生成transmittance LUT
不好生成动态的切换效果
Production Friendly Quick Sky and Atmosphere Rendering:
- 能表达动态的效果
Cloud
Cloud Type
Mesh Based Cloud Modeling
高质量
整体计算昂贵、不支持动态天气
Billboard Cloud
直接上贴图,高效
效果不太好
Volumetric Cloud Modeling
优点:全动态、形状多变、可以飘
缺点:效率低,运算昂贵
Weather Texture:随机的云的分布+云的厚度
Noise Functions
Perlin Noise:用一个多项式的时间
Worley Noise
Cloud Desity Model
Ray Marching:
从屏幕射出一条ray
在hit到cloud之前使用big step
hit到cloud之后在云里面使用dense step(小一点的步长)
计算从太阳散射到云的radiance