Dream Loop
通过概念图保真度循环构建惊艳的 3D 场景。
技能元数据
| 来源 | 可选 — 使用 hermes skills install official/creative/dream-loop 安装 |
| 路径 | optional-skills/creative/dream-loop |
| 版本 | 1.0.0 |
| 作者 | Anshu Chimala(由 Nous Research 改编) |
| 许可证 | MIT |
| 平台 | linux、macos |
| 标签 | 3d、games、webgl、threejs、image-generation、visual-fidelity、creative |
| 相关技能 | p5js、claude-design、manim-video |
参考:完整 SKILL.md
以下是 Hermes 在该技能被触发时加载的完整技能定义。这就是智能体在技能激活时看到的指令内容。
Dream Loop 技能
一个用于打造极其惊艳视觉效果的自主流程,尤其是 3D 场景(游戏、应用,通常是浏览器端的 three.js/WebGL):生成理想结果的照片级概念图,构建它,截取实际构建的画面,让评委按照分级的阶梯标准对截图与概念图进行比较打分,然后迭代直至收敛。目标:在目标平台可接受的帧率下(例如浏览器 60 fps、现代移动端 120 fps)实现最令人惊艳的视觉效果。
本技能不涵盖通用 Web 应用功能、2D UI 设计或非视觉质量 — 仅涉及视觉保真度循环。
何时使用
- 用户说"dream loop",或要求以极高的图形保真度构建游戏/场景/应用。
- 对已有视觉产品进行后续的细化迭代(参见下方的后续循环)。
前提条件
- 概念图:
image_generate工具。如果不可用,请停止并向用户索取概念图(或要连接的生图 API)。 - 截图:
browser_exec— 在本地提供服务(静态构建可用python3 -m http.server),然后new_tab(url)、wait_for_load()、capture_screenshot()。 - 评判:
vision_analyze(每次调用一张图片的变通方法见评委部分)。 - 可选:用 Blender 进行资产建模 — 参见
blender-3d-automation技能。delegate_task用于并行资产工作和全新上下文的评判。
如果你没有完成整个循环所需的工具,请尽早向用户说明并停止。
快速参考
| 阶段 | 发生什么 | 产物(.dream-loop/) |
|---|---|---|
| 1. 目标 | 获取/确认用户的描述 | 备注 |
| 2. 概念 | 生成"引擎内截图"概念图 | concept.png |
| 3. 预算 | 记录时间预算与开始时间(如有给出) | 备注 |
| 4. 构建 | 尽可能一次性实现概念 | 源代码、规划 |
| 5. 截图 | 以概念图分辨率截取实际构建 | round-N.png |
| 6. 自检 | 评判前进行严格的并排审查 | 评估日志 |
| 7. 评判 | 阶梯评分对比,可执行的改进指令 | 裁决日志 |
| 8. 迭代/退出 | 处理指令或按标准退出 | — |
流程
1. 目标概念
如果用户提供了游戏、场景或应用的描述,继续 — 除非太模糊以致无法据此生成概念图,否则不要请求澄清。如果没有提供,就向他们索取。
把工作上下文/文件放在 .dream-loop/ 中并将其加入 gitignore(除非另有说明)。
2. 概念图
概念图是一个写实、高质量、惊艳的目标:当前 3A 游戏实时运行时的观感。物理上可信的材质(湿润的石板、拉丝金属、布料、玻璃),具有真实的粗糙度和法线细节,正确的比例,大气效果(雾、霾、雨、尘埃、体积光),具有明确主光的电影级光照与丰富的阴影。它不应是风格化或艺术化的演绎 — 它应看起来像理想结果的真实截图。
使用 image_generate 生成时要避免以下失败模式:
- 过度堆砌:照片式的杂乱、胶片颗粒、成百上千个独特的小物件、每个表面上过多的细节以致看起来像噪点。用建模资产实时构建出的画面无法与之匹配,而且它本身也不好看。
- 过度简化:卡通或玩具感、平面着色、团块状的基础形体、空洞的表面。无聊;不会让用户印象深刻。
目标是中间地带:着色器能很好渲染的优美表面与材质,强烈的大气与光照,有趣的配色,以及具有精细细节、能吸引目光的重点主角元素(不是每个元素都在争夺注意力)。
提示词中应倾向于"引擎内截图"而非"概念图",并抑制噪点/颗粒感的观感。用 vision_analyze 审查图片;如果出现失败模式,把它以编辑模式传回 image_generate 并要求修复问题。将其保存为 .dream-loop/concept.png。
如果概念图是你生成的(而非用户提供的),暂停并确认它符合用户的设想,然后再开始构建循环。
3. 时间预算
如果用户给出了时间预算,记录开始时间,并在每轮之间查看时钟。不要为了达成预算而降低视觉保真度——力求绝对最佳的结果,也不要为了赶评审而仓促作业。通过并行化或分派工作(例如对独立资产使用 delegate_task)来达成时间目标,但不要走捷径:宁可带着有意义、美观的进展触达时间上限,也不要交出一个大致完成但丑陋的成果。
如果没有给出时间预算,就运行直至满足某个退出条件——但要预先警告这可能会消耗大量 token。
4. 构建循环
查看概念图并一次性实现它,让第一遍就在评分阶梯的每一层级上都下足功夫:构图、纹理、光照、细节。仔细地雕刻和建模资产(或在允许的情况下使用外部资产);除非艺术风格要求如此,不要满足于基础的程序化元素和扁平表面。将中间文件/计划写入 .dream-loop/。
- 如果安装了 Blender 且概念涉及 3D 资产,优先在 Blender 中建模(参见
blender-3d-automation技能)。对于复杂资产,通过delegate_task分派给子智能体。 - 如果用户允许外部资产,除非资产很简单,否则优先使用它们而不是自行建模。如果未指定,则假定不使用任何来自网络的外部资产。
- 不要对关键的环境细节(景物、地面、建筑)偷懒:简单的形状看起来呆板、油亮、扁平且虚假。微小的细节和纹理很重要,需要自定义雕刻。
- 使用
image_generate生成纹理、法线贴图、天空盒等——比程序化的更好看也更快。
5. 截图
服务该构建(例如在构建目录中执行 python3 -m http.server),然后通过 browser_exec:new_tab('http://localhost:8000')、wait_for_load(),等待场景稳定下来,capture_screenshot()。目标分辨率与宽高比要与概念图一致,以便比较是公平的。保存为 .dream-loop/round-N.png。
6. 评审前的自检
每次提交前都要亲自审阅候选截图。不要提交半成品。将截图和概念图并排比较,记录一份诚实的评审就绪度评估;只有确信自己显著提高了分数时才提交。要严格,逐像素审查:大问题(缺失/错误的对象、错误的比例、透视、定位)和小问题(渲染故障、扁平的未贴图表面、丑陋的光照、糟糕的对比度、褪色或过饱和的颜色、斑点、丑陋的阴影)。逐个表面、逐个对象地扫描,并列出发现。
7. 评审
评审最好每轮都由一个带有干净上下文的全新子智能体完成(delegate_task),以保持客观且成本低廉。把最新截图、概念图,以及(从第 2 轮起)上一轮的截图和评审结论交给评审者。
机制:vision_analyze 每次调用只接收一张图像。要么让评审者进行多次顺序调用(概念图,然后截图,再根据自己描述的回忆进行比较),要么——更好的是——用 ImageMagick(convert concept.png shot.png +append compare.png)或 PIL 拼接出一张带标注的并排合成图,然后分析这一张图。
评审提示词:
你是一位艺术总监,正在将一张实时渲染图与其概念图进行对照评审。将截图与概念图比较,并按以下阶梯打分,范围 0-10。该阶梯是有门槛的:在完全满足其下方每一层级的所有要求之前,一帧的得分不能超过该层级的封顶。对门槛要严格。
- 层级 1,形状 (0-3): 相机、取景、构图,以及每个主要对象的位置和大致比例都与概念图相符。这是布局而非完成度:每个主要元素都在场,位于画面的正确区域(在画面宽/高的约 10% 以内),大小大致正确(约 25% 以内)。位置正确且轮廓大致无误即可通过,即便边缘和表面错了;把精度的吹毛求疵留到层级 4。在达标前封顶 3。
- 层级 2,光照与色彩 (3-5): 主光方向和颜色、整体曝光(无欠曝至黑或过曝至白)、阴影深度、色调搭配、对比度、氛围。关注反射、辉光等。确保场景相对于概念图不过亮或过暗。评判整个画面,而非微小细节(层级 4)。在光照/反射/色彩/对比度大致正确前封顶 5。
- 层级 3,材质与表面 (5-7): 每个表面一眼看去都像是正确的材质:纹理、粗糙度、半透明性、湿润感、反射。资产不能看起来是程序化的、呆板的、过于平滑/塑料感的;占据画面主导的元素应当经过恰当的雕刻和细节处理。在达标前封顶 7。
- 层级 4,精细细节 (7-9): 那些小东西。不留情面地挑刺;凑近检查每一个小对象。布局几乎完美对齐;材质极其令人信服。在达标前封顶 9。
- 层级 5,无法区分 (9-10): 并排放置和放大检查都经得起推敲。审查每一个像素。
如果提供了先前的结论和截图:你是序列中的一位评审者,不是第一位。保持一致。首先根据新截图,将每一条先前的指令标为已落实、部分落实或未完成;把任何部分落实或未完成的往回带。除非结果明显变差,不要反转先前的指令——而且如果你这样做了,要说明并给出原因。
输出格式:
- 第一行为分数;第二行为“层级 N”(完全通过的最高门槛)。 1b. 如果提供了先前的结论:已落实/部分落实/未完成清单。
- “阻塞项:”下一层级门槛的具体失败之处。构建者必须先清除这些,其它一切才算数。指出元素和改动,并带上量级:“岩石:将堆叠的卵形巨石替换为一块连续的碎裂石板;裂缝 2-5cm 宽,内部深暗,添加表面纹理,使其不再看上去扁平/塑料感”——而不是“岩石看起来很人工”。
- 然后至多给出 4 条来自更高层级的进一步指令,风格相同,按可挽回的分数排序。
不要给出不可操作的反馈(“这看起来像合成的”)——指出具体原因。每条指令本轮都必须是可操作的。不要抹零进位:如果某一门槛没有完全通过,封顶就保持不变。
8. 退出条件
- 评分 >= 8 且目标 FPS 可接受:完成。向用户展示最新截图;询问他们是否想要更多轮迭代。
- 评分 >= 8 但 FPS 不可接受:进行优化 —— 优先选择无损的优化,其次是与美术效果影响最小的优化。之后重新评判,确认没有回退。
- 即将停滞(最佳评分在 2 轮内未提升整整 1 分,或评审连续 3 次指出同一个差距):停止增量的微调。退一步,思考是“方法”本身的哪里限制了评分。在其中一轮中做一个大的结构性改动:更换资产策略(在 Blender 中雕刻,如果允许的话拉取真实的模型/纹理/HDRI),重写光照模型,重做构图,更换摄像机。要小心自检 —— 大的改动会破坏东西。只有当你能够清楚地说明这次为什么行得通时,才重复参数调优。
- 已停滞(已经尝试过大的结构性改动,评分连续 3 轮持平,评审开始吹毛求疵或提出像在无 GPU 机器上做光线追踪这样难以实现的要求):停下来,告诉用户你被什么卡住了,给出选项。
- 其他情况:本轮解决所有或大多数影响最重的问题,而不仅仅是最大的那一个 —— 轮次很宝贵。优先解决最有推进作用的差距(光照、纹理、网格细节)。只在评分下降整整 1 分或以上时才回退;小幅下降可能只是评审噪声,而回退整轮会把好改动和坏改动一起丢掉。如果某一个改动明显造成了回退,只撤销那个改动。循环。
跟进循环
在已有产品的基础上继续开发(或用户在打磨优化时再次调用该技能)时,不要凭空创建新的概念美术 —— 它可能与已有内容不一致。相反,捕获当前产品的实时截图,并提示 image_generate 渲染出它的最佳可能版本(当前截图 → 同一镜头的 AAA 图形版本),然后以此作为目标。如果有要求,多个屏幕可以并行运行评审循环,代价是更高的 token 消耗。
陷阱
- 过度渲染或过度简化的概念美术(见失败模式)—— 在着手构建之前先修正概念。
- 向评审提交半成品截图;自检关卡的存在是有原因的。
- 截图的相比概念的相比,使用不同的分辨率/宽高比 —— 不公平的对比,会导致混乱的评审结论。
- 当评审说你已经偏离方向时,仍然在增量微调上钻牛角尖。
- 在一次
vision_analyze调用中评判两张图片 —— 它只接收一张图片;要先合成它们。 - 在场景加载/稳定之前截图 —— 在
wait_for_load()之后加一点等待时间,让资产流向传输并使动画预热。
验证
.dream-loop/concept.png存在,并已通过失败模式审查(以及用户确认,若该图是生成的)。- 每一轮都有截图、记录在案的自评,以及包含评分 + 等级 + 指令的评审结论。
- 只通过显式的退出条件退出;最终截图展示给用户,并附带最终评分和 FPS 测量值。
改编自 Anshu Chimala 的 dream-loop(MIT)。上游许可证以 LICENSE.txt 形式捆绑提供。