看见反常 · 动一处 · 抓证据
画面上的风险,在代码里从哪儿冒出来?
只读 · 与实验共用计算模型
这页解决什么
按入口检查、材质成本和加载依赖阅读。每一段都对应实验里的一组可见数字。
运行时看到资源前,先做体检
法线、命名、UV 和 schema 都在这里被拦截。
// Asset Pipeline Simulator — Unity Editor pipeline sketch
const qaScore = 100 - missingChecks - schemaDrift - variantPenalty;
const syncRisk = schemaDrift + dependencyDepth * 0.018 + cacheMisses * 0.1;
const rollbackReady = applyMode !== "apply" && schemaVersion === requiredSchema;变体会放大内存与提交
共享材质和图集是在交换画质、内存与维护成本。
const textureFactor = (textureResolution / 1024) ** 2;
const peakMemoryMb = textureFactor * 4 * materialSlots * (sharedMaterial ? 1 : variants);
const drawCalls = sharedMaterial ? ceil(materialSlots / 4) : materialSlots * variants;
加载时间来自一张依赖图
缓存 miss 和依赖深度,会让小 Bundle 也变慢。
const loadMs = base + bundles * 4 + dependencyDepth * 3 + cacheMisses * 40;
const reportId = stableHash({ schemaVersion, qaScore, loadMs, rollbackReady });
LOD 与 Collider 分开生成、分开验收
网页只解释候选与门禁;QEM、Mesh 重建、Physics 查询和发布回滚必须在 Unity Editor 工具中执行。
// Q27: generate derived candidates; never overwrite the source Mesh.
const lodCandidate = qemEdgeCollapse(sourceMesh, preserveFeatures);
const colliderCandidate = fitCollider(sourceMesh, colliderPolicy);
const lodGate = compareFixedCameraSilhouette(lodCandidate, limits);
const physicsGate = replayPhysicsQueries(colliderCandidate, fixtures);
const decision = decide(lodGate, physicsGate); // pass | block | manual
publishDerivedCandidateOrKeepStable(decision, previousGoodArtifact);
// The web Lab visualizes this contract; only Unity runs these operations.