游戏与图像处理

Bevy 0.6 发布

Bevy 目前还未稳定,所以版本更新会出现 break change的情况。升级需要看0.5 到 0.6 迁移指南

0.6 版本改进:

  • 一个全新的现代渲染器,更漂亮、更快速、更容易扩展
  • 方向性和点状光影
  • 集群式向前渲染
  • 锥体裁剪剔除
  • 以更少的模板大幅提高精灵的渲染速度
  • 本地WebGL2支持。你可以在你的浏览器中运行Bevy的例子来测试这一点
  • 更方便地自定义材质
  • 更强大的着色器:预处理器、导入、WGSL支持
  • Bevy ECS的人机工程学和性能改进。不再有.system()!
  • 健全性和正确性的改正。

重点摘要:ECS 改进

Bevy ECS 的最优先准则是 人体工程学(ergonomics),即,开发体验要符合人类的习惯。Bevy 开发者们花了大量的精力来做到这一点。

  1. 消除 system 方法调用

这是 0.5 版本增加 System 的示例:

// This is a standalone Bevy 0.5 App that adds a simple `gravity` system to the App's schedule
// and automatically runs it in parallel with other systems
fn main() {
    App::build()
        .add_plugins(DefaultPlugins)
        .add_system(gravity.system())
        .run();
}

fn gravity(time: Res<Time>, mut query: Query<&mut Transform>) {
    for mut transform in query.iter_mut() {
        transform.translation.y += -9.8 * time.delta_seconds();
    }
}

这是0.6的改进,完全去掉了 .system()

// pure bliss!
App::new()
    .add_plugins(DefaultPlugins)
    .add_system(gravity) // 不需要调用 .system()
    .run();
  1. 改进组件trait和增加#[derive(Component)]

在Bevy 0.6中,类型不再默认实现 Component trait。在过去的版本中,通过下面这样一揽子(blanket impl)的实现为所有类型实现了 Compont trait 。

impl<T: Send + Sync + 'static> Component for T {}

但是在对Bevy ECS有深刻理解及对未来计划有很大变化之后,发现这样的设计存在以下问题:

  • 不是所有的东西都应该是组件。新用户不小心将捆绑类型和类型构造器添加为组件是在Bevy Discord上最常见的#help channel threads,这类错误是很难调试的。
  • 如果我们对所有东西都自动实现了Component,我们就不能用相关的类型来定制Component类型。这就阻止了整类的优化。例如,Bevy ECS现在有多种Component存储类型。通过将存储类型移到Component中,我们使rustc能够优化通常需要在运行时进行的检查。
  • 自动注册。将更多的逻辑转移到Component中,也使我们有能力在未来做更多的事情,比如 "在派生Component时自动注册反射"。
  • 其他等,官网查看细节。

现在可以通过派生宏自动实现,也可以手动实现 Component

// defaults to "Table" storage
#[derive(Component)]
struct SomeComponent;

// overrides the default storage
#[derive(Component)]
#[component(storage = "SparseSet")]
struct SomeComponent;

更多细节: https://bevyengine.org/news/bevy-0-6/

vange-rs: 是对一款具有独特玩法和技术创新的传奇游戏Vange的Rust重新实现

该项目是由wgpu-rs作者 kvark 实现的。

技术栈:

该游戏使用wgpu-rs进行图形处理,使用winit进行窗口化。

关卡是在单个全屏绘制调用中绘制的,带有一点光线追踪魔法。还有一个实验性的基于曲面细分的渲染器,但都没有产生足够质量的结果。请参阅渲染技术的专用 wiki 页面

注意:该项目依赖于原版游戏的素材,所以需要你自己在GOG购买该游戏(28元)才能跑,而且不支持 macosx m1。

Bevy 渐变动画插件发布新版本

https://github.com/djeedai/bevy_tweening

Sandbox - 像素物理模拟器

Sandbox 是一个像素物理模拟器,灵感来自Sandspiel和Noita等其他模拟器。

  • 使用Vulkano的 Vulkan 渲染器
  • Gui 与Egui使用egui_winit_vulkano
  • 使用计算着色器进行细胞自动机模拟
  • .png来自图像的可变形像素对象
  • 简单的物理引擎 Rapier

https://github.com/hakolao/sandbox

Paudle: 使用Yew编写的类似Wordle的猜字谜游戏

Paudle是对Josh Wardle的优秀文字游戏Wordle的重新实现。这个版本是用Yew和Rust制作的。作者仿照了Wordle的颜色和布局(当然还有游戏逻辑),但实现都是原创的。 与最初的版本不同,这一版本完全是基于客户端的,因此没有什么可以阻止你作弊——如果你能找出如何从运行的WASM中提取当前单词的话。

关于Wordle:

Wordle 和填字游戏都属于字谜游戏的一种。

这个游戏每天更新一期,玩家唯一目标,就是在六次尝试机会之内,猜出一个五个字母的单词。 为此,游戏界面是一个 5×6 的方块阵列。玩家通过下方键盘输入猜测结果后,游戏会给字母方块标上颜色,提示猜测的准确性:

  • 绿色 🟩:说明答案里有这个字母、所在位置也正确;
  • 黄色 🟨:说明答案里有这个字母、但不在这个位置;
  • 灰色 ⬜️:说明答案里没有这个字母。

然后,玩家根据获得的提示继续尝试,直到猜对答案,或者用尽六次机会。

https://github.com/pmsanford/paudle

劲爆!doukutsu-rs - 洞穴物语完全重制版

https://github.com/doukutsu-rs/doukutsu-rs

Veloren 0.12 发布!

Veloren是一个rust实现的多人像素RPG游戏,Veloren从Cube World、Minecraft这些游戏获取灵感,目前还处在开发阶段,但是已经是可玩的了。

https://github.com/veloren/veloren

godot-rust 0.10 版本发布

godot-rust是一个Rust库,为Godot游戏引擎实现本地绑定。这允许你在Godot中开发游戏或其他应用程序,同时受益于Rust的优势,如其类型系统、可扩展性和性能。

https://github.com/godot-rust/godot-rust