资产布局的几何验证
全库目录221
本文目录9
资产布局需要同时满足碰撞、通路与交互规则。本文以任务J布置房间R和桌子T为例:移动A形成验证尝试V1,通路失败后移动B形成V2。每次验证读取同一份实际场景快照;任务状态和最终发布见资产任务编排与发布。
室内场景的结构化规划
Room { zones, anchors, pathways, placements, lightingIntent, constraints }
Placement { assetId, transform, parentId, operationId }先确定房间功能区和通道净空,再查询尺寸合适的资产,最后求解位置与朝向。验证器用包围体或精确碰撞检查穿插,用导航数据检查可达性,再检查门窗净空、墙地锚点、功能距离与渲染预算。模型读取失败位置和原因,重新提出有限候选。
例如餐桌摆放满足几何不相交,却挡住门到座位的通路,碰撞检查可以通过,导航检查仍应拒绝。把两项规则分别记录,才能让返工针对通道,而不是反复缩小所有家具。
规划的数值约束
假设房间内可通行矩形为4米乘3米,入口沿宽度方向需保留1米净空。候选桌子宽1.6米,若中心距左墙0.5米,半宽0.8米会越墙0.3米,布局校验先拒绝;中心移到1米后包围盒合法,仍须检查门到座位路径。规划输出使用米和房间局部坐标,执行器再用房间世界变换生成实例,避免厘米资产和米场景混用。
资产尺寸取自选定的不可变资产版本。操作完成后,验证器读取真实实例变换和碰撞数据;计划中的位置只是期望值,不能代替实际场景。目录更新、房间移动和其他家具变化还可能使计划的输入过期,执行条件见场景工具的条件执行中的读取集合。
规划到执行先统一几何单位。资产顶点与尺寸元数据转换为米,实例局部矩阵L和完整祖先世界矩阵P共同把顶点送到世界空间,x_world=P×L×x_asset,这里使用列向量,P与L包含各自层级的缩放、旋转和平移。碰撞、门窗净空和导航均消费这份世界几何;变换只施加一次。任务仍保存局部矩阵,验证器则保存实际世界几何哈希及其读取版本,位置记录与空间度量分别承担自己的职责。
缩放与空间度量
角色配置中的半径、高度、台阶和净空阈值都使用世界米。假设房间局部通道宽1米,世界半径0.4米的角色需要0.8米净宽。父变换沿通道宽度方向缩放0.5后,实际净宽为0.5米,应拒绝通行;父变换放大2倍后净宽为2米,可以继续检查其他条件。直接在局部空间按0.4膨胀,两种缩放都会使用相同的1米宽度,无法得出正确结论。
完整父变换的线性部分记K,以区别任务中的移动操作A。局部位移d对应世界距离length(K*d),平方为dᵀ*Kᵀ*K*d。只含旋转时长度保持;统一缩放s使局部半径变为r/abs(s);非均匀缩放或剪切下,世界半径r的球在局部满足dᵀ*Kᵀ*K*d<=r²,不能用一个相同半径的局部球替代。例如X缩放0.5、Y缩放2,世界半径0.4对应的局部轴半径分别为0.8和0.2。
本管线直接在世界空间完成检查,避免给每种规则另设局部距离算法。把变换后的碰撞网格、家具占地和门的完整开合扫掠送入验证器;有剪切的层级使用最终顶点或由其生成的保守凸体,宿主碰撞组件仅支持特定缩放时,不能把未支持的变换交给它并沿用旧碰撞体。法线用逆转置变换并归一化,反射变换同时调整三角形绕序与碰撞面的朝向约定;坡度相对世界Up检查。矩阵不可逆或数值精度不足以可靠求逆时,操作在硬约束阶段拒绝,保留原对象及具体诊断。
平面布局采用世界Up定义的水平平面与正交单位基,把世界占地投影为以米计的多边形。先按角色世界半径向外膨胀家具,再向内收缩房间边界,得到角色中心可行域;轴对齐包围盒只用于保守快速拒绝。门保留开合扫过区域,座位目标使用座位前方的世界交互点。高度、坡度、台阶和低天花板由世界几何另行检查;多层与斜坡场景将这些世界三角形交给导航生成器,保留高度段,不能把重叠投影连接成同一层。
世界网格的格长也以米计。只有整个格子处于可行域才标为可走,邻格连线与拐角余量一并检查。入口有效格到合法交互站位作连通查询,间隙小于角色直径时膨胀后的障碍相连,路径断开;保守误拒绝通过减小世界格长或精确导航验证处理。碰撞和导航使用执行器回读的实际变换;与计划不一致时输出对应对象、世界位置和距离。
交互站位与可达性
桌面上的交互触点与角色站位承担不同作用。资产版本为座位保存交互槽、局部脚点或允许站位区、接近侧、期望朝向、支撑层,以及投影容差、交互距离和射线规则。规划器先把这些位置按实际实例矩阵变到世界空间,再把角色的世界体型交给验证器。朝向由变换后的前向投影到世界水平面并归一化,角色保持世界Up直立;前向退化时该姿态失败。布局并不会随家具缩小角色身体或交互距离。
假设座位脚点距墙世界0.2米,角色半径0.4米,同侧最近可走脚点距墙至少0.4米。投影需偏移0.2米:若槽位只允许0.1米,就拒绝这个站位;允许0.25米时,再检查实际胶囊、朝向、从视点或手部到触点的距离与遮挡。墙另一侧或楼上即使有更近导航面,也不属于这个槽的支撑层和接近侧。精确目标、区域目标及起点接入的计算见导航目标投影。
技术报告为每个必需交互槽保存原目标、采用脚点、偏移、姿态、支撑面、实际交互检查和完整路线结果。必需槽至少有一个完整可达且可交互的姿态才通过;部分路径和候选耗尽分别记录失败原因,附近存在可走点本身不构成通过。区域目标采用导航篇的区域求交与姿态验证,有限采样未找到结果时返回候选耗尽,不把它作为整个连续区域不可达的证明。报告还绑定资产、角色配置、场景几何和导航源哈希,审核消费的是这份完整结果。
缩放变化与补偿验证
J的读取集合包含完整祖先链、实例局部矩阵、资产碰撞与交互槽版本和角色世界体型。任一祖先缩放变化都会使世界几何及导航源哈希变化;即使T的局部位置没变,也重新构建候选世界几何、站位区和触点,不能只更新世界中心。支撑层按新几何重新绑定,原支撑面ID与位置接近不能替代这次检查。技术验证等待匹配该几何哈希的导航数据,重新完成投影、姿态和路线检查;旧导航查询结果不参与新门禁。
例如R平移到世界X=10并沿X缩放0.5,撤销B恢复T局部X=1时,世界X为10.5。补偿用当前父矩阵重新生成家具的世界形状、门扫掠和交互点,再检查硬约束并生成布局诊断。通路因缩放变窄可作为隔离中间态的失败诊断继续逆序清理;最终保留对象时,世界0.5米通道仍不能通过0.8米净宽门禁。空间度量正确性、补偿是否可提交、最终结果是否可发布因此各有明确判据。
连续站位区域的验证结果
V2消费的是一个已经验证的交互姿态及其路线。导航验证器先裁剪允许站位区,再检查身体、朝向、视线、探头行程、目标表面接触和入口到站位的完整路径;具体几何计算见导航目标投影。推荐点被挡住时,其他分片仍可能存在合法姿态;有限采样没有结果和完整区域为空采用不同结果码。
管线将结果整理成以下记录,而不是只接收一个“可达”布尔值:
| 记录 | 内容与消费方式 |
|---|---|
| 验证身份 | 任务J、尝试V2、布局快照哈希、资产及角色配置、规则版本,确定报告归属 |
| 目标与姿态 | 交互槽、目标分片及区域哈希、实际脚点、朝向、支撑面,确定采用的是哪个合法站位 |
| 接触检查 | 目标形状版本、允许片及法线、探头形状、中心终点和扫掠结果,确定实际交互成立 |
| 完整路线 | 入口、走廊、导航源哈希及读取集合,确定身体能够到达该姿态 |
| 失败或待定项 | 具体规则、对象、实际值及结果码,驱动重算、有限返工或等待导航构建 |
姿态和路线共同引用同一场景快照。导航构建仍Pending时,报告不能形成通过候选;挡板变化使姿态读集失配时,建立新尝试,而不是把新场景哈希填进V2。几何计算的结果由此接入任务身份、审核和恢复,审核者无需从零散截图猜测它验证了哪一份布局。
V2还核对同一产物清单中的文件、依赖、坐标、单位、枢轴、网格、材质、纹理、LOD、碰撞,以及目标平台内存、绘制、着色器与加载预算。DCC导入、引擎构建和实际运行各自保存结果,报告按规则集版本汇总必需项,例外由规定审核者批准。只有完整报告通过,才形成对应快照的审核候选。
布局或体型配置变化时,目标区域、接触终点和扫掠都由新快照重算,形成新的验证尝试;V2继续归属B的快照。取消的中间报告与最终保留布局分别按补偿隔离与冲突接管交接。
正常执行产出身份明确的布局及报告。工具响应丢失时,调度器先按场景工具的条件执行恢复回执,再决定继续验证还是进入补偿。
实现与证据
本页说明资产管线的设计协议与接口条件,未部署Agent、连接DCC、构建实际导航或执行资产发布。公式与数例可作机制推演,宿主事务、幂等性、恢复和发布仍需由各工具实现验证。事务边界的可运行示例见RPC。
相关主题
参考资料
世界空间度量、球的局部二次型和缩放数例按正文公式推导。导航目标区域与姿态检查的完整机制见导航目标投影;任务控制事务来源见资产任务编排与发布。