10个版本
0.16.0 |
|
---|---|
0.15.0 |
|
0.14.2 | 2024年8月2日 |
0.14.1 | 2024年7月4日 |
0.12.3 | 2024年2月7日 |
#2315 in 游戏开发
35,349 每月下载量
用于 334 个crate(32个直接使用)
1.5MB
27K SLoC
Bevy Color
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