本篇参考B站视频 “技术美术百人计划”·霜狼_may ;
《Shader入门精要》·冯乐乐女神著;
https://www.cnblogs.com/wickedpriest/p/13048588.html
ToneMaping https://zhuanlan.zhihu.com/p/21983679
Lut https://www.btbat.com/2943.html
深入理解 PBR/基于图像照明 (IBL)https://zhuanlan.zhihu.com/p/66518450
本篇主要用于自我复习,如有疑问或发现有什么错误,请多指教~
在上一篇中有简单介绍HDR,这一篇展开来说下,主要包括HDR/LDR以及IBL相关;
一.基础概念
1.动态范围
Dynamic Range,简而言之,它指的是最高与最低亮度值间的比值。
现实中,场景的最亮和最暗范围非常大,超出显示器能显示范围256阶灰阶(单通道精度8位,灰度为2的8次方)。
2.HDR
High Dynamic Range,高动态范围;
- 远高于8位,精要里讲是32位;
- 单通道可超过1;
- 常用存储格式hdr/tif/exr/raw;
- 见于真实世界和HDRI;
3.LDR
Low Dynamic Range,低动态范围
- 8位;
- 单通道0——1;
- 常用存储格式jpg/png;
- 拾色器,一般图片,电脑屏幕;
不同显示器由于厂家和制作手法不一,其物理亮度并非统一,而LDR的范围是0-1,对应在不同屏幕上匹配对应屏幕的最低0与最高1;
4.Tone Maping
自然界中的亮度范围差异十分明显,萤火之光与太阳光对比,差异极为明显,为了将其从高动态范围转换到显示器上可以显示的低动态范围的过程(HDR->LDR)即为Tone Mapping(色调映射);
关于Tone Maping的算法简单举例四种,不同点其实都是在于S曲线算法的生成,具体参考这篇文章
- 2002年的经验派:Reinhard tone mapping
关键代码如下
float3 ReinhardToneMapping(float3 color, float adapted_lum)
{
const float MIDDLE_GREY = 1;
color *= MIDDLE_GREY / adapted_lum;
return color / (1.0f + color);
}
形成的S曲线如图