为什么不对凹凸贴图,法线贴图和位移贴图进行伽玛校正?


9

因此,我试图从相当技术的角度来解决这个问题。

在着色器中添加凹凸贴图,法线贴图或“位移”贴图时,不应对其进行伽玛校正。但是应该是弥散纹理。但为什么?

当您以JPEG,PNG或TIFF等格式将文件保存为8bit(或16bit Integer)格式时,它们的伽马系数为0.4545(1 / 2.2)。因此,相机会捕获来自现实世界的光线(线性)当将照片另存为JPEG时,会添加1 / 2.2的伽玛值,以将信息压缩为8位,然后在监视器上查看图像时再添加2.2的伽玛值,使亮度再次线性化。

因此,当使用漫反射纹理(如照片)时,您需要“去除” 1 / 2.2伽玛以使其线性(称为线性化),因此现在纹理看起来更暗,但是从数学角度来看,这些值是正确的,因此渲染器将进行正确的计算。旁注:该软件使用2.2的显示灰度系数来确保纹理看起来正确,这只是为了内部计算而已将它们线性化。但是,当我在Photoshop中创建凹凸贴图并将其另存为JPG或PNG时,该图像中也会烧入1 / 2.2伽玛,那么为什么也不需要线性化凹凸贴图呢?

如果在3ds Max中以2.2的输入gamma加载凹凸贴图,就像使用“漫反射”纹理一样,则漫反射看起来正确,但凹凸看起来是错误的,因此我必须将凹凸的输入gamma设置为1.0使其看起来正确,但正如我所说:为什么两个图像文件都烧入了1 / 2.2伽玛,对吗?

Answers:


5

照片存储在伽玛空间中的事实与PNG或JPEG无关,而与照片本身有关。

相机检测到50%的强度,但会将其保存为187而不是127,因为当您只有256个不同的可能值时,这对于保留对人眼至关重要的颜色信息更为有效。如果您这样说的话,Photoshop也是如此。

对于法线贴图或位移贴图,您没有此需要,因此没有理由为其使用gamma空间(将gamma用于它们实际上是一个错误,因为这会影响精度分配方式)。因此,当您解码普通纹理或置换纹理时,无需应用伽玛。

但是,如果法线贴图是在不同的空间中编码的(例如对于G-Buffer就是这种情况),那么您必须应用相应的校正。


您如何告诉Photoshop保存上面已经说过的伽玛值的图像:“如果您这样
克里斯托弗·海兰德

这根本无法解释“为什么”。它只是重申了“什么”。
user1118321 '16

@ user1118321:我相信是的。我增加了重点,以使其更加清晰。
朱利安·盖尔托

是的,没错,但这仍然不能真正解释原因。我承认我也有同样的问题,我只是提到这种压缩缺乏好处或伤害。没必要,但是为什么会由于人类的感觉而使图像的数据变得特别,而我们的空间推理在本质上却更加线性(就3D应用而言)
joojaa

3

JPG,PNG或任何其他8位图像格式本质上都没有与1 / 2.2伽玛相关联。它们只存储0-255之间的值。数据的解释方式取决于读取和写入这些文件的软件。有趣的事实是,大多数图像编辑软件默认使用伽玛色彩空间。所有的笔刷,效果,滤镜甚至颜色选择器都在伽玛空间中操作。只需在Photoshop中的拾色器上查看灰色阴影即可。它们不遵循线性分布。

结果是,Photoshop在打开或保存图像时(默认情况下)仅在显示时不进行伽马和线性色彩空间之间的转换。这意味着您可以像编辑照片一样轻松地使用它来创建或编辑高度图之类的线性数据。加载了伽玛校正后,凹凸贴图看起来不正确,因为它没有保存。


这是一个YouTube视频,该视频还解释了图像中的存储值是1 / 2.2(但他简化了它,只是说它是平方根,所以在文本中没有声明。)Computer Color is Broken-MinutePhysics 链接
克里斯托弗·海兰德

@KristofferHelander是的,但他说,只有相机将值存储为平方根,只有显示器才将其平方成平方。然后,诸如Photoshop之类的图像编辑软件仅打开并保存图像而无需进行任何转换,当您尝试混合颜色时,会导致视频中显示出伪像。
Quinchilion

如果我做错了,请纠正我。当我在Photoshop中绘制一个在屏幕上看起来对我来说呈线性的渐变斜坡时,该渐变中的值实际上是线性的。但是Photoshop会添加1 / 2.2的观看伽玛值,因为监视器会添加2.2的伽玛值,因此图像像素值是线性的,而且看起来也呈线性。但是此1 / 2.2伽玛只是Photoshop用于显示图像的观看伽玛,它不会烘焙到图像中,因此无需在3D软件中对图像进行伽玛校正(使用伽玛1.0),因为值已经是线性的了吗?
克里斯托弗·海兰德

