#wgpu #render #overhead #light #basic #engine #module

forte_engine

一个基本渲染/游戏引擎的核心,设计时考虑了尽量减少开销

7个版本

0.2.3 2024年2月19日
0.2.2 2024年2月19日
0.1.2 2024年1月14日

#413 in 图形API

Download history 12/week @ 2024-03-07 4/week @ 2024-03-14 24/week @ 2024-03-28 22/week @ 2024-04-04

137 每月下载量
用于 forte_cubes

MIT 许可证

180KB
3K SLoC

Forte Engine

一个基本的WGPU渲染引擎,设计时考虑了尽量减少开销。在未来,这将成为其他Forte Engine相关模块的基础。

模块

数学

cgmath的扩展,以简化我们的工作。例如,Quaternion::euler_deg_x(angle: f32)允许我们快速创建绕x轴旋转的欧拉角四元数。

渲染

基本的渲染引擎。它处理从创建应用程序和窗口,到处理输入,再到渲染网格的所有操作。下面是示例。

灯光

此模块处理灯光所需的基本信息。下面是示例。

着色器信息

基本

组0:相机信息

包含相机的信息。

结构体参数

  • view_pos:相机在3D空间中的位置。第四个W值可以设置为着色器所需的任何值。
  • view_proj:用于渲染的组合视图和投影矩阵。
struct CameraUniform {
    view_pos: vec4<f32>,
    view_proj: mat4x4<f32>,
};
@group(0) @binding(0)
var<uniform> camera: CameraUniform;

组1:纹理

用于渲染的纹理。

绑定0:纹理本身。绑定1:将用于根据WGPU规范“采样”纹理的采样器。

@group(1) @binding(0)
var t_diffuse: texture_2d<f32>;
@group(1) @binding(1)
var s_diffuse: sampler;

选项:灯光

组2:灯光

这是场景中灯光所需的基本信息。您可能希望根据灯光与玩家的距离调整传递给着色器的灯光。

结构体参数

  • position:灯光在3D空间中的位置。
  • range:灯光的单位范围。
  • color:灯光的颜色。
  • exponent:用于“软化”灯光边缘的指数。
  • direction:灯光指向的方向,如果设置了截止值,则需要设置此值。
  • 截止值:光线“截止”的点积,这对于聚光灯很有用,因为聚光灯不会在360度内发光。
struct Light {
    position: vec3<f32>,
    range: f32,
    color: vec3<f32>,
    exponent: f32,
    direction: vec3<f32>, 
    cutoff: f32
}
@group(2) @binding(0)
var<storage, read_write> lights: array<Light>;
@group(2) @binding(1)
var<uniform> num_lights: u32;
@group(2) @binding(2)
var<uniform> ambient_light: vec3<f32>;

依赖项

~43–81MB
~1M SLoC