博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gamma correction&being linear
阅读量:7252 次
发布时间:2019-06-29

本文共 1194 字,大约阅读时间需要 3 分钟。

  hot3.png

http://cmpmedia.vo.llnwd.net/o1/vault/gdc10/slides/Hable_John_Uncharted2_HDRLighting.pptx

讲gamma的。

wikipedia上讲的很棒:

首先看一下wikipedia上关于gamma的定义:

Gamma correctiongamma nonlinearitygamma encoding, or often simply gamma, is the name of a nonlinear operation used to code and decode  or  in  or systems.

为什么会有gamma?

人的眼睛对亮度的识别并不是线性的,而是呈现一个gamma function,简而言之如果不做gamma correction的话,0到255的亮度值,人眼会对某些部分不敏感(造成一些bit的浪费)对某些部分过于敏感(bit不足,给人以画质低的感觉)

按照bungie给出的数据:

Linear stores information you can’tsee!
  • 5 vs. 6       :     DIFFERENT
  • 205 vs. 206   :     SAME!

所以根据人眼睛的特性,把bit重新分配,把无法分辨的部分捏合,可以分辨的部分加细节,来达到有限bit,最高画质,这就是gamma correction的目的。

这有什么问题么?

问题就是texture在输出的时候也会有gamma correct,这就导致我们实在gamma空间去做光照操作。

而不是linear空间,这个简而言之就会造成数学上的不正确,数学上的不正确倒也不一定意味着不好看,有些时候这种可能是更让人喜欢。

但问题就是数学上不正确,就会失真。

失真的问题很隐晦,就会造成像uncharted2这样的游戏看起来更”电影“,而有些游戏就不是,并且难以调到那个程度:

  • 可能某些场景可以,但是换一个场景又不行了
  • 就是因为数学上不正确的
gamma问题在cg电影(e.g.avatar)里是很小心处理的问题,一定要保证正确的,所以如果游戏要走向”电影感,写实“的话,需要保证在linear空间里去计算光照。

怎么去做到linear空间去做计算:

  • 使用srgb texture sample:这样就保证sample出的texel是linear space的
  • 在中间render target输出的时候这个选择比较自由,关键是清晰的认识自己是在哪一空间,比如一直在linear 空间里,那就一直保持就好,
    • 关键是空间一致
  • 最终frame buffer输出的时候使用D3DRS_SRGBWRITEENABLE,保证回到gamma空间

原文链接:

转载于:https://my.oschina.net/dtec/blog/44621

你可能感兴趣的文章
linux运维笔记
查看>>
Lake Counting (DFS)
查看>>
信息安全影响因素
查看>>
hadoop安装
查看>>
delegate事件委托
查看>>
Linux Process VS Thread VS LWP
查看>>
杭电多校第二场 1005 hack it
查看>>
VMM2012应用指南之9-向VMM中添加VMware ESX Server主机
查看>>
Exchange日常管理之二十二:配置保留策略
查看>>
Android -- Webview自适应屏幕
查看>>
从Delphi 7升级到Delphi XE
查看>>
android圆形图像
查看>>
Oracle数据库备份还原工具之Expdp/IMPdp
查看>>
【转】android JNI编程 一些技巧(整理)
查看>>
MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作
查看>>
各种排序算法汇总
查看>>
C#巧用Excel模版变成把Table打印出来
查看>>
SOAP 及其安全控制--转载
查看>>
JarSearch
查看>>
[Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频...
查看>>