当前位置: 首页 > news >正文

飘屏的火焰: DirectX 12 + ComputeSharp + Win32 - 行人-

实现原理
 基于 Win32 透明分层窗口 + DirectComposition + ComputeSharp GPU 计算着色器,实现全屏置顶、鼠标穿透的火焰漂浮效果。火焰着色器移植自 anatole duprat (XT95/2013) 的 Shadertoy 作品,采用光线步进(Ray Marching)+ 球体 SDF + 3D 噪声变形,在 GPU 上并行计算每像素颜色,形成橙→蓝渐变、半透明漂浮的火焰

效果:
1

窗口铺满屏幕,背景完全透明,可看到桌面、始终在最前层、点击、移动等操作直接作用于下层窗口、火焰以 3D 球体为基底,经噪声扭曲后呈现有机漂浮形态、光线步进 64 步,内部发光由橙红渐变到蓝色、无火焰处 alpha=0,实现透明背景,与桌面完美融合。

核心流程

  1. 窗口:Win32 分层窗口 + WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST 实现全屏、置顶、鼠标穿透

  2. 渲染管线:CreateSwapChainForComposition + DXGI_ALPHA_MODE_PREMULTIPLIED,将 SwapChain 绑定到 DirectComposition 视觉,实现每像素透明

  3. 绘制:ComputeSharp GPU 计算着色器(FlameShader)在纹理上并行执行:每线程对应一像素,从相机发射光线,光线步进 64 步求交火焰 SDF,累加发光强度,再按高度插值橙→蓝颜色并输出预乘 Alpha;最后 CopyResource 到 SwapChain 后缓冲

  4. 动画:独立渲染线程约 60fps 驱动 OnUpdate,传入 TimeSpan 给着色器,着色器内基于时间驱动噪声偏移,使火焰形态随时间缓慢变化,呈现漂浮感

核心技术点
窗口控制(Win32TransparentApplicationRunner):

