GAME104第七节

环境光遮蔽效果 AO

AO Ambient Occlusion 环境光遮蔽

SSAO

SSAO Screen Space Ambient Occlusion

Real-time最简单的方法。目前使用的非常少。

通过分析场景中的深度值缓冲来实现环境光遮蔽效果,增强场景的深度感和真实感

具体做法:以眼睛射出的射线为基准,对屏幕上的像素进行局部采样,来估算这个物体目前被遮挡的情况。

SSAO+

SSAO+是对SSAO的增强

通过在法线导向的半球面上进行更精确的遮挡计算,提供了更高质量的环境光遮蔽效果。

适用于需要更真实阴影和细节的高质量实时渲染场景。

HBAO

HBAO Horizon-based Ambient cclusion

image-20241104093715867

在屏幕空间内对每个像素点进行处理,计算该点在特定角度范围内的遮挡情况,从而生成环境光遮蔽效果

具体实施:假设AO出现在山谷里,从山谷里射出一束光,计算其仰角要多高能够让光射到山脊。

缺点:没有考虑天顶角不同(不同角度下),对光的贡献不同。

GTAO

GTAO Ground Truth-based Ambient Occlusion

通过考虑光线的入射角度和多次散射效应,提供了更真实的环境光遮蔽效果。

在屏幕空间中对每个像素的周围环境进行分析,以确定该点是否被其他物体遮挡。

雾效 Fog

Fog

Depth Fog

视线的远近来计算Fog的效果

image-20241104094937619

Height Fog

fog其实是气溶胶,它实际会很容易沉淀在低处。

image-20241104095014989

Voxel-based Volumetric Fog

image-20241104095502320

根据视锥,根据视平面来进行切分,离你近的切的比较密,离你远的切的比较远。进行一个规则的、不均匀的切分计算。

基本就是和大气、云的方法一致。

现代fog常用的。

抗锯齿 AA

Anti-aliasing 抗锯齿(反走样)

image-20241104100141514

多采样几次,将采样变化的值去取平均。

SSAA、MSAA是经典算法,目前常用的是FXAA、TAA。

SSAA

SSAA Super-sample AA(Anti-aliasing)

image-20241104100539646

把图片原本要采样的尺寸变成原来的两倍,这时候整个图像就是4X倍大小。

eg:1024*798—>2048*(798*2)

MSAA

MSAA Multi-sample AA(Anti-aliasing)

image-20241104100633205

三角形中间的点,实际不需要多采样。问题实际是出在边界。

做sharding,去看一个格子中的四个采样点中,如果采样点都不是同样结果的话,就对这个格子再进行处理。

问题:现代游戏的几何密度很高

FXAA

FXAA Fast Approximate Anti-aliasing

image-20241104101122200

边缘是颜色的跳变,进行边缘检测。

TAA

TAA Temporal Anti-aliasing

在时间轴上找数据。

image-20241104115757466

后处理

Bloom

image-20241104120023920

用于模拟高亮区域的光晕扩散现象,这种效果在真实世界的摄影中也会出现。

通常用来增强图像的视觉效果,特别是在模拟明亮光源时

Airy disk 艾里圆盘:

  • 光通过圆形孔径(如镜头光圈)后形成的衍射图样
  • 当光线通过镜头时,由于衍射效应,焦点周围会形成一个中心亮斑,周围逐渐变暗的圆盘状图案,这就是艾里圆盘。
  • 这个现象在Bloom效果中被模拟出来,以增加图像的真实感。

Tone Mapping

Tone Mapping

image-20241104103230563

HDR渲染:阳光直射的地方亮度高,阴影亮度低。

原始的HDR处理,会出现色偏的现象。这时用一个Tone Mapping处理。

image-20241104103756608

Filmic

顽皮狗提出的一个曝光曲线,对每个颜色数值进行新的映射。

image-20241104103421107

ACES

image-20241104103522450

美国电影协会提出的曲线。

优点:

  • 考虑到了HDR、SDR不同显示器的颜色映射的问题。
  • 考虑到了不同环境下,比如普通环境和电影院里等,颜色映射的问题。

Color Grading

image-20241104120321380

Color Grading又叫Lookup Table(LUT),原始颜色和需求的效果颜色的映射。

涉及调整和优化图像的色彩平衡、对比度、饱和度和色调,以达到特定的视觉效果或情感表达

渲染系统总结

mesh材质用sharding绘制,然后还要裁剪。

shadowing、global lllumination比较难,PBR材质统一天下。

世界难以表达的地形、天空和云,通过一些积分方程等模拟这个世界。

AO表达世界凹凸有致,Fog让世界有层次感,AA让世界的效果更加平滑。接着要对时间美颜,Bloom一个光晕的效果,Tone Mapping进行正确的曝光,Color Grading魔法科技能够把整个游戏调节成

渲染管线

一个画面中,基本是几十种上百种算法在工作。需要进行管理。

Forward Rendering

image-20241104104845428

直接计算场景中每个物体(网格)与每个光源的光照效果,并将结果输出到屏幕上。

最简单的Pipeline思想。

Transparenting:透明物绘制。

透明物要放在不透明物的后面来绘制。

Deferred Rendering

Deferred Rendering 延迟渲染

现代游戏光及其丰富。

处理过程:

  • 把所有的东西渲染一遍,和光的关系放在最后算,先算材质,比如roughness、depth等,全部丢到一个buffer中,一般称为G-buffer。
  • 这时一块一块的光到屏幕上时,就只用算光的部分,每一个像素的sharding运算只会去算一次。

好处:对光的处理非常方便

问题:Gbuffer实际上效率是非常低的,这个问题在移动端中

Tile-based Rendering

移动端对发热非常敏感,存储芯片最容易发热。

在java的层面,把画面切成一小块一小块来渲染。减少对G-buffer的读写。

Forward+ Rendering

就是用Forward Rendering,一个一个小块来渲染。

Cluster-based Rendering

将场景空间划分成多个三维的集群,每个集群对应于屏幕上的一组像素。

通过在三维空间中对光源进行裁剪,仅对那些与光源相交的集群进行光照计算,从而提高渲染效率

Visibility Buffer

现代渲染管线的发展方向,目前是作为一个辅助。

Deferred Rendering中,G-buffer中存储的材质的全属性,Visibility Buffer存的是几何的全属性,通过几何的属性可以反向查到材质。

Frame Graph

描述了在单个帧中渲染过程中各个渲染通道(passes)和资源(resources)之间的依赖关系。

unity中URP、HDRP下面用SRP定义。

显示技术

Screen Tearing

Screen Tearing 屏幕撕裂

屏幕撕裂是一种显示问题,当显示器的刷新率和GPU的帧率不同步时发生

V-Sync

V-Sync 垂直同步

用于显卡和显示器之间帧率同步的技术

目标是在保持游戏画面流畅、避免画面撕裂的同时,提供更为均匀、成熟的游戏视觉体验。

VRR

VRR Variable Refresh Rate 可变刷新率

显示器根据实时需要来动态调整刷新率的技术

可以减少或消除屏幕撕裂和图像延迟等问题,提高游戏和视频的流畅度和质量

VRR技术包括FreeSync和G-Sync。