UE5 HLSLTranslator 与 ShaderCompiler

UE 里的材质图不是 GPU 能直接执行的东西。比如你在材质编辑器里连了几个节点:

复制代码
TextureSample
      |
  Multiply ---- VectorParameter(Color)
      |
   BaseColor

GPU 不认识"节点连线"。GPU 最后只能执行 shader 代码,比如 HLSL:

复制代码
float4 Tex = Texture.Sample(Sampler, UV);
float3 BaseColor = Tex.rgb * Color.rgb;

HLSLTranslator 做的事,就是把上面的"节点连线"变成下面的"HLSL 代码"。

它的位置是:

复制代码
材质编辑器节点
        |
        v
HLSLTranslator:把节点翻译成 HLSL
        |
        v
Shader Compiler:把 HLSL 编译成 GPU 字节码
        |
        v
GPU 执行

MaterialExpression 节点:
我表达"我要干什么"

HLSLTranslator:
我把你说的话翻译成 HLSL 代码

ShaderCompiler:
我把 HLSL 编译成 GPU 能执行的机器码 机器码就是对应的编译好的二进制shader数据

Render/RHI:
我在运行时把 shader 绑上去并 draw

GPU:
我真正执行这些 shader 指令

HLSL 源码:人能读的 shader 代码
Shader bytecode:编译好的二进制 shader 数据
RHI shader object:运行时 API 可绑定的 shader 对象
Draw/Dispatch:真正让 GPU 开始执行

Draw -> 一定是 graphics pipeline,提交到 graphics queue
Dispatch -> 一定是 compute pipeline,但不一定是 async compute queue

但 Dispatch 有两种可能:

复制代码
普通 Compute:排在 graphics queue 里执行
Async Compute:排到 async compute queue 里执行
相关推荐
平行云1 天前
建筑BIM/3D可视化轻量级实时评审与分享方案
unity·ue5·3dsmax·实时云渲染·云桌面·云游戏·建筑bim
BugPhysician6 天前
影之刃零首发UE崩溃排查:着色器缓存、虚拟内存与驱动版本
ue5·影之刃零·影之刃零报错·影之刃零进不去·ue崩溃·ue引擎崩溃·ue5引擎崩溃
电子云与长程纠缠7 天前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
fanfan_hongyun8 天前
UE5.1 蓝图调用C++方法
ue5
易知微EasyV数据可视化8 天前
UE5 中接入 GDAL:从vcpkg编译到插件打包
ue5
努力学习的小廉8 天前
UE5入门系列(一):环境搭建.md
ue5
fanfan_hongyun8 天前
【UE5.1 创建C++文件】
c++·ue5
努力学习的小廉8 天前
UE5 入门系列(二):编辑器基础操作速通
ue5·编辑器
Дерек的学习记录9 天前
Unreal Engine 5:开关门实现和流程控制
开发语言·学习·ue5
远离UE410 天前
拉格朗日 动力学问题
ue5·图形渲染·图形学·动力学