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

Axmol v3 全面迈向 HLSL-first Shader 工作流


Axmol v3 的跨平台渲染工作流迎来了一次基础性升级:引擎 Shader 已从以 GLSL 为源的旧流程迁移到HLSL-first。开发者现在可以维护一份 HLSL 源码,再由全新的 Axmol 专用 Shader 编译器axslcc 3.99为 D3D11、D3D12、Vulkan、Metal、OpenGL 和 OpenGL ES 生成目标代码与运行时反射信息。

这次迁移并不只是把.vert.frag改写成.hlsl。它同时重新梳理了 Shader 编译、资源反射、顶点输入、采样器和各 RHI 后端之间的契约,让跨平台 Shader 的行为更统一,也让后续渲染功能能够建立在更清晰、可维护的基础之上。

一份 HLSL,覆盖全部 RHI

新的 CMake Shader 流程会根据项目启用的 RHI 自动选择编译目标。顶点、像素与计算 Shader 使用_vs.hlsl_fs.hlsl/_ps.hlsl_cs.hlsl命名,并由axslcc一次生成所需后端的代码包。构建系统还加入了 Shader variant 支持,可为同一份源码组合不同的预处理定义。

Axmol 内置 Shader、3D 渲染、VR,以及 ImGui、Live2D、Spine、Box2D Testbed 和 cpp-tests 中的 Shader 已一并迁移。过去用于 GLSL 转换和生成静态 Shader 信息的旧流程也随之退出。

顶点输入改用语义匹配

旧工作流通常依赖a_positiona_texCoord这样的变量名。HLSL-first 工作流改为使用 HLSL semantic 的名称与索引匹配顶点数据,例如:

struct VSInput { float3 position : POSITION; float2 uv : TEXCOORD0; float4 color : COLOR0; };

变量可以叫positionpos或任何其他名字;真正的绑定契约是POSITION0TEXCOORD0COLOR0。除了引擎内置语义,新的运行时模型也支持自定义 semantic,为扩展渲染路径和实例数据提供了更自然的表达方式。

统一的采样器模型

采样器是这次重构的另一项重点。base.hlsli提供 22 个稳定的内置 preset,包括LinearClampPointWrapAnisoClamp和阴影比较采样器等常用组合:

#include "base.hlsli" Texture2D u_tex0; float4 main(float2 uv : TEXCOORD0) : SV_Target0 { return u_tex0.Sample(LinearClamp, uv); }

如果内置 preset 无法满足需求,也可以声明具名的自定义SamplerState,并在创建Program之前通过SamplerRegistry注册对应状态。Shader 反射记录的是稳定的逻辑绑定,各后端再将其映射为 D3D sampler slot、D3D12 descriptor、Vulkan descriptor set、Metal sampler 或 GL/ES combined sampler。

新的Program校验会在自定义采样器未注册或 Shader 模块编译失败时将程序标记为无效,避免错误悄悄进入绘制阶段。

新的反射与资源绑定契约

axslcc 3.99的 Shader 包和反射 ABI 已针对 Axmol RHI 重新设计。运行时现在可以直接获得:

  • 顶点输入的 semantic 名称、索引与后端位置;
  • texture、sampler、uniform buffer 和 storage resource 的最终绑定信息;
  • 内置 sampler preset 与 Program-local 自定义 sampler 的明确区分;
  • 各目标代码是文本还是原生字节码等必要元数据。

Shader 作者无需手写register(...)。资源按统一规则声明,由编译器分配确定性的逻辑绑定,再由 RHI 完成后端翻译。D3D11、D3D12、Vulkan、Metal 与 OpenGL/ES 的实现均已适配这一模型,其中也包括 Vulkan 的独立 image/sampler descriptor set,以及 D3D12 的 descriptor heap 分配更新。

迁移时需要注意什么

新的 Shader 建议包含base.hlsli,使用 HLSL semantic,并让axslcc自动处理资源绑定。Uniform 与 texture 的名称仍是 C++ 侧查找契约,因此不能随意修改。

OpenGL/ES 最终使用 combined sampler。为了保持所有后端行为一致,同一个 Shader 中不要让同一 texture 同时使用多个 sampler;需要不同采样方式时,应使用不同 texture binding。

UV 的 Y 翻转也不应因为“从 GLSL 迁移到 HLSL”而机械添加。1.0 - uv.y表示数据空间转换,AX_Y_UP()表示后端相关坐标转换,应根据输入数据本身的含义选择。

完整规则、常见问题与迁移指南可参考:

  • HLSL Shader 规范
  • HLSL 常见问题
  • Shaders in Axmol 3

验证情况

本次迁移已使用新的 HLSL Shader 集完成全部 RHI cpp-tests 验证。合并前依赖版本将从候选版切换为正式发布的axslcc 3.99.0

HLSL-first 让 Axmol 的 Shader 源码、编译器反射和多后端运行时第一次建立在同一套清晰契约上。它不仅减少了重复 Shader 与后端特例,也为 Axmol v3 后续的渲染演进打下了更稳固的基础。

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

相关文章:

  • 卡地亚中国官方售后服务中心|完整地址及服务热线权威信息声明(2026年7月最新) - 卡地亚官方售后中心
  • VS Code + MiniMax M2 终端嵌入式开发工作流实战
  • LangGraph——构建有状态多角色LLM编排框架的技术架构与底层原理
  • 技术实战:如何将通义千问生成的Markdown内容无损转换为Word文档
  • Python循环控制:while、break与continue详解与应用
  • Agent2Agent(A2A)协议:构建AI代理语义互操作的标准化通信框架
  • 2026年7月职途加速品牌推荐,职途加速,职途加速品牌客户评价如何 - 品牌推荐师
  • 数据仓库架构演进与分层设计实战解析
  • Android开发环境搭建与优化全指南
  • Nexus Mods App终极指南:开源游戏模组管理神器,三步解决插件兼容性问题
  • 安卓应用安全登录与强制下线实现方案
  • Xamarin跨平台开发技术解析与迁移指南
  • 工业数字化转型的落地逻辑:从产线停机到决策闭环
  • 重庆江诗丹顿回收价格查询和靠谱平台实测排行(2026年7月最新数据) - 收的高名表回收平台
  • 彻底搞懂 MCP 与 Function Call
  • Python基础语句详解:从赋值到控制流
  • 深度剖析:无上限圆管坡口机,究竟哪家厂家才是行业优选?
  • 为什么简单指数平滑(SES)在小样本时间序列预测中更可靠
  • 江诗丹顿中国官方售后服务中心|服务电话及完整官方地址权威信息公告(2026年7月最新) - 江诗丹顿服务中心
  • 网站登录系统设计:安全认证与性能优化实践
  • 不同规模企业如何选择RFID资产管理系统?一份务实的选型参考
  • VM下的Ubuntu 26.04安装过程及出错SMBus Host Controller not enabled解决方法
  • 常州新北区新能源厂用水量大,打井和接自来水管哪个划算?工厂自备水井成本分析 - 瑞溪泉水利
  • 终极AMD处理器调试指南:全面掌握Ryzen SDT硬件性能调优技巧
  • Claude Fable 5提示工程:从步骤控制到目标导向的范式转变
  • AM62L SHA硬件加速器数据输入机制深度解析与实战优化
  • HarmonyOS技术精讲-Connectivity Kit:实战——多屏协同与文件快传应用
  • ChatGPT语音交互优势、配置与实测场景全解析
  • 【新人报道】控制工程研一,来 CSDN 记「控制 + CV」的读研日常
  • 深度解析OpenCore Legacy Patcher:如何让老旧Mac设备运行最新macOS