blender-environment-kits 是 el4cteo/blender-skills 下的一套 Blender 游戏环境制作技能,围绕程序化地形、物体散布和模块化套件三部分提供脚本与规范。其执行模型位于 blender-core,自定义几何节点工具位于 blender-geometry-nodes,材质处理位于 blender-texturing(装饰条、顶点混合),氛围与天气分别位于 blender-time-of-day 与 blender-weather-fx。
一、地形生成(terrain.py) 通过 --size 指定米制尺寸、--res 指定顶点分辨率,在上述范围内生成方格网格。地形类型可为 fbm(起伏丘陵)、ridged(山脊山地)和 hills(异质地形),--scale 控制特征尺寸。--erosion 设定热侵蚀步数(休止角 33°),使陡坡松弛、碎屑填充谷地;--terrace 生成阶梯平台;--flatten X Y R 在指定位置平整出一块可游玩或建造区域,并用 smoothstep 过渡回原地形。 脚本会写入 ENV_Slope(坡度/90)与 ENV_Height(0–1)点属性,--material 据此生成草、岩、雪材质:坡度大于 35° 处为岩石,高度大于 75% 且坡度低于约 40° 处为雪,边缘以噪声打破。 引擎导出方面,--export-heightmap 输出 16 位灰度 PNG 或 16 位小端 .raw(第 0 行为 −Y 边缘,Unity 中若镜像需垂直翻转),并配合 heightmap_z_scale_m 指定导入 Z 缩放;--export-splat 输出 16 位 RGBA 权重(R 草、G 岩、B 雪,和为 1)。两者均以 Raw 写出、不做显示变换,实测往返误差小于 0.001。分辨率建议 Unity 用 2^n+1(513/1025/2049),UE Landscape 用 505/1009/2017/4033,超过 1025 时建议分块。
二、物体散布(scatter.py) 每个层对应一个几何节点修改器,采用泊松盘分布(--density 为每平方米上限密度,--min-distance 为最小间距),仅保留法线在 --max-slope 以内且 Z 值处于 --height-min/max(对象空间)范围内的位置。--mask 可用顶点组或浮点属性作为密度系数(可手动绘制或使用 ENV_Height)。 集合内子对象按各自原点实例化,随机偏航,支持 --scale 范围与 --align(0 为竖直树木,0.6–1 为贴合坡面的岩石),源集合会从视图层排除。结果会依据真实表面复核每个实例的坡度与高度范围,并按来源计数;实例保持实例状态,仅当导出器或布尔运算需要真实网格时才使用 --realize。 资料给出的参考密度:森林树木 0.01–0.05/m²(最小间距 4–8 m)、灌木 0.05–0.2、岩石 0.01–0.1、草丛 2–20/m²(仅近相机处);分层顺序为大到小:树木、再灌木(避开树干)、再草。 引擎方面,glTF 可启用 export_gpu_instances=True(EXT_mesh_gpu_instancing),或通过 --export-points file.json 输出世界变换(Z 向上、米制、wxyz 四元数),供 UE 植被/PCG 或 Unity 实例化脚本使用;FBX 则需要实现几何或每实例一个对象。
三、模块化套件(kit_check.py) 先定度量:选定网格(如 0.5 m 吸附、1/2/4 m 模块)并全程保持一致。建议墙高 3–4 m(玩家约 1.8 m、眼高 1.6 m,门至少 1×2.2 m),地板 4×4 m,楼梯踏步 0.18 m 高、0.28 m 深。UE 以厘米为单位(导入乘 100),Unity 以米为单位。 枢轴约定可用 --pivot(默认 corner,另有 bottom-center、center),便于按增量拼接;占地长度为网格倍数,薄于一个格子的尺寸(墙厚、装饰条)可不在网格上。开放边缘只应出现在构件外表面的接缝处,内部出现孔洞视为错误;接缝顶点须落在网格上以便视觉焊接。纹素密度应在套件中位数的 25% 以内(--texture px);命名使用 --prefix 指定的 SM_ 前缀。 --fix 会应用旋转/缩放并把原点移到枢轴且不移动几何;链接副本共享网格数据,因此只需修正源对象一次。可用装饰条与贴花(blender-texturing)、顶点色混合、旋转/镜像变体打破重复感(镜像会翻转法线,需用 blender-asset-qa 检查),并用装饰条遮盖接缝。
四、注意事项 散布前先应用地形/套件缩放,密度与坡度均基于世界坐标;散布高度取目标对象空间,地形不在原点时需偏移 --height-*;泊松数量过大时较慢,可分块/分区域散布或在视口降低密度、渲染时再提高。可用 blender-asset-qa 校验地形与散布(悬崖上的悬空实例、贴花 z-fighting),并用 blender-game-optimization 检查实例、LOD 与 draw call。
资料未提供安装命令,也未提供收费、价格与支持平台的具体信息。