Gamma 校正与 Color Space

居然现在才发现~原来我们在计算机里用的颜色一直都是错的~~

参考 Youtube 的视频,很形象的介绍了,一般Gamma 空间使用的颜色,通过混合后,为什么会比真实下的混合要更加暗 https://www.youtube.com/watch?v=LKnqECcg6Gw Unity官方文档关于颜色空间 https://docs.unity3d.com/Manual/LinearRendering-LinearOrGammaWorkflow.html

http://blog.csdn.net/ngrandmarch/article/details/46407017

https://blog.csdn.net/ngrandmarch/article/details/46407017 Unity颜色空间的总结

《UnityShader 入门精要》第18.4 关于伽马校正

1.颜色混合的时候会变黑 原因可以看下图~~

个人测试

在Gamma 空间输出颜色 0.5 中间的面片为 输出 0.5 值的时候

在线性空间下

很明显在线性空间下的面片明显要比 Gamma空间的要亮,这是因为伽马空间下,直接输出 0.5 会被显示器 进行显示Gamma的操作,也就是得到了 pow(0.5,2.2) = 0.22左右的亮度

而在线性空间下,Unity 会自动帮我们进行伽马校正 ( pow(fragColor.rgb,1.0/2.2)) 这就叫伽马校正,即 0.5 最后输出还是 0.5 而不是 0.22

自己在Shader 中进行伽马校正

由于并不是所有的平台都支持伽马校正,所以我们可以通过Shader自己进行Gamma校正,这样的做法在Pbr等基于物理的计算中才会得到正确的值。

//大部分的图片都是经过伽马编码的,先还原它float3 diffuseCol = pow(tex2D(diffTex,texCoord),2.2);
fragColor.rgb = pow(fragColor.rgb,1.0/2.2);return fragColor;

这样就能保证在计算的时候使用的是线性空间下的颜色,但是这样的做法,在混合的时候依然是不正常的,因为这不是一个线性的值 如同Youtube上面说的 $$frac{(sqrt{x}+sqrt{y})}{2} <= frac{sqrt{x+y}}{2}$$

如果要想混合也正常,就只能让所有的Shader 先还原Gamma 保证所有的计算都是正确后,再用屏幕后处理进行一次 编码Gamma

对中间的面片进行了一次 编码Gamma,可以发现得到的颜色和在线性空间上基本是一致的

关于线性空间工作流 1.纹理如果是sRGB(从PS 或者其他制图软件做的时候就需要确定颜色空间) 则读入的时候会进行 伽马矫正 2.如果在 PS 或者其他软件中 颜色空间 是RGBA 即线性空间,则在Unity 中无需选择sRGB,在Shader 读入图片的时候即是正确的值 在gramma空间下,勾选与否无关。 在liner空间下,勾选shader会自动将读到的像素作gramma矫正,即x的0.45次方 不勾选,shader读到的就是原始的颜色值 然后unity如果选了gramma空间,会自动将输出颜色做一个伽马矫正,偏暗,相当于拍照对图片的自动处理。 透明通道的值不会受到伽马编码的影响,勾选与否都不会影响其线性值。值得注意的是ps里必须用这个取色

探讨Texture Import Setting 的sRgb作用

使用renderDoc调试shader实际的值

1.Gamma空间下直接返回0.5

2.linear空间下返回0.5

可以看出贴图格式不同,Gamma下是普通贴图,Linear下是sRgb贴图

读取贴图

贴图在ps 默认的srgb空间下 rgb均为 128的值

1.在gamma空间下读取贴图 分开开启srgb贴图和不开srgb贴图

开启不开启 在gamma空间下不影响~读取的数值,而且贴图的显示和ps中的一样

2.在linear空间下读取贴图 开启srgb贴图

shader 里面读到的值瞬间变成了 0.22,卧槽。。

关闭srgb贴图

这时候虽然读出来是0.5的值,很明显贴图却变量了,和ps不一样

Color颜色值shader

unity里面这个颜色值,在线性空间下~选的0.5居然就是0.21

结论

1.我们在ps中使用的srgb图片,本身我们就一直在使用错的颜色值,也就是0.5看到的实际上是0.2,即使我们输入的还是0.5的值。 2.在Gamma空间中不会做任何矫正,ps做的值 就是shader读到的值 3.在linear空间中,shader中读到的值,如果在ps中是srgb的话,且贴图开启了sRGB格式读到的是 pow2.2后的值得,如上面的0.5会变成0.21。如果没勾选的话则输出为0.5,但是图片变亮 4.结论应该就是 在选了linear模式后,输出frambuffer前 做了一次 pow0.45来抵抗显示器的2.2 5.Gamma切换Linear 最好在项目初期确定好,由于混合效果的不同,对有Alpha通道的UI有一定的影响。也是不可转换的,应该在初期统一ps混合 https://www.cnblogs.com/wbaoqing/p/10448754.html 勾选用 灰度系数混合RGB 颜色

