5个不稳定版本
0.3.0 | 2024年8月9日 |
---|---|
0.2.2 | 2024年8月5日 |
0.1.1 | 2024年7月23日 |
#155 in 游戏开发
828次每月下载
45KB
981 代码行
bevy_lit
bevy_lit
是一个简单易用的 Bevy 2D 光照库,旨在与单个相机设置无缝配合工作。该库通过以下类型提供基本的光照功能: Lighting2dSettings
、AmbientLight2d
、LightOccluder2d
和 PointLight2d
。
功能
- Lighting2dSettings:控制光照参数,如阴影柔和度
- AmbientLight2d:提供一种照亮整个场景的通用光源。
- PointLight2d:从特定点发射光,模拟灯具或火炬等光源。
- LightOccluder2d:为
PointLight2d
创建阴影并阻挡光线。 - 支持WebGPU和WebGL2目标
入门
安装
您可以将 bevy_lit
添加到您的 Cargo.lock
[dependencies]
bevy_lit = "0.2"
或使用CLI安装
cargo add bevy_lit
演示
cargo run --example basic
使用方法
以下是一个基本示例,演示如何在您的 Bevy 项目中设置和使用 bevy_lit
use bevy::prelude::*;
use bevy_lit::prelude::*;
fn main() {
App::new()
.add_plugins((DefaultPlugins, Lighting2dPlugin))
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn((
Camera2dBundle::default(),
Lighting2dSettings {
shadow_softness: 32.0,
..default()
},
AmbientLight2d {
brightness: 0.2,
color: Color::Srgba(Srgba::hex("#C09AFE").unwrap()),
},
));
commands.spawn(PointLight2dBundle {
point_light: PointLight2d {
color: Color::rgb(1.0, 1.0, 1.0),
intensity: 3.0,
radius: 200.0,
falloff: 2.0,
},
..default()
});
commands.spawn(LightOccluder2dBundle {
light_occluder: LightOccluder2d::new(Vec2::new(50.0, 50.0)),
transform: Transform::from_xyz(0.0, 200.0, 0.0),
..default()
});
}
实现
bevy_lit
使用有符号距离场 (SDF) 来计算遮挡物的距离。为了柔和阴影,应用了模糊效果。这种方法并不理想,可能在性能和视觉精度方面有所限制,但它为基本的 2D 光照效果提供了一个起点。
致谢
这个库受到了其他开发者工作的很大启发。通过阅读以下包的源代码,我学到了很多关于光照和 Bevy 开发的内容:
贡献
欢迎贡献!请打开一个问题或提交一个拉取请求。
许可证
bevy_lit
在 MIT 许可证下授权。有关详细信息,请参阅 LICENSE。
依赖项
~36–74MB
~1.5M SLoC