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 里执行
相关推荐
directx3d_beginner2 天前
42,将移向指定位置改为c++
ue5
ue星空5 天前
UE5放了playstart显示badsize解决方案
ue5
directx3d_beginner7 天前
41,从UE5.1迁移到UE5.8排坑全记录
ue5
落魄大学生之流水线上谋生计10 天前
BLACK TIDE · 黑潮
ue5
曼巴UE518 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
归真仙人20 天前
【UE项目迁移银河麒麟(Linux)局域网会话搜索失败排查】
ue5·ue4·vr·unreal engine·银河麒麟
fanfan_hongyun22 天前
UE5.1 应用InWebSocketClient-main 接收websocket信息
ue5
远离UE423 天前
Chaos、WFC 与 FJA 原理与区别笔记
ue5
平行云23 天前
3D应用推流太贵太慢?ImmerShare Lite:利用本地算力实现极简一键分享
unity·ue5·实时云渲染·云桌面·像素流·云游戏·串流
fanfan_hongyun24 天前
UE5.1 VaRest插件 读取json http请求
ue5