BACK TO ARCHIVE
Cinematography

Albedo 与 Pointer's Gamut

ADUCG RESEARCH

Albedo 与 Pointer’s Gamut

引言

如果你直接在 ACEScg 中设置你的 基础颜色(或 漫反射颜色),重要的是要意识到在饱和度和亮度方面应该有一些限制。有人可能会问:漫反射颜色 的合理限制应该是什么?

以下是我的个人答案:Pointer 色域!在我们深入探讨其定义之前,让我们先退一步,好好审视一下 albedo

Albedo 定义

在阅读了第 1 章(关于色彩管理)和第 1.5 章(关于 ACES)之后,你可能会问自己:我该从哪里开始? 如何正确设置所有这些值?有时,我们很难在纹理、灯光或调色之间正确平衡资产的外观开发。例如,在旋转展示中,我们的灯光应该有多强?或者我们的纹理应该有多亮、多饱和?

我个人认为 albedo 颜色是一个“稳定”的参考。 由于 albedo 来源于“现实生活”,将其视为平衡我们资产的合理方式是很自然的。

来自 Substance PBR 指南:表面的可见颜色是由于光源发出的波长。这些波长被物体吸收,并以镜面反射和漫反射两种方式反射。剩余的反射波长就是我们看到的颜色。

130_albedo_0010_apple_wavelengths_FHD

来自 Jeremy Selan:在真实场景中,如果你使用光谱辐射计等工具测量亮度值,可以观察到单个场景中非常广泛的值范围。[…] 非常暗的材料(如木炭)只反射一小部分入射光,通常在 3-5% 的范围内。作为一个单一数值,这种整体反射率被称为“albedo”。

Albedo 与反射

我们刚刚从 SubstanceJeremy Selan 那里得到了两个很好的定义。我认为非常值得停下来思考一下 albedo 到底是什么。因为关于它有很多误解。

来自 Wikipedia:表面反照率定义为 辐射出射度 与表面接收的 辐照度(单位面积通量)之比。[…] albedo 是在给定时间段内所有太阳角度上反射率的方向积分。

关于这个主题的精彩文章:Everything is shiny

所有这些定义告诉我们什么?那就是你在 albedo 值中嵌入了一些镜面/光泽度信息。 这一点非常重要。

让我们以木炭为例。木炭并非纯 朗伯表面,在掠射角下你会得到一些 “镜面”反射。为了在 CG 中进行艺术控制,我们通常将漫反射和镜面反射分开,但在现实生活中它们其实是同一回事。

Thomas Mansencal 的解释。

漫反射颜色还是 Albedo AOV?

在现实生活中,albedo 同时包含 漫反射镜面反射 这是我们需要澄清的第一点。但许多渲染引擎,如 Guerilla Render,简化了这个过程:albedo AOV 就是 漫反射颜色(也称为 基础颜色漫反射)。另一方面,Arnold 似乎做了“真实”的处理:

diffuse_albedo 中的菲涅尔效应是 镜面 IOR 的结果,以及它如何影响漫反射的 albedo 以实现能量守恒。因此,如果没有 镜面反射,diffuse_albedo 上就不会有菲涅尔效应,因为所有能量都在漫反射中。

来自 Arnold 文档

我发现最后这部分特别有趣。我之前提到的关于 albedo 的误解可能就来自这些不同的行为。这对我们下一段内容尤其关键。

现在重要的是要记住,“地面实况”在某种程度上是模糊的:albedo 首先是一种与太阳辐照度相关的测量,当测量时,它包含了反射的漫反射和镜面反射分量。纹理几乎从未在直射阳光下拍摄。地面实况更应该是从光谱上测量表面的 BTF(双向纹理函数),并测量其偏振反射率:一种空间变化的偏振 BRDF(双向反射分布函数)。这将获得几乎完美的表面表示,但这样做你也会失去对它的所有艺术控制。否则,你可以查看 vrscans(VRScans 是非光谱 BTF)或 Quixel Megascans

