2026-07-16 UTC+8

技术选型

渲染验证与引擎落地技术选型

确立 WebGL / WebGPU 双运行时分工:特性库用 WebGL 验证 Feature 函数,实验台用 WebGPU 验证风格化多 Pass 画面;以 Canonical Spec 为契约,经 MCP 分发至 UE 首验落地。

记录 AoifeLab Web 在「网站原型验证 → MCP 自动落地引擎」路径上的技术决策。
首验引擎:Unreal Engine(UE)


1. 总体目标

在网站内完成渲染效果的初步测试与搭建,验证通过后将资产经 MCP(Model Context Protocol) 自动分发到各游戏引擎实现,形成可复用的 TA 研发闭环。

网站验证(低成本、快迭代)
    ↓  Canonical Spec(语言无关契约)
MCP 分发层(Agent 可读、可执行)
    ↓
引擎落地(首验:UE → 后续:Unity / Godot 等)
    ↓
引擎内验证(RenderDoc 抓帧等)

与项目 Framework 材质研发管线一致:渲染特性库 → 算法库 → 原型验证 → UE 集成。


2. 核心原则

原则说明
Spec 为契约每个特性的输入、通道、参数、算法以 Canonical Spec 定义,与 Shader 语言无关
多载体共存同一 Spec 维护 GLSL / WGSL / HLSL 等多种实现载体,服务不同运行时与引擎
验证分级函数级验证(算法对不对)与画面级验证(风格对不对)分开,使用不同 GPU 运行时
UE 优先首条引擎落地链路面向 UE;MCP 与 HLSL 资产优先适配 UE Custom HLSL / Material Function
渐进建设先跑通单特性、单 Pass,再扩展多 Pass RenderGraph 与跨引擎适配

3. 双 GPU 运行时选型

网站内采用 WebGL + WebGPU 双运行时,按验证粒度分工,而非全站二选一。

3.1 WebGL — 特性函数验证(Shader 验证)

适用场景: 渲染特性库(/repo/rendering-feature)中,验证单个特性函数是否正确。

验证问题: 「这个 Feature_XXX 函数算对了吗?」

维度选型
APIWebGL 2.0
Shader 语言GLSL
渲染模式单 Pass(球体 / Box + 简单环境)
交互可编辑代码、实时编译、参数滑条、iChannel 采样
参考实现Three.js ShaderMaterial(或等价 WebGL 封装)

覆盖特性分类:

  • Optical Transport(反射、折射、透射)
  • Surface Layer(薄膜、清漆、各向异性)
  • Micro Structure(闪粉、薄片、视差)
  • Volume Effect(比尔定律、SSS)

与 UE 的关系: 验证的是材质函数级逻辑,对应 UE 侧 Custom HLSL 节点 / Material Function 的算法正确性。浏览器不编译 HLSL,网站运行时统一使用 GLSL。

3.2 WebGPU — 风格化画面验证

适用场景: 实验台(/lab)中,验证风格化效果与多 Pass 合成后的最终画面。

验证问题: 「这个画面风格 / Pass 链路对不对?」

维度选型
APIWebGPU
Shader 语言WGSL
渲染模式多 Pass + 迷你 RenderGraph(类 UE RDG 思维)
交互Pass 图编辑、场景合成、风格参数、全画面 LookDev
架构显式 Bind Group、Render Pass Encoder、Compute Pass

覆盖特性分类:

  • Stylized Feature(猫眼、Noise、Flow 等)
  • 需要多 Pass 的复核场景(如 SSR 链路、FlowMap 全屏驱动)
  • 物理特性在风格化场景中的整体观感复核(如 ThinFilm 肥皂泡场景)

与 UE 的关系: WebGPU 的 Pass 调度与资源绑定方式更接近 UE 现代管线(RDG、显式 Descriptor),适合作为「缩小版渲染管线实验室」,但不替代 UE 本身。

3.3 运行时路由规则

// 概念:按特性分类自动选择预览运行时
function getPreviewRuntime(category: FeatureCategory): "webgl" | "webgpu" {
  if (category === "stylized-feature") return "webgpu"
  return "webgl"
}
页面运行时职责
/repo/rendering-featureWebGL特性函数级 Shader 验证
/repo/algorithm-libraryWebGL(GLSL / ShaderToy 风格)算法函数验证
/labWebGPU风格化画面与多 Pass 验证

3.4 为何不用单一 API

若只选 WebGL若只选 WebGPU
多 Pass / Compute 场景会变得别扭单函数快迭代成本偏高
与 UE RDG 思维差距较大浏览器兼容性需降级策略
足够覆盖函数级验证函数级验证有些过度设计

结论: WebGL 负责「快」,WebGPU 负责「全」与「像 UE」;两者互补。


4. Shader 资产分层

同一特性在不同层使用不同语言载体,共享 Canonical Spec:

Canonical Spec(契约,语言无关)
    ├── glsl    → WebGL 网站预览(渲染特性库)
    ├── wgsl    → WebGPU 网站预览(实验台)
    └── hlsl    → UE MCP 导出(引擎落地)

4.1 函数签名(特性库统一接口)

float3 Feature_<Name>(float3 BaseColor, float3 Normal, float3 ViewDir)

隐式依赖(由宿主材质 / 预览运行时提供):UV、世界空间变换等。

4.2 采样通道

通道语义说明
iChannel0主采样(环境 / 背板)Cube 或 2D
iChannel1辅助数据(如厚度 R)按特性定义
iChannel2辅助数据(如吸收 RGB)按特性定义

