<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>XR on CloudLake</title><link>https://cloudlake.eu.org/tags/xr/</link><description>Recent content in XR on CloudLake</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://cloudlake.eu.org/tags/xr/index.xml" rel="self" type="application/rss+xml"/><item><title>对着杯子按一下扳机：把生成式 3D 接进 XR 运行时</title><link>https://cloudlake.eu.org/p/xr-generative-3d/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/p/xr-generative-3d/</guid><description>&lt;img src="https://cloudlake.eu.org/p/xr-generative-3d/cover.jpg" alt="Featured image of post 对着杯子按一下扳机：把生成式 3D 接进 XR 运行时" /&gt;&lt;p&gt;举着 Quest，对着桌上的杯子按下扳机。&lt;/p&gt;&#10;&lt;p&gt;几十秒后，一个可以拿在手里转的杯子出现在你面前。&lt;/p&gt;&#10;&lt;p&gt;这就是这个项目要做的事：&lt;strong&gt;把生成式 3D 接进 XR 运行时&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;也正因为&amp;quot;接进&amp;quot;两个字，它比听起来难得多。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="为什么难"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9a%be" class="header-anchor"&gt;&lt;/a&gt;为什么难&#10;&lt;/h2&gt;&lt;p&gt;把 2D 生成接进网页，你只要拿回一张图，塞进一个 image 标签就行。&lt;/p&gt;&#10;&lt;p&gt;但把 3D 生成接进 XR，你要面对三个运行时约束：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;① 材质不能在运行时可靠重建&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;生成式管线经常把材质烘进 shader graph。而在 XR 渲染管线里，&lt;strong&gt;动态加载的 shader graph 无法可靠还原&lt;/strong&gt;——它依赖编辑器期的编译结果。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;② 生成模型的坐标是不可信的&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;自动生成的模型，pivot 位置随机、坐标原点不规则、内部结构千奇百怪。直接拿它的 pivot 去转，你会看到模型一边转一边漂。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;③ 尺度完全不可控&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;有的模型生成出来像指甲盖，有的大得像房子。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;这三个问题都不是&amp;quot;模型生成得不好&amp;quot;——是生成结果和 XR 运行时之间的接口没有对齐。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="系统的三个部分"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e7%9a%84%e4%b8%89%e4%b8%aa%e9%83%a8%e5%88%86" class="header-anchor"&gt;&lt;/a&gt;系统的三个部分&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="系统工作流" class="gallery-image" data-flex-basis="601px" data-flex-grow="250" height="638" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloudlake.eu.org/p/xr-generative-3d/xr-workflow.jpg" srcset="https://cloudlake.eu.org/p/xr-generative-3d/xr-workflow_hu_bbf3a20695dd6a8f.jpg 800w, https://cloudlake.eu.org/p/xr-generative-3d/xr-workflow.jpg 1600w" width="1600"&gt;&lt;/p&gt;&#10;&lt;p&gt;整个系统分三块：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;组件&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;跑在哪&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;职责&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;XR 运行时&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Meta Quest 一体机（Unity）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;透视取景、交互控制、运行时装配与渲染&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;服务端编排&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;轻量控制器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;工作流协调、状态管理、资产路由&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;生成管线&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ComfyUI + Hunyuan3D&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;所有计算密集的生成任务&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;通信走 REST：异步上传、状态轮询、资产拉取。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;整个系统完全在运行时工作&lt;/strong&gt;——不需要任何离线预处理或编辑器期资产准备。这是刻意的：真实部署的 XR 应用就是这么跑的。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="决策一在生成端就把几何和纹理拆开"&gt;&lt;a href="#%e5%86%b3%e7%ad%96%e4%b8%80%e5%9c%a8%e7%94%9f%e6%88%90%e7%ab%af%e5%b0%b1%e6%8a%8a%e5%87%a0%e4%bd%95%e5%92%8c%e7%ba%b9%e7%90%86%e6%8b%86%e5%bc%80" class="header-anchor"&gt;&lt;/a&gt;决策一：在生成端就把几何和纹理拆开&#10;&lt;/h2&gt;&lt;p&gt;这是整个系统最核心的一条。&lt;/p&gt;&#10;&lt;p&gt;常规做法是生成一个&lt;strong&gt;带材质的整体 GLB&lt;/strong&gt;，丢进引擎直接用。&lt;/p&gt;&#10;&lt;p&gt;我们没这么做。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ComfyUI 工作流最后输出两个独立的东西&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一个只含几何的 &lt;strong&gt;GLB 网格&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;一张&lt;strong&gt;纹理图片&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;然后在 XR 运行时里，&lt;strong&gt;显式创建一个原生渲染材质，把纹理绑到对应的输入通道上&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="为什么"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;为什么&#10;&lt;/h3&gt;&lt;p&gt;因为这样&lt;strong&gt;绕过了隐式的 shader 编译机制&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;一旦材质是烘在资产里的，你就把控制权交给了资产生成方。而生成方给的材质，在 XR 运行时里未必能加载、未必能编译、也未必要得。&lt;/p&gt;&#10;&lt;p&gt;拆开之后，材质绑定变成一个&lt;strong&gt;确定性的、你可以完全控制的步骤&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;一句话：&lt;strong&gt;牺牲了&amp;quot;资产自包含&amp;quot;的便利，换来了运行时行为的确定性。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="决策二运行时显式装配"&gt;&lt;a href="#%e5%86%b3%e7%ad%96%e4%ba%8c%e8%bf%90%e8%a1%8c%e6%97%b6%e6%98%be%e5%bc%8f%e8%a3%85%e9%85%8d" class="header-anchor"&gt;&lt;/a&gt;决策二：运行时显式装配&#10;&lt;/h2&gt;&lt;p&gt;生成结果不会直接扔进场景。&lt;/p&gt;&#10;&lt;p&gt;系统走一条&lt;strong&gt;显式装配&lt;/strong&gt;流程：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;收到两个独立资产（GLB + 纹理）&lt;/li&gt;&#10;&lt;li&gt;实例化原生材质、绑定纹理&lt;/li&gt;&#10;&lt;li&gt;挂到转盘锚上（下一节）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;自动归一化&lt;/strong&gt;：用包围盒估算空间尺寸，算出一个统一缩放系数，让模型落进一个预设的&amp;quot;感知尺寸区间&amp;quot;&lt;/li&gt;&#10;&lt;li&gt;挂到更高层的空间根节点，成为可交互的 XR 对象&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;第 4 步解决的就是&amp;quot;有的像指甲盖有的像房子&amp;quot;。&lt;/p&gt;&#10;&lt;p&gt;而且这个归一化是&lt;strong&gt;在运行时算的&lt;/strong&gt;——不需要人工调、不需要离线预处理。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="决策三转盘锚turntable-anchor"&gt;&lt;a href="#%e5%86%b3%e7%ad%96%e4%b8%89%e8%bd%ac%e7%9b%98%e9%94%9aturntable-anchor" class="header-anchor"&gt;&lt;/a&gt;决策三：转盘锚（Turntable Anchor）&#10;&lt;/h2&gt;&lt;p&gt;这是解决&amp;quot;pivot 不可信&amp;quot;的答案。&lt;/p&gt;&#10;&lt;p&gt;思路很干脆：&lt;strong&gt;不去修正模型的 pivot，而是把它挂在一个锚下面。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;模型&lt;strong&gt;自身的局部变换完全不动&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;所有关于&amp;quot;呈现&amp;quot;的变换——旋转、漂浮、缩放——&lt;strong&gt;全部作用在锚上&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;数学上就是：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;最终世界变换 T = T_a ∘ T_m&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;其中 &lt;code&gt;T_m&lt;/code&gt; 是模型的局部变换（不动），&lt;code&gt;T_a&lt;/code&gt; 是锚的变换（动态更新）。&lt;/p&gt;&#10;&lt;h3 id="为什么这比修-pivot好"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%bf%99%e6%af%94%e4%bf%ae-pivot%e5%a5%bd" class="header-anchor"&gt;&lt;/a&gt;为什么这比&amp;quot;修 pivot&amp;quot;好&#10;&lt;/h3&gt;&lt;p&gt;因为&lt;strong&gt;旋转轴只在世界空间里定义&lt;/strong&gt;，与模型内部几何无关。&lt;/p&gt;&#10;&lt;p&gt;于是：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;模型只会&lt;strong&gt;原地震转&lt;/strong&gt;，不会一边转一边漂&lt;/li&gt;&#10;&lt;li&gt;不需要依赖任何几何启发式（比如&amp;quot;用包围盒中心当 pivot&amp;quot;——对不对称模型经常算错）&lt;/li&gt;&#10;&lt;li&gt;缩放、漂浮、透视/虚拟场景切换，全部在锚这一层统一处理&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;与其去猜一个结构不可信的对象&amp;quot;中心在哪&amp;quot;，不如&lt;strong&gt;给它一个外部坐标系&lt;/strong&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="一个很具体的设计问题什么时候该阻塞用户输入"&gt;&lt;a href="#%e4%b8%80%e4%b8%aa%e5%be%88%e5%85%b7%e4%bd%93%e7%9a%84%e8%ae%be%e8%ae%a1%e9%97%ae%e9%a2%98%e4%bb%80%e4%b9%88%e6%97%b6%e5%80%99%e8%af%a5%e9%98%bb%e5%a1%9e%e7%94%a8%e6%88%b7%e8%be%93%e5%85%a5" class="header-anchor"&gt;&lt;/a&gt;一个很具体的设计问题：什么时候该阻塞用户输入&#10;&lt;/h2&gt;&lt;p&gt;这个问题看着小，但处理不好会直接打崩服务端。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;：用户按下扳机触发取景。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：什么时候禁止再次触发？&lt;/p&gt;&#10;&lt;p&gt;如果&lt;strong&gt;等到服务端响应才阻塞&lt;/strong&gt;——那么在这段时间窗口里，用户可以连续触发多次取景。每一次都会向 ComfyUI 发一个新请求，&lt;strong&gt;任务队列直接被压垮&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;更麻烦的是输入抖动&lt;/strong&gt;：一次物理按键，可能产生多个输入事件。这会让系统平白提交好几个重复的生成任务，烧掉大量算力。&lt;/p&gt;&#10;&lt;h3 id="解法"&gt;&lt;a href="#%e8%a7%a3%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;解法&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;在第一个取景命令触发的瞬间就阻塞输入。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;然后在&lt;strong&gt;上传完成并拿到服务端响应&lt;/strong&gt;时释放——包括失败和超时的情况。&lt;/p&gt;&#10;&lt;p&gt;正常流程下这个阻塞窗口很短，用户基本感知不到。而如果生成成功，阻塞会一直保持到整个工作流结束。&lt;/p&gt;&#10;&lt;p&gt;另外还加了&lt;strong&gt;帧缓冲与丢弃机制&lt;/strong&gt;，避免网络延迟导致的错误决策。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;这个例子的价值在于：&lt;strong&gt;它不是一个算法问题，是一个时序问题。&lt;/strong&gt; 而时序问题只能靠想清楚状态机来解决。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="生成管线"&gt;&lt;a href="#%e7%94%9f%e6%88%90%e7%ae%a1%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;生成管线&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="ComfyUI 生成管线" class="gallery-image" data-flex-basis="387px" data-flex-grow="161" height="866" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloudlake.eu.org/p/xr-generative-3d/xr-pipeline.jpg" srcset="https://cloudlake.eu.org/p/xr-generative-3d/xr-pipeline_hu_5d5f4bdfbc747982.jpg 800w, https://cloudlake.eu.org/p/xr-generative-3d/xr-pipeline.jpg 1400w" width="1400"&gt;&lt;/p&gt;&#10;&lt;p&gt;工作流搭在 ComfyUI 里，核心生成模型是 &lt;strong&gt;Hunyuan3D-dit-v2.0&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;几个关键阶段：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;阶段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;做什么&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;输入预处理&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;把透视 ROI 图缩放到固定方形分辨率&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;去背景&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;剥离环境，得到干净的目标&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;几何生成（GenerateMesh）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;图像 → 中间隐表示 → 解码出三维表面&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;网格后处理&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;修整产物&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;去光照（Delighting）&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;把原图的光照信息剥掉，避免&amp;quot;烤&amp;quot;进纹理&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;多视角渲染&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;用于纹理采样&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;多视角纹理采样 + UV 烘焙&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;把各视角的颜色烘到统一 UV 上&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;去光照这一步很容易被忽略，但很关键。&lt;/strong&gt; 如果不去，原图里的阴影和高光会被当成材质的一部分烘进去，模型换个光照就露馅。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="实测结果"&gt;&lt;a href="#%e5%ae%9e%e6%b5%8b%e7%bb%93%e6%9e%9c" class="header-anchor"&gt;&lt;/a&gt;实测结果&#10;&lt;/h2&gt;&lt;p&gt;&lt;img alt="生成结果：正面与背面" class="gallery-image" data-flex-basis="306px" data-flex-grow="127" height="1000" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://cloudlake.eu.org/p/xr-generative-3d/cover.jpg" srcset="https://cloudlake.eu.org/p/xr-generative-3d/cover_hu_9e2df9ef77370fc1.jpg 800w, https://cloudlake.eu.org/p/xr-generative-3d/cover.jpg 1276w" width="1276"&gt;&lt;/p&gt;&#10;&lt;p&gt;系统在 Meta Quest 一体机上完整跑通。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;指标&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;实测&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;端到端延迟&lt;/strong&gt;（取景 → 可视化）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;数十秒&lt;/strong&gt;，取决于管线复杂度和服务端负载&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;连续多次生成&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;稳定，无持久性失败或不可恢复状态&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;失败/超时&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;正确释放输入阻塞、回到 idle，&lt;strong&gt;无需重启应用&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;旋转与漂浮动画&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在不同模型间保持稳定，无轨道运动或漂移&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;XR 交互&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;生成期间取景/上传被门控，但视角操作仍然响应&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="一个诚实的说明"&gt;&lt;a href="#%e4%b8%80%e4%b8%aa%e8%af%9a%e5%ae%9e%e7%9a%84%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;一个诚实的说明&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;这个延迟不满足严格的实时约束。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;近实时&amp;quot;在这里指的是：&lt;strong&gt;通过异步执行和视觉反馈，让用户在等待期间保持参与感&lt;/strong&gt;，而不是&amp;quot;几十秒内出结果&amp;rdquo;。&lt;/p&gt;&#10;&lt;p&gt;这个边界我写进了论文，也写在这里。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="这个项目真正学到的东西"&gt;&lt;a href="#%e8%bf%99%e4%b8%aa%e9%a1%b9%e7%9b%ae%e7%9c%9f%e6%ad%a3%e5%ad%a6%e5%88%b0%e7%9a%84%e4%b8%9c%e8%a5%bf" class="header-anchor"&gt;&lt;/a&gt;这个项目真正学到的东西&#10;&lt;/h2&gt;&lt;p&gt;回头看，最值钱的不是&amp;quot;跑通了 Hunyuan3D&amp;quot;。&lt;/p&gt;&#10;&lt;p&gt;而是这三个判断：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;接口比模型重要。&lt;/strong&gt; 生成质量再好，如果和运行时的接口对不齐，也用不了。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;不可信的东西，给它一个外部参照。&lt;/strong&gt; pivot 不可信就给锚，尺度不可控就归一化。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;先想时序，再写代码。&lt;/strong&gt; 输入阻塞那个问题，想清楚了只有十行代码；没想清楚会让服务端崩溃。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="技术栈"&gt;&lt;a href="#%e6%8a%80%e6%9c%af%e6%a0%88" class="header-anchor"&gt;&lt;/a&gt;技术栈&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Unity&lt;/code&gt; · &lt;code&gt;Meta Quest&lt;/code&gt; · &lt;code&gt;OpenXR&lt;/code&gt; · &lt;code&gt;C#&lt;/code&gt; · &lt;code&gt;ComfyUI&lt;/code&gt; · &lt;code&gt;Hunyuan3D-dit-v2.0&lt;/code&gt; · &lt;code&gt;Python / Flask&lt;/code&gt; · &lt;code&gt;REST 异步编排&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;论文：A System for Near Real-Time Generation and Runtime Visualization of Generative 3D Models in XR Environments（IEEE 会议格式）&lt;/p&gt;&#10;&lt;hr&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;最后一句是我写在论文里的判断：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;这套系统的价值不在于生成得多好，而在于它把一条不可控的生成管线，接上了一个必须可控的运行时。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>