Unity中烘焙光照,同mesh同uv的模型烘焙光照时共用一张光照贴图


我们再开发中,经常会遇到需要烘焙场景光照的情况。但是尴尬的是,一个场景中你好几个物体用的都是一个贴图,但是不同mesh。或者是相同mesh。你都会如下图,多出一张光照贴图。正常unity开发的解决办法是合并mesh。来降低光照贴图数量。但是有的时候因为需求。我们需要每一个物体都是独立的物体,比如做双阵营,重复阵营,就不得不把合并好的建筑A与建筑B单独拆出来。那这个时候你又想省掉那张光照图,该怎么办呢?


如图,这两个模型如果不合并mesh就会出现两张光照图。

如上图我们还没法手动更换这个位置的图片。
然后你还不想写代码,判断UV范围来解决,那么怎么办呢?
很简单,光照的烘焙计算是根据UV位置,主光源光照位置,然后基于XYZ生成的图片。mesh越多,生成越多。
那么基于这个原理,是不是两个同UV同mesh的模型。重叠在一起,然后再找复制一个模型来生成地面光照。生成后删除多余的光照图2,然后重叠的两个模型公用光照图1.就解决了呢?具体操作如下。
A清除之前所有的光照

B复制出三个模型 从左到右编号123. 将23位置重叠,1的作用是为了生成地面阴影。3的作用是跟2共用光照。如下图


C这个时候开始渲染,渲染完成后如下图,删除一号位模型,以及1号位生成的图片。

D这个时候发现重叠2号跟3号模型都公用了一张光照图,然后把23重叠中的一个,任选放在之前的一号位置就好了。如下图:

 

如上如,之前多的光照图没了,同理,如果拆分多个mesh也是这样删除替换。
————————————————
原文链接:https://blog.csdn.net/qq_37576129/article/details/124693515

### 静态光照贴图UV在游戏开发中的应用 静态光照贴图UV是在三维模型上用于烘焙间接照明效果的一种纹理映射方式。通过预先计算并存储复杂的光影信息到二维图像中,在运行可以高效地重现这些效果而不必实重新计算[^1]。 对于游戏开发者而言,创建高质量的静态光照贴图UV是一项挑战性的任务。这不仅涉及到如何合理分配有限的空间来容纳尽可能多的信息,还需要考虑不表面之间的相互影响以及最终视觉呈现的效果质量。 #### 常见问题及解决方案 - **重叠与冲突** 当多个物体共享一张光照贴图可能出现UV坐标重叠的情况,导致渲染错误或不一致的结果。为了避免这种情况发生,应当确保每个对象都有自己独立且唯一的UV区域;如果确实需要共用,则需仔细规划以防止任何潜在冲突的发生。 - **分辨率不足** 如果给定面积内的像素数量过少,可能会造成细节丢失或者模糊不清的现象。为此建议根据实际需求调整每单位表面积对应的texel密度(即每平方单位所需的纹理像素数),从而获得更清晰细腻的表现效果。 - **接缝处瑕疵** 在拼接相邻面片的候容易产生可见缝隙,特别是在视角变化较大情况下尤为明显。一种有效的处理方法是对边界附近的顶点法线进行特殊处理使其更加平滑过渡;另外也可以尝试增加额外填充边以减少因拉伸变形而引起的误差。 ```cpp // 示例代码片段展示如何设置Unity引擎中的Lightmap UV参数 using UnityEngine; public class LightMapSettings : MonoBehaviour { public void SetupLightmapUvs() { Mesh mesh = GetComponent<MeshFilter>().mesh; Vector4[] lightmapTilingOffset = new Vector4[mesh.subMeshCount]; for (int i = 0; i < mesh.subMeshCount; ++i) { lightmapTilingOffset[i].Set(1f, 1f, 0f, 0f); // 设置默认缩放和平移值 } mesh.lightmapTileOffset = lightmapTilingOffset; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值