| 模块 | 核心库 | 描述 |
|---|---|---|
runtime |
- | 核心模块 |
runtime/cgpu |
- | 核心子模块,面向现代 GPU 平台的跨平台 Graphics API |
runtime/sugoi |
- | 核心子模块,真正面向数据驱动编程的 ECS 对象模型 |
runtime/math |
RealtimeMath | 核心子模块, 数学库 |
runtime/io |
- | 核心子模块,同步/异步 I/O 服务 |
runtime/task |
FiberTaskingLib, marl | 核心子模块,基于协程的计算密集任务系统 |
runtime/binary |
- | 核心子模块, 二进制序列化 |
runtime/platform |
- | 核心子模块, 系统接口 |
runtime/resource |
- | 核心子模块, 异步资源管理 |
runtime/type |
- | 核心子模块, 提供 rtti 相关功能 |
runtime/lua |
lua, luau | 核心子模块,使用 lua 作为胶水语言 |
SkrScene |
- | 场景模块,场景资源管理 |
SkrRenderer |
- | 渲染器模块,渲染资源管理,驱动渲染管线 |
SkrImgui |
imgui | 用于调试的运行时UI |
SkrRenderGraph |
- | 基于 CGPU 的 Render Graph |
SkrLive2d |
live2d | Live2d 的渲染后端 |
SkrInputSystem |
gaininput | 输入的上层封装 |
SkrAnim |
ozz-animation | 动画资源管理,动画计算的基础功能 |
devtime/tweak |
- | 提供轻量的常量热更方案 |
devtime/inspect |
- | 提供运行时的变量状态可视化 |
SkrToolCore |
- | 管理并驱动资源烘焙流程 |
SkrAnimTool |
ozz-animation | 导入并烘焙动画相关资源 |
SkrGLTFTool |
cgltf | 导入gltf模型并烘焙 |
SkrTextureCompiler |
ISPCTextureCompressor | 导入并烘焙贴图 |
SkrShaderCompiler |
- | 导入并烘焙材质相关资源 |
codegen |
libtooling, mako-template | 提供代码生成 |
| Platform | CI(Dev) |
|---|---|
| Platform | D3D12 | D3D11 | Vulkan | Metal |
|---|---|---|---|---|
| Windows | ✔️ | ✔️ | N/A | |
| macOS | N/A | N/A | ✔️ | ❗ |
| Platform | PNG | JPEG | BMP | ICO | EXR | TGA |
|---|---|---|---|---|---|---|
| Windows | libpng(v1.5.2) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
| macOS | libpng(v1.5.27) | libjpeg-turbo | ❗ | ❗ | ❗ | ❗ |
基于 ECS 的多人游戏以及服务器。
使用 StateBuffer 的次世代 CGPU 图形接口。摒弃 PSO 的概念,使用 StateBuffer 作为图形管线的状态描述。传统的图形管线 API 往往使用 PSO,其中打包了所有的管线状态以及着色器 ISA,并整体上传到 GPU 上:
StateBuffer 由一系列的 StateChunk 组成,每个 StateChunk 描述了一种图形管线状态,StateBuffer 通过 StateChunk 的组合来描述图形管线的完整状态。比起 PSO 的全量 Flush,StateBuffer 可以在绘制现场准备 StatePacket,在 DrawCall 产生时把状态切换推送到 GPU 的状态寄存器组中。
StateBuffer 可以大幅缓解管线和着色器组合爆炸引起的内存膨胀问题,而 PSO 反而会加剧此问题。
WIP...
GUI 的渲染树 (RenderTree) 层,有排版和渲染 Render Object 的功能。支持基本图元、纹理、颜色刷和文本段落等。
集成 Cubism Native SDK 且使用 Render Graph 进行 Live2D 模型高效绘制的程序示例。
Live2D 模型复合了多种源数据类型,所有数据类型异步地加载和解析。整个模型的加载过程复合了硬盘读取、内存流送到显存、文件解压流送到显存以及直接上传文件到显存。Demo 保证了所有类型的 I/O 操作保持带宽最高效,在此期间发起请求的主线程没有任何停顿与开销。未处理的 Live2D 模型包含了数十个小尺寸 JSON 文件、数个中尺寸模型顶点文件、2张需要解码的 4K PNG 贴图,构成了下图的 I/O 流水线 profile 图表。
Shipping Build 的最终呈现帧数可以轻松地突破数千帧,这是 Cubism 官方示例基准的十数倍。
这个 demo 展示了如何使用 RenderGraph 进行 Deferred 渲染,其中光照计算的部分有 ComputeShdaer 和 PixelShader 两种实现。实际的光照着色效果尚未在 demo 中完成,重点在于验证延迟流程的可行性。这个 demo 同样展示了如何使用自定义 Profiler 对 RenderGraph 的执行细节进行 Profile。
这个 demo 展示了如何使用 RenderGraph 进行三角形渲染。
这个 demo 演示了如何在 CGPU 中使用纹理采样,demo 也演示了怎么在 CGPU 中启用 Static/Immutable Samplers。
我们最终抛弃但曾探索过的成果。抛弃不代表这些技术差或是不可用,而是我们综合考虑后选择性地放弃了它们。
这是一个多后端的三角形绘制 demo。
使用以下命令编译
> xmake l setup.lua
> xmake f -m debug -c
> xmake
Tips:
/build 和 .xmake 文件夹后重试。如进一步出现问题,请务必上报 issues ?xmake f -m debug -c -v 在中断处的详细输出;xrepo remove --all -y 清理错误安装的仓库后再重新构建。推荐使用 vscode + clangd 作为编辑环境,使用命令 xmake project -k compile_commands 来生成 clangd 需要的数据集