下载 App
开发者日志 #3:通过 Demo 迭代美术——从一张效果图到七幅画卷
修改于10/174 浏览
开发者日志 #3:通过 Demo 迭代美术——从一张效果图到七幅画卷
《万物生长》(暂定名)· 2026-10-12
上一篇日志我说"最喜欢 A/B 方案"。这篇想坦白地讲:最开始尝试的是A,因为我以为A更简单更易实现,但这个结论我只坚持两天,然后把整件事推倒重来了一遍。好消息是,Demo 成了推倒重来的成本最低的方式——这也是我越来越依赖它的原因。
一、把选关页变成"美术馆"
现在的选关页(launcher.lua)已经不止一卷。经过反复的迭代,它现在有七幅画卷:样张 A 扁平自然笔记、样张 B 水墨淡彩、样张 C 精灵绘卷,加上这一周新长出来的 D / E /F 三张样张,以及排在最前面的正式载体 G「水墨绘卷 · 分层山峦 + 手绘草簇」。
它们跑在同一颗模拟内核上。也就是说,在 C 关看到的鹿群迁徙、在 E 关看到的草毯枯荣,是同一份世界状态换了七种画法。这件事听起来朴素,但它是我们敢反复推翻美术的底气:画法怎么改,生态规则纹丝不动;规则要改,也不必碰七套渲染。
技术上切换画卷时要做一次 UI.Shutdown() 再 UI.Init(),避免两个 NanoVG 上下文打架;而且切换只能推迟到下一帧执行——在点击回调里当场销毁控件树是会崩的。这两条坑上一篇提过,这周又在新关卡上验证了一遍,算是老伤疤了。
二、D → E → F → G:四次"哪里不对"
这四关不是拍脑袋堆出来的,每一步都源于拿 Demo 对着效果图找茬:
关卡 D「手绘草簇」——最大化还原《山野生灵》概念图的一版:远山横带、主峰瀑布、中丘做背景(带轻视差),地面是水彩淡底加四形态手绘草簇精灵,鹿狼松石全是贴图,按 y 深度排序。第一次打开它我们内部一片"哇",但跑起来十分钟就发现了违和:每一株草都在自己动,可整片草原没有"一块草原"的感觉。细节对了,气氛不对。
关卡 E「晕染草毯」——针对上面那句反省的重做:底毯改成一次成像——一张 1920×1152 的手绘连续草原铺满整个世界矩形,不平铺、无重复单元,山体区的镂空和画面边缘的羽化直接烤进 alpha。草的反馈不再逐株变化,而是拿纸色的大软圆做低频浓淡:过牧、火烧的地方把毯子"洗"回纸底,草茂处留全毯。这版一眼就有气势了,新问题也来了——山是死的,草不能反应局部荣枯。四季在变、草地会秃,三座山从头到尾一个颜色,像贴在画上的剪纸。
关卡 F「分层山峦」——为山做的专项。我们把每张山形贴图离线拆成两层:base 是裸岩,cover 是山坡植被,两层叠回原貌。cover 的透明度接该山"山脚环带"的郁闭度(草势 × 林木存量),于是过牧滥伐会让山坡渐秃,露出近纸底色的米灰裸岩——秃山如水墨淡墨留白;休养几年,cover 层慢慢回绿(做了 EMA 平滑,避免闪烁)。岩与植被再各自接四季乘法染色:嫩绿、浓绿、赭黄、冷灰,冬季只做整体冷染,不加雪帽。这一层改动让"生态好"第一次拥有了远景可读性:玩家不需要打开任何面板,抬头看一眼山就知道山谷最近过得怎么样。
关卡 G——收编为正式载体。F 的山 + D 的草簇:地面回退到手绘草簇活实体(啃食渐矮渐淡、入雪渐隐、底部枢轴风摆),因为 E 的整幅草毯好看是好看,但草被鹿一口口啃掉的过程它表达不出来。玩法迭代(下篇日志的主角)就全部落在 G 上。
一个还在争论的悬案:满生态时 F 和 E 视觉完全一致(base+cover 还原 E 的原貌),只有恶化时才分道扬镳。所以要不要保留其他效果做独立皮肤?暂时留着,后面再说,反正选关页摆一幅画又不花钱。
三、地形"长"出来了:确定性高程 + 会收缩的水洼
这周新模块 sim/Terrain.lua:用 value-noise 算一张确定性高程场,从里面挑出四类实体地貌——高地岩群(簇状巨岩)、低洼湿地水洼、河岸砾石滩、中坡灌木丛。
两个细节我们特别满意:
- 种子取自 world.seed。同一个种子重开,岩群和瀑布的位置分毫不差——地貌从此也是"回放系统"的一部分,这是内核确定性承诺的自然延伸。
- 水洼在干旱时会收缩。它本来只是个渲染特征,但我们把它接上了模拟的 water 场(下篇细说),于是旱季来临时画卷上的小水洼会一圈圈变小。没有人要求过这个功能,它是美术和系统握手后自己长出来的。
四、下一步
下一步应该继续细化游戏规则了,这个过程中还会遇到哪些问题?我们边做边看!
最后,来看看各版美术的实际效果吧:





评论区说说,你喜欢哪一版?
—— 开发组










