Unity默认烘培场景以后每张烘培贴图的大小是1024。但是有可能你的场景比较简单,用1024会比较浪费。如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间。
有时候可能你想去修改烘培贴图的大小,如下图所示以前我试过在Inspector视图中修改烘培贴图的大小,图虽然是小了但是它是整体缩小,后来在手机上面发现这这样直接修改烘培贴图的大小确实有问题,接缝方面处理的有问题。而且每次烘培完场景以后都需要这样缩一下。。(千万不要这样缩图)
我们需要美术在烘培场景的时候去设置烘培贴图的大小,可是Unity的烘培菜单根本没有设置烘培贴图的大小。。后来我想到了一个巧妙的办法,用脚本来烘培场景,顺便设置烘培贴图的大小。。代码很简单。
Clear()就是删除当前场景的烘培贴图。
Bake()就是直接烘培当前场景,我还可以在烘培场景之前加一些代码。。。一切都是脚本化操作。嘿嘿。。
maxAtlasHeight和maxAtlasWidth 就是每张烘培贴图的宽和高,一般我们每个场景用一张512的就差不多了。烘培贴图必须要2的幂次方,并且要正方形的。
[MenuItem("Test/Test")]
static void Init()
{
LightmapEditorSettings.maxAtlasHeight = 512;
LightmapEditorSettings.maxAtlasWidth = 512;
Lightmapping.Clear();
Lightmapping.Bake();
}
这样美术只用在Lightmapping窗口中设置好当前烘培场景的参数。。调用我们写的拓展菜单方法就可以了。这里我设置的烘培贴图的大小是512。
利用上面的方法我们把一张1024的贴图缩小到了512,效果没有什么变化但是空间缺缩小了4倍。。
IOS PVRTC压缩后512的贴图只有170.8KB,很给力吧。。
- 本文固定链接: https://www.xuanyusong.com/archives/2815
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!