Thomas Mansencal 关于 albedo 相关挑战的论述。

Albedo 的限制是什么?

如果还不够清楚的话,我明确地将 颜色选择 分为两类:

  • 灯光和自发光表面 -> Rec.2020ACEScg 色域。
  • 非发光表面的 Albedo镜面颜色 -> Pointer 色域

要获得饱和的颜色,光谱分布必须是窄带的。 激光,即一条线,是世界上最饱和的。这与表面恰恰相反,表面是相当平滑的。因此,由于其反射光谱分布的本质,它们不可能极其饱和。

Thomas Mansencal 的另一个解释。

(第 2/4 段)

因此,我们得到两个类别:

  • 使用光源时,光谱变化剧烈,伴有尖峰。
  • 使用自然或人造表面时,光谱非常平滑。

然而,你可能会遇到的问题是,当你用一个窄带光源照射表面时。你会发现自己处于这样一种情况:即使你的表面确实是平滑的,它反射的却是窄带光。因此,你最终可能会得到一个饱和度极高的表面(例如,这在音乐会场景中经常发生)。有时(通常是)结果并不如我们所愿,例如蓝色高光修复

有趣的音乐会例子。非常直观!

最后,我不得不问他关于荧光的问题:

荧光实际上被认为是发射光。因此,它不像非发射表面那样受到限制。荧光只是以不同波长重新发射光。 我们甚至在洗衣业中谈论光学增白剂。

我喜欢当所有的点像这样开始连接起来的时候。

现有解决方案

对于这个问题:我们如何将反照率范围限制在 PBR 范围内? 工作室们提供了不同的答案。以下是我见过的一些解决方案:

  • 一种技术检查,扫描反照率纹理,如果发现超出范围的值,则停止发布。
  • 在着色器中直接设置一个软裁剪限制,以适应任何颜色输入的范围。
  • 对反照率 AOV 进行视觉检查,查看是否存在超出范围的值(这意味着反照率 AOV 设置正确)。

所有这些解决方案都可以。即使大多数时候它们只考虑贴图的亮度。但是饱和度呢?这就是Pointer 色域派上用场的地方!

有趣的是,Thomas Mansencal 早在 2014 年就曾呼吁在 DCC 应用中引入色彩分析工具…

我仅仅晚了六年。

Pointer 色域

我一直在想,是否有关于漫反射颜色/反射和饱和度的研究。直到我发现了Pointer 色域。我的大部分数据来自这篇文章

首先,一个困扰很多人的非常基本的问题。为什么叫Pointer色域?其实很简单!1980 年,一位名叫 Michael Pointer 的科学家收集了 4000 多个参考样本研究它们的颜色,并提出了一个以他命名的色域。

Pointer 色域是(一个近似)人眼可见的真实表面颜色的色域,基于 Michael R. Pointer (1980) 的研究。[…] 这意味着任何材料物体表面能够反射的所有颜色都在 Pointer 色域之内。

这听起来完全像一个合理的解决方案。但是我们应该将Pointer 色域与什么进行比较呢?答案在同一篇文章中给了我们(读一下就知道):

Pointer 色域是为漫反射(哑光表面)定义的。 与漫反射相对的是镜面反射,或类似镜子的反射。通过镜面反射,物体可以反射出 Pointer 色域之外的颜色。

再清楚不过了。真的。

Pointer 色域最初是为柯达公司进行的一项研究,所使用的 4089 个样本列表并未公开。不过,你可以在RIT 网站上找到数据集。

基于 Pointer 色域的技术检查

我们绝对可以考虑开发一个应用程序,允许我们将基础颜色纹理与 Pointer 色域进行比较。一些工作室已经在内部开发了一些解决方案,而对于社区来说,一个开源软件将是非常受欢迎的。