// WS_EX_LAYERED + WS_EX_TRANSPARENT:鼠标穿透;WS_EX_TOPMOST:置顶
hwnd = Windows.CreateWindowExW(WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST,windowClassEx.lpszClassName,title,WS.WS_POPUP,windowX, windowY, windowWidth, windowHeight,...);// 分层窗口需调用 SetLayeredWindowAttributes,否则 WS_EX_TRANSPARENT 可能不生效
SetLayeredWindowAttributes((nint)hwnd.Value, 0, 255, LWA_ALPHA);
每像素透明(CreateSwapChainForComposition + DirectComposition):DXGI_SWAP_CHAIN_DESC1 dxgiSwapChainDesc1 = default;
dxgiSwapChainDesc1.AlphaMode = DXGI_ALPHA_MODE.DXGI_ALPHA_MODE_PREMULTIPLIED;  // 预乘 Alpha
dxgiSwapChainDesc1.BufferCount = 2;
dxgiSwapChainDesc1.Format = DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM;
// ...CreateSwapChainForComposition(...);  // 无窗口句柄,用于 DComp 合成// 将 SwapChain 设置为 DComp 视觉的内容
dcompVisual->SetContent((IUnknown*)dxgiSwapChain1.Get());
dcompTarget->SetRoot(dcompVisual.Get());
dcompDevice->Commit();ComputeSharp 火焰着色器(FlameShader)核心结构:[ThreadGroupSize(DefaultThreadGroupSizes.XY)]
[GeneratedComputeShaderDescriptor]
internal readonly partial struct FlameShader(float time) : IComputeShader<float4>
{public float4 Execute(){float2 resolution = (float2)DispatchSize.XY;float aspect = resolution.X / resolution.Y;float2 v = -1f + 2f * (float2)ThreadIds.XY / resolution;v.X *= aspect;float3 org = new float3(0f, -2f, 4f);float3 dir = Hlsl.Normalize(new float3(v.X * 1.6f, -v.Y, -1.5f));Float4 p = Raymarch(org, dir, time);float glow = p.W;Float3 colLow = new Float3(1f, 0.5f, 0.1f);   // 橙Float3 colHigh = new Float3(0.1f, 0.5f, 1f); // 蓝Float3 col = (Float3)(Hlsl.Lerp(colLow, colHigh, p.Y * 0.02f + 0.4f));col = (Float3)(Hlsl.Clamp((float3)col, 0f, 1f));float alpha = Hlsl.Pow(glow * 2f, 4f);return new float4(col.X * alpha, col.Y * alpha, col.Z * alpha, alpha);}
}

渲染循环(60fps 独立线程):

renderThread = new Thread(static args => {const long targetFrameTimeInTicksFor60fps = 166666;while (!token.IsCancellationRequested){if (frameStopwatch.ElapsedTicks >= targetFrameTimeInTicksFor60fps){frameStopwatch.Restart();app.OnUpdate(startStopwatch.Elapsed);}}
});

D3D12 资源拷贝与 Present:

// 着色器输出 -> SwapChain 后缓冲
d3D12GraphicsCommandList->ResourceBarrier(...);  // UAV -> COPY_SOURCE, BACK_BUFFER -> COPY_DEST
d3D12GraphicsCommandList->CopyResource(d3D12ResourceBackBuffer, d3D12Resource.Get());
d3D12GraphicsCommandList->ResourceBarrier(...);  // 恢复状态
d3D12CommandQueue->ExecuteCommandLists(...);
dxgiSwapChain1->Present(0, 0);

键盘退出(ESC / Q):

case WM.WM_KEYUP:if (msg.wParam == VK_ESCAPE || msg.wParam == 'Q')DestroyWindow(hwnd);

技术栈与依赖

框架 :.NET 8 + Win32

渲染 :ComputeSharp GPU 计算着色器 + D3D12(光线步进 + 球体 SDF + 3D 噪声)

透明 :CreateSwapChainForComposition + DXGI_ALPHA_MODE_PREMULTIPLIED + DirectComposition

穿透 :Win32 WS_EX_LAYERED | WS_EX_TRANSPARENT

置顶 :Win32 WS_EX_TOPMOST

依赖 :ComputeSharp、ComputeSharp.Core、TerraFX.Interop.Windows

参考 :Shadertoy、Cursor

程序目录如下:
image

真是太漂亮了 :
1

http://www.jsqmd.com/news/429199/

相关文章:

  • 2026装修不踩坑!专业全案装修公司优选指南 - 品牌测评鉴赏家
  • 2026年国冠锻造:精工锻造、一体化制造,服务近三百家伙伴 - 速递信息
  • 装修小白必看!全案装修公司前十实力大揭秘 - 品牌测评鉴赏家
  • 新工业革命:Creo综合建模与3D打印【1.6】
  • 卫生间隔断常见问题解答(2026最新专家版) - 速递信息
  • 供应链六大流详解:物流、信息流、资金流、商流、技术流、数据流
  • 2026年测量仪行业佼佼者:这些企业值得您关注,分析仪/摩擦系数仪/测试仪/扭矩仪/测量仪/检测仪,测量仪公司排行榜 - 品牌推荐师
  • 大模型智能体搭建完全指南:收藏这篇少走一年弯路
  • Solutions - NOISG 2020 重现赛
  • P10789 [NOI2024] 登山 题解
  • Z型斗提机市场新动态,2026年热门厂家一览,无尘投料站/超声波振动筛/不锈钢筛网/试验筛,Z型斗提机直销厂家排行 - 品牌推荐师
  • 打印5行三角形
  • 2026现代装修全案公司排名|实测干货,小白抄作业不踩坑 - 品牌测评鉴赏家
  • 探寻2026江苏口碑好的走心机培训职业学校,看这里,PLC培训/电工培训/Mastercam培训,走心机培训学校口碑排行 - 品牌推荐师
  • 数据库服务存储引擎
  • 【必藏干货】大模型落地的三大技术支柱:蒸馏、RAG、微调全解析
  • 2026卫生间隔断行业推荐报告:从功能到价值的健康解决方案服务商选择指南 - 速递信息
  • 装修全案设计哪家放心?博主实测避坑,小白直接抄作业 - 品牌测评鉴赏家
  • 装修不踩坑!5家中档全案宝藏公司大揭秘 - 品牌测评鉴赏家
  • 2026国内二轮滚丝机,看看哪些厂家口碑好,滚丝机 /数控滚丝机/滚牙机 /三轮滚丝机 ,二轮滚丝机厂家口碑推荐 - 品牌推荐师
  • 生产二极管的工厂怎么选?2026年最新选购指南 - 速递信息
  • 2026优质郭氏正骨大排行,这些地方值得一去,郭氏正骨,郭氏正骨实力厂家推荐 - 品牌推荐师
  • 2026年北京珠宝回收服务商选型指南:专业机构哪家强?怎么选最靠谱? - 速递信息
  • 2026成都全案装修公司排名|实测避坑,刚需/改善/高端全覆盖 - 品牌测评鉴赏家
  • 2026卫生间隔断行业趋势报告:三大核心驱动力重塑未来 - 速递信息
  • 【建议收藏】工作流vs智能体:程序员必知的AI技术选择指南
  • gy
  • 收藏!大模型入门必学:从小白到精通的AI核心术语全解析,附实用避坑指南
  • 废气处理设备怎么选?2026年优质厂家联系方式在此,光伏行业树脂/8040反渗透膜,废气处理设备实力厂家推荐榜 - 品牌推荐师
  • 终于搞懂了板子上电后发生了什么