1

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

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

4

2 回答 2

2

在某些情况下,RGB 值只是 1 字节 (0-255) 值。有许多常用的色彩空间使用多于或少于 1 个字节来表示颜色(例如紧凑的 8 位和 16 位色彩空间,或每通道使用 16 位甚至 32 位的 HDR 色彩空间)。在处理图像和 GL 纹理时,这些不仅仅是理论上的用途。

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

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

float还允许值大约为 1 和低于 0。虽然这些不能反映在最终显示中,但它们在计算过程中发挥作用。如果您按顺序执行许多颜色操作,您不想过早地钳制您的值。

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

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

于 2017-08-05T08:32:20.250 回答
0

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

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

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

于 2017-07-31T13:32:11.643 回答