通道定义写在 Spec 中;WebGL / WebGPU 各自实现纹理绑定,语义一致。

4.3 验证状态(规划)

将单一的 validated 拆分为两级:

字段含义达成条件
algorithmValidated函数算法验证通过WebGL 预览符合预期
lookdevValidated画面风格验证通过WebGPU 场景复核通过

5. MCP 与引擎落地

5.1 MCP 角色

MCP 是 Agent 与本站资产之间的协议层,不是渲染运行时。

能力说明
检索特性 Spec返回 Canonical Spec JSON
检索参考实现返回 HLSL / 实现说明
引擎实现指导生成 UE 落地步骤与验证清单
引擎 Authoring(规划)写入 HLSL 文件、触发 UE Editor 脚本

站点入口:/tools/mcp/tools/mcp/feature-spec
规划端点:/api/mcp(Streamable HTTP)

5.2 首验引擎:Unreal Engine

UE 集成按侵入程度分档,首验从低到高:

阶段集成方式MCP 自动化难度首验优先级
P0Custom HLSL 节点低(纯文本)✅ 首选
P1Material Function中(Editor API)第二阶段
P2Substrate Slab后期
Custom Shading Model改引擎源码不做首验

首条链路:

网站 Canonical Spec + HLSL 参考
    → MCP get_feature_spec / get_feature_hlsl
    → UE Custom HLSL 文件 + 母材质实例
    → LookDev 场景目视确认
    → RenderDoc MCP 抓帧对比(验证闭环)

5.3 现有 MCP 能力复用

MCP Server用途
本站 MCP(规划)读 Spec、指导 UE 实现
RenderDoc MCP引擎落地后的抓帧分析与 Pass 级验证
Notion MCP文档与知识沉淀(可选)

6. 网站模块与代码映射

模块路径 / 文件当前状态目标状态
特性规格lib/mcp-feature-specs.ts✅ Spec 已有(Transmission)补全各特性 + 双验证状态
HLSL 资产lib/repo-feature-shaders.ts✅ Transmission HLSL逐特性补充
GLSL 资产lib/feature-shader-glsl.ts(待建)WebGL 运行时
WGSL 资产lib/feature-shader-wgsl.ts(待建)WebGPU 运行时
特性库工作区components/repo-library-workspace.tsx状态未贯通共享 shader / params / channels
Shader 面板components/repo-shader-panel.tsx只读展示可编辑 + 编译报错
预览面板components/repo-preview-panel.tsxCSS 占位WebGL Canvas
实验台app/lab/page.tsx占位页WebGPU RenderGraph
Shader 编译lib/shader-compiler.ts(待建)WebGL 编译与 uniform 绑定
通道纹理lib/channel-texture.ts(待建)图片 / 算法 → GPU 纹理

7. 数据流

7.1 WebGL 特性验证流

用户编辑 GLSL 代码
  → debounce → compileShader
  → 成功:球体预览更新 / 失败:显示编译错误

用户拖动参数滑条(来自 Spec)
  → 更新 uniform(无需重新编译)

用户更换采样(图片 / 算法)
  → 重新生成 iChannel 纹理 → 更新 uniform

7.2 WebGPU 风格化验证流

用户配置 Pass Graph(或选择预设场景)
  → 各 Pass WGSL 编译
  → 按依赖顺序执行 RenderPass / ComputePass
  → 输出最终画面

可将 WebGL 已验证特性作为 Graph 中的一个 Pass 输入

7.3 MCP → UE 落地流

特性 algorithmValidated = true
  → Agent 调用 MCP 读取 Spec + HLSL
  → 写入 UE 工程 Content/Shaders/Features/
  → Editor Python 更新母材质参数与节点
  → LookDev 确认 → RenderDoc 复核

8. 实施路线图

阶段内容产出
P0WebGL + 渲染特性库Transmission 可编辑 GLSL、参数、采样、球体实时预览
P1状态贯通 + 编译器repo-library-workspace 统一状态;编译错误展示
P2MCP UE 首验ue-authoring MCP:Spec 读取 + HLSL 部署 + Editor 脚本
P3WebGPU 实验台骨架迷你 RenderGraph + 首个风格化场景(CatEye / Flow)
P4跨管线联动WebGL 验证通过 → 送入 WebGPU 场景复核;双 validated 状态
P5扩展引擎Unity / Godot MCP 适配器

原则: 不等待 WebGPU 完成再启动 WebGL;UE 落地可与网站 WebGL 验证并行推进。


9. 关键决策记录

决策选项结论理由
网站预览 GPU APIWebGL only / WebGPU only / 双运行时双运行时函数验证要快,风格验证要全
特性库运行时WebGL / WebGPUWebGL单 Pass 快迭代,足够验证 Feature 函数
实验台运行时WebGL / WebGPUWebGPU多 Pass、类 RDG,适合风格化 LookDev
网站 Shader 语言HLSL / GLSL / WGSLGLSL + WGSL浏览器可编译;HLSL 仅作 UE 导出
引擎首验UE / Unity / …UE与 HLSL 资产、Framework 管线终点一致
UE 首验集成方式MF / Substrate / Custom HLSLCustom HLSL文本资产,MCP 最易自动化
资产唯一真相源Shader 字符串 / SpecCanonical Spec多语言载体共享契约,MCP 可翻译
当前 CSS 预览保留 / 替换替换为 WebGLCSS 无法做真实 Shader 验证

10. 相关文档


修订记录

日期说明
2026-07-16初版:确立 WebGL/WebGPU 双运行时、UE 首验、Spec 契约与 MCP 落地路线