
简单来说Color是给“人眼”看的颜色而Linear Color是给“电脑引擎”算的纯粹数据。在虚幻引擎以及所有现代 3D 渲染引擎中区分这两者是非常核心的图形学概念。下面是它们具体的区别1. Color (sRGB 空间) —— 用于“视觉色彩”我们在电脑屏幕上看到的图片或者从网上下载的照片绝大多数都是位于 sRGB 色彩空间的。为什么要这样做因为人眼的生理结构对“暗部”的细节变化极其敏感而对“亮部”的变化不那么敏感。为了节省存储空间图片在保存时会偷偷把暗部的数据“提亮”这个过程叫 Gamma 校正。这样显示器在显示时再压暗正好符合人眼的观感。特点数值不是线性的。比如一张图里 0.5 的中灰色在物理光子数量上并不是 0 和 1 的绝对中间值。使用场景任何直接决定物体表面颜色的贴图。例如漫反射贴图Base Color、自发光贴图Emissive。2. Linear Color (线性空间) —— 用于“数学数据”顾名思义Linear线性意味着它是一根笔直的直线。没有经过任何 Gamma 校正数值是多少就是多少。特点0.5 就是绝对的 50%0.2 就是绝对的 20%。它代表的是纯粹的物理量或数学权重。使用场景任何不代表“颜色”而是代表物体物理属性或数学遮罩的贴图。例如粗糙度Roughness、金属度Metallic、法线贴图Normal、以及你刚才用到的噪波图/扭曲图Noise / Mask。 为什么你刚才选错会报错核心原因如果你把一张用来提供纯粹数学数据的噪波图比如你想让水面扭曲 50%所以画了 0.5 的灰度放到了普通的Color采样器里引擎会怎么想引擎会认为“哦这是一张给人眼看的普通颜色图。由于 Gamma 校正的原理我需要把它的数值转换回真实的物理线性空间再做计算。”引擎会在后台默默做一次数学运算将你的数值求大约 2.2 次方$Output Input^{2.2}$。你的噪波图明明是 0.5 的灰度。引擎把它当Color读取后变成了$0.5^{2.2} \approx 0.218$。结果就是你的数据完全被“压暗”和扭曲了原本你想扭曲 50% 的力度结果只剩下了不到 22% 的力度。这就是为什么引擎强制要求你“既然这是数据图请老老实实选 Linear Color别让我对它做多余的 Gamma 颜色计算。”直观地感受一下同一个像素值被引擎当作Linear Color和当作普通Color读取时最终拿到的数据偏差有多大在虚幻引擎中贴图分为两类看“颜色”的图比如砖块、木头的彩色基础贴图Base Color。它们通常开启了 sRGB伽马校正在材质里对应的采样器必须是Color。读“数据”的图比如你用的噪波图Noise、粗糙度遮罩、金属度遮罩等。这些图纯粹是为了给引擎提供 0 到 1 的数学数据不需要进行颜色的视觉校正因此它们通常会关闭 sRGB处于线性色彩空间。对于这种图材质采样器就必须对应设置为Linear Color。