MIT 许可证 NuGet

首页 / 文档

开始使用

十三页,按你将需要它们的顺序排列。这是文档中实操的一半 — 如何构建东西。功能导览是另一半:引擎能做什么,不能做什么。

你不需要启动器、编辑器或资产管线。你需要 .NET 10 SDK、一块近十年的 GPU 和一个文本编辑器。 场景就是一个 C# 类。

最短的完整程序

两个类型就够了。BaseApp 是应用:窗口标题、 分辨率、相机与质量默认值。Panel 是组合单元: 它拥有控件与其他面板。

using Season.Basic;
using Season.Controls;
using Season.Panels;
using Season.Rendering;
using System.Numerics;

namespace Hello;

internal class Scene : Panel
{
    internal Scene()
    {
        AddControl(new Model
        {
            Name = "Assets/island.glb",
            PosX = 0f, PosY = 0f, PosZ = 0f,
            Width = 60f, Height = 12f, Depth = 60f
        });
    }
}

internal class App : BaseApp
{
    internal App()
    {
        Title = "Hello";

        StorageService.DirectoryBase = "Hello";

        BackgroundColor = Colors.White;

        BasicResolution = new Vector2(1920f, 1080f);

        CameraTarget = new Vector3(0f, 3.5f, -2.5f);
        CameraPos = CameraTarget + new Vector3(0f, 0.5f, -3.5f);

        Camera.FovY = MathF.PI / 4f;
        Camera.Near = 0.1f;
        Camera.Far = 1300f;

        // Read once at initialization. Setting it later has no effect.
        RenderQuality.DefaultGlobalIllumination = GiMode.Ddgi;
    }

    public override void Create()
    {
        base.Create();

        AddPanel(new Scene());
    }
}

这是一个被照亮、有阴影、有全局光照、位于物理天空下的场景。其中没有任何内容 去配置光照、阴影、色调映射或抗锯齿,因为那些是管线默认值, 而不是需要你组装的东西。

成员含义
Title窗口与任务栏标题。
StorageService.DirectoryBase一个文件夹名;每个平台将它解析到各自设置与数据的存放位置。
BackgroundColor场景目标的清屏颜色。
BasicResolution你编写 2D 布局时使用的设计分辨率。引擎会将它缩放到真实表面。
CameraPos / CameraTarget左手系视图设置。当 CameraPos.Z < 0 时,相机朝向原点,世界 +X 为屏幕右方。
Camera.FovY / Near / Far投影,可在运行时修改。相同的值不会把矩阵标记为脏。
Create()图形初始化后调用一次。在这里构建面板树,并先调用 base.Create()。
构造函数与 Create 的区别

构造函数在图形初始化之前运行,这就是为什么 RenderQuality.Default* 值必须在那里设置 — 它们会烘焙着色器变体并决定分配大小。任何触碰 GPU 资源的东西,包括控件, 都属于 Create 或更晚的时机。在初始化之后设置 Default* 值不是错误,但什么也不会发生——这是最令人困惑的一种空操作; 如果某个质量设置似乎被忽略了,检查它位于这条线的哪一侧。

开始之前需要知道的四件事

  • 尺寸是绝对值,不是倍数。 Width = 1f 表示一个世界单位宽,无论模型文件里写的是什么。 参见 放置与相机。
  • Model.Rotation 的单位是弧度。写 90 会给你 90 弧度,以及一个看起来几乎正确的模型。
  • 没有需要你编写的 Draw。你更新状态; 管线读取它。参见 帧循环。
  • 资产通过 Resources/Raw/ 下的路径寻址, 在全部六个平台上完全一致。参见 项目布局。

这些页面的组织方式

当文档不够用时

引擎类型上的 XML 文档异常详细:它记录了一个决策是为什么做出的, 而不仅仅是一个成员做什么。本站上好几处犀利的解释都摘自其中。 在 API 仍在变动期间,对 Season/Season.csproj 的项目引用 优于包引用,因为能读到任何让你惊讶的实现细节, 这比一个版本号更有价值。

除此之外,两个示例应用是细节最丰富的文档。 参考应用中的每个面板都是一个完整范例。