为什么颜色向量不是由 float4 而不是 int4 或 byte4 组成?



RBG 值是 0-255 个整数,那么为什么选择 float4 作为矢量数据类型呢?

在我看来,字节将是 Fuse 中颜色的理想数据类型。

RGB 值在某些上下文中仅为 1 字节 (0-255( 值。有许多常用的色彩空间使用大于或小于 1 个字节来重复颜色(例如紧凑的 8 位和 16 位色彩空间,或每通道使用 16 位甚至 32 位的 HDR 色彩空间(。 这些不仅仅是理论上的用途,在处理图像和GL纹理时,它们会被使用。

重要的是,对于该通道,其中每个都表示一系列值,从 0(无强度(到 1(全强度(。这就是使用float的原因:它是表示规范化范围的正确语义类型。它也恰好是 OpenGL(Fuse 的默认图形后端(用来表示颜色的东西。

float的优点是作为连续值,不像具有离散增量的byte。这对于插值很重要。考虑两种颜色之间的动画,具有线性渐变,更改不透明度或降低饱和度;所有这些都需要在连续值范围内完成,例如浮点数。

float还允许值大约为 1,并且小于 0。虽然这些不能反映在最终显示中,但它们在计算过程中发挥作用。如果要按顺序执行许多颜色操作,则不希望过早地限制值。

不要担心内存带宽或存储空间等问题。实际存储的颜色值只是占用内存的一小部分。

此外,Fuse 中还支持颜色表示法的常见十六进制语法。您可以使用简单的#FAA表示浅红色,也可以使用#AB74FD80表示更精确的半透明颜色。

首先,我将假设浮点数是指 4 字节值。

  • 四个浮点数占用 4 倍的内存。 这不仅对空间很重要,而且对移动内存所需的时间也很重要,因为内存带宽有限。
  • 您不能使用位掩码运算符并在浮点数上移位(嗯,你可以,但这并不常见(。
  • 大多数显示技术仅限于 16M 颜色,即 24 位 RGB。 即使您拥有 12 位或 16 位/通道显示技术,浮点数仍然占用至少两倍的内存。
  • 并非所有平台都对浮点运算提供本机支持。

我可能会继续前进,但你明白了。

最新更新