首页 / 作品 / 古城 · 市井

古城 · 市井

一座活着的古代中国城市 —— 从城墙到瓦片,都是脚本生成的

古城·市井 全景鸟瞰
类型
3D 场景 / 古城模型
引擎
Godot 4.7(Forward+ / Metal)
美术
Python + Blender 程序化生成
素材库
583 个 CC0 资产 · 5.8 GB
出图
79 张实机截图(本页精选 9 张)
状态
可运行 · 持续更新

🏯 这是什么

一个「活着」的古代中国城市:44 个人口各过各的日子 —— 吃饭、耕作、去市集交易、天黑回家睡觉;市集上摊位真在成交,累计的钱数一天天涨。天气不是贴图,是规则:一年四季按季节概率自己演化,也会被你手动锁住。

  • 五档天气:晴 → 阴 → 雨 → 暴雨(带闪电)→ 雪,雨会打湿地面、雪会积在屋顶与街面
  • 电影模式:2.35:1 宽银幕 + 景深 + 全量调色 + 手持呼吸,配合自动运镜,按一下直接出片
  • 全部可重建:布局、贴图、建筑、角色都由脚本生成,改一行参数,整座城重来一遍
Gallery

实机画廊

全部是引擎里直接截的图,点开看大图,左右键翻页。

Behind the scenes

技术细节

🧱 程序化美术管线

  • tools/gen_layout.py — 生成城市布局:街道、地块、城墙、河道 → shared/city_layout.json
  • tools/gen_textures.py — 程序化 PBR 贴图(1024²,albedo / normal / rough 三件套),瓦片、砖石、木料、夯土全是算出来的
  • blender/build_city.py — 建筑与城墙模型 → godot/assets/models/*.glb
  • blender/build_chars_pro.py — 角色模型,关节命名与 villager_rig.gd 严格对齐,动画直接可用

改完贴图或模型,跑一次 godot --headless --import 就能整城重建 —— 没有一章是手工拖出来的。

🌦️ 天气与天空

  • 按季节自动演化:马尔可夫概率链,四季各不相同;也可以手动锁住某一档慢慢看
  • 粒子全跟相机:三层雨 + 两层雪,发射盒每帧贴到镜头前方 —— 人在城里走到哪儿,雨就下到哪儿
  • 连锁反应:风向量走全局 shader 参数,树、竹、庄稼按顶点高度摆动,风大时飘落叶;地面水花由小涨大
  • 闪电:2~4 次脉冲包络,同时点亮环境光 / 方向光 / 天空,亮度刻意压住不过曝(高光截断 0.13%)
  • 材质随天气变:所有不透明表面共用一个 shader,湿度与积雪实时改变粗糙度和颜色

📊 性能与素材

  • 先修基准工具(macOS 后台节流会造成假 30fps),再拿诚实基线:静态几何 24ms(占 56%)、surface 噪声 11ms、天空 radiance 重烘 8ms
  • 583 个 CC0 素材(4K 材质 / HDRI / 中式道具 glTF,5.8 GB)全部支持离线复验:--verify 一文不差
  • 五档画质:低 / 中 / 高(高:SSAO + 体积雾),帧率不够就往下切,画面依然成立

想看别的作品?

接着看 Hello Kitty 方块世界、修仙沙盒与客户网站案例,或者直接找我聊你的场景。