问下 烘焙贴图的张数怎么设置
请问大神 这个脚本 应该绑在哪里?
不用绑定。。
请问老师 文中的 test 脚本怎么使用的啊 我是美术 程序太渣 求老师指点下
您好,请问您一个问题,同事在ios平台下进行的光照烘培,然后我从svn上down下来,我的是Android平台,发现贴图很亮。然后打成APK包,在手机上运行,但又是正常的。请问这是什么原因呢?平台的差异性造成的吗
电脑屏幕 和手机屏幕不一样。 一切以手机为准。。
其实不用那么麻烦,在unity打开lightmap窗口下,右键单击标签,有一个“Generate Beast Sittings file”,建立之后会有更多的参数可选,是一个XML形式的描述文件,最近我也一直在研究这块,希望MOMO能共同探讨一下
额。 看了一下 还真是,这个隐藏的好深啊。。这个方法不错。。
看了没找到更改分辨率的参数
momo,方法简单巧妙。。好聪明
谢谢哈。。
雨松哥你好@我想做一个事先烘焙好几套光贴图,然后保存在指定地方,然后再运行过程中根据实际情况替换,请问有没有什么方法或者思路?感谢
嗯,这个方法可行。。 LightmapData[] lightmapData = new LightmapData
;for(int i = 0 ; i < 2 ; i++ ) lightmapData
= new LightmapData(); for( int i = 0 ; i < 2 ; i++ ){ lightmapData
.lightmapFar = Resources.Load( “LightmapsCZC/” + trackName + “/LightmapFar-” + i.ToString(), typeof(Texture2D)) as Texture2D; //lightmapData
.lightmapNear = Resources.Load(trackName + “/LightmapNear-” + i.ToString(), typeof(Texture2D)) as Texture2D;}类似 这样的代码就可以。。
感谢,实际测试成功,不过这个基础上还需要调用一下赋值给当前场景
5.0用这种方法,替换的时候图片会失真。
5.0已经不支持运行时更换烘培贴图了。。
那该如何是好?有没有比较好的办法?
目前没办法。
嗯,这个方法可行。。 LightmapData[] lightmapData = new LightmapData
;for(int i = 0 ; i < 2 ; i ) lightmapData
= new LightmapData(); for( int i = 0 ; i < 2 ; i ){ lightmapData
.lightmapFar = Resources.Load( “LightmapsCZC/” trackName “/LightmapFar-” i.ToString(), typeof(Texture2D)) as Texture2D; //lightmapData
.lightmapNear = Resources.Load(trackName “/LightmapNear-” i.ToString(), typeof(Texture2D)) as Texture2D;}类似 这样的代码就可以。。
雨松大神你好!我用了以前Island的那个DEMO的一个脚本,去合并我场景的网格了,这样做,Draw Call确实较低了几十倍,但是之前烘焙好的Lightmaping 就不能用了怎么解决呀!???
不会啊, 烘培贴图是和场景绑定的。。。至少我没遇到这样的情况。
我是用了-CombineChildren 这个脚本之后运行起来物件都没有Lightmaping 了。
CombineChildren 是个什么脚本??
合并同一材质球的物体
momo老师,问一下,为什么我烘培出来的贴图分成了若干张
MOMO老师。在IOS OPENGL模式下 我用U3D在PC上烘焙出的lightmap贴图颜色会失真严重。有什么好办法可以解决么?
传统老美工外加略懂程序,还是建议在max下烘焙,那样不是能更好的控制需要烘焙灯光图片的大小吗,甚至可以控制某个物体在UV2里的位置,后期修改起来方便,更别说什么AO,Shadow就更好操作了!更重要的是可以利用max里的各种灯光类型(亲测就连光?域?网灯光也能很好的支持喔),还有更更更重要的一点是可以利用一些高级渲染引擎来做烘培(比如Very, FinalRender,Mental Ray等),鄙人比较传统,我始终认为这些专业的渲染引擎肯定比U3D的渲染烘培强大很多,毕竟人家什么也不干就只做渲染的….只是一点小小的个人看法!
传统老美工外加略懂程序,还是建议在max下烘焙,那样不是能更好的控制需要烘焙灯光图片的大小吗,甚至可以控制某个物体在UV2里的位置,后期修改起来方便,更别说什么AO,Shadow就更好操作了!更重要的是可以利用max里的各种灯光类型(亲测就连光域网灯光也能很好的支持喔),还有更更更重要的一点是可以利用一些高级渲染引擎来做烘培(比如Very, FinalRender,Mental Ray等),鄙人比较传统,我始终认为这些专业的渲染引擎肯定比U3D的渲染烘培强大很多,毕竟人家什么也不干就只做渲染的….只是一点小小的个人看法!
主要是看 项目了。
确实是~~怎么做还是项目说的算!~
max里面对模型设置第二套UV之后烘焙的lightmap能放在unity?(不是附加在shader上的那种)
大哥,你的博客被入侵了不健康图片
是百度广告吧?
就像让你点击XX进入XX网站的图片
丝袜啊等之类的网站 你应该知道了 昨天发现的 今天没看见了
没事哈。 这是百度联盟的来的广告。。我已经 把百度广告 提供的一些 XX屏蔽了 不知道为什么还会推 这些广告。。。。
是在太牛掰了。做为美术必须膜拜下对美术这么好的程序大神
改Resolution里,比如2是一种分辨率,后面再改3,4,5……都是2的大小。怎么办?
大小?那个不是设置烘培出来的光影的精度么。。。。有重新烘培过吗。 在Scene时候有个小面板 把Show Resolution 打开 再看场景 这样参数的变化很直关就能看到
大神问个问题 有时候我会设置灯光的阴影强度弱些。这样阴影不会太黑。可是烘培完成的时候总是会无视这个强度的设置。。。这样烘培出来的效果不理想额。。有没什么办法么。。
踩一踩
前来学习,顺便一顶
哟呵 几天没来写了这么多啊。。。
太牛掰了,明天搞搞,哈哈哈 谢谢momo