unity透明通道加颜色_关于Unity伽马校正的一点笔记相关推荐

  1. unity透明通道加颜色_树叶透明贴图的制作原理及渲染!

    对于很多刚开始接触渲染模块的同学来说,不知道透明贴图的制作原理,以及如何渲染出好的效果,今天结合案例给大家讲解一下,先打开我们需要的素材,如下图: 在制作之前我们先给树叶一个普通的blinn材质,然后 ...

  2. unity透明通道加颜色_半透明物体的描边和投影

    起因是有人谈到HDRP更新了半透明阴影,然后想了想透明物体在NPR中还是比较常见的,至少我上次就看到有人发了个模型,就因为衣服上的丝绸部分没有加描边,导致看上去完成度很低. 透明物体有丝绸,雨衣(透明 ...

  3. unity透明通道加颜色_Unity SRP 6.透明

    翻译汇总文章: HipHopBoy:Unity SRP 系列翻译汇总​zhuanlan.zhihu.com 原文链接: https://catlikecoding.com/unity/tutorial ...

  4. unity透明通道加颜色_Unity-雪地效果的实现

    最终效果https://www.zhihu.com/video/1217959676639330304 本文使用unity实现雪地效果,主要参考了github上两个已有的demo,将其结合并并增加了一 ...

  5. (二十)unity shader之——————基于物理的渲染技术(PBS):下篇(PBS技术拓展:全局光照、伽马校正、HDR)

    前面两篇文章我们介绍了PBS实现的数学和理论基础,和standard shader的原理和实现,还有一些其他的渲染相关的unity技术.其中有些概念和技术没有讲的很详细,现在对这些重要的概念进行更深入 ...

  6. 关于PNG导入Unity透明通道不显示为黑色的曲线救国方法

    有很多PS导出的PNG图片导入Unity中时,透明通道显示总是会有一些不可预知的问题,大体原因是由于编码的问题. 今日我做的图片导入Unity 中时,透明区域为白色,导致不能用于Shader,在上网查 ...

  7. unity 下一帧执行_理解Unity中的优化(三):协程(Coroutines)

    Coroutines: Coroutines与其他脚本代码的执行方式不同.在性能分析中,大多数的脚本代码只会在Unity的生命周期方法下出现一次.但是协程总是会在两个地方出现. 在性能分析中,Coro ...

  8. unity代码更换ui图片_关于Unity UI的动静图集分离,你需要了解这些!

    这是第101篇UWA技术知识分享的推送!(此处应有掌声)随着大家在UWA平台上的发言愈加活跃,我们也源源不断地收到了许多技术大咖的热心回复和真知灼见. UWA 问答社区:answer.uwa4d.co ...

  9. unity怪物攻击玩家减血_利用Unity协程实现一个简单的怪物寻路与跟随AI

    利用Unity协程实现一个简单的怪物寻路与跟随AI,通过分析怪物行为与逻辑,实现简单的平面怪物寻路与跟随效果. 分析 对于游戏中怪物的行为,简单归纳为如下几部分: 怪物在预设范围内随机移动. 玩家走入 ...

  10. unity中创建游戏场景_在Unity中创建Beat Em Up游戏

    unity中创建游戏场景 Learn how to use Unity to create a 3D Beat Em Up game in this full tutorial from Awesom ...

最新文章

  1. 主题已放宽,科研UP主们速来Bio-protocol破浪吧
  2. Duplicate standby database from active database
  3. mysql和oracle数据库兼容性_oracle数据库兼容mysql的差异写法
  4. IDC商人应不应该给客户提供服务器测试?```
  5. el-table 懒加载不触发合计_Angular-懒加载第三方
  6. python+selenium+Firefox+pycharm版本匹配
  7. Android 系统签名jks文件获取platform.jks
  8. 20个免费网站测试工具
  9. php项目怎么分工,路德维希·冯·贝塔郎菲 Ludwig von Bertalanffy
  10. k8s-学习总结(控制器:RS\Deploy\DS\Job\CJ)
  11. 小程序label添加下划线
  12. 茜在人名可以读xi吗_茜读xi还是qian?
  13. 计算机二级MS office的高频考点~
  14. 一篇文章带你深入理解漏洞之 XXE 漏洞
  15. Autosar MCAL-ICU输入捕获
  16. f460是多少兆的 zxhn_一个大不同的中兴光猫——ZXHN F460
  17. 总后台顶部实现站内信功能
  18. win7文件夹中的图片使用“XX图标”查看模式显示时,无法正常显示图片缩略图
  19. 企业架构框架主流工具比较
  20. 中移动OMS系统展望..

热门文章

  1. C语言如何调用REFPROP软件,coolprop调用refprop计算流体的热力学性质和传输特性
  2. 计算机使用快捷键大全
  3. vue-cli项目中使用Mint-ui中的mt-cell、mt-popup、mt-picker实现仿淘宝添加收货地址页面(地址三级联动 附全国省市区json文档)
  4. 基于人脸识别实现课堂抬头率检测
  5. oracle+基础常用命令,oracle 常用命令(适合菜鸟)
  6. eeprom和编程器固件 k2_斐讯K1K2新版固件v22.4.xx.xx简单刷机教程
  7. mysql 5.5 字符集_MySQL 5.5客户端字符集相关参数
  8. 系统地编译Hi3519过程及其处理问题思路
  9. Oracle form培训资料,Oracle ERP FORM开发学习操作手册
  10. 2022年下半年软考初级程序员备考