本篇参考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曲线如图

  • 2007年,粗鲁派 CryEngine 2的CEToneMapping
float3 CEToneMapping(float3 color, float adapted_lum)
{return 1 - exp(-adapted_lum * color);
}

  • 2010年拟合派,Uncharted 2的Filmic tone mapping
    通过拟合方法生成S曲线
float3 F(float3 x)
{const float A = 0.22f;const float B = 0.30f;const float C = 0.10f;const float D = 0.20f;const float E = 0.01f;const float F = 0.30f;return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
}float3 Uncharted2ToneMapping(float3 color, float adapted_lum)
{const float WHITE = 11.2f;return F(1.6f * adapted_lum * color) / F(WHITE);
}

  • 最后是美国电影艺术与科学学会的学院派,Academy Color Encoding System(ACES),一套颜色编码系统或者说是颜色空间,支持不同设备上都可以正确显示,现在是应用最广泛的;
float3 ACESToneMapping(float3 color, float adapted_lum)
{const float A = 2.51f;const float B = 0.03f;const float C = 2.43f;const float D = 0.59f;const float E = 0.14f;color *= adapted_lum;return (color * (A * color + B)) / (color * (C * color + D) + E);
}


5.补充

视频中提到,在拍照时,将曝光值进行计算,映射为相机能感受的范围内,这一阶段受光圈,快门等组件影响;
然后将该值输出为一个线性值存到相机中,经Lut变换(Look up table用于调色也可称滤镜),通过白平衡,色彩映射,Gamma校正等一系列过程,将其结果烘焙为Lut;

关于Lut相关可以参考
Trick:通过在PS里做出一张Lut导出后,在引擎里再采样调整画面;


二.细说HDR

1.为何需要HDR

  • 比起LDR,HDR有着更好的色彩,更丰富的细节,更高的动态范围,且能有效防止画面过曝,使得画面更显真实;
  • HDR的单通道可以超过1,从而产生光晕(bloom)效果,能够提高渲染品质;

2.Unity中设置HDR

  • Camera-HDR设置
    开启后场景将渲染为HDR图像缓冲区,再进行屏幕后处理,Tonemapping中将HDR转化为LDR,然后将LDR图像发送给显示器;(经测试 默认情况下几乎没啥影响,当使用post volume后调整数值后会产生一定影响)

  • Lightmap HDR设置
    选择High Quality启用HDR光照贴图支持,Normal Quality切换为使用RGBM编码;
    (RGBM编码:颜色存储到RGB通道中,乘数(M)存储到Alpha中)

  • 拾色器HDR设置
    设置时在shader代码中的属性板块中,对应颜色参数前添加[HDR]即可;

设置成功后会增加Intensity滑动条调整颜色强度,每增加1,光量增加一倍;

3.HDR优缺点

  • 优点:增加细节,减少曝光,减少暗部色阶感,支持Bloom效果
  • 缺点:渲染速度较慢,需更多显存,不支持硬件抗锯齿,部分手机不支持;

4.HDR与Bloom
Bloom用于表现溢光效果,其原理如图

使用的代码参考《入门精要》的Bloom对应章节,下面是对应的每帧变换和对应步骤



三.IBL

1.IBL是啥
IBL(Image Based Lighting)也就是基于图像的光照。相当于一个无限大的球面光源在照射场景。辐射度由 environment map 决定。


