原文链接:https://docs.unity3d.com/Manual/LinearLighting.html



1 线性渲染概述

Unity编辑器支持使用gamma颜色空间和linear颜色空间。Gamma涂颜色空间是历史上的标准格式,线性颜色空间渲染可以得到更精确的结果。


1.1 linear和gamma颜色空间

人类的眼睛对光照的强度不是线性反应的,我们可以更容易的看到某些亮度–也就是说从黑到白的线性梯度的光强,我们眼接收的时候不是线性的梯度:(下图左边是颜色梯度,右边是我们眼睛接收的梯度)

因为历史原因,显示器具有一些特征。为显示发送线性信号会导致看起来产生上图中右边错误的结果。为了弥补这个问题,就对信号做了gamma矫正。
之所以两种颜色空间共存,是因为在光照计算时我们需要使用线性空间来保证数学计算正确,但是结果需要表示为gamma空间来保证眼睛看到的结果正确。
即使现在显示器是数字的,它依然做gamma编码,而且图像文件和视频文件也是在gamma空间下编码。
Gamma颜色空间的接收标准是sRGB,这个标准定义了映射到可以让我们眼睛看到更多8bits/通道精度的线性空间。

线性渲染表示处理渲染场景都是使用linear输入,没有famma矫正。



2 线性或者gamma工作流

Unity编辑器对于linear和gamma工作流都支持,线性工作流有一个颜色转换,使在gamma颜色空间下编辑的纹理也可以在linear颜色空间下正确显示。
在unity中设置颜色空间:


2.1 gamma颜色空间工作流

虽然线性工作流可以确保更精确的渲染,但是有时你也需要用gamma工作流,因为一些平台硬件不支持线性工作流。
那么颜色的使用就都是在gamma空间下,没有移除gamma矫正。
(在gamma空间下,可以取消选择 sRGB (Color Texture)采样 )


2.2 线性颜色空间工作流

线性纹理:如果纹理是线性颜色空间下制作,不要使用srgb采样来传递;
gamma纹理:需要更多的调整,后面章节描述。

颜色的转换是隐性的,因为Unity在传入GPU前已经将颜色值转换为浮点数,所以传入时,GPU走动移除gamma矫正,转换为线性空间。

它们传入到shader时,在线性空间进行光照计算。当写入到framebuffer时,可以是gamma也可以是linear,主要取决于当前渲染配置。比如HDR渲染结果就是保留线性空间,之后再做gamma矫正。


2.3 linear和gamma颜色空间的不同

不同的颜色空间代表输入到shader的颜色值不同,所以会有不同的渲染结果。比如灯光照射到的平面会有不同的结果,图形效果也不同。

2.3.1光衰减

基于距离和法向量的光衰减有2个不同:

  • 在linear模式下,在gamma矫正后,光照的半径变大;
  • 光照的边缘也更明显,这样更正确。
2.3.2 线性光强响应

使用gamma时,传入的数据已经是在gamma矫正后了,所以光强增加后,计算出来的结果不是线性增加的。这样就会导致有些地方过于亮,有种被冲洗过的感觉;而linear下可以正确显示:

2.3.3 线性和gamma混合

在gamma工作流下,非线性的颜色混合在一起,这是数学上不正确的,其结果是不可预测的;
线性工作流下可以正确计算:



3 在线性渲染中的gamma纹理

如果你的纹理本来就是线性空间,不要使用srgb采样。


3.1 光照映射

光照的计算是在线性空间下,但是lightmaps是保存在gamma空间的纹理。
所以当修改了颜色空间后要重新烘焙场景,因为要决定是否改变纹理采样方式。

导入Lightmaps的时候,确保设置类型为Texture Type: Lightmap,以确保使用srgb采样转换到linear。


3.2 支持线性的平台


当设备部支持线性的时候,不会回退到gamma,也是会直接退出。所以你可以使用脚本 QualitySettings.activeColorSpace来检查。

在安卓,需要OpenGL ES3.0和安卓4.3;
在IOS,需要Metal图形API;
在WebGL,需要WebGL2.0;


3.3 线性颜色空间和HDR

当使用HDR时,缓冲使用的是浮点数,所以它具有足够的精度,不需要再gamma之间来回转换。所以直到写入最终buffer之前,都是线性空间。


3.4 线性颜色空间和非HDR

