如果您所有的纹理都是像JPEG一样的8位LDR图像,可能不会导致曝光冲突渲染时进行控制/色调映射。就是说,如果您调整图像的渲染曝光度,则应该在纹理中不存在的细节上进行曝光,因为低动态范围会限制细节。因此,在具有16位半浮点数的线性色彩空间中将纹理作为HDR图像保存为.exr也没有意义,以获得良好的颜色表示(32位“全幅”浮点数可能会过大吗?)。我认为,要获得更详细和正确的颜色值,可能还会对GI产生影响,并影响颜色渗出的计算方式?
还是根本没有必要,因为我们想要的渲染的最终结果是可能与以任何方式拍摄时纹理的曝光水平相似?而且由于相机通常以12-14bit的速度拍摄,因此您必须对纹理进行多次曝光,并做所有额外的工作才能将它们全部组合成一个HDRI。
编辑:为澄清起见,我最感兴趣的是从照片逼真的渲染角度来看,使用光线跟踪渲染器(例如mental ray,V-Ray,Arnold等)并具有完整的光线模拟和全局照明,而不是实时游戏引擎。
#1 楼
在电影制作中,由于条带等原因,我们几乎从不对颜色/反照率使用8位纹理。(JPEG尤其成问题,因为按规格,它是sRGB而不是线性值。)我们要么使用“ half”(16位浮点数) )或颜色/反照率纹理的16位无符号整数值。#2 楼
是的,在某些极端情况下,HDR照明和色调映射可能会暴露颜色纹理中的条纹问题。在那些情况下,对于纹理使用更高的位深度可能会很有用。但是,以我的经验,大多数材质和普通照明情况都不会出现此问题,并且典型游戏中的大多数纹理在8位(甚至更少)上都可以,游戏通常使用BC1压缩,从而将其压缩为5 6-5位)。人们使用HDR渲染目标是因为单个场景可以包含非常不同的亮度值,例如在黑暗的房间中,您可以从窗户看到阳光照射的外部10比房间亮100倍。但是,颜色纹理没有这么宽的幅度。它们代表反射率,固有地在[0,1]范围内,实际上,很少有日常材料的反射率低于2%到5%。因此,一个8位图像(具有伽马编码)通常可以以足够的精度表示漫反射和镜面反射的颜色。
确实,很暗的纹理与非常明亮的照明或曝光过度的相机设置相结合可以在最后一帧显示条纹,但这是一种更不寻常的情况。
您可能希望HDR纹理的情况是发光材料,特别是对于霓虹灯和类似光源。纹理的值会增大,在游戏中会显示为明亮的光源,因此在这种情况下,一个8位图像很容易显示出条纹。
最后,如果可能的话,在捕获和创建纹理时以更高的精度(例如16位精度)工作仍然有用,这仅仅是因为它为您提供了更多空间来处理图像而不会引起精度问题。例如,如果您需要调整色阶或色彩平衡,则可能会损失一些精度。从8位源图像开始时,这可能会导致带区(特别是如果您多次进行带区)。 16位源将更能应对此类问题。但是,游戏中使用的最终纹理仍可能会压缩为8位。
评论
$ \ begingroup $
非常暗的纹理与非常明亮的照明或过度曝光的相机设置的结合,可以在最终帧中显示出非常清晰的条纹。但我们可能会注意到,伽玛编码正是为了缓解这一点。如果他有问题,为什么不尝试使用更好的伽玛指数呢?但这会禁止使用硬件sRGB采样器。
$ \ endgroup $
–v.oddou
16年10月10日,0:50
$ \ begingroup $
感谢您的输入。但需要澄清的是,我最感兴趣的是从照片逼真的渲染角度来看,光线追踪渲染器(例如mental ray,V-Ray,Arnold等)具有全光模拟和全局照明,而不是真实的。时间游戏引擎。
$ \ endgroup $
–克里斯托弗·海兰德(Kristoffer Helander)
16年5月10日在7:32
$ \ begingroup $
@KristofferHelander很高兴知道,但是我认为我写的内容可能同样适用于离线渲染。但是我承认我在这方面没有太多直接经验。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年5月10日在7:39
$ \ begingroup $
@NathanReed是的,您肯定在那里提出了一些非常好的观点:)
$ \ endgroup $
–克里斯托弗·海兰德(Kristoffer Helander)
16年5月10日在7:54
#3 楼
如果有时间,我想邀请读者阅读有关Quake 2引擎栅格化技术的详细说明。如果使用TLDR,请注意以下图像:
我们所看到的是Albedo频道,如果我正确理解了您的问题,那就是您要用16位编码的内容。
我不会说“如果可以将其编码为过去游戏有256种颜色,为什么我们在新游戏中需要281474976710656(即281万亿)?”即使我愿意,但听起来像是来自Up的pixar脾气暴躁的家伙。更具建设性的是,如果您在这张图片中指出,一切都处于相同的照明水平。更具体地,保持期望的饱和度的最大可能强度。 (意味着在HSV空间中,V被最大化)
重点是关键,我们几乎不需要任何位,因为反照率始终没有深度来编码。动态来自阴影,在着色器中的每个组件上使用
f32
是有意义的,然后输出到f16
渲染目标。但是将反照率纹理存储在f16
中不仅过分,而且对于我们宝贵的带宽来说,这是严重的不合理性能消耗。评论
$ \ begingroup $
感谢您的输入。但需要澄清的是,我最感兴趣的是从照片逼真的渲染角度来看,光线追踪渲染器(例如mental ray,V-Ray,Arnold等)具有全光模拟和全局照明,而不是真实的。时间游戏引擎。我已经更新了我的原始帖子。
$ \ endgroup $
–克里斯托弗·海兰德(Kristoffer Helander)
16年5月10日在7:33
评论
$ \ begingroup $
哇,谢谢@LarryGritz!考虑到您为Sony Pictures Imageworks工作,我将您视为非常可靠的消息来源! :)但是您如何捕获这些纹理?大多数相机仅以14位RAW文件拍摄,您是否有带有16位线性传感器的特殊相机?还是您对纹理进行多次曝光,就像对基于HDRI成像的照明一样?还是仅使用14位相机RAW捕获并将其保存为“ 16位”?哦,您要使用.tiff(.tx,.tex)或.exr什么文件格式?再次感谢您的输入!! :)
$ \ endgroup $
–克里斯托弗·海兰德(Kristoffer Helander)
16年5月10日在19:27
$ \ begingroup $
@KristofferHelander:通过乘法很容易实现从14位捕获到0-1范围的16位表示的转换。但是我们大多数的纹理都是绘制的,而不是照相的-有时它们直接以16位格式绘制,有时以sRGB绘制,然后在“线性化”时转换为16位以用作纹理。不需要HDR的反照率纹理。
$ \ endgroup $
–拉里·格里兹(Larry Gritz)
16年5月30日在17:31
$ \ begingroup $
@KristofferHelander:对于反照率纹理,我们倾向于将TIFF与16位整数数据一起使用(我们将.tx称为TIFF格式,但将其平铺,并将MIP映射多分辨率存储为TIFF文件中的多个子图像)。对于真正的HDR数据,例如环境捕获,我们使用OpenEXR。渲染器输出也倾向于是OpenEXR。
$ \ endgroup $
–拉里·格里兹(Larry Gritz)
16年5月30日在17:34