- Tone mapping(色调映射)
- 寻找合适的范围去渲染 HDR=>LDR
- 粗糙的模拟人眼自适应高范围 (眼睛适应高亮和极暗的情况)
- 映射 HDR -> LD
- 计算场景的平均亮度 (1x1 大小的纹理)
- 计算公式(非线性)
lumScaled = lum (1+lum / (maxLum^2)) / (1+lum)
Result = color * lumScaled
HDR(高光动态范围)
- 什么是HDR?
- 亮的东西越亮
- 暗的东西越暗
- 人眼感知范围比例为 1,000,000:1
- 电脑显示器只能显示部分的对比度
- 纹理格式
- 原始: 一个通道 8-bits (一个像素 32-bits)
- HDR: 一个通道 32-bits (一个像素 128-bits)
Bloom(光晕)
- 模拟人眼对于光亮的散焦
- 所有高于LDR的范围就是"bloomed(模糊)"
finalColor = toneMapColor + bloom
SSAO - Screen Space Ambient Occlusion (屏幕空间环境光遮蔽)
用环境闭塞的大概值来模拟全局光照明
只使用深度缓存
优点
只使用深度缓存
优点
- 独立于场景的复杂度
- 能用于动态场景
- 完全的GPU运算
- 依赖于视角
Depth Buffer (深度缓存)
- 非线性存储
- 使用32-bit高精度
- 转换非线性深度值到线性
基本算法 (Pixel Shader)
对于每一点的深度,采样周围的深度值:
对于每一点的深度,采样周围的深度值:
- 如果小于当前深度则忽略
- 使用随机方向来消除人工痕迹
- Occlusion = step(0, diffDepth) / ( diffDepth^2 + 1 )