(接下来的是半糊状态自我参悟,不保证准确性,如有需要请直接参考链接https://zhuanlan.zhihu.com/p/66518450)

2.我们知道一个完整的光照模型需包含漫反射与镜面反射部分,而在其中又可以根据光源分为直射光部分和环境光部分,通过使用IBL,我们可以从中采样获取一个irradiance map作为环境漫反射光,具体步骤参考该篇对IBL的解析,unity中我们可以在图片格式中修改(经尝试后发现好像区别不大?)


3.既然有对应环境漫反射部分,自然有对应环境镜面反射的部分,从中提取的cubemap被称为pre-filter environment map,根据粗糙度不同表现效果不同,感觉有点类似调整Mipmap的感觉;unity中图片设置里也有高光反射部分

4.合成最后输出
关于最后输出部分参考上面说的文章,这里单独拎出来上面讲到的获得的两张图的处理;

  • 对于irradiance来讲,直接用平常方式采样获得颜色后与albedo相乘获得diffuse;
  • 对于prefilteredColor来说,则是用texCUBElod方式获取Mipmap层级,从而表现不同粗糙度效果;

5.关于尝试

拿了一张HDR图在PS里修改成LDR(输出后,将两者都用texCUBElod方式进行采样,图片格式设置如下

关于在PS里HDR修改为LDR,修改时在PS里调整HDR色调,在庄懂的课里有讲过,前面的实践篇中也有对应操作

然后调整Mipmap层级后,对比如gif图:

接下来为场景加入Bloom后效,将强度值调整为25后,开关HDR前后对比(第一张是开启HDR,第二张是关闭HDR)

从0开始的技术美术之路(十一)HDR与LDR相关推荐

  1. 从0开始的技术美术之路(十六)延迟渲染

    本篇参考 "技术美术百人计划"·霜狼_may : <Shader入门精要>第九章·冯乐乐女神著: Unity官方手册 抗锯齿相关的大致了解 延迟渲染 手机TBDR框架 ...

  2. 从0开始的技术美术之路(七)模型与材质基础

    本篇参考B站视频 "技术美术百人计划"·霜狼_may : <Shader入门精要>·冯乐乐女神著: 本篇主要用于自我复习,如有疑问或发现有什么错误,请多指教~ 本篇内容 ...

  3. 从0开始的技术美术之路(十二)Bump Mapping(凹凸贴图映射技术)

    本篇参考B站视频 "技术美术百人计划"·霜狼_may : 视差云的实现 https://zhuanlan.zhihu.com/p/83355147 PBR白皮书https://zh ...

  4. 从0开始的技术美术之路(美术篇)(一)美术理论基础

    本篇参考B站视频 "技术美术百人计划"·霜狼_may : <视觉艺术用光-在艺术与设计中理解与运用光线>-理查德-约特 本篇主要用于自我复习,会掺入一些个人观点,如有疑 ...

  5. 从零开始的技术美术之路(六)色彩空间

    本篇参考B站视频 "技术美术百人计划"·霜狼_may : <Shader入门精要>·冯乐乐女神著: <数字图像处理>-徐录平编著 科学出版社.2007 本篇 ...

  6. 得物从0到1自研客服IM系统的技术实践之路

    本文由得物技术王卫强分享,为了更好的阅读体验,有较多的内容修订和排版优化. 一.引言 客服IM的核心业务其实就是在线沟通,客服IM的好处是使得客服与用户通过实时沟通的方式可以在最短的时间内帮助用户解决 ...

  7. 码农技术炒股之路——抓取股票基本信息、实时交易信息、主力动向信息

    从本节开始,我们开始介绍各个抓取和备份业务.(转载请指明出于breaksoftware的csdn博客) 因为我们数据库很多,数据库中表也很多,所以我们需要一个自动检测并创建数据库和表的功能.在< ...

  8. 码农技术炒股之路——任务管理器

    系统任务和普通任务都是通过任务管理器调度的.它们的区别是:系统任务在程序运行后即不会被修改,而普通任务则会被修改.(转载请指明出于breaksoftware的csdn博客) 为什么要有这样的设计?因为 ...

  9. 码农技术炒股之路——数据库管理器、正则表达式管理器

    我选用的数据库是Mysql.选用它是因为其可以满足我的需求,而且资料多.因为作为第三方工具,难免有一些配置问题.所以本文也会讲解一些和Mysql配置及开发相关的问题.(转载请指明出于breaksoft ...

最新文章

  1. centos7下端口映射
  2. python任务调度框架_Python任务调度模块APScheduler
  3. C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量
  4. .NET Core微服务之基于IdentityServer建立授权与验证服务
  5. 抽象工厂模式_设计模式——抽象工厂模式
  6. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
  7. 在分布式环境中解决session共享问题
  8. 音频特征----频谱图
  9. VC-应用程序正常初始化失败-0xc0150002
  10. 小米官网仿写部分代码+实训报告
  11. spring security——学习笔记(day05)-实现自定义 AuthenticationProvider身份认证-手机号码认证登录
  12. 设计模式---单例模式Singleton
  13. 江苏省盐城中学信息竞赛队(YZOI)队规
  14. linux 怎么看浏览器,Linux下浏览器比比看
  15. 2021年5月16日 星期日 阴
  16. hjr-MUD游戏(四):egret编写h5游戏
  17. 粽情端午动态PPT模板
  18. Android Studio 4.0 稳定版发布了
  19. 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)
  20. CSDN富文本常用快捷键

热门文章

  1. python爬虫----网易云音乐歌曲爬取并存入Excel
  2. 没所谓移动开发寒冬,不过是大鱼吃小鱼,sharedpreferences原理
  3. 地图怎么显示服务器,怎么搭建局域网地图服务器
  4. Linux安装1T磁盘划分
  5. signal 各种操作
  6. 什么是渲染农场,渲染农场一般怎么收费?
  7. Redis集群脑裂导致数据丢失问题处理
  8. Java SE 学习笔记 第二记
  9. 模拟CMOS集成电路设计入门学习(12)
  10. StratoVirt 的 vCPU 拓扑(SMP)