关于这个Pointer 色域检查的一些建议:

  • 重要的是防止大多数情况。
  • Pointer 色域并非详尽无遗,它并不代表所有可能的反射率。
  • Pointer 并没有测量所有实际的表面。他有一个相当有代表性的样本。
  • 我们必须明智地应用所有这些,过滤掉 98% 的有问题的情况。
  • 不应该成为创造力的阻碍,相反,它应该有助于创造力。
  • 这个系统不是为了阻止人们完成工作,而是为了帮助他们更好、更快地完成工作。

Pointer 色域示例值

我将在这里分享一些值,让你大致了解它们是否在 Pointer 色域内。但我们也不要太教条,因为在数字 RGB 场景渲染中,一切都是“错误”的……

色彩空间在 Pointer 色域外在 Pointer 色域内备注
Linear – sRGB(1, 0, 0)(0.9, 0.03, 0.03) – (0.9042, 0.0278, 0.0098)这让我想起了我的可乐罐渲染中使用的值。酷!
Linear – sRGB(0, 1, 0)(0.03, 0.5, 0.03) – (0.4618, 0.8201, 0.4270)sRGB 绿色原色被“修正”以进入 PG。
Linear – sRGB(0, 0, 1)(0, 0.06, 0.6) – (0.0641, 0.0225, 0.5637)sRGB 蓝色原色被“修正”以进入 PG。
Linear – sRGB(0, 0, 0.6)(0.05, 0.05, 0.6)
Linear – sRGB(0, 0, 0)(0.0191, 0.0186, 0.0229)它几乎与木炭参考值匹配(见下图)。太好了!
Linear – sRGB(1, 1, 1)(0.7624, 0.7645, 0.7494)它几乎与新雪参考值匹配(见下图)。太棒了!
ACEScg(1, 0, 0)(0.6552, 0.1353, 0.0494)别忘了 ACEScg 原色在光谱轨迹之外!
ACEScg(0, 1, 0)(0.4985, 0.7630, 0.4471)别忘了 ACEScg 原色在光谱轨迹之外!
ACEScg(0, 0, 1)(0.0527, 0.0246, 0.4228)别忘了 ACEScg 原色在光谱轨迹之外!
ACEScg(1, 1, 0)(0.8473, 0.7838, 0.0741)
ACEScg(0, 1, 1)(0.5891, 0.7720, 0.8745)
ACEScg(1,0,1)(0.5827, 0.1991, 0.6153)

反照率图表及其限制

现在,我们为漫反射有了一个明确的目标。我们可以将其转化为技术检查,甚至是一个反照率图表。

市面上有一些有趣的反照率图表可供参考,甚至来自不同的渲染引擎,比如 UnityUnreal。由于这些值是从真实世界测量值中获得的,它们是很好的指导原则。同样有趣的是,木炭和雪通常是大多数反照率图表中的“极端”例子。

在我看来,没有人像UnitySebastien Lagarde那样深入研究过它们。早在 2013 年,Sebastien 就已经在谈论它们的用途和限制了。

我有时会看到着色器在反照率中使用 0 值。我同意 0 值可以是一种优化,因为没有值或 BSDF 需要计算。但要记住,在 RGB 渲染引擎中,0 值很可能会停止光线路径。

CG 反照率图表

我生成这些图表的过程非常简单。我将ACEScentral 上发布的一个图表Sebastien Lagarde 的一个图表Macbeth 色卡合并成一个。由于这些图表中的大多数都有 0 到 255 之间的 sRGB 值,我使用了这个转换器对它们进行归一化。我还不得不挖掘一下,以找到sRGB 下的 Macbeth 值

(第 3/4 段)

整个过程,类似于此处展示的资产转换过程,可以通过将色卡导入 Nuke 并在查看器中直接拾取值来简化。

130_albedo_0020_albedo_chart_FHD

