Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

参考书籍:《Unity Shader 入门精要》
【《Real-Time Rendering 3rd》 提炼总结】(八) 第九章 · 全局光照:光线追踪、路径追踪与GI技术进化编年史
官方:ReflectionProbes
官方:Global Illumination
官方:High Dynamic Range Rendering
官方:Linear rendering overview


全局光照(Global illumination, GI)

场景的物体的光线投射到物体会反弹(Bounce)光线到别的物体,产生间接光照。

通过设置Bounces值来控制间接光的强度。

预计算实时全局光照(Precomputed Realtime GI)

动态为场景实时更新复杂的光照结果。
实现原理:先计算静态物体间和光源位置的关系,对动态移动的物体,使用光照探针模拟光照环境。


反射探针(Reflection Probes)

在特定位置对场景采样。在有反射效果的物体在探针附近时,会把探针的结果给物体。多个探针时,做插值。

下图白色带微笑的圆圈就是反射探针。

反射探针还可以实现物体互相反射的效果。(如下反射值为2,第一次反射会是全黑色的。)


线性空间(Linear)和 伽马空间(Gamma)

  • 线性空间:采集到亮度为0.5,像素就是0.5。符合计算规则(PBS必须在线性空间计算)。
  • 伽马空间:采集到亮度为0.22,像素是0.5(0.45的编码伽马γ)。根据人眼光灵敏度,调整像素值,充分利用图像的存储空间。

伽马校正:伽马空间转换到线性空间。Lout = Linγ

sRGB颜色空间标准下,0.45的编码伽马,配合2.2的显示伽马来相互抵消(2.2 × 0.45 ≈ 1)。线性空间下,输入纹理设置为sRGB模式,对纹理采样时就会转换到线性空间。




高动态范围(High Dynamic Range, HDR)

动态范围:最高和最低的亮度值之间的比值。

HDR使用高于8位的精度来记录亮度信息,可表示超过0~1的亮度值,更精确反映真实光照。尽管最后要把信息转回显示设备的LDR,但中间的计算可以得到更真实的效果,即如果亮度超过1,可以使用**色调映射(tonemapping)**来最大限度保留需要的亮度细节。

缺点:需要更大显存空间,渲染会变慢,一些硬件并不支持HDR。使用HDR就无法开启硬件的抗锯齿功能(可以用屏幕后处理弥补)。

Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)相关推荐

  1. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  2. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  3. 【Unity】Unity Shader学习笔记(二)渲染管线

    文章目录 渲染管线(Randering Pipeline) 渲染流程 可编程渲染管线 应用阶段 把数据加载到显存中 设置渲染状态 调用DrawCall 几何阶段.光栅化阶段 渲染管线(Randerin ...

  4. Unity Shader学习笔记/Urp/水墨风效果

    实现简易的水墨风效果大致分为三部分: 1.将原始的rgb贴图转化为灰度图 float4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN ...

  5. 【Unity Shader学习笔记】(五)使用鼠标绘制自由多边形(附完整工程源码)

    前言 在前面的文章中,我们已经了解了怎样使用Unity Shader来绘制简单的点和线,本文将延续上次的话题,讲述一下如何在场景中使用Unity Shader绘制自由多边形. 本文所述的程序,支持在地 ...

  6. Unity Shader学习笔记(5)基于摄像机深度和法线的后处理描边效果

    文章目标 : 主要参考书籍为<Unity Shader入门精要>,本文主要注重于整理,方便后续直接调用. 渲染效果图: 主要相关代码: 摄像机脚本文件: using System.Coll ...

  7. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板

    写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...

  8. 【Unity Shader学习笔记】实现反射与折射模拟水面、使用grabPass与环境贴图

    文章目录 写在前面 一个水波效果 大致组成部分与对应的实现方案 交界线与深度贴图 折射效果与GrabPass 使用Cubemap与法线信息来模拟反射 在正确的地点创建对应的cubemap 通过贴图获取 ...

  9. Unity Shader 学习笔记(一)关于“表面着色器”切换渲染管线Shader不可用的问题

    Shader主流上分为两类: 表面着色器(surface shader):更高级的封装,减少人工工作量,能实现大部分效果,缺点是自定义程度不 高,相对局限: 片段着色器(fragment shader ...

最新文章

  1. RSA的密钥把JAVA格式转换成C#的格式
  2. JavaScript实现squareRoot平方根算法(附完整源码)
  3. Android 一个Activity 里面放置多个 Fragment 实现点击切换的Tab 页面效果
  4. python 异常处理模块_Python Exceptions 异常处理全过程以及异常模块详细解析
  5. 软件测试过程中的度量与分析
  6. 模块无法导入_你真的会用Python模块与工具包吗?
  7. 怎么用PS替换图片背景色?这个方法你需要知道
  8. C语言课程设计——电影院订票系统
  9. 深入理解什么是端口(port)
  10. 应聘软件测试英文自我介绍,软件测试英文面试自我介绍2篇
  11. Delphi为什么都不用了?公司CTO不向老板推荐使用Delphi的13 个真实原因
  12. 中国电信5G技术引言
  13. 手机在线测试黄疸软件,智能手机APP:可在几分钟内检测出新生儿黄疸
  14. web前端的css示例
  15. C. 点和圆 (类与对象)
  16. Blender软件使用Maps Models Importer插件导入Google地图3d模型(非常简单)
  17. RabbitMQ学习笔记:集群和网络分区(Network Partitions)
  18. Vue-Vnode类型
  19. docx行间距怎么设置_word全文行距怎么设置
  20. 广州可得 全面亮相第十七届SDS及2022中国国际防伪溯源展

热门文章

  1. GMA Round 1 YGGDRASIL
  2. Designing Network Design Spaces
  3. gnuplot画双纵坐标图
  4. centos下安装xcrysden出现的问题
  5. 记录常用的xss攻击代码,便于测试系统安全漏洞
  6. 地面气象观测数据-A文件转excel方法
  7. 10年10亿,贝佐斯投了8轮的机器人公司留下的昂贵一课 | 甲子光年
  8. 如何在Excel中创建动态定义的范围
  9. java手风琴代码_[Java教程]18款jquery抽屉式手风琴导航特效代码
  10. [ECCV2018]Generating 3D faces using Convolutional Mesh Autoencoders