SceneDreamer二次开发指南:自定义生物群系与地形风格的完整方法

📅 2026/8/18 15:25:40
SceneDreamer二次开发指南:自定义生物群系与地形风格的完整方法
SceneDreamer二次开发指南自定义生物群系与地形风格的完整方法【免费下载链接】SceneDreamer[TPAMI 2023] SceneDreamer: Unbounded 3D Scene Generation from 2D Image Collections项目地址: https://gitcode.com/gh_mirrors/sc/SceneDreamer想要在SceneDreamer二次开发中打造独一无二的3D世界吗这篇指南将手把手教你如何自定义生物群系与地形风格。SceneDreamer 是一个基于 TPAMI 2023 论文的开源项目它能够从 2D 图像集合中生成无边界、可自由漫游的 3D 场景。它的地形并非凭空产生而是由一个内置的程序化生成器PCG驱动温度、降水、高度噪声、树木分布这些变量全部可控。掌握了本指南中的方法你就能把默认的地球风世界改造成火山荒漠、荧光森林甚至外星地貌。二次开发前需要了解的地形生成流水线SceneDreamer 的地形生成核心代码集中在 terrain_generator.py 中入口函数是PCGGen。整个流程可以拆解为四个步骤空间划分用 Voronoi 图把地图切成不规则的细胞并通过劳埃德松弛让边界更自然气候计算为每个细胞计算温度与降水值再量化成nbins个等级生物群系映射通过assets/biome_image.png这张温度×降水查找表把每个细胞映射为 9 种生物群系之一地形细化为每个群系叠加不同的高度贝塞尔曲线再加入河流与树木分布。这张色块图就是温度-降水到生物群系的映射查找表修改它的像素颜色即可改变群系分布规则。第一步自定义生物群系类型与颜色打开terrain_generator.py你会看到两个核心列表。biome_names定义了 9 种生物群系的名称沙漠、热带草原、热带林地、苔原、季节性森林、雨林、温带森林、温带雨林、针叶林biome_colors定义了它们在地图上的标识色。自定义群系名称直接增删biome_names中的条目即可但要注意同步调整后面所有按 9 个群系写死的参数列表biome_height_maps、tree_densities等否则会索引越界。自定义群系颜色修改biome_colors中的 RGB 值即可。例如把沙漠的[255, 255, 178]改成火山红色的[180, 60, 40]地图上所有沙漠区域就会立刻喷发。biome_names [ desert, # 沙漠 savanna, # 热带草原 ... ] biome_colors [ [255, 255, 178], # 沙漠标识色 ... ]第二步调整生物群系分布的3种快捷方法想让地图上多出几片沙漠少几片雨林三种方法任选方法一修改气候噪声种子。temperature_map和precipitation_map的噪声种子如10 map_seed、20 map_seed直接决定气候格局。改种子就能得到完全不同的群系分布这也是换一个世界最便宜的方法。方法二调整直方图均衡强度。histeq(temperature_map, alpha0.33)中的alpha控制气候分布的均匀程度。alpha越接近 1气候越均匀越接近 0越容易出现大片极端气候区。方法三修改查找表 biome_image.png。这是进阶玩法把assets/biome_image.png中某些色块替换为你自定义群系的标识色再配合biome_colors就能实现温度降水→群系映射的自定义。例如想让高温高湿区域长出针叶林直接改对应色块即可。第三步自定义地形高度风格贝塞尔曲线每个生物群系的地形起伏风格由biome_height_maps中的filter_map参数决定它本质是一条三次贝塞尔曲线控制海拔→最终高度的映射关系biome_height_maps [ # 沙漠高差小起伏平缓 filter_map(height_map, smooth_height_map, 0.75, 0.2, 0.95, 0.2, 0.2, 0.5), # 热带草原略有起伏 filter_map(height_map, smooth_height_map, 0.5, 0.1, 0.95, 0.1, 0.1, 0.2), ... ]filter_map的 6 个关键参数分别是控制点坐标和a曲线终点纵坐标、b细节与平滑混合权重。经验法则想让地形更平坦把控制点向(0,0)-(1,1)对角线靠拢想要陡峭山脉增大中间控制点的纵坐标差值想要更多地形细节减小b让高频噪声占比更高。第四步控制树木密度与分布tree_densities [4000, 1500, 8000, ...]依次对应 9 种群系的树木数量。数值越大树木越密设为 0 则该群系寸草不生。注意place_trees还会受maska和adjusted_height_river_map0.5两个条件约束——树只会种在群系掩膜内且海拔适中的陆地上所以单纯调大密度并不会让树长到水里或山顶。第五步批量生成地形并快速验证二次开发改完代码后推荐先用单场景脚本快速验证效果python scripts/single_terrain_gen.py --size 1024 --seed 762345 --outdir ./my_world它会输出biome_map.png群系分布图、biome_height.png高度图、biome_trees_dist.png树木分布图等中间产物一眼就能看出你的自定义是否生效。确认无误后再用 scripts/batch_terrain_gen.py 并行批量生成训练或测试数据集python scripts/batch_terrain_gen.py --size 2048 --seed 42 --outdir ./data/terrain_dataset --bs 32 --parallel --num_workers 8生成的地形可通过 inference.py 渲染成可漫游的 3D 世界其中terrain_generator.py --size {} --seed {} --outdir {}这一步会自动被调用所以你自定义的地形会直接进入渲染流程。渲染参数相机轨迹、分辨率、采样数在 configs/scenedreamer_inference.yaml 中调节例如camera_mode支持 0-9 十种镜头运动方式。二次开发常见坑位提醒参数列表长度必须一致biome_names、biome_colors、biome_height_maps、tree_densities四个列表必须一一对应增删群系时务必同步修改种子一致性PCGGen使用np.random与固定种子想复现同一个世界请保持--seed不变查找表分辨率biome_image.png会被 resize 到 256×256 再参与映射改图时保证色块边界清晰即可水体会自动覆盖河流与海洋区域会被sea_color覆盖别把群系颜色设置成接近海蓝色[12, 14, 255]否则陆地会被误判为水域。总结通过修改 terrain_generator.py 中的生物群系列表、温度降水映射、贝塞尔高度曲线和树木密度四个维度你就能完全掌控 SceneDreamer 的地形风格。从换种子到改查找表这套二次开发方法可以从零打造属于你的专属地貌。动手试试让 SceneDreamer 生成一个从未有人见过的世界吧【免费下载链接】SceneDreamer[TPAMI 2023] SceneDreamer: Unbounded 3D Scene Generation from 2D Image Collections项目地址: https://gitcode.com/gh_mirrors/sc/SceneDreamer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考