| 模塊 | 核心庫 | 描述 |
|---|---|---|
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 需要的數據集