@KristofferHelander goo.gl/yqkeUP底部渐变代表物理亮度。如果Photoshop为绘制渐变或显示图像应用了1 / 2.2的灰度系数,则将看到底部渐变。相反,您看到的是最上面的那个,巧合的是看起来是线性的,但不是。它也不适用于查看照片。相机在保存照片时会应用1 / 2.2,然后Photoshop会应用另外的1 / 2.2,但显示屏只会添加2.2的伽玛值一次。那看起来不对。
Quinchilion

如果我在Photoshop中用红色(255,0,0)的一半填充文档,然后用绿色(0,255,0)的另一半填充文档,然后在其上使用高斯模糊,则生成的渐变变为褐色,而不是中间的黄色,如图所示在我发布的视频中 这是为什么?如果图像中的像素是线性的,那么为什么数学搞砸了?我不明白在Photoshop中绘制的置换图是线性的并且可以进行渲染的,但是同时像素的模糊被错误的伽玛搞砸了,颜色变成了暗褐色?
克里斯托弗·海兰德

3

介绍

这取决于您如何创建地图!请考虑以下内容,并让其沉没一段时间,然后再继续操作:

  1. 图像以伽玛校正显示,以使您受益
  2. 数据仍然只是数据。伽马校正是针对显示部分而不是数据部分。

现在,使用绘制应用程序很难绘制凹凸贴图。因为即使线性正确也很难看清。因此,您最终会使用诸如查看值之类的东西。现在这里是要抓住的地方:

  • 如果您确定强度的一半位于128,那么这就是现实。因为那是您编码到数据流中的内容。数据就是您要解释的内容,因为它不适合人眼和显示器使用。谁在乎监视器将什么显示为所有值,以解释如何解释在其中编辑的数据。

制作凹凸/位移图

好的,现在我已经描述了数据取决于解释。但是,为什么将数据解释为线性?因为这样您可以更好地设计侧面轮廓。看到您可以做的就是将画笔的100%不透明度视为要雕刻或分层的目标高度。然后,您可以使用曲线工具来设计图章画笔的形状(因为您认为数据是线性的)。

在此处输入图片说明

图像1:吸盘印章。

现在,如果您执行这样的操作,那么尽管所有人都告诉您,您的图像还是线性的。您已决定放弃另有说明的图像规则。这就是为什么图像是线性的,因此作者选择了它是线性的,因此更易于使用。

在此处输入图片说明

图像2:相同的图像移位并解释为线性(请注意,我将高度略微缩放以适合我的默认bb大小),按预期工作。

从技术上讲,线性更好。

合成地图没有以其他代价为代价来压缩某些值的好处。线性本来就更好,因为这样可以更好地扩展凹凸。这就是为什么您要浪费资源以伽玛校正的方式对其进行编码的原因。

其次,图像无需指定其所在的色彩空间。图像编辑器将假定它是sRGB编码的。您没有理由做同样的解释,没有信息意味着:“没有人愿意写下他们的想法”。因此,也许应该指出这一点,您应该将其标记为线性。但是,麻烦之处在于……您的计算机没有轻松访问的线性配置文件。

Photoshop和Blur呢?

这是棘手的地方。Photoshop会尝试做很多工作,以确保您不需要了解任何有关该材料的知识。这就是您用脚射击的地方。Se Photoshop并非用于纹理制作,而是用于编辑图像而不是随机数据。因此,由于图像上的模糊是线性和非线性的,它无法适应错误的数据。

但是您可以执行以下两项操作之一来解决此问题:

  1. 禁用模糊的伽玛校正
  2. 将您的工作空间设置为线性轮廓

结论

您对此感到困难的原因是

  1. 您不知道其他人的想法,您根本不知道他们是否应该进行伽玛校正。
  2. 您使用将图像视为图像的应用程序

第一点特别令人困惑。我只知道我所有的凹凸贴图和位移贴图实际上都是线性的。但是我不知道你的地图是什么。奇怪的是它们是线性的,因为几乎所有人都认为数据是线性的。即使是不了解伽玛的人,出于某种原因也会因为凹凸而线性地进行伽玛处理(因为它很容易,这就是您所认为的图像,除非有人告诉您)。


谢谢您的投入-哇!:)当我有更多的空闲时间时,我会看看这个。我会尽快回复您,谢谢!
克里斯托弗·海兰德

Even people who do not know about gamma tend to do it linear for bump/displacement for some reason可能是因为生成了这些地图。
塔拉

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.