blender-image-to-3d
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseBlender image to 3D
Blender 图片转 3D
Turn one or more reference images into a delivered game asset by moving through gated phases.
Every gate is passed with rendered evidence compared to the reference from the same camera and
at gameplay pixel size, never by looking at the viewport and deciding it seems fine. Most wasted
work in this pipeline is detail added on top of wrong proportions, so nothing gets detail until
its silhouette passes.
"Perfect" here has a definition: the acceptance checklist in
passes, the compare sheets show no measured deviation
above the phase tolerance, and every dimension or side that the reference did not show is listed
as inferred. Say so when a single image forces inference; do not present a guessed back as fact.
references/delivery-and-acceptance.md通过一系列带门禁的阶段,将一张或多张参考图转化为已交付的游戏资产。
每个门禁都必须以证据通过:从同一相机、以游戏内像素尺寸渲染并与参考图进行比较;绝不能仅凭查看视口就认定没问题。此流程中最浪费的工作,是在错误比例之上继续添加细节,因此在轮廓检查通过之前不会添加任何细节。
这里的“完美”有明确定义:
中的验收清单全部通过,对比表中不存在超过阶段容差的实测偏差,并且参考图未展示的每个尺寸或侧面都被列为推断项。当单张图迫使我们进行推断时应明确说明;不要把猜测的背面当作事实呈现。
references/delivery-and-acceptance.mdRuntime
运行环境
- Blender 4.2 or newer (used through 5.2), run headless: . Blender 5.x changed several APIs these builds touch;
blender --background --python <script> -- <args>lists them with runtime, baking and review lessons. Resolve the binary once:references/blender-5-notes.md, then$BLENDER_BINon PATH, thenblender. Workbench renders need no GPU on macOS or Windows; on a headless Linux box without a GPU, pass/Applications/Blender.app/Contents/MacOS/Blenderto review_render.py.--engine cycles - A live Blender session through an MCP server (execute-Python tool) is optional and useful for
inspection. Even then, build through the numbered scripts and save the same master file, so the
build stays reproducible. In a live session, a script and call its functions instead of the command line.
exec(open(path).read()) - All modelling is written as bpy code in , copied from
<asset>/build/NN_<phase>.py. Each script opens the master, deletes what it owns, rebuilds it, saves. Rerunning any phase is safe. Constants are measured metres with a comment naming the reference view they came from, orassets/build_template.py.# inferred - Skill scripts (all take ):
-- --help
| Script | Purpose |
|---|---|
| master .blend: units, collections, calibration proxies, reference planes at real scale, game camera |
| clay / silhouette / wire / checker / material renders from fixed views, the reference-matched camera, gameplay pixel size, turntables, posed frames |
| compare sheet (reference, render, overlay, gameplay strip) plus silhouette IoU and width-profile numbers; plain Python with Pillow |
| world-registered silhouette IoU for orthographic reference views: the camera covers the reference matte's exact world window, so scale and placement errors count |
| topology, transforms, UVs, weights, armature, sockets, colliders, naming, tri budget; exit 1 on FAIL |
| normal and AO from HIGH to LOW, base colour, roughness, metallic; rebuilds delivery materials |
| GLB/FBX export with asset-manifest.json and animation-contract.json |
| imports the export into a blank Blender, reports what arrived, renders a check |
Read for the asset's category before Phase 0. Read
before Phase 6 and
before Phases 1, 5 and 9. Read when a script fails on a 5.x API or
before long renders and bakes.
references/categories.mdreferences/rigging-animation.mdreferences/delivery-and-acceptance.mdreferences/blender-5-notes.md- Blender 4.2 或更高版本(已使用至 5.2),以无头模式运行:。 Blender 5.x 更改了这些构建所涉及的若干 API;
blender --background --python <script> -- <args>列出了相关变更,以及运行时、烘焙和审查方面的经验。 按以下顺序解析一次二进制路径:依次为references/blender-5-notes.md、PATH 中的$BLENDER_BIN,然后是blender。在 macOS 或 Windows 上,Workbench 渲染无需 GPU;在没有 GPU 的无头 Linux 机器上,向 review_render.py 传递/Applications/Blender.app/Contents/MacOS/Blender以进行审查渲染。--engine cycles - 通过 MCP 服务器连接实时 Blender 会话(execute-Python 工具)是可选的,但有助于检查。即便如此,仍应通过编号脚本构建并保存同一主文件,以确保流程可复现。在实时会话中,对脚本执行 并调用其函数,而不是使用命令行。
exec(open(path).read()) - 所有建模内容均以 bpy 代码编写在 中,并从
<asset>/build/NN_<phase>.py复制。每个脚本都会打开主文件,删除其负责的内容,重新构建并保存。重新运行任一阶段都是安全的。常量以米为单位进行测量,并附带注明来源参考视图的注释,或标记为assets/build_template.py。# inferred - Skill 脚本(均接受 ):
-- --help
| 脚本 | 用途 |
|---|---|
| 主 .blend 文件:单位、集合、校准代理、真实比例参考平面、游戏相机 |
| 从固定视图、与参考图匹配的相机、游戏像素尺寸、转台和姿态帧,生成 clay、silhouette、wire、checker 与 material 渲染 |
| 生成对比表(参考图、渲染图、叠加图、游戏尺寸条带),并计算 silhouette IoU 与宽度剖面数值;使用 Pillow 的纯 Python 实现 |
| 针对正交参考视图计算世界坐标配准后的 silhouette IoU:相机覆盖参考遮罩的精确世界窗口,因此比例和位置误差都会被计入 |
| 检查拓扑、变换、UV、权重、armature、sockets、colliders、命名及三角面预算;FAIL 时以 1 退出 |
| 从 HIGH 到 LOW 烘焙 normal 和 AO,并生成 base colour、roughness、metallic;重建交付材质 |
| 导出 GLB/FBX,并生成 asset-manifest.json 和 animation-contract.json |
| 将导出文件导入空白 Blender,报告导入内容并渲染检查 |
在阶段 0 之前阅读 ,了解资产类别。在阶段 6 之前阅读 ,在阶段 1、5 和 9 之前阅读 。当脚本因 5.x API 失败时,或在长时间渲染和烘焙之前,阅读 。
references/categories.mdreferences/rigging-animation.mdreferences/delivery-and-acceptance.mdreferences/blender-5-notes.mdGate protocol (used at the end of every phase)
门禁协议(每个阶段结束时使用)
- with
review_render.py(estimated in Phase 0) plus--ref-cam AZ EL LENS, in the mode the phase asks for, withfront,side,threequarterset to the subject's on-screen height in the game (default 128).--gameplay-px - against the reference view that matches the camera. Read the sheet and the numbers. Look at the images; the numbers catch drift the eye forgives. compose_review aligns the two silhouettes by their bounding boxes, so it cannot see a model that is too short or off its axis. For orthographic sheets, also run
compose_review.py --measureon cleaned reference mattes (labels, rulers, floor lines and anything the model does not include erased) and hold that number to the phase tolerance. When the reference's own views disagree (a cape wider in the front view than in the back view), record the conflict and the per-view ceiling as a deviation instead of chasing both.world_gate.py - Write the mismatches as measurements, not adjectives: "head 12 percent too tall", "wheelbase 0.3 m short", "band 4 width +0.06". Fix the constants in the build script, rerun the phase, re-render. Repeat until every mismatch is inside the phase tolerance.
- Show the user the compare sheet, the remaining deviations, and what was inferred. Continue on
approval. If the user said not to ask, continue when the tolerance is met and keep the sheets
in for them. If the user reviews in a live viewport, reload the master there after each rebuild: anything hidden only for rendering (a mannequin under the costume) still shows in their view.
review/
Tolerances: blockout IoU 0.85 and every band width within 0.05 of the reference (0.90 and 0.03
for forms); proportions within 5 percent (blockout) and 2 percent (forms) on the measurements
listed in the brief; materials pass when each role reads correctly under the moving light of a
material turntable and in greyscale at gameplay size.
- 使用 运行
review_render.py(在阶段 0 中估算),并加上--ref-cam AZ EL LENS,按该阶段要求的模式运行,将front,side,threequarter设为主题在游戏屏幕上的高度(默认 128)。--gameplay-px - 对与相机匹配的参考视图运行 。阅读对比表和数值。观察图像;这些数值能捕捉眼睛会忽略的偏移。compose_review 会按边界框对齐两个轮廓,因此无法发现模型过短或偏离轴线。对于正交对比表,还应对清理后的参考遮罩运行 world_gate.py(擦除标签、标尺、地面线以及模型不应包含的任何内容),并将该数值控制在阶段容差内。当参考图自身的视图相互矛盾时,例如披风在正视图中的宽度大于后视图,应记录冲突,并将各视图上限作为偏差,而不是试图同时满足两种冲突结果。
compose_review.py --measure - 将不匹配写成测量值,而不是形容词:“头部高了 12%”“轴距短了 0.3 m”“band 4 宽度 +0.06”。修正构建脚本中的常量,重新运行该阶段,再次渲染。重复操作,直到每项不匹配都处于阶段容差范围内。
- 向用户展示对比表、剩余偏差以及推断项,并在获得批准后继续。如果用户要求不要询问,则在达到容差后继续执行,并将对比表保留在 中供用户查看。如果用户在实时视口中审阅,每次重建后都要在其中重新加载主文件:任何仅为渲染而隐藏的内容(例如服装下面的人体模型)仍会显示在其视图中。
review/
容差:灰模 IoU 为 0.85,各 band 宽度与参考图的偏差不超过 0.05;形体阶段对应为 0.90 和 0.03。简报中列出的各项测量比例,在灰模阶段偏差不超过 5%,在形体阶段不超过 2%。当每种材质角色都能在材质转台的移动光照下,以及在游戏尺寸的灰度图中正确呈现时,材质阶段通过。
Phase 0: read the reference, write the brief
阶段 0:读取参考图,编写简报
Look at every supplied image before touching Blender. Write in this
exact structure:
<asset>/asset-brief.mdtext
ASSET prefix and name (CH_, CR_, AR_, VH_, PR_, WP_, EN_)
CATEGORY character | creature | architecture | vehicle | prop | weapon | environment, plus subtype (biped, quadruped, winged, wheeled, tracked, modular kit, hinged prop)
VIEWS per image: view type (front, side, back, top, three-quarter, concept), estimated camera azimuth, elevation, lens (0 = orthographic), how much of the image height the subject fills, where the ground line sits
SCALE real size along each axis with the evidence (human height, door, wheel, brick course, weapon grip); state the number used
PROPORTIONS 8 to 15 ratios measured in the image that the blockout gate will check (head heights, shoulder width to height, wheelbase to length, storey height to width)
PARTS every part in construction and overlap order; for each: separate object yes/no, rigid/deforming/simulated, attaches to, moves about (pivot)
SILHOUETTE the 3 to 5 features that make it read at gameplay size
MATERIALS per part: role (skin, scales, worn leather, painted metal, carved stone, glass), colour, roughness range, wear pattern
ARTICULATION rig family, joints or pivots, sockets needed, animation needs (none / idle only / full library)
INFERRED every side, dimension or part the images do not show and the prior used to fill it
TARGET engine, export format, budget tier from the table, game camera (elevation, distance, lens), subject height in pixels at typical gameplay distanceAsk the user only for what the images cannot tell: target engine and format, real size when no
scale cue exists, budget tier, whether rigging and animation are needed, the game camera. Offer
these defaults and proceed with them when the user says to just go: 1 unit = 1 m, Z up in
Blender with the subject facing -Y, GLB export, standard tier from the budgets table, a
three-quarter overhead camera at 50 mm, 128 px subject height, rig only if the category deforms,
no animation unless asked.
Keep every reference as a file in under a descriptive name before Phase 1: the
scripts load references from disk, and images pasted into the conversation arrive as temporary
files, so copy them there first.
<asset>/ref/Multi-image references: any number of images can come in one request. Mark which views are
orthographic sheets (measure from these) and which are perspective concepts (silhouette and
detail only, never proportions). Conflicting images: the orthographic sheet wins for dimensions,
the concept wins for surface detail; say which was used where. One image can also hold several
views (a turnaround or model sheet with front, side and back panels and detail callouts): give
each panel its own VIEWS entry with its pixel box, crop the orthographic panels into separate
files that share one scale and ground line (, , ) for
and the gates, and use the callouts for surface detail. Photographs: estimate the lens from perspective convergence (long lens for
telephoto product shots, 24 to 35 mm for phone photos), and match it in .
ref/front.pngref/side.pngref/back.pnginit_master.py--ref-camFor a request covering several assets, run one asset per category through all phases first
(one character, one creature, one kit piece, one vehicle), get those approved, then apply the
proven scale, rig, material and export rules to the rest. Each role still gets its own forms and
motion; a shared rig family does not mean shared proportions.
在接触 Blender 之前查看每一张提供的图像。按以下确切结构编写 :
<asset>/asset-brief.mdtext
ASSET prefix and name (CH_, CR_, AR_, VH_, PR_, WP_, EN_)
CATEGORY character | creature | architecture | vehicle | prop | weapon | environment, plus subtype (biped, quadruped, winged, wheeled, tracked, modular kit, hinged prop)
VIEWS per image: view type (front, side, back, top, three-quarter, concept), estimated camera azimuth, elevation, lens (0 = orthographic), how much of the image height the subject fills, where the ground line sits
SCALE real size along each axis with the evidence (human height, door, wheel, brick course, weapon grip); state the number used
PROPORTIONS 8 to 15 ratios measured in the image that the blockout gate will check (head heights, shoulder width to height, wheelbase to length, storey height to width)
PARTS every part in construction and overlap order; for each: separate object yes/no, rigid/deforming/simulated, attaches to, moves about (pivot)
SILHOUETTE the 3 to 5 features that make it read at gameplay size
MATERIALS per part: role (skin, scales, worn leather, painted metal, carved stone, glass), colour, roughness range, wear pattern
ARTICULATION rig family, joints or pivots, sockets needed, animation needs (none / idle only / full library)
INFERRED every side, dimension or part the images do not show and the prior used to fill it
TARGET engine, export format, budget tier from the table, game camera (elevation, distance, lens), subject height in pixels at typical gameplay distance仅就图像无法确定的信息询问用户:目标引擎和格式、没有比例参照物时的真实尺寸、预算档位、是否需要绑定和动画、游戏相机。提供以下默认值,并在用户表示直接开始时采用:1 unit = 1 m,Blender 中 Z 轴向上且主体朝向 -Y,导出 GLB,采用预算表中的标准档位,50 mm 三分之一俯视相机,主体高度 128 px,仅当类别会发生形变时进行绑定,除非用户要求,否则不制作动画。
在阶段 1 之前,将每张参考图作为文件保存在 下并使用描述性名称:脚本从磁盘加载参考图,而粘贴到对话中的图片会作为临时文件到达,因此必须先将其复制到该目录。
<asset>/ref/多图参考:一次请求中可以使用任意数量的图片。标记哪些视图是正交图板(据此测量),哪些是透视概念图(仅用于轮廓和细节,绝不用于比例)。当图片存在冲突时,正交图板决定尺寸,概念图决定表面细节;应说明各处采用了哪张图片。单张图片也可以包含多个视图,例如包含正视图、侧视图、后视图面板和细节标注的转台图或模型图板:为每个面板添加独立的 VIEWS 条目及其像素框,将正交面板裁剪为共享同一比例和地平线的独立文件(、、),供 和门禁使用,并使用标注图获取表面细节。对于照片,根据透视收敛情况估算镜头焦距(长焦产品摄影使用长焦,手机照片通常为 24 至 35 mm),并在 中匹配。
ref/front.pngref/side.pngref/back.pnginit_master.py--ref-cam对于涵盖多个资产的请求,先让每个类别中的一个资产完整通过所有阶段(一个角色、一个生物、一个套件组件、一个载具),获得批准后,再将已验证的比例、绑定、材质和导出规则应用到其余资产。每个角色仍需拥有自己的形体和动作;共享绑定族并不意味着共享比例。
Phase 1: calibration and master file
阶段 1:校准与主文件
Decide the canonical unit before any modelling and keep it: 1 unit = 1 m, Z up, -Y forward,
origin at the ground contact point (ground centre for vehicles, grid corner for kit pieces).
If the target game uses other logical units, choose once between converting every dependent
value (movement speed, reach, cell size, colliders, camera offsets) with a documented factor, or
mapping only at the render boundary. Never shrink the asset alone while gameplay metrics stay
in old units.
The commands in this file use an illustrative 1.85 m knight (, Unity); take every
asset-specific value (name, height, camera, budget, engine, inferred list) from the brief.
CH_Knightbash
$BLENDER_BIN --background --python scripts/init_master.py -- \
--out CH_Knight/CH_Knight_master.blend --name CH_Knight --height 1.85 \
--ref-front ref/front.png --ref-right ref/side.png --ref-extra ref/concept.png \
--subject-frac 0.88 --ground-frac 0.04 --cell 2.0 --cam-elev 50 --cam-az 30 --cam-dist 12 --cam-lens 50This writes the collections (REF, HIGH, LOW, RIG_CTRL, RIG_DEF, COLLISION, SOCKETS, EXPORT),
a ruler at the target height with metre ticks, a grid cell, door clearance, a collision capsule,
the game camera, and the reference images as standing planes at real scale with their ground
line on z = 0. Every asset passes through this calibration; a hero, an enemy and a doorway that
were never in the same file at the same scale will not fit each other in the engine.
Naming from : , ,
, , . No names in anything that ships.
references/delivery-and-acceptance.mdCH_Knight_Body_LOD0DEF-upper_arm.LSOCKET_hand.RCOL_torsoCUT_window.001在开始任何建模前确定标准单位并始终保持一致:1 unit = 1 m,Z 轴向上,-Y 为前方,原点位于接地接触点(载具使用地面中心,套件组件使用网格角点)。如果目标游戏使用其他逻辑单位,应明确选择以下一种方式:转换所有依赖值(移动速度、触及范围、单元格大小、colliders、相机偏移)并记录换算系数,或者仅在渲染边界进行映射。绝不能单独缩小资产,却让游戏内度量继续使用旧单位。
本文件中的命令使用一个 1.85 m 的骑士作为示例(,Unity);所有资产专用值(名称、高度、相机、预算、引擎、推断项列表)均应取自简报。
CH_Knightbash
$BLENDER_BIN --background --python scripts/init_master.py -- \
--out CH_Knight/CH_Knight_master.blend --name CH_Knight --height 1.85 \
--ref-front ref/front.png --ref-right ref/side.png --ref-extra ref/concept.png \
--subject-frac 0.88 --ground-frac 0.04 --cell 2.0 --cam-elev 50 --cam-az 30 --cam-dist 12 --cam-lens 50这会创建集合(REF、HIGH、LOW、RIG_CTRL、RIG_DEF、COLLISION、SOCKETS、EXPORT)、一个按目标高度制作且带米制刻度的标尺、一个网格单元、一项门洞净空、一个碰撞胶囊体、游戏相机,以及作为站立平面且按真实比例放置的参考图,其地平线位于 z = 0。每个资产都应通过这一校准流程;未曾位于同一文件、同一比例下的英雄、敌人和门洞在引擎中将无法相互适配。
命名规则见 :、、、、。任何交付内容中都不应出现 名称。
references/delivery-and-acceptance.mdCH_Knight_Body_LOD0DEF-upper_arm.LSOCKET_hand.RCOL_torsoCUT_window.001Phase 2: blockout and silhouette gate
阶段 2:灰模与轮廓门禁
Build from the template. Primary masses only: torso, head, pelvis and
limbs as simple volumes; body shell, wheels and cabin for a vehicle; floor, walls, roof and
openings for a kit piece. Hands, feet, jaw, horns, wings, doors, turrets and other appendages
are separate rough objects from the start. Joint centres and pivots are placed now, at the
positions the brief measured, because everything later hangs off them.
build/02_blockout.pyCheck weight and balance: feet and hips that can support the mass, a forward driving line for a
runner, a ribcage and pelvis for a quadruped, a neck and wing root that can carry the intended
action, wheels under the mass of a vehicle. Add costume, armour, cladding and panels as distinct
volumes. Check weapon reach, hand clearance, door swing and the silhouette in the most extreme
pose or state the asset will hit (attack, crouch, turn, full steering lock, door open).
Gate in clay and silhouette modes, LOW collection, once to confirm scale against
the ruler. The category must read from the game camera without texture, particles or labels.
For multi-asset work, render the greybox lineup at relative scale and check that roles differ
in shoulder width, head shape, posture and stance, not only colour.
--show-refbash
$BLENDER_BIN --background --python scripts/review_render.py -- --blend CH_Knight/CH_Knight_master.blend \
--out CH_Knight/review/02_blockout --collections LOW --views front,side,threequarter \
--ref-cam 35 12 50 --mode clay --gameplay-px 128
python scripts/compose_review.py --ref ref/front.png --render CH_Knight/review/02_blockout/clay_front.png \
--out CH_Knight/review/02_blockout/compare_front.png --measure --gameplay-px 128从模板创建 。仅构建主要体块:将躯干、头部、骨盆和四肢制作成简单体块;载具使用车身外壳、车轮和驾驶舱;套件组件使用地面、墙壁、屋顶和开口。手、脚、下颌、角、翅膀、门、炮塔及其他附属部件从一开始就应作为独立粗略对象。关节中心和枢轴现在就要放置在简报测得的位置,因为后续所有内容都依赖这些位置。
build/02_blockout.py检查重量与平衡:脚和髋关节应能支撑主体质量;奔跑者应具有向前的驱动线;四足生物应具有胸腔和骨盆;颈部与翼根应能承载预期动作;车轮应位于载具质量之下。将服装、盔甲、覆层和面板添加为独立体块。检查武器触及范围、手部间隙、门的开启范围,以及资产在最极端姿态或状态下的轮廓,例如攻击、下蹲、转身、完全转向或开门。
使用 clay 和 silhouette 模式、LOW 集合进行一次门禁,并使用 确认模型与标尺之间的比例。该类别必须能在游戏相机下被识别,不能依赖纹理、粒子或标签。对于多资产工作,以相对比例渲染灰模阵容,并检查各角色在肩宽、头部形状、姿势和站姿上存在差异,而不只是颜色不同。
--show-refbash
$BLENDER_BIN --background --python scripts/review_render.py -- --blend CH_Knight/CH_Knight_master.blend \
--out CH_Knight/review/02_blockout --collections LOW --views front,side,threequarter \
--ref-cam 35 12 50 --mode clay --gameplay-px 128
python scripts/compose_review.py --ref ref/front.png --render CH_Knight/review/02_blockout/clay_front.png \
--out CH_Knight/review/02_blockout/compare_front.png --measure --gameplay-px 128Phase 3: forms
阶段 3:形体
build/03_forms.pyOrganic: join the blockout into a fused base (voxel Remesh at about 1/200 of the height) in HIGH
and shape it with , or keep the skin-chain base and refine its radii and joint positions.
Hard surface: loft, extrude, spin and cut with real panel gaps, plate thickness and bevels that
catch light. Model the real overlap order for layered parts. Eyes, teeth, claws, horns, glass,
lights and membranes stay separate where they need independent shading, deformation or
articulation; consolidate only the export copy.
pushKeep the complete underlying body or hull in the master even where a costume or panel covers it;
author coverage cuts on the export copy and test every equipment combination for holes.
Characters: section 2 covers faces fitted to calibrated blueprints,
hands, the neck join, armour fitted to the garment underneath, and strand hair colliders and
shading. Review close-ups of the neck, hands and every armour overlap from several angles with
everything the viewport shows; check clearances with mesh overlap tests.
references/categories.mdGate: clay from the reference camera and all fixed views, forms tolerance, plus a
clay pass. The silhouette at gameplay size must still match Phase 2; if forms shifted it, fix the
forms, not the reference.
--turntable 8build/03_forms.py大型随机噪声会掩盖形体,并在远距离下产生闪烁。
有机模型:在 HIGH 中将灰模合并为融合的基础网格(体素 Remesh 高度约为整体高度的 1/200),并使用 push 塑形;或者保留 skin-chain 基础网格,并精修其半径和关节位置。
硬表面模型:使用 loft、extrude、spin 和 cut 制作真实的分缝、面板厚度以及能捕捉光照的倒角。为分层部件建模真实的重叠顺序。眼睛、牙齿、爪子、角、玻璃、灯光和膜结构在需要独立着色、形变或活动时保持分离;仅在导出副本中进行合并。
即使服装或面板覆盖了主文件中的基础身体或外壳,也应保留完整的基础身体或外壳;在导出副本上制作覆盖切口,并测试每种装备组合,确保没有孔洞。
角色: 第 2 节涵盖了根据校准蓝图拟合面部、手部、颈部连接、穿在底层服装外面的盔甲,以及发束 colliders 和着色。从多个角度审查颈部、双手和每处盔甲重叠处的近景,审查时显示视口内的所有内容;使用网格重叠测试检查间隙。
references/categories.md门禁:使用参考相机和所有固定视图生成 clay 渲染,检查形体容差,并额外执行一次 clay 检查。游戏尺寸下的 silhouette 必须仍与阶段 2 一致;如果形体导致轮廓变化,应修正形体,而不是修改参考图。
--turntable 8Phase 4: topology
阶段 4:拓扑
build/04_topology.pyQuads in the source, triangulated delivery; lock the triangulation before baking so shading does
not change later. Run the cleanup: doubles, stray islands, zero-area faces, flipped normals,
overlapping interior shells. Open boundaries are fine on cloth sheets, hair cards and decals;
collision proxies must be closed. Build LOD1 and LOD2 now with and fix their outlines
by hand, keeping head, shoulder, weapon, wheel and doorway silhouettes.
lod_copyGate: with the budget tier's tri count (exit 0, warnings explained), wire mode
render of LOW, and a clay compare against Phase 3 renders showing no silhouette loss.
validate.pybash
$BLENDER_BIN --background --python scripts/validate.py -- --blend CH_Knight/CH_Knight_master.blend \
--collections LOW,COLLISION,SOCKETS --out CH_Knight/review/04_validate.json --budget-tris 60000 --require-uvbuild/04_topology.py源文件使用四边面,交付时进行三角化;在烘焙前锁定三角化结果,防止后续着色发生变化。执行清理:合并重复项、移除孤立岛、零面积面、翻转法线和重叠的内部壳体。布料片、发片和贴花允许存在开放边界;碰撞代理必须封闭。此时构建 LOD1 和 LOD2,使用 并手动修正其轮廓,同时保留头部、肩膀、武器、车轮和门洞的轮廓。
lod_copy门禁:使用对应预算档位的三角面数量运行 (退出码为 0,并解释所有警告),生成 LOW 的 wire 模式渲染,并与阶段 3 的渲染进行 clay 对比,确保没有轮廓损失。
validate.pybash
$BLENDER_BIN --background --python scripts/validate.py -- --blend CH_Knight/CH_Knight_master.blend \
--collections LOW,COLLISION,SOCKETS --out CH_Knight/review/04_validate.json --budget-tris 60000 --require-uvPhase 5: UVs, baking, materials
阶段 5:UV、烘焙与材质
build/05_materials.pyAuthor original materials in Blender (procedural or painted) starting from the role named in the
brief: skin, dry bone, woven cloth, worn leather, corroded metal, painted steel, carved stone,
glass. Roughness ranges that match the role; edge wear that follows construction and contact,
not a white outline around every edge; no baked directional lighting in base colour. Then bake
the portable set and rebuild the delivery materials:
bash
$BLENDER_BIN --background --python scripts/bake_maps.py -- --blend CH_Knight/CH_Knight_master.blend \
--low LOW --high HIGH --res 2048 --maps normal,ao,basecolor,roughness,metallic \
--out CH_Knight/textures --extrusion 0.02 --ray-dist 0.05 --margin 16 --samples 64 \
--match-by-name --rebuild-material --save CH_Knight/CH_Knight_baked.blendBake by named group where projections cross onto neighbours (teeth, layered garments); keep
transparent shells (corneas, visors, glass) out of the sources with . LOD0 is
baked; LOD1 and LOD2 reuse its material and maps (they came from , same UV layout).
Pass only when a LOD has its own UVs. Document colour space per map, normal-map
green convention and any channel packing in the manifest.
--exclude-sourceslod_copy--all-lodsGate: material mode render with (moving light across the surface), greyscale
compare at gameplay size, checker render clean at the joints. Hard edges and UV seams inspected
in the normal-mapped turntable.
--turntable 12build/05_materials.py在 Blender 中创作原创材质(程序化或绘制),从简报中指定的材质角色开始:皮肤、干骨、编织布料、磨损皮革、腐蚀金属、涂漆钢材、雕刻石材、玻璃。粗糙度范围应与角色相匹配;边缘磨损应遵循结构和接触关系,而不是给每条边缘添加白色描边;base colour 中不得烘焙定向光照。然后烘焙可移植贴图集并重建交付材质:
bash
$BLENDER_BIN --background --python scripts/bake_maps.py -- --blend CH_Knight/CH_Knight_master.blend \
--low LOW --high HIGH --res 2048 --maps normal,ao,basecolor,roughness,metallic \
--out CH_Knight/textures --extrusion 0.02 --ray-dist 0.05 --margin 16 --samples 64 \
--match-by-name --rebuild-material --save CH_Knight/CH_Knight_baked.blend当投射区域跨越到相邻部件时,应按命名组进行烘焙,例如牙齿和分层服装;使用 将透明壳体(角膜、面罩、玻璃)排除在源集合之外。LOD0 需要烘焙;LOD1 和 LOD2 复用其材质和贴图,因为它们来自 ,并使用相同的 UV 布局。只有当某个 LOD 拥有自己的 UV 时,才使用 。在清单中记录每张贴图的色彩空间、法线贴图绿色通道约定以及任何通道打包方式。
--exclude-sourceslod_copy--all-lods门禁:使用 执行材质模式渲染,在游戏尺寸下进行灰度对比,并生成棋盘格渲染以检查关节。应在带法线贴图的转台中检查硬边和 UV 接缝。
--turntable 12Phase 6: articulation
阶段 6:关节与绑定
Skip only for static props and kit pieces without moving parts. Otherwise :
deformation skeleton in RIG_DEF from the rig family in ,
controls in RIG_CTRL, real pivots for every hinge, wheel, door and turret, sockets in SOCKETS
with the axis convention (+Y forward of the attachment, +Z up). Bind every deforming piece to the
same skeleton, normalise weights, four influences per vertex as the delivery target, rigid armour
to one bone. Apply scale and rotation before binding; never apply an Armature modifier as
cleanup.
build/06_rig.pyreferences/rigging-animation.mdGate: extreme-pose sheet ( for every pose the
reference file lists), all separate parts visible together; shows no unweighted
or over-influenced vertices; each socket tested with its real attachment in at least one pose.
review_render.py --action <pose_action> --frame Nvalidate.py仅当资产为静态道具或没有运动部件的套件组件时,才可跳过此阶段。否则执行 :根据 中的绑定族,在 RIG_DEF 中创建形变骨架;在 RIG_CTRL 中创建控制器;为每个铰链、车轮、门和炮塔设置真实枢轴;在 SOCKETS 中按照轴向约定(连接点前方为 +Y,向上为 +Z)创建 sockets。将每个需要形变的部件绑定到同一骨架,归一化权重,以每个顶点四个影响源作为交付目标,并将刚性盔甲绑定到单根骨骼。绑定前应用缩放和旋转;绝不能将应用 Armature 修改器作为清理步骤。
build/06_rig.pyreferences/rigging-animation.md门禁:为参考文件中列出的每个姿态生成极端姿态对比表(),同时显示所有独立部件; 不得报告未加权或影响源过多的顶点;每个 socket 至少在一个姿态中使用真实连接物进行测试。
review_render.py --action <pose_action> --frame Nvalidate.pyPhase 7: secondary motion
阶段 7:次级运动
Only for garments, chains, tails, wings, cables, tracks or antennae that the brief marked as
simulated or secondary. Follow section 6 of : separate render,
simulation and collision representations, pinned attachment areas with real clearance, one owner
per vertex's motion, a bone-chain fallback. Gate: posed renders in the extreme poses show no
body or weapon penetration, and the fallback chain alone still reads as the same garment.
references/rigging-animation.md仅对简报中标记为模拟或次级运动的服装、锁链、尾巴、翅膀、电缆、履带或天线执行此阶段。遵循 第 6 节:使用独立的渲染、模拟和碰撞表示;在固定连接区域保留真实间隙;每个顶点的运动只能有一个所有者;准备骨骼链作为回退方案。门禁:在极端姿态下生成摆姿渲染,确保没有身体或武器穿透;仅使用回退骨骼链时,服装仍应呈现相同的视觉效果。
references/rigging-animation.mdPhase 8: animation
阶段 8:动画
Only when requested. or the live session. Named Actions with deliberate
ranges, loop flags and pose markers for events; in-place locomotion tagged with its speed;
upper-body layers with a reference pose and mask; bake IK to the deformation skeleton for
delivery and keep the unbaked master. Gate: each clip rendered as a short turntable-free sequence
at the game camera, loop seams checked for root drift and pops, event timings read back from
.
build/08_anim.pyanimation-contract.json仅在用户要求时执行。使用 或实时会话。创建具有明确帧范围、循环标志和事件姿态标记的命名 Actions;为原地移动标记速度;上半身图层应包含参考姿态和遮罩;将 IK 烘焙到交付用形变骨架中,同时保留未烘焙的主文件。门禁:使用游戏相机将每个动画片段渲染为一段不旋转的短序列,检查循环接缝是否存在根节点漂移或跳变,并从 读取事件时序。
build/08_anim.pyanimation-contract.jsonPhase 9: export and round trip
阶段 9:导出与往返验证
Export the explicit selection (LOW, RIG_DEF, SOCKETS, COLLISION) with the manifest, then import
it into a blank Blender and compare against the manifest. Nothing from REF, HIGH or RIG_CTRL
ships.
bash
$BLENDER_BIN --background --python scripts/export_delivery.py -- --blend CH_Knight/CH_Knight_baked.blend \
--out CH_Knight/exports --name CH_Knight --format GLB --split-lods \
--inferred "back of cloak from symmetry, sole tread generic" --engine unity
$BLENDER_BIN --background --python scripts/roundtrip.py -- --file CH_Knight/exports/CH_Knight.glb \
--out CH_Knight/review/09_roundtrip --expect-height 1.85Gate: roundtrip exit 0 (tri counts per LOD, bone names, clip lengths, images all match the
manifest; height within 1 percent; nothing below the ground plane), and the roundtrip clay render
matches the Phase 3 clay render. Then import into a clean project of the target engine if one is
available and play every clip with the real weapon or garment combination.
导出明确选择的集合(LOW、RIG_DEF、SOCKETS、COLLISION)并生成清单,然后将其导入空白 Blender,并与清单进行比对。REF、HIGH 或 RIG_CTRL 中的任何内容都不得交付。
bash
$BLENDER_BIN --background --python scripts/export_delivery.py -- --blend CH_Knight/CH_Knight_baked.blend \
--out CH_Knight/exports --name CH_Knight --format GLB --split-lods \
--inferred "back of cloak from symmetry, sole tread generic" --engine unity
$BLENDER_BIN --background --python scripts/roundtrip.py -- --file CH_Knight/exports/CH_Knight.glb \
--out CH_Knight/review/09_roundtrip --expect-height 1.85门禁:roundtrip 退出码为 0;各 LOD 的三角面数、骨骼名称、动画片段长度和图像均与清单一致;高度偏差在 1% 以内;没有内容位于地面以下;roundtrip 的 clay 渲染与阶段 3 的 clay 渲染一致。随后,如果目标引擎可用,则将其导入到一个干净的项目中,并使用真实武器或服装组合播放每个动画片段。
Phase 10: acceptance and handover
阶段 10:验收与交付
Run the checklist in section 4. Produce
: the compare sheets from the reference camera and fixed views, the gameplay-size
greyscale strip, the material turntable, the extreme-pose sheet, validate.json and roundtrip.json.
Report to the user in this order: what matches, the measured deviations that remain, everything
inferred without reference coverage, budgets used versus the tier, and the exact files delivered.
Do not describe the asset as matching the reference where a measurement says otherwise.
references/delivery-and-acceptance.mdreview/final/运行 第 4 节中的清单。生成 :参考相机和固定视图的对比表、游戏尺寸灰度条带、材质转台、极端姿态表、validate.json 和 roundtrip.json。按以下顺序向用户报告:匹配的内容、仍存在的实测偏差、所有缺乏参考覆盖的推断项、实际使用的预算与对应档位,以及交付文件的准确列表。如果测量结果表明存在差异,不要将该资产描述为与参考图匹配。
references/delivery-and-acceptance.mdreview/final/Working rules
工作规则
- Measure, then model. Every constant comes from the brief or is marked inferred.
- Silhouette before form, form before detail, topology before texture, bind before animation.
- Render evidence at every gate; the viewport is not evidence.
- One file, one scale: every asset passes through the calibration file with the ruler.
- Separate what moves, shades or simulates independently; consolidate only the export copy.
- Keep the master non-destructive; apply modifiers on the delivery copy.
- Never rename an export to satisfy a loader that expects a different skeleton; provide a mapping.
- Say what was not visible in the reference. A guessed back is a guess in the manifest.
- 先测量,再建模。每个常量都应来自简报,或明确标记为推断项。
- 先轮廓,后形体;先形体,后细节;先拓扑,后纹理;先绑定,后动画。
- 每个门禁都提供渲染证据;视口不能作为证据。
- 一个文件,一种比例:每个资产都要通过带有标尺的校准文件。
- 分离需要独立运动、着色或模拟的内容;仅在导出副本中进行合并。
- 保持主文件非破坏性;在交付副本上应用修改器。
- 绝不能通过重命名导出来满足需要不同骨架的加载器;应提供映射关系。
- 说明参考图中不可见的内容。猜测的背面就是猜测,必须写入清单。