只有纹理和framebuffer都支持sRGB,写入时转换gamma,读取时转换为linear,可以保证后期屏幕特效等都是在Linear下进行。



3 利用linear纹理

再次强调,使用Linear纹理,不要使用sRGB采样。


3.1 老GUI

老GUI系统通常使用gamma,所以Texture Type 设置为 Editor GUI 和Legacy GUI不包含gamma移除。


3.2 线性空间纹理

同样重要的是,查找纹理、蒙版和其他具有RGB值的纹理,这些值意味着一些特定的东西,并且在sRGB采样时,不应用gamma校正。
这可以防止采样纹理的值在被用于着色器之前不存在的伽玛校正被删除,使用与存储在磁盘上相同的值进行计算。
Unity假设GUI纹理和法线贴图纹理是在一个线性空间中创建的。

Unity官方图形教程 学习笔记(三) -- 线性工作流相关推荐

  1. Unity官方图形教程 学习笔记(二) -- Precomputed Realtime GI(实时全局光照)

    原文链接:https://unity3d.com/cn/learn/tutorials/s/graphics 1 介绍 当使用Baked GI的时候,会在预计算阶段,离线创建一张lightmap纹理贴 ...

  2. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  3. 【从零开始的大数据学习】Flink官方教程学习笔记(一)

    Flink官方教程学习笔记 学习资源 基础Scala语法 Scala数据结构专题 声明变量 代码块 函数(function) 方法(methods) Traits (接口) class(类) tupl ...

  4. 黑马程序员Java教程学习笔记(三)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...

  5. Unity官方实例教程 Roll-a-Ball(二)

    Roll-a-Ball 游戏 文章转自:http://www.jianshu.com/p/97b630a23234 前言 在Unity官方实例教程 Roll-a-Ball(一)中,我们学会了: 新建一 ...

  6. Linux教程学习笔记

    Linux教程学习笔记 目录 Linux教程学习笔记 写在前面 虚拟机 Linux目录结构 远程登录Linux系统 vi和vim编辑器 关机.重启和用户登录注销 用户管理 实用指令 组管理和权限管理 ...

  7. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  8. 大数据Hadoop教程-学习笔记02【Apache Hadoop、HDFS】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666 [P001-P ...

  9. java学习笔记(三):前端miniUI控件库入门

    java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...

最新文章

  1. 时间序列(五)股票分析
  2. 初探JavaScript(一)——也谈元素节点、属性节点、文本节点
  3. [jQuery]10 Things I Learned from the jQuery Source
  4. ElasticSearch和mongodb的对比
  5. 8004.ros2中添加boost依赖库写法
  6. Swift 简单的通讯录
  7. 考研微机原理是计算机基础吗,2015年电子科技大学微机原理与应用考研复试大纲...
  8. 8086汇编基础 inc 自加一
  9. ubuntu结束进程快捷键_ubuntu快捷键详细版
  10. (4)[Tensorflow]L2正则化和collection【tf.GraphKeys】
  11. 安卓Socket与pc端c#服务器的通信 附完整代码
  12. ora-00600 [25027]
  13. 手机连接电脑服务器未响应怎么解决办法,电脑DNS服务器未响应怎么处理呢?
  14. 粒子滤波 机器学习_用机器学习研究粒子物理学中的开放性问题
  15. 虚拟机三种网络连接方式(桥接、NAT、仅主机、vlan)、Fusioncompute中的网络配置(OVS、DVS)
  16. 关于Android Studio HttpURLconnection使用时报错
  17. CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析
  18. 地理信息系统比较牛的网站(原创)---之可以丰富你的GIS知识
  19. 如何在华为云软件开发云上搭建JavaWeb,Maven项目
  20. 【产品实战-乘风游旅游App】0.0 写在前面

热门文章

  1. 2014.10.9——Jim Foley教授讲座How real is real enough?
  2. Markdown操作之表格操作(插入,单元格内换行,居左、居右、居中)
  3. excel行列突出显示_在Excel中突出显示即将到来的日期
  4. 黑客是如何入侵服务器的,常见的攻击手段有哪些
  5. 2021下半年系统集成项目管理师客观题参考答题解析(3)
  6. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(
  7. showModalDialog传值
  8. 【解决】长虹电视连接不上WiFi
  9. 一个好的PS笔刷(笔触)下载论坛
  10. matlab 场仿真,利用MATLAB软件实现温度场的仿真