#light #shadow #bevy #computing #2d #engine #experiment

bevy_magic_light_2d

使用Bevy引擎进行2D阴影、光照和阴影的实验

1个不稳定版本

0.7.0 2024年7月7日

#484游戏开发

Apache-2.0

6MB
2K SLoC

Rust 2K SLoC // 0.0% comments WebGPU Shader Language 372 SLoC // 0.0% comments

[!IMPORTANT]

我不是这个库的原始创建者,这个分支仅用于将其发布到cargo。

Apache许可证允许重新分发,但我不确定关于发布,所以如果您想让我删除它,请与我联系

🔮 魔法光照2D – Bevy引擎的实验性动态2D全局光照系统。

Build status dependency status

Discord (过期请提醒我)

🚧 注意!这个仓库正在大规模建设中,很多东西都可能发生变化。

基于SDF光线追踪和屏幕空间辐照度缓存探测的Bevy的实验性动态2D全局光照系统。

演示

cargo run --example minimal
cargo run --example krypta
cargo run --example movement

Bevy Magic Light 2D – Demo

实现基于几种方法

  • 第一遍计算所有遮挡物的SDF并将其存储在单通道纹理中。
  • 第二遍计算来自直接光线的辐照度。我们检查探测到的光量,考虑遮挡,使用SDF进行检测。每个光源的最终贡献使用平方衰减计算。
  • 第三遍计算二次反弹光线。方法类似于第二遍,但使用来自探测器的辐照度,而不是直接光线。我们使用指数采样来检查反射光有多少被探测器接收。同样,在第二遍中使用SDF来检查遮挡,并使用平方衰减计算最终贡献。
  • 最后,我们将第二遍和第三遍的结果结合起来,结合前八帧的缓存。然后,我们可以选择使用边缘感知平滑滤波器过滤结果并应用伽玛校正。

主要性能提升来自计算1/64像素的值(对于8x8探测器大小)。其余像素从最近的探测器插值。

使用方法

cargo run --example krypta
  • 使用WASD控制相机。
  • 使用鼠标左键放置光源。
  • 使用鼠标右键更改光源颜色。

待办事项

优化

  • 使用跳蛙算法计算SDF。
  • 预计算噪声。
  • 辅助采样进行次级光。

特性

  • 光线可以从遮挡物上弹射。
  • 通过配置实现任意数量的弹射。
  • 处理相机缩放和旋转。
  • 支持多层。
  • 公开设置而不是硬编码它们。
  • 支持目标尺寸调整。
  • 支持透明遮挡物。
  • 支持从遮挡物进行颜色传递。
  • 添加GI设置检查器。
  • 添加对发射材料和其他类型光源的支持。

解决限制

  • 离屏遮挡物的SDF。

其他

  • 添加示例和HUD说明如何使用示例。

许可证

Copyright 2022, 2023 Vladimir Zaytsev <[email protected]>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

依赖项

~38-76MB
~1.5M SLoC