GAME104第六节

“大地之神”

地形的几何

Heightfield 高度场

表示和渲染地形最简单的处理方案。

image-20241101142713113

  • 几十年前的测绘就用过,等高线、地形图。

大致原理:每隔1m/0.5m划分一个网格,然后根据Heighfield的高度就可以得到地形的高度。

LOD 多细节层次

LOD Level of Detail 多细节层次

  • 通过生成不同精度的模型层级,在不同观察距离下动态选择合适的模型进行渲染,从而在保证视觉效果的同时提高渲染效率
  • 根据物体在屏幕的远近或信号的敏感度,可以设置不通过的精度。

可以根据摄像机距离调整模型细节。

FoV 视场角

FoV Field of View 视场角

image-20241101143428594

我们真正关心的是FoV里面的东西,FoV内部的细化,FoV外面的稀疏。

FoV越来越窄,屏幕上看到的物体放到越来越大,让实现聚焦,失去一定的视野

倍镜的原理,越高倍的望远镜,FoV就会越来越小

FoV提供视野范围和细节表现

Mesh Subdivision 网格细分

把地形变成一个个mesh格子,越细分越精细。

细分的两大法则

  • 注意摄像机和FoV的距离
  • 对网格简化合并时,采样点会变少,在视空间上真实和地面的误差不要超过一个像素(理想状态下)

Triangle-Based Subdivision

Triangle-Based Subdivision 三角形细分

image-20241101144934318

地形是一个个格子,格子切一刀就是等腰直角三角形。

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

T-Junctions:mesh中出现的一种特殊情况,某一片mesh的边界与另一个的中心点相交形成一个T字型的交叉。

缺点:不符合制作地形的直觉(直觉是处理正方形)

QuadTree-Based Subdivision

QuadTree-Based Subdivision 四边形细分

image-20241101144945758

现代用的最多还是基于四叉树的表达(正方形切分)

T-Junctions的解决方法:

  • image-20241101145301351

  • 把多的点向上或者向下吸附。

Triangulated lrregular Network (TIN)

image-20241101174415457

用不规则的三角形表达地形。

用面片简化的方法,把很多的不必要的顶点省略掉。

现代游戏很少用。

优缺点:

  • 缺点:要预处理
  • 优点:比起前两个画三角形很少

Hardware Tessellation

GPU处理地形的网格化。

其他技术

Real-Time Deformable Terrrain 实时可变形地形

一种模拟地形动态变化的技术。

允许地形在游戏或模拟环境中实时响应物理作用力,如轮胎沟痕、车辆行驶、爆炸、脚步等,产生形变效果

Non-Heightfield Terrain 非高度场地形

image-20241101150843891

一种不依赖于高度图(Heightmap)来表示三维地形的技术。

主要用来处理那些高度图难以表达的复杂地形特征,比如洞穴、悬崖、隧道等。

挖隧道:标记顶点。如果检测到这个顶点是non,那就让用到这个顶点的三角形全部去掉。

Volumetric Representation 体素化表示

  • 一种在三维空间中表示物体和场景的技术。
  • 过将空间划分为离散的体素(voxel),每个体素存储特定的数据(如颜色、密度、光照信息等),从而构建起整个三维模型或场景

现代游戏引擎用的很少。

在三维空间采点,对每个点表示一个权重值(表示是否有物质)。

Marching Cubes

一种从三维离散数据场中提取等值面的经典算法。

在空间上有采样点,在他上下左右采8个点,那么14种方法切分cube,可以形成一个三角面片集。

是CT扫描的方法,在流体模拟、虚拟数字人等等都有应用。

地形的材质

纹理材质

假设用PBR的MR模型。

image-20241101175012073

材质管理和使用

Height Map

  • 用于定义三维地形表面高程的数据表示方法
  • 是个灰度图像,每个像素的灰度值对应于地形的高度信息

image-20241101175607763

Height Map提供了地形的高程信息,可用于在地形上混合不同的纹理。

简单的材质混合借此实现材质自然过渡。

Texture Array

一种高效的纹理管理技术,将多个纹理存储在一个纹理数组中

image-20241101152207952

能够高效的处理和混合多种纹理材质,适用于需要大量纹理的场景,如地形渲染和角色换装等

纹理细节优化

