mcpField
T
threejs-procedural-buildings-and-cities

threejs-procedural-buildings-and-cities

github.com/linegel创意与媒体11133 次安装5 周前更新
代码仓库

关于 threejs-procedural-buildings-and-cities

threejs-procedural-buildings-and-cities 是一项用于在 Three.js 中规划、验证并编译程序化建筑与城市几何的技能。它强调确定性计划、明确的表面与放置归属,并依据可变性和规模选择几何组织方式。

主要功能

  1. 01生成确定性的建筑计划
  2. 02验证表面及立面放置
  3. 03按材质槽输出几何
  4. 04提供实例化、批处理与空间分页指引
  5. 05建筑 LOD 与编译检查

适用场景

  1. 01根据占地轮廓生成程序化建筑
  2. 02沿共用或受阻边界布置立面
  3. 03将重复模块编译为几何
  4. 04验证城市区块及城区级布局

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/linegel/threejs-complete-set-of-skill --skill threejs-procedural-buildings-and-cities

安装后在 Claude Code 中输入/threejs-procedural-buildings-and-cities确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
agents/
openai.yaml
references/
grammar-and-mesh-compiler.md
scripts/
deterministic-placement-key.mjs

详细介绍

程序化建筑与城市

将建筑视为编译器:确定运行时包,生成并验证可序列化方案,然后输出几何体。方案负责建筑体量、外露表面、放置位置、材质槽位和稳定标识。

流程

  1. 根据可变性和重复程度选择运行时包。

    工作负载包
    静态建筑或区块每个材质槽位使用一个合并的索引 BufferGeometry
    可编辑的多样化模块每个兼容材质槽位使用一个 BatchedMesh
    拓扑相同的重复对象使用空间分页的 InstancedMesh
    区域级流式加载使用带投影误差 LOD 的有界区块

    在启用 WebGPU 功能门控之前初始化 WebGPURenderer。建筑规划可以保持 CPU 确定性;只有在测得城市规模的可见性或更新瓶颈后,才添加存储或计算功能。

    完成条件: 每个建筑元素都对应一个包,并且每个包都有明确的可变性、可见性和身份依据。

  2. 生成有效的建筑方案。 统一单位和设置,然后按体量算子流程执行:足迹部分 -> 合并/庭院扣除 -> 拉伸/堆叠 -> 内缩/拆分 -> 可选连接体。仅选择预先验证过的备选方案;为每个算子结果分配稳定 ID,并在执行下一个算子之前进行验证。实现这些算子时,请阅读 grammar-and-mesh-compiler.md。序列化足迹、体量、外露区间、放置位置、模块用量、所有权、材质槽位、UV 缩放和预算。

    完成条件: 相同输入会复现相同的算子选择和 ID;每个算子输出都通过其拓扑/尺寸/所有权关卡;无需输出几何体即可诊断无效方案。

  3. 在放置立面之前解析外露边界。 根据垂直重叠部分,扣除共享或阻挡的侧面区域;高度不同的邻近建筑需要按高度带处理,而不是移除整个侧面。将正向保留跨度量化为有界的合法开间数量,并将立面、屋顶、饰条和转角的放置位置关联到这些表面区域。 实现足迹扣除、开间量化、放置所有权或模块局部坐标系时,请阅读 grammar-and-mesh-compiler.md。

    完成条件: 没有立面区域位于其高度处的占用体量内部;每个合法区域都有声明的放置内容或语义留白;转角所有权明确无歧义。

  4. 闭合并验证方案。 为已验证的连接体添加可见封顶面、平台、檐底和封闭表面;通过模块注册表解析每个放置项;然后测试注册表完整性、所有权唯一性、一般重叠、绕序、边界、材质归属和 UV 密度。

    对于异构场地组合,将领域资产交由各自所属的技能处理,并为每个废墟、码头、船只、岩石、植被簇或道具注册稳定的放置 ID、所有者、变换/坐标系/缩放、支撑体积与净空体积、锚点和 LOD 策略。应用 grammar-and-mesh-compiler.md 中的确定性异构场地放置规则。实现候选项身份、随机通道或阶段排序时,请导入 deterministic-placement-key.mjs。使用其自反比较器之前,先用 validateWinnerKeys() 验证整个阶段的键唯一性。该辅助工具不负责支撑、净空、冲突检测或阶段准入;严格的局部胜出者并不是最大打包算法。光环范围需包含两个候选项的延伸范围。先放置地标,再处理通行、支撑和净空,最后添加重复细节。 完成条件: 每个放置都能解析,每个表面都只有一个所有者,重叠为空或经过明确许可,支撑/净空检查均通过,稳定 ID 的重放不受区块加载顺序和无关族群插入的影响,并且所有输出的几何体或委托生成的资产均可追溯到规划记录。

  5. 按材质槽和空间边界编译。 保持语义材质身份稳定,同时选择合并、批处理或实例化输出。在 Three.js r185 WebGPU 中,BatchedMesh 会遍历可见的多重绘制条目:它能改进对象和状态管理,但不能证明 GPU 绘制调用已合并。若需要合并绘制调用,请合并兼容的静态几何体,或对拓扑相同的几何体进行实例化。实现槽位写入器、分页、投影误差 LOD 或绘制调用计数时,请阅读 grammar-and-mesh-compiler.md。

    完成条件: 槽位成员关系完整,索引边界均为有限值,页面可独立剔除且已刷新变换/计数边界和上传标志,LOD 误差已按物理视口像素进行门控,并报告实际后端绘制项。

  6. 绑定材质并处理呈现。 为每个语义槽使用 MeshStandardNodeMaterial 或 MeshPhysicalNodeMaterial。保留物理纹理比例以及数据/颜色编码。将最终颜色交由场景唯一的 RenderPipeline 输出变换处理,然后释放被替换的几何体、批次、纹理和节点资源。

    完成条件: 平面材质、掠射光和最终输出在几何体与法线方面保持一致;输出转换由一个组件负责;替换和释放操作不会留下过时边界或未释放的资源。

  7. 验证编译器。 使用简单和复合占地、庭院、桥梁或连接结构(如支持)、最小合法跨度、密集放置、重复模块,以及跨多个种子的城区分页进行测试。检查轮廓、无纹理几何体、角部、开口、退界、屋顶和 LOD 过渡。

    完成条件: 每个测试样例都有有效规划,不存在内部立面区间或放置重叠,注册表完整,重放具有确定性,边界和材质槽正确,UV 比例稳定,并且已测量三角形和绘制调用数量。

所有权边界

  • 使用 $threejs-procedural-geometry 处理可复用的轮廓、扫掠体、拱门、框架和底层网格写入器。
  • 使用 $threejs-procedural-materials 处理砌体、玻璃、金属、风化、过滤和材质场创作。
  • 使用 $threejs-procedural-fields 处理城市布局所使用的地形和地块场。
  • 使用 $threejs-scalable-real-time-shadows、$threejs-image-pipeline 和 $threejs-visual-validation 管理场景级阴影、输出和验证材料。

此技能负责建筑体量塑造、立面语义、建筑模块和场地放置、规划验证、材质槽编译以及建筑空间 LOD;委托技能仍负责非建筑资产的生成。

评论

支持 Markdown