10个版本

0.16.0 2024年2月5日
0.15.0 2024年2月5日
0.14.2 2024年8月2日
0.14.1 2024年7月4日
0.12.3 2024年2月7日

#2315 in 游戏开发

Download history 9/week @ 2024-05-02 8/week @ 2024-05-09 3/week @ 2024-05-23 3/week @ 2024-05-30 1050/week @ 2024-06-06 954/week @ 2024-06-13 826/week @ 2024-06-20 1515/week @ 2024-06-27 8767/week @ 2024-07-04 6800/week @ 2024-07-11 8122/week @ 2024-07-18 8758/week @ 2024-07-25 8172/week @ 2024-08-01 8620/week @ 2024-08-08 8839/week @ 2024-08-15

35,349 每月下载量
用于 334 个crate(32个直接使用)

MIT/Apache

1.5MB
27K SLoC

Bevy Color

License Crates.io Downloads Docs Discord


lib.rs:

各种颜色空间中的颜色表示。

此crate提供多种颜色表示,包括

  • Srgba(标准RGBA,带伽马校正)
  • LinearRgba(线性RGBA,不带伽马校正)
  • Hsla(色调、饱和度、亮度、alpha)
  • Hsva(色调、饱和度、值、alpha)
  • Hwba(色调、白度、黑度、alpha)
  • Laba(亮度、a轴、b轴、alpha)
  • Lcha(亮度、色度、色调、alpha)
  • Oklaba(亮度、a轴、b轴、alpha)
  • Oklcha(亮度、色度、色调、alpha)
  • Xyza(x轴、y轴、z轴、alpha)

这些颜色空间都作为独立的Rust类型表示。

颜色空间使用

渲染引擎通常使用线性RGBA颜色,这允许进行物理准确的照明计算。然而,线性RGBA颜色在感知上是不均匀的,因为人类眼睛和计算机显示器对光线的反应都是非线性的。"标准"RGBA代表了一个行业范围内的妥协,旨在以尽可能少的位数编码颜色,使其对人类看起来很好,但不适合照明计算。

大多数图像文件格式和场景图格式都使用标准的RGBA,因为图形设计工具旨在由人类使用。然而,3D光照计算在线性RGBA中操作,因此在将它们发送到GPU之前,将标准颜色转换为线性是非常重要的。大多数Bevy API将自动处理此转换,但如果你正在编写自定义着色器,你需要自己进行此转换。

HSL和LCH是“圆柱形”色彩空间,这意味着它们将颜色表示为色调、饱和度和亮度(或色度)的组合。这些色彩空间对于以艺术方式处理颜色很有用——例如,在创建渐变或调色板时。从红色到紫色的HSL空间渐变将产生彩虹。与HSL相比,LCH色彩空间在感知上更准确,但不太直观。

HSV和HWB在它们的推导中与HSL非常接近,色调的定义相同。HSL使用饱和度和亮度,而HSV使用略微修改的饱和度定义,以及光亮度的类似物。相比之下,HWB使用白色和黑色参数,分别用于加亮和变暗特定色调。

Oklab和Oklch是用于图像处理等任务的感知均匀色彩空间。它们不像其他色彩空间那样广泛使用,但在颜色校正和图像分析等任务中很有用,在这些任务中,能够像更改颜色饱和度而不会引起色调偏移这样的操作很重要。

XYZ是一个常用的基础空间,常用于定义其他更现代的色彩空间。该空间更正式的名称为CIE 1931,其中x和z轴代表一种色度,而y定义了照度级别。

请参阅有关色彩空间的维基百科文章

其他实用工具

该包还提供了一些颜色操作,如混合、颜色差异和颜色范围操作。

此外,还有一个Color枚举,可以表示该包中任何颜色类型。当你需要在无法泛型化颜色类型的数据结构中存储颜色时,这很有用。

物理上或感知上线性的颜色类型还实现了Add<Self>Sub<Self>Mul<f32>Div<f32>,允许你使用它们与样条曲线。

请注意,通常添加或减去颜色可能不是你想要的。请查看其他操作,如混合、加亮或使用例如[Mix]或Luminance混合颜色。

示例

use bevy_color::{Srgba, Hsla};

let srgba = Srgba::new(0.5, 0.2, 0.8, 1.0);
let hsla: Hsla = srgba.into();

println!("Srgba: {:?}", srgba);
println!("Hsla: {:?}", hsla);

依赖项

~8–11MB
~238K SLoC