首页 GAMES104-Lecture 06 游戏中地形大气和云的渲染
文章
取消

GAMES104-Lecture 06 游戏中地形大气和云的渲染

Environment Components

  • Sky and Cloud

  • Vegetation

  • Terrain

LODs

  • Level of details

Terrain Rendering

Simple Idea - Heightfield

  • height map + Contour map

pizrtyR.jpg

  • Adaptive Mesh Tessellation

    • 关心fov内的东西,fov内的三角形会被细化,fov外面和远处的三角形会分布得比较稀疏

    • 瞄准镜就只是修改了fov,观察角度减小,相同的三角形,在更小的fov下占的像素会增加

  • 2条优化黄金法则

    • 近处密 远处稀疏,fov窄密 宽稀疏

    • 与实际值的误差控制

  • Triangle-based subdivision

    • 永远把等腰直角三角形最长的一边切一刀,得到两个新的等腰直角三角形,这是一个二叉树的结构

pizrJSJ.jpg

  • Subdivision and T-Junctions

    • 这个问题就是指相邻两个三角形的共用边处,只对其中一个三角形细分而另一个没有,就会产生T-Junctions,解决方法就是没细分的三角形也被迫细分一下
  • QuadTree-Based subdivision

    • 优点:容易构建、quad符合数据规范

    • 缺点:也有T-Junctions(解决方法:Stitching,多的点吸附到其他点,形成退化三角形(面积为0))

  • Triangulated Irregular Network(TIN)

    • 使用不规则的三角形,

    • 优点:运行时快、三角形数量更少

    • 缺点:需要预处理、很难重复利用

pizraex.jpg

  • GPU-Based Tessellation

    • Mesh Shader Pipeline

    • Real Time Deformable Terrain

pizrNO1.jpg

Non-Heightfield Terrain

  • Volumetric Representation体素化表达

  • Marching Cubes:扫描的点通过该算法构造出形状(三角面片集)

pizrYl9.jpg

Paint Terrain Materials

pizrdw6.jpg

  • Terrain Materials,材质混合,简单blend会不真实

  • Advanced Teture Splatting - Biased

pizrwTK.jpg

  • Sampling from Material Texture Array

    • 存权重和材质索引
  • Parallax and displacement Mapping

  • Expensive Material Blending

    • 每个像素都要算一遍
  • Virtual Texture:减小显存中的texture,还可以pre-bake,从显存、内存、硬盘之间调度数据

    • VT Implementation, DirectStorage & DMA:不经过内存,直接往显存里写数据

pizrBFO.jpg

  • Floating-point Precision Error 浮点数溢出

    • 解决方案:Camera-Relative Rendering

      • 先把每个物体的位置减去相机的位置,然后对物体进行transform,最后把相机位置设置为0,更新mvp矩阵
  • Tree Rendering:每种树都有LODs

  • Decorator Rendering:装饰性渲染,比如草

  • Road and decals Rendering

    • decals类似子弹的弹坑,小贴图,把decals放在virtual texture里

Atmosphere

pFppiXF.jpg

Analytic Atmosphere Appearance Modeling

  • 公式有两个参数:向上看的方向与天顶的夹角θ,向上看的方向与太阳的夹角γ

  • 优点:计算简单高效

  • 缺点:局限于地面视角,不能模拟从空中看、参数不能自由修改

Participating Media

  • 气体分子、气溶胶

  • 光线与Participating Media的交互

    • Absorption 吸收

    • Out-scattering 散射

    • Emission 发光

    • In-scattering 附近的Participating Media的Out-scattering对打到自己

  • Radiative Transfer Equation(RTE)

pFppP6U.jpg

  • Volume Rendering Equation(VRE)

pFppClT.jpg

  • Real Physics in Atmosphere

    • Sun Light(不同波长)

    • Air Molecules气体分子:N2、O2

    • Aerosols气溶胶分子:Dust、Sand

Scattering Types

  • Rayleigh Scattering

    • 对于越短的波长(蓝光、紫光)散射得越厉害,长波长(红光)散射很少

    • λ是波长,θ是光线和介质的夹角,h是海拔高度(用来表示空气密度)

pFpSzYq.jpg

  • Mie Scattering

    • 有方向性,沿着光的方向会略强,不考虑波长的影响

    • 比上面的方程多一个g,等于0就和上面的方程一样,大于0会有不同的效果

    • mie散射一般表现雾和光晕

pFpp9pV.jpg

  • Single Scattering & Multi Scattering

pFppSf0.jpg

Variant Air Molecules Absorption

  • Ozone(O3):吸收长波长的光

  • Methane(CH4):吸收红光

Ray Marching

pFppA0J.jpg

  • 沿着视线,把沿途的效果一步一步地积分起来

  • 计算复杂,那么就空间换时间,预先计算,存在表中

Precomputed Atmospheric Scattering:

  • 大气模拟主要看两个参数:transmittance通透度、scattering散射

    • 存 在地球上的任意一个点,视线与天顶的夹角
    • 存 现在所在的海拔高度
    • 然后transmittance LUT存的就是从这么一个点看向这个θ方向,直到大气层的边界处,这些大气的通透度
    • scattering散射要用三个角度算

pFppkm4.jpg

  • Challenges:

    • multi-scattering很贵

    • 手机端不好生成transmittance LUT

    • 不好生成动态的切换效果

Production Friendly Quick Sky and Atmosphere Rendering:

  • 能表达动态的效果

Cloud

Cloud Type

pFpyKG8.jpg

Mesh Based Cloud Modeling

  • 高质量

  • 整体计算昂贵、不支持动态天气

Billboard Cloud

  • 直接上贴图,高效

  • 效果不太好

Volumetric Cloud Modeling

  • 优点:全动态、形状多变、可以飘

  • 缺点:效率低,运算昂贵

  • Weather Texture:随机的云的分布+云的厚度

  • Noise Functions

    • Perlin Noise:用一个多项式的时间

    • Worley Noise

  • Cloud Desity Model

pFpyQxg.jpg

  • Ray Marching:

    • 从屏幕射出一条ray

    • 在hit到cloud之前使用big step

    • hit到cloud之后在云里面使用dense step(小一点的步长)

    • 计算从太阳散射到云的radiance

pFpyMRS.jpg

本文由作者按照 CC BY 4.0 进行授权