5个不稳定版本

0.3.0 2024年8月9日
0.2.2 2024年8月5日
0.1.1 2024年7月23日

#155 in 游戏开发

Download history 212/week @ 2024-07-22 196/week @ 2024-07-29 382/week @ 2024-08-05 38/week @ 2024-08-12

828次每月下载

MIT许可证

45KB
981 代码行

bevy_lit

bevy_lit 是一个简单易用的 Bevy 2D 光照库,旨在与单个相机设置无缝配合工作。该库通过以下类型提供基本的光照功能: Lighting2dSettingsAmbientLight2dLightOccluder2dPointLight2d

bevy_lit demo

功能

  • 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