image-20241101181337608

Parallax Mapping

Parallax Mapping 视差映射

image-20241101181326631

通过改变纹理坐标来模拟凹凸不平的表面效果

Displacement Mapping

Displacement Mapping 位移映射

一种增强三维图形视觉效果的技术,它

通过根据纹理图(通常是高度图)中的值实际改变模型的几何形状来增加表面细节。

纹理存储技术

Virtual Texture

Virtual Texture 虚拟纹理

现代游戏引擎都在用这个。

现代计算机架构中,游戏数据就是在硬盘-内存-显存来回调度,中间都需要通过内存进行调度。

VT把要用到的东西放内存中,不用的放硬盘上。如果将要用到硬盘上的东西,那就把他从硬盘中拿出放到内存中,内存中目前用不到的放回去。

DirectStorage

游戏数据从硬盘到内存,而此时不在内存中不压缩,直接到了显存中GPU来解压。、

传输效率高。

DMA

DMA Direct Memory Access

游戏数据直接从硬盘到显存,不经过内存。

可能出现的问题

浮点数精度溢出

float-32个byte

解决方法:Camera-Relative Rendering

  • 将所有的物体的距离全部以相机为原点的坐标系。

其他技术

Tree Rendering

一种专门处理树木渲染的技术

Decorator Rendering

一种在渲染过程中添加装饰(decorators)的技术,用于实现特定的视觉效果或增强渲染品质

草、小碎石等。

Road and Decal Rendering

在游戏引擎中渲染道路和贴花。

大气

Analytic Atmosphere Appearance Modeling

Analytic Atmosphere Appearance Modeling 分析型大气外观建模

模拟大气外观的方法,是渲染大气最简单的方式,通过拟合出对应函数。

通过函数,加入参数直接算出大气中的光散射和吸收现象,从而生成天空的颜色和大气效果。

Participating Media

(大气的)参与介质。相当于把大气中存在的介质混合。

Volume Rendering Equation

Volume Rendering Equation 体积渲染方程 VRE

描述光在体积介质中传播、散射和吸收的数学模型

基于Radiative Transfer Equation RTE 辐射传输方程

VRE 考虑了光线在通过体积介质时的衰减和散射,用于计算观察者看到的体积介质的最终颜色

光传播

散射

这两个基本就是拟合方程,是散射方面的两个理论模型。

Rayleigh Scattering

解释天空为什么呈现蓝色以及日落时天空呈现红色的理论。

Mie scattering

描述了光波与尺寸与光波长可比的粒子相互作用时的散射现象。

Mie scattering适用于描述更大粒子的散射行为

比如:fog、日晕

吸收效应

O3、CH4

多次散射

Multi Scattering 多次散射

Ray Marching 光线步进

沿着光的路线一次一次的计算积分。

Precomputed Atmospheric Scattering

预计算地面到地球边界的通透度,然后把大气的散射现象(通透度现象)全部变成表格,全部提前算好。

天顶角

缺点:计算时间相当长。

Production Friendly Quick Sky and Atmosphere Rendering

Production Friendly Quick Sky and Atmosphere Rendering 快速天空和大气渲染技术

目前游戏引擎(UE)中常用的方法。

大胆假设四面八方的光散射过来是均匀的,然后算可能的百分比。

好处:符合人的直觉。

Mesh-Based Cloud Modeling

Mesh-Based Cloud Modeling 基于网格的云建模

用mesh硬生生做。

Billboard Cloud

Billboard Cloud 广告牌云

通过使用二维贴图(广告牌)来模拟云的效果。

使用多个角度的切片来替代三维模型,从而在远距离观察时与原物体类似。

Volumetric Cloud Modeling 体素化云朵

通过使用体素(体积像素)来表示云朵的体积数据,从而实现详细的云朵形状和动态效果。

weather texture

通过使用纹理来定义云的形状、厚度和分布

Cloud Density Model 云密度模型

通过云的形状、结构、灰度和透光程度等特征,描述云朵在三维空间中分布的模型。

Noise Functions 噪声函数:比如Perlin Noise、voronoi等。

可以再加上Noise Functions的处理,增加更多的细节和随机性。

Ray Marching 光线步进

沿着视线方向逐步采样云的密度,从而累积云的颜色和不透明度。