现在有两张色卡:一张包含 ACEScg 值,另一张包含 Linear – sRGB 值。亮度值来自 Nuke 的查看器。我按照亮度对反照率值进行了排序,因为我认为这样会更方便。色卡本身已保存为 png 文件,并使用了以下“色彩空间”:“Utility – sRGB – Texture”。

你可能需要“谨慎地”使用这些值,因为我们并不确切知道它们是否严格指漫反射率或反照率。根据我对木炭所做的渲染测试,这里有一些更准确的值(与 Unreal Engine 中的值 相符):

漫反射率镜面反射率总反照率
木炭~0.02~0.02~0.04

“新雪”的情况类似。有些图表显示反照率值为 0.9,有些是 0.81。我选择了较低的值,因为我更倾向于制作一个漫反射颜色值图表。这引出了我们的最终问题……

Macbeth 色卡值

Macbeth 色卡的值是漫反射反照率还是总反照率? 很久以前,一位同事使用交叉偏振法拍摄了物品的材质参考照片,当然,Macbeth 色卡具有镜面反射分量。[…] 但也许我们应该将在线 Macbeth 色卡(来自 colour-science)视为漫反射值,而任何参考带有色卡照片的人都需要补偿镜面反射分量?

我无法比 Thomas Mansencal 回答得更好,所以我直接引用他的话。

从测量和单位的角度来看,反照率旨在表示漫反射(太阳辐照度的反射)。问题是,尽管在建模 BRDF 时可以区分它们,但在现实生活中进行测量时确实很难做到。在某种程度上,镜面反射几乎总是漫反射的一个子集,毕竟它也是反射。当测量色卡的反射率时,是在特定的几何条件下进行的,例如 0:45(光线与切面对齐,接收器/传感器在 45 度角),测量的是入射光的总反射。因为光的辐照度是已知的,所以可以推断出表面的反射率。

我自己从未做过任何现实生活中的测量,所以我只是坐着听。以下是最后一部分:

这告诉你的是,没有镜面反射与漫反射的分离,它是全包含的。它还告诉你,如果你期望实现匹配,你应该在渲染引擎中匹配测量几何条件,因为这是唯一可以完全实现匹配的几何条件。

结论

尽管 Pointer 色域已有 40 年历史,但它仍然是着色器中反照率值的有效参考。但我们当然不应该成为它的奴隶,而应将其用作资产间保持一致性的指导原则。和往常一样,这些选择取决于你的艺术方向和工作流程。最近,软件工程师 Björn Ottosson 在推特上谈到了 Pointer 色域,并生成了这两张图片。

130_albedo_0040_reflectance_colors_FHD

展示了最亮和最暗的自然表面反射颜色是什么(使用 sRGB HSV)。如果你正在制作漫反射纹理,大多数时候你希望保持在这个范围内。更亮和更暗的反射颜色在物理上是可能的,但会相当罕见。这是一个很好的合理性检查,而不是严格的限制。此外,荧光色可能看起来更亮。

这种限制纹理值范围的概念可能会引发相当多的争论。但我认为,在做出这些决定时,记住这些概念是有用的。最后,我们用 Thomas 的话来结束:

嗯,一切都是情境相关的,将你的值锚定在现实世界中,作为一个起点,通常是获得更高质量的关键,这在某种程度上是 PBR 的基础。请记住,Pointer 色域仅与反射率有关 […] 。它关乎数字资产创作,特别是着色器和纹理的外观开发,在这些领域,人们往往需要追求物理准确性。[…] 这不是关于图像质量,而是关于物理正确性。像任何工具一样,必须理解其原理才能使用。PBR 验证工具 […] 可以说有助于提高 Lookdev 的一致性和整体图像质量。

(第 4/4 段)

这篇文章一个可能的改进方向是生成两张图表:一张用于漫反射率,另一张用于镜面反射率。这听起来像是未来一个有趣的作业!

本文采用 Creative Commons BY-NC-ND 4.0 协议进行授权。

BY-NC-ND: 署名-非商业性使用-禁止演绎

End of Article