1. 从“一个空镇子”到“有生活气的小镇街道”
做3D卡通风格的外景小镇,最难的不是建房子,而是让整条街“活”起来。很多新手一开始就扎进单体建模里,把精力全花在雕一栋楼的窗框上,结果拼到场景里一看——房子是漂亮,但街道像模型展示区,没有故事感,也没有让人想走进去的冲动。
这次的项目标题是“外景 3D卡通风格小镇街道”,我拿到手之后,第一反应不是去搜参考图,而是先把这类需求的底层逻辑理清楚:这个场景大概率要服务于什么项目?游戏关卡、动画短片、还是宣传片的背景?不同用途对资产密度、渲染规格、模型精度的要求完全不一样。
我这次是按“可复用的游戏外景资产 + 实时渲染流程”来做的,输出目标是一段可以放进引擎散步、或者转成序列帧做动画背景的完整街道。下面这套拆解思路和实操流程,基本都是从实际项目里磨出来的,不是教科书流程,更不是简单套模板。
先说结论:一个让人看得舒服的3D卡通小镇街道外景,核心不是模型多精细,而是“轮廓剪影”、“颜色分区”和“疏密节奏”这三样东西。模型精度只要到位即可,太多反而容易跳出卡通味;材质可以走手绘贴图或渐变着色器;灯光和雾效则是让整条街道统一在同一个氛围里的关键。
2. 场景整体拆解:从规划视角看这条街
2.1 先定景别和用途,再谈风格
接到这个标题,我第一件事是想清楚:这条街要展示给谁看?如果是第三人称游戏里的一截主街,那街道长度控制在80到120米比较合适,角色走起来大概四五十秒,刚好能建立区域印象,又不至于让人迷路。如果是动画短片里的固定镜头,那就要考虑镜头机位和视线焦点,街道的“舞台感”比“连续性”更重要。
我这次按“游戏可探索 + 序列帧背景两用”来设计,所以街道总长度定在100米左右,宽度在8到12米之间。造型上选了欧式小镇的街道骨架——石板路、两侧二层小楼、街角咖啡外摆、穿插的绿植和路灯。为什么选欧式?因为欧式小镇的建筑语言本身就自带“高低错落、颜色丰富、体块明确”的特点,特别适合卡通化处理。你不需要做真实的古典柱式和线脚,只要把“山墙、坡屋顶、老虎窗、招牌”这些特征符号提取出来,做适度夸张,就能让人一眼认出“这是小镇街道”,而不是居民楼。
这里有个容易踩的坑:一开始就把所有房子的高度做成一样。现实中街道的天际线是参差的,人眼对这条线极其敏感。我处理时把沿街十几栋建筑分成了四个高度层级:主体两层楼、局部三层塔楼、一层小铺子、二层带露台的住宅。分段错开,形成节奏。类似音乐里的鼓点,有重音有轻音,视觉才不闷。
2.2 色彩规划先行,防止“各自为政”
卡通场景最忌讳的是每个资产都用自己独立的固有色,最后堆在一起像颜料盒打翻了。我的习惯是动工之前先做一张全场景的“色卡金字塔”。
金字塔最底层是主街道大面积色,比如米黄色、奶油白、浅砖红这类暖色作为基底;第二层是建筑的屋顶、门框、窗棂等结构色,用偏灰的低饱和色去压住;第三层是点缀色,比如咖啡店的遮阳篷、邮筒、花车,用高饱和的蓝、红、黄做视觉勾子。
具体到这条街区:主墙面统一在暖灰、奶白、土黄、淡粉这个区间里,屋顶用红棕、赭石、深灰三种色循环。整条街的“暖色”占比控制在70%左右,剩下30%用冷色去平衡——比如蓝色的店铺门头、灰色的石板阴影。这样做的原因是,暖色会让场景显得亲切热闹,但全是暖色又会腻,冷色是给眼睛“透气”的窗口。
色卡确定之后,每个建筑模块在制作前就要把固有色贴图放进这张色卡里比对,超出色域的一律拉回来。这一步花的时间不多,但对最终整体感的贡献极大。
3. 模型资产的卡通化处理:不用高精度,但要高辨识度
3.1 体块概括:卡通化的核心操作
拿到参考图后,很多人的第一反应是照着照片一点点抠细节。但卡通化场景的建模逻辑是“概括大形、删除噪点、强化符号”。
以街边的二层小楼为例:照片里会有复杂的砖缝、窗台滴水线、檐口异形装饰,这些都直接删掉。我只保留“墙体、屋顶、窗户、门、小阳台”这五个核心部件,并且给每个部件做适度的体量夸张。窗户比真实比例放大10%,门加高加宽,屋顶的坡度加大,老虎窗做得圆润一些。如此一来,即使模型面数很低(整栋建筑控制在8000到15000个三角面),剪影仍然能看得清清楚楚。
面数控制上我建议分三个等级:主街道近景建筑用15000面以内,中景建筑8000面以内,远景背景板3000面以内甚至直接用片。实时渲染场景里,相机不可能同时给每个模型大特写,资源要留给主角和近景交互物。
3.2 模块化拼装,避免“复制感穿帮”
小镇街道如果直接复制粘贴同几栋房子,会有明显的“克隆阵”。我做资产时采用“模块化单元 + 变体组合”的方案:先做四个基础户型,然后在不变动主体结构的前提下,给每个户型准备2到3个可替换的部件——屋顶样式、阳台栏杆、门头雨棚、外墙贴面纹理。
组合时给每栋楼随机分配不同的替换件,再配合轻微旋转和缩放(控制在0.9到1.1倍之间),就会得到外观协调但不重复的十几栋建筑。这个思路和设计师做平面排版时“同一字体不同粗细搭配”是一个道理,统一中有变化。
建筑建模顺序我会按:墙体 → 屋顶 → 门窗 → 外饰件(雨棚、招牌、空调外机换成花盆和猫爬架这类更卡通的东西)→ 碰撞体。每一步都开一次平滑组检查,避免法线翻转。尤其是屋檐和窗台的位置,倒角要圆润,否则卡通感会被生硬的棱线拉回“硬表面模型”的观感。
3.3 道具层:街道的灵魂不在房子,在杂物
房子只是骨架,街道上真正让场景“像有人住过”的,是那些零散道具——长椅、路灯、邮箱、路牌、花箱、遮阳篷、店铺外摆的桌椅、流浪猫、自行车、墙上挂的藤蔓和晾衣绳。有人统计过,一个让观众觉得“真实”的街道场景,道具数量至少要占到建筑数量的1.5倍以上。少了会空,但太多也会乱。
我做道具的思路是“成组不散摆”:把道具按故事场景捆成小组。比如咖啡馆门口一定要有“遮阳篷 + 两桌两椅 + 小盆栽 + 立式菜单牌”,邮局门口要有“邮箱 + 长椅 + 路灯 + 共享单车”。这样每一组都是一个“小故事单元”,散落开就是整条街。如果只是随手乱放几把椅子,场景依然会显得“指标不足”。
为节省时间和保持统一,道具模型我用的是从通用资产库中改造的方案。比如长椅、路灯这类基础物件,先找商用授权的低模版本,导入后在原基础上调整比例、增加卡通倒角、重新绘制固有色贴图。这样做比自己从零建快很多,而且能保证拓扑质量。
4. 材质、光照与后期:决定“卡通感”的三位一体
4.1 材质思路:颜色分区与手绘贴图
3D卡通风格常见有两种材质路线:一种是用基础PBR材质配合高光控制,呈现出类似手办或玩偶的质感;另一种是手绘贴图路线,把明暗关系直接画进贴图里,不依赖灯光来区分体积。城市街道类外景,我建议两者结合起来:建筑墙面用手绘固有色贴图+NPR着色器(如果引擎支持,可以用带色阶的ramp光照),地面和木质道具保留轻度PBR属性,让粗糙度变化拉开层次。
手绘贴图不需要真实照片级的纹理,关键是“颜色分区”——把每个体块用明确的色块或手绘笔触分好。举例来说,一面做旧墙不是用脏迹贴图随机叠加,而是手动画上几块不均匀的色斑、一段落水管留下的水渍痕迹、一片常春藤爬过的阴影区域。这样做出来的旧化是有“表情”的,而不是脏贴图那种泛滥的随机感。
如果引擎支持,我强烈建议给建筑主体材质加一个“色阶过渡”选项,也就是把传统lambert光照换成三个梯级的明暗色带。这样光照一打上去,明暗交界处会形成卡通风格的硬边阴影,视觉上立刻就和写实物理材质区分开来。
4.2 灯光配置:不用太复杂,但必须“分层”
实时渲染的卡通场景灯光,原则是“主光定氛围、辅光拉层次、补光勾形状”。我在主街道场景里用了三盏平行光模拟阳光:主光从东南方向45度角照射,色温偏暖(色值大约在255, 236, 210),强度按单位标定在30000左右(不同引擎数值不同,以实际亮度为准);辅光从北面补一个冷调的弱光(色值约在180, 210, 255),强度只有主光的四分之一;第三盏是在街巷深处补一个微弱的暖光,防止阴影太闷。
这样的三层光照正好模拟了真实天空环境下太阳 + 天光 + 反射光的关系。很多新手只打一盏主光,导致阴影纯黑,卡通场景立刻变得脏、闷、像阴天。记住一条经验:卡通场景的阴影区永远不要用纯黑,至少要有25%的有效亮度。
4.3 体积雾、空气透视与后期调色
街道能不能“透气”,靠的是空气。我给场景加了轻量指数高度雾,远处建筑、背景板会自然降低对比度、偏蓝偏灰。这样做有两个作用:一是拉开近景和远景的距离感,让镜头运动时产生视差;二是让街道尽头的背景自然淡出,弱化模型面的不足。
后期调色我走的是“微暖 + 轻微提升暗部”的路线。色温往偏黄方向拉一点点,曝光补偿控制在0.3以内,重要的是把暗部亮度提到20%上下,避免死黑。饱和度方面,整体不动,用分离色调给高光加一抹橙黄、阴影加一丝青,形成最普遍的“观光小镇”色感。最后加一个轻微的暗角,把视线往街道中心收拢。
5. 实操流程:从白模到成品,我按什么顺序推进
5.1 阶段一:灰盒与比例验证(占整个项目20%时间)
我习惯先做一版极其简单的灰盒,用标准立方体加圆柱搭出整条街道的体块关系。这一步不追求好看,只验证三件事:街道宽度和建筑高度的比例是否舒服;主要相机位看过去的前后遮挡关系是否成立;道具点位放上去之后,路上的动线是否顺畅。
这步如果跳过,直接进入高模制作,后面发现空间感不对会很麻烦。灰盒阶段修改一次的成本极低,而到了资产全做完后,任何移动都等于重做一遍场景布局。
5.2 阶段二:公共资产优先,地台和街道先落定
我会最先做地台、路面、路沿石、排水沟、路灯、行道树这几类“公共资产”。原因是它们定义了整个场景的坐标系和比例感,后续所有房子的摆放都以路面为准。
地台用16米见方的模块拼接,配合非重复纹理和顶点颜色做破损与污渍变化。石板路的砖缝用模型切面或高度贴图表现,不建议纯靠贴图画缝,因为实时渲染贴地观察时,假缝会“贴不住”,一眼就能看穿。路灯底座和树木的种植点要避开路面拼接缝,避免穿模。
5.3 阶段三:建筑群由近到远,控制完成度梯度
建筑制作顺序我从街口最显眼的两栋开始,因为它们承担了“第一眼印象”,精细度最高;随后做中段建筑,再往街道尽头推。越远的建筑,贴图尺寸、模型面数、材质细节逐级递减。这种“完成度梯度”能大幅节省性能消耗,也能在视觉上自动形成空气透视的基础。
做个具体对比:近景建筑我可能会给墙面单独画一张2K的带手绘纹理的贴图;中景建筑就直接用统一的色板加光影烘焙;远景甚至可以用正交照片投射到简模上的“billboard式”背景板。只要近景的细节密度足够,人在行走观看时不会注意远景的“偷工减料”。
5.4 阶段四:布光、烘焙与后处理联调
所有白模替换成正式资产后,我开始搭光照。启用静态烘焙前,先把所有动态物(可移动的门、灯、椅子之类)单独分层,避免烘焙结果出现重叠阴影。光照贴图分辨率我给建筑设定为每单位面积2到4个texel,地面的可以适当降低到1或1.5,因为地面纹理的明暗细节不需要太精确。
烘焙完成后进入后处理阶段,此时准备一组“调色预设”,比如晴日清晨、午后烈阳、傍晚黄金时刻各存一份。每份预设其实就是几个数值的集合——色温、曝光、对比度、饱和度、暗部亮度、LUT贴图路径。这样后续出图时,只要一键切换预设就能得到不同的氛围版本,而不需要重新改材质。
6. 常见问题与排查技巧实录
6.1 模型看着单薄,剪影不丰富?
这是外景场景最常见的观感问题。排查思路先抽掉所有贴图和材质,直接看线框,如果线框显示的轮廓本身就“东一块西一块”,那就是模型体块设计的问题。解决办法是给建筑增加“附加轮廓”:比如烟囱、老虎窗、挑出的阳台、屋顶的装饰木架,以及沿街的雨棚和招牌。这些部件不需要功能意义,只要在剪影上增加破口,剪影就立刻生动了。
另外一个技巧是“在天际线处做文章”。街上几栋建筑的山墙轮廓如果都像长方形,天际线就平了;改成少数几栋加高,做成钟楼或尖顶,天际线会产生一个明显的“高调”,全街的剪影就立体起来。
6.2 卡通材质总是发灰,不够干净鲜艳?
发灰的根源多半在贴图对比度不足和灯光灰蒙蒙。贴着“卡通”标签的项目,贴图固有色一定要够饱和,同时用色阶控制明暗,而不是让灯光把固有色稀释掉。使用纯色贴图时,饱和度开在75%到85%左右是安全区间,太低了发灰,太高了刺眼睛。
如果画面仍发灰,检查主光的色温和强度,再检查是否开了全局光照后的“泛灰”现象——有些引擎的自动曝光和历史追踪会降低对比度。可以手动把曝光锁住,并适当增加对比度参数,通常立竿见影。
6.3 道具摆放穿模严重,怎么快速解决?
穿模多数是因为“只有视觉模型,没有碰撞盒或放置规则”。我的解决方法是做一个放置工具插件:把常用道具整理成一栏一栏的“智能放置”模式,放置时自动吸附路面、自动避让建筑边界、自动随机旋转。这样可以大幅度减少手动调整时间。
另一个土办法:先在鸟瞰图模式下按图层摆放道具,再用第一人称视角巡场,逐组检查视线内的穿模。巡场一圈大约15分钟,能发现九成问题。这个办法虽然笨,但很管用。
6.4 建筑单体好看,组合起来却凌乱?
这是风格统一性问题,通常只要做两件事:第一,检查色卡覆盖。如果某栋楼用了色卡之外的全新颜色,把它改回去;第二,拉一个“线宽统一”的检查——卡通风格经常会用描边或黑线卡边,如果每栋楼的描边粗细都不同,组合后就会显得乱。统一到同一个像素宽度(后处理描边)或者同一个模型挤出量,整体感立刻提升。
7. 个人心得:这个项目里我比较在意的几个细节
这条街道项目做下来,我自己整理出三个比较重要的经验,放在最后分享给各位。
第一,永远不要在模型单体上恋战。场景编辑里最值钱的时间是“布局和联动”的时间,一个转角怎么转、两栋楼之间留多少缝、树荫投在哪里,这些比单栋楼的窗框样式重要得多。把单体的完成度控制在“整体需要”的档位,才能保证全街水平线以上。
第二,每次给场景加道具,都要回头看一眼“人的视线节奏”。一条好看的街道,视线应该被引导:先看到街口的地标建筑,然后被中段的咖啡外摆吸引,再顺着路灯和行道树推到街道尽头。如果你发现视线无处安放,那就说明道具的疏密节奏需要调整。通常在街角、路口、店铺门口增加视觉焦点物,视线节奏就能拉回来。
第三,风格化外景最容易被忽略的是“地面反馈”。一栋楼的卡通感再强,如果它站的地面还是写实石板路,观感就会撕裂。所以地面除了贴图外,我会用顶点色画一些“使用痕迹”——比如门前磨得发亮的地砖、雨水口附近变深的颜色、树影落在路面上微微泛蓝的色块。这些细节面积虽小,但实际上它们才是让“卡通小镇”显得像“有人居住的小镇”的粘合剂。
这个项目做到后期,我回头看了很多早几天的截图,明显能感觉到前半段做出来的建筑区“干净但冷清”,后半段加入道具、调色和空气透视之后,街道就开始有了温度。外景3D卡通风格的小镇街道,技术指标固然重要,但真正拉开水平差距的,始终是创作者对“生活感”的理解和还原。希望这篇内容对正在做类似场景的同伴有帮助。