做室内场景最怕的是什么不是模型不够精细而是资源包拿到手拖进Unity就一片粉、灯光一烘就漏光、换个渲染管线材质全部失效。我前前后后做过好几套家居场景的资源包这套现代风格客厅算是踩坑踩得最透的一套。整个包覆盖了从单个家具的建模规范、贴图材质参数、灯光烘焙配置到场景合批优化、打包发布的完整链路拿来就能直接替换或当模板改造成其他户型。这篇文章我会把这套资源包从制作到落地的每一步拆开讲包括资产清单怎么组织、贴图材质参数怎么定、灯光阴影怎么调、移动端和PC端怎么适配以及那些文档里根本不会写的坑。不管你是正在搭室内场景的Unity开发还是刚入门想做资产包变现的美术同学这篇文章都值得耐心看下去。我会尽量说人话把参数背后的理由也讲清楚——不是让你背参数而是让你知道什么时候该改哪个数。1. 资源包的整体设计先定规矩再动手1.1 资产清单与目录结构很多人做资源包有个坏习惯模型做一堆文件名随便起拖到Unity里全靠一个个手动关联。这套客厅资源能直接交付关键是目录结构从一开始就按Unity的命名习惯和依赖关系来设计。资源包的顶层目录分成四块Models、Textures、Materials、Scenes外加一个Documentation文件夹放说明文档。Model下面按家具类别再细分比如Sofa、CoffeeTable、TVCabinet、Bookshelf、FloorLamp、Curtain、Plant这些子目录每个模型一个Prefab模型本身用了真实比例——沙发宽度控制在180cm左右茶几高度在40到45cm这些都是室内设计里的常用尺寸拖进场景不用二次缩放。这里有个容易忽略的点所有Prefab的材质引用统一指向Materials目录下的材质文件而不是每份Prefab里内嵌一个材质副本。这样做的好处是后续要批量调整整体风格比如把沙发布料从灰色换成米色只需要改一个材质文件所有引用它的Prefab会同步更新。我见过不少资源包是每个物体一份独立材质改起来非常痛苦等于失去了资源包应有的复用性。1.2 风格选型为什么是现代风格而不是欧式或工业风标题里现代风格不是随便写的。从资源包的市场价值和复用性角度考虑现代风格是性价比最高的选择原因有三个。第一现代风格的家具造型以几何体为主沙发、茶几、边柜基本都是方方正正的形体建模工作量相对可控模型面数也能做得很干净对移动端友好。第二现代风格的材质以布料、木质、金属、玻璃、大理石为主这几类材质在PBR工作流里的表现最稳定不像欧式那种复杂的雕花和描金对贴图精度和模型密度要求极高做不好就容易显得廉价。第三也是最重要的一点现代风格受众最广不管是做室内设计展示、数字孪生项目还是休闲游戏的场景背景现代客厅都是出现频率最高的场景之一。我实际制作时把色调控制在低饱和度的莫兰迪色系大面积用暖灰、米白、浅木色再用少量深色金属和绿色植物做视觉锚点。这样出来的场景既有层次感又不会因为配色太重口味而限制使用场景。1.3 渲染管线的选择URP是默认答案资源包制作时还需要提前定下渲染管线。Unity现在的主流选择是URP也就是通用渲染管线这套资源包也默认按URP制作。为什么不用内置渲染管线或者HDRP内置管线虽然兼容性最好但它的光照和材质表现力明显落后而且Unity官方已经在推动项目往URP迁移HDRP画质确实顶但对硬件要求高不适合移动端资源包的适用面会收窄。URP的好处是既能满足PC端的画质需求也能通过质量等级切换适配移动端。资源包里的所有材质和Shader都在URP环境下调过默认情况下你在Unity 2021.3以上版本新建URP工程把资源整包拖进去就能直接用不需要额外装插件。如果项目还在用内置管线那就需要做一次材质转换或者直接重写Shader这部分我在后面会单独讲。2. 模型与贴图决定场景质感的底层细节2.1 建模规范面数和拓扑怎么控制模型面数直接决定这个资源包能用在哪。纯PC端可以放肆些但资源包要考虑移动端所以我给每个模型都定了面数预算大件家具比如沙发控制在6000到15000个三角面小件比如台灯、装饰品控制在500到3000个三角面。整套客厅场景所有模型加起来控制在15万到20万个三角面这个量级在手机上用URP跑只要合批做得合理帧率不会差。拓扑上有一套硬规矩。所有可见面必须是四边面且法线朝外这个看起来基础实际上很多外包模型都会栽在这里——法线反了在Unity里显示就是黑脸排查起来相当费劲。圆柱体和球体的极点要藏到看不见的面比如桌腿底部、灯具的灯罩内侧。UV必须铺满0到1的UV空间重要物体的UV island之间留至少8到16像素的padding防止光照烘培时出现漏光和接缝问题。还有一点每个模型必须单独设置generate lightmap UV也就是Lightmap UV的第二套UV由Unity自动生成后再手动检查一遍。自动生成的UV经常会出现island贴得太近导致烘焙漏光的情况尤其是沙发的靠垫缝隙和茶几边缘这类地方手动调整是必须做的功课。2.2 PBR贴图参数与贴图密度所有模型都走标准的Metallic工作流贴图分四张Albedo、Normal、Metallic、Roughness细一点的模型还会补一张AO。这里最容易出问题的是贴图颜色的线性空间设置。Albedo贴图的sRGB保持勾选但Metallic和Roughness必须关掉sRGB用R通道放MetallicG通道放Roughness这样一张贴图就能塞两个通道存成压缩纹理时能省一半显存。贴图分辨率也不是越大越好。这套资源按物体尺寸和视觉重要度分配贴图大小沙发、茶几这种视觉中心用2048x2048地毯、窗帘这种大面积物体用2048小摆件和灯具用1024或512。贴图密度的标准大概是每米1024像素按这个标准算下来沙发正面一个坐垫面大约需要1024的分辨率细节才够清楚再往上就是浪费。这里必须强调一下texel density的一致性。如果沙发的坐垫用的1024贴图、靠背用的512贴图两者在视觉上会出现明显的清晰度落差一眼就能看出不协调。所以我建议不管物体大小统一按每米1024像素这个密度来分配贴图分辨率宁可大物体用小图也不要小物体用大图。2.3 从Maya/Blender到Unity的导入避坑模型在Maya或Blender里做完导到Unity这一步就有好几个雷。最大的雷是坐标系的差异。Maya默认是Y轴向上、右手坐标系Blender则是Z轴向上Unity也是Y轴向上所以从Maya导出的FBX直接进Unity基本不会歪但如果你用的是Blender导出时一定要把Forward轴设为-YUp轴设为Z否则模型进来可能横躺或者旋转朝向不对。还有个特别常见的坑Maya里的法线贴图导进Unity后明暗方向不对看起来像光照从反方向打过来。这是因为不同DCC软件的法线贴图在Z轴朝向上有左右手系差异。解决办法是在Unity的模型导入设置里找到Normal Map的选项勾选Create from Grayscale再反转绿色通道或者直接在贴图导入面板的Normal Map设置里打开Flip Green Channel。我见过很多人花大量时间重新烘焙法线贴图实际上就是一个开关的事。导入设置里还有一个参数很容易被忽略Scale Factor和File Scale。Unity默认的Scale Factor是0.01也就是说一个100cm的立方体在Maya里是1个单位导入Unity变成1米。这个换算关系一旦搞错整个场景的比例就全乱了。我的习惯是在Maya里就把模型按真实尺寸做好一个单位等于1厘米导入Unity时File Scale设为1Scale Factor设为0.01这样所有模型的比例是一致的不会出现沙发大得像个船的情况。3. 材质与Shader别让模型死在第一步3.1 URP下的PBR材质参数搭配材质是资源包和普通模型包拉开差距的地方。同样是PBR材质参数调得对不对视觉差距非常大。URP的Lit Shader作为基础Albedo、Metallic、Roughness、Normal四个通道接上对应贴图之外还要注意几个次级参数。Surface Options里的Workflow Mode选Metallic这个是标准的PBR工作流。Smoothness不是直接从贴图读而是通过Smoothness Remap把Roughness反转映射过来——URP里默认Smoothness Source选的是Metallic Alpha如果贴图里没有存Smoothness材质会显得过亮或者过暗。具体的做法是把Smoothness Source改成Roughness贴图然后Smoothness Remap的最小值设为0最大值设为1这样一个Roughness为0.6的物体显示出来就是0.4的光滑度逻辑上才对得上。布料和皮质这类材质还有一个细节是法线强度。URP的Lit Shader里没有直接暴露法线强度参数如果需要削弱法线效果可以在贴图导入设置的Generate From Grayscale下面调整Bumpiness我通常把布料的Bumpiness从默认的1调到0.3到0.5这样布纹的凹凸感很克制不会在灯光下显得像搓衣板。金属材质则相反法线强度可以保持1因为金属需要清晰的反射轮廓。3.2 透明材质与双面渲染的处理现代风格客厅里透明材质不少玻璃茶几台面、落地灯罩、窗帘纱。玻璃材质在URP里有个大坑默认的PBR玻璃要么太透看不出存在感要么反射强得看不清后面的物体。我的做法是单独做一个多层材质主材质用Lit Shader配蓝色的AlbedoMetallic拉到1Roughness在0.05左右给玻璃一个明显的菲涅尔反射再叠加一层假的反射用反射探针的数据做环境反射这样玻璃在灯光下会有边沿发亮的通透感而不是一块毫不折射的平板。纱帘和窗帘这类需要双面显示的材质在URP Lit Shader下默认是不支持双面渲染的。Surface Options里有Render Face选项默认是Front改成Both才是双面渲染。不用这个修改就只有一个解决办法复制一份模型把法线翻转材质用双面但模型面数翻倍烘焙和合批都不划算。所以如果你拿到一个模型发现窗帘从另一面看是透明的或者直接消失了先去检查Render Face不要先怀疑模型破了。双面材质还有个阴影上的坑。Render Face设为Both之后如果这个材质还开了Cast Shadows投射出来的阴影经常会出现花屏一样的条纹因为双面模型在阴影贴图上会自遮挡。解决办法是把这类材质的阴影模式改为Off或者单独给模型做一个不透明的碰撞体和阴影替代物这个技巧在很多室内渲染场景里都适用。3.3 材质变粉或变黑的处理流程任何Unity项目都会遇到材质变粉的问题。粉色的原因只有一个Shader丢失或不兼容。URP工程里用了内置管线的Standard Shader材质或者没有把Shader文件打包进行AssetBundle材质就会变成洋红色。排查思路很简单先看Console窗口的报错基本会告诉你缺的是哪几个Shader然后去材质面板看Shader一栏是不是显示为空的或者显示着Built-in字样。材质变黑的情况要复杂一些通常是三种原因叠加一是模型的法线在模型空间翻转了二是贴图没有正确设置为对应类型三是光照烘焙没有正确计算。排查顺序是先确认Mesh的Normals方向把Scene视图的Shading Mode切到Normals如果看到大面积蓝色被紫色和红色大片覆盖说明法线反了在导入设置里勾选Normals-Flip即可。然后检查贴图的导入类型Normal Map类型的贴图如果被导入成Default材质会显示得很怪异表面像覆了一层水渍。如果以上都没问题但模型依然发黑那就检查光照窗口的Auto Generate开关。URP项目里如果开了Auto Generate光照会实时更新但禁用状态下场景光照信息是旧的新建的模型就落在黑暗里。手动点Generate Lighting问题立刻解决。4. 场景搭建与灯光氛围实现4.1 场景布局与Prefab落地技巧资源包里的演示场景其实就是一个可以直接打开的Scene文件但这个场景的搭法是有讲究的不是说把所有家具拖进去摆就行了。我建议的分层思路是地板墙体这类大块基础设施单独放一个层家具动态物体放一个层装饰品、植物、灯具再分别放层这样后续做灯光排除、结果剔除和碰撞排查都会方便很多。摆放家具时我习惯以真实的室内布局逻辑为前提。沙发居中偏左茶几放在沙发正前方40cm处电视柜对着沙发摆放中间留出80cm左右的通道宽度地毯放在茶几下方并往外延伸30cm这样场景看起来不像家具店仓库而像一个有人生活的客厅。植物和灯具这些装饰品不要对称摆放单侧放一盆大叶绿植靠墙放一个落地灯视觉重心就稳了。每个Prefab落地后都要检查两件事碰撞体和Layer。大部分家具模型我从DCC软件导出时就不带碰撞体到Unity里手动添加Box Collider或者Mesh Collider。沙发的碰撞体我用粗精度的Box Collider代替Mesh Collider虽然牺牲了一点点精确度但性能开销小很多对玩家交互来说也够用了。地毯这类地面物体不需要碰撞体不然角色走过去会像踩在台阶上。4.2 灯光系统与光照烘焙参数室内场景的氛围七成靠灯光。这套资源包用的光源方案是混合光照模式直接光源用平行光和若干点光源做实时照明大面积漫反射交给Lightmap烘焙。具体参数上场景里有一个平行光作为主光源模拟窗外日光颜色温度用稍微偏冷的淡蓝色强度在0.6到0.8。室内补充三到四个点光源沙发旁的氛围落地灯用暖黄色色温调到3300K左右电视柜上方的射灯用中性白光天花板连杆吊灯用柔和的暖光做整体环境照明。每个点光源的范围都仔细调整过不要一拉到底照亮整个房间灯光层次全靠范围控制。烘焙参数是这套资源包最值钱的部分。Lightmap Resolution我设置在40到60 texels per unit这个值在客厅这样的中型场景下能保证贴图边缘的接缝不明显同时烘焙时间不会长得离谱。Lightmapper用Progressive GPUBounces设为2到3Indirect Resolution设成2然后关键的一步把Compress Lightmap勾上但别勾最终穿用的高压缩选Low Quality即可高压缩会让光照边缘变模糊。烘焙完成后一定要检查漏光。常见的漏光位置在沙发靠垫和扶手缝隙、地毯边缘、墙角这些地方。出现漏光不要急把漏光附近的Lightmap UV的Padding加大或者手动把Model Import的Lightmap UV参数里Pack Margin调到0.05以上重新烘焙基本就好。4.3 后处理与反射探针的搭配URP项目里的后处理堆叠对画质影响非常大。我用的是Bloom、Color Adjustments、Tonemapping和Vignette这四件套。Bloom的Intensity控制在0.2到0.3别拉太高不然灯罩边缘会糊成一团光斑。Tonemapping选ACESACES对高光压缩和暗部细节的处理比Neutral自然得多室内场景尤其明显。Color Adjustments里把Saturation调到105左右Post-exposure补偿0.2整体画面会亮堂一点但不发灰。反射探针是玻璃、金属材质表现的关键。场景里我在客厅中央摆一个Reflection ProbeType选Baked重要性关掉这样金属茶几和玻璃桌面的反射不会出现明显的立方体贴图边界。如果场景里有大面积的镜面物体比如电视屏幕和落地镜需要单独再放一个Probe并且把Importance打开否则镜面反射会看起来像贴在屏幕表面的一张图。还有个小技巧反射探针的Refresh Mode在PC端可以选Via Scripting配合一个延迟几秒的定时刷新实测场景里金属材质的表现会稳定很多代价是资源开销非常小。移动端则保持默认的On Awake即可烘焙一次就够了。5. 性能优化与多平台适配5.1 Draw Call与合批策略室内场景的Draw Call很容易爆炸因为家具模型零碎材质数量又多。整套客厅如果完全不优化Draw Call轻松到三四百在手机上直接卡成PPT。我的优化思路从以下三方面同时下手。第一步是Static Batching。地板、墙体、电视柜、书架这些不动的物体勾选Static里面的Batching Static选项Unity会在打包时自动把它们的Mesh合并成一个大的Draw Call。沙发动所以不勾但沙发内部坐垫和靠背之间可以用GPU Instancing因为它们的材质一样。第二步是纹理合图Texture Atlas。把地毯、桌面木纹、金属装饰这些小物体的贴图手动合并到一张2048的Atlas里对应的材质也合并成一个材质。这个操作能直接把几十个Draw Call砍到三五个。但合图有个前提这些物体的UV要重新映射到Atlas的对应区域模型面数多的时候重新映射UV的工程量不小所以我建议只在同类物体多且材质相近时才做合图比如植物盆、书脊、装饰摆件这堆小东西。第三步是材质数量控制。整套场景最终材质总数尽量控制在40个以内每个材质物尽其用避免为了微调而复制出好几个造型相同的材质。材质数量越少合批和打包的前期工作就越简单。5.2 LOD与遮挡剔除配置沙发、茶几这些大物体在镜头拉远后完全可以用低模替代。我给所有大件配了三级LODLOD0用6000到15000面LOD1砍一半左右LOD2再砍一半过渡距离分别设在15米和30米。这样不管是特写镜头还是全景展示画面细节都跟得上性能开销还能降下来。遮挡剔除和LOD是搭配使用的。Unity的Occlusion Culling需要先烘焙把场景以Camera的视角在烘焙窗口中过一遍生成一套遮挡数据。这里有个容易出错的地方Culling Mask里如果漏了某一层物体它就不会参与遮挡计算结果是这个物体在应该被墙挡住的时候照样渲染浪费了优化空间。所以烘焙遮挡数据前把场景里所有可见物体统一设置到合适的Layer里。5.3 贴图压缩与多平台打包同一个资源包PC和移动端的贴图压缩格式是完全不同的。PC平台用BC7或者BC3画质好但体积大Android推荐ASTCiOS推荐ETC2这两类格式在移动设备上的解码效率高。URP项目里可以在Quality Settings的每个平台质量档里分别设置Texture Quality或者在Build Profiles里设置Platform Overrides按平台指定纹理格式。打包的时候特别注意Shader的收集问题。URP的Shader如果没打进包运行时会全粉。最简单的做法是把所有用到的Shader打进Always Include Shaders列表或者用Shader Variant Collection手动收集变体。我遇到过一种让人崩溃的情况编辑器里一切正常打包跑起来玻璃全变成白色。原因就是URP Shader的透明变体没被打进包所以Package的变体收集必须用工具手动跑一遍。移动端的最终目标帧率建议按30帧来评估。实测这套客厅场景在骁龙中端芯片上不开启LOD只靠合批和遮挡剔除差不多能跑到40帧开启LOD和阴影质量压到中等之后稳定在50帧以上是没问题的。如果还想要更高帧率就把Bloom关掉这是后处理里最贵的一个。6. 常见问题与排查技巧实录6.1 贴图与材质异常排查速查表实际使用资源包的过程中大家反馈最多的几个问题我整理成一张速查表。照着这个顺序排查基本能解决八成问题。现象可能原因排查顺序模型整体发黑法线反向、光照未烘焙先切Normals视图看法线再检查Lightmap材质粉红色Shader缺失或不兼容看Console报错、Shader类型、渲染管线表面像水渍法线贴图类型未设为Normal检查贴图导入类型玻璃不透明Shader透明变体缺失或Render Queue错误检查Surface Type是否设为Transparent窗帘背面消失Render Face不是Both切换Surface Options里的Render Face光影有明显色斑光照烘焙参数过低、UV Padding不足加大Lightmap Resolution和UV Margin6.2 阴影与光照异常修复阴影问题在室内场景里很典型我遇到过三种边缘锯齿严重、局部区域闪阴影、地面出现摩尔纹。边缘锯齿的一般解法是调大Shadow Resolution并把URP Asset里的Shadow Near Plane Offset调到1以上这个参数直接影响阴影的偏移精度。闪阴影通常出在动态物体和静态物体交错的位置。沙发动、地板不动沙发的阴影投射到地板时因为两套阴影贴图精度不一样就会闪。解法是把主光源的Shadow Cascades设为4同时把沙发这类动态物体的Shadow Casting Mode改成Two Sided分别用两套精度闪动会减轻很多。摩尔纹一般出现在大面积地毯和木地板上把Shadow Normal Bias调到0.5以下同时开启软阴影摩尔纹基本消失。6.3 渲染管线切换与版本兼容最后说一个很多人会忽略的问题资源包的工程版本依赖。我是用Unity 2021.3 LTS制作的URP版本是12.x这个版本兼容性最好。Unity 2022到2023的URP版本升级到14以上材质面板的布局会有调整但底层系统兼容拖进去不会坏。如果你用的是Unity 6URP版本跳到17部分URP Lit材质的默认参数被改了需要重新检查一遍Smoothness Source的设定其他基本没有大问题。如果项目用的是内置渲染管线转换材质时有个省事的技巧选中所有模型通过Window - Rendering - Render Pipeline Converter把内置材质批量转成URP。转换成功后还要逐个检查透明材质和双面渲染因为内置管线的Standard Shader和URP Lit的参数映射并不是一一对应的通常会有百分之二十左右的材质需要手动微调。这套客厅资源包做完之后我最大的感受是美术资源包的价值不在模型有多精细而在于整套流程能不能快速落地。参数调得再好如果导入设置乱七八糟、材质引用了不存在的Shader、光照烘焙需要二次修补用户拿到手里也只会觉得是个半成品。所以我在最后给每个模型、每个材质、每个场景都配了检查清单确保拖进去就能跑出和演示一样的效果。如果你打算用这个包扩展其他空间也有现成的路子客厅的沙发材质换一组木纹和布料就能变成日式风格把灯光色温整体调冷、替换金属材质立刻变工业风。资源包的好处就在于参数是可调的场景是可拆的。我实际改过一套餐厅和卧室大概花了两天时间比从零开始建模快了一倍不止。再提醒一句做资源包也好做项目也好千万别等到最后才整理目录和命名规范。我见过太多项目因为FBX文件名乱码、材质重复引用这种基础问题在交付阶段多花一周时间。从第一个模型开始就按这套规范来后面每一步都是顺的。
阅读完成 · 觉得有帮助?