跳转至

最近更新

2024 年 11 月起,大部分内容会写在笔记中,博客仅提供时间线索,方便我回顾过去做的事情。

基于 DX12 实现 ShaderLab

ShaderLab 是对 ID3D12RootSignatureID3D12PipelineState 的封装。每次写完 Shader 就会自动生成 RootSignaturePipelineState,不用再人工填写那一坨参数。

另外,得益于引擎的资产管线,很轻松就实现了 Shader 热重载。

protected override void OnImportAssets(ref AssetImportContext context)
{
    // ...

    Shader shader = context.AddMainAsset<Shader>(normalIcon: FontAwesome6Brands.StripeS);
    CompileShader(ref context, shader, File.ReadAllText(Location.AssetFullPath, Encoding.UTF8));
}

在线性色彩空间使用 ImGui

ImGui 目前所有操作都是用非线性颜色做的,不支持线性色彩空间。1 考虑到透明混合的问题,不能直接对 ImGui 传入 Shader 的颜色去 Gamma 校正,否则 ImGui 显示的颜色和原来不一致,尤其是它的 Color Picker。

Scene View 无限网格

大部分 DCC 都有无限网格,帮助我们确定物体所处的空间位置。我也给自己的引擎加上了这个功能。

ImGui 适配高 DPI 显示器

为了解决高 DPI 显示器下 ImGui 字体模糊的问题,ImGui 提供了 ImGui_ImplWin32_EnableDpiAwareness(),但是我这里调用它以后显示有问题,所以我只能用 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) 自己处理。