查看: 1345|回复: 0
打印 上一主题 下一主题

unity3d For IOS 模型优化

[复制链接]

1446

主题

3

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
30927
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-9-13 11:13:27 |只看该作者 |倒序浏览
1.做简模,主角面数控制在300内,贴图格式为PNG或BMP???---------》我们的美术说u3d对tga 格式做过优化??
2.尽量为等边三角形
3.细长条物体或复杂的物体尽量用贴图来表现(窗、栏杆、栅栏)
4.重新制作简模比改进精模效率要高。
5.模型的数量,模型的面数。
6.场景中模型的密度。
7.相同材质的模型尽量合并,远距离的模型且面数多的,不合并。
8.模型的面不要离得太近,容易引起闪烁。
9.删除看不见的面。
10.尽量少的材质球。
11.慎用像素光。

1、模型
(1)合并模型,渲染静态窗口比较有用。
(2)100个三角形的MESH,在渲染时与1500个面数的物体是没太大差别的。
(3)一个Mesh 一个材质(按材质合并)。
(4)合并时可以将灯光附近的物体合并,加快渲染。
(5)实时灯光数量限制。
2、实时灯光
(1)每个被灯光照射到的GameObject都会在每一帧被渲染一次。经常被灯光照射的物体最好合并他。以免多次渲染。
(2)每一个灯光都会有一个Render Mode设置,Force Pixel 或者 Force Vertex。
夜晚打开车灯,前面的车灯就是游戏中最重要的灯光。因此,前大灯的渲染模式将会被设置为Force Pixel比较好。
如果灯光不是很重要,就可以选用"Force Vertex"的渲染模式。
3、阴影
阴影运算量比较大。如果不是做光照分析建议使用 Lighting Map。
4、角色建模优化
(1)角色应该只被用于一个蒙皮模型渲染器。当然有时候可能需要多个蒙皮的模型,但是如果你同时用两个蒙皮来作为一个角色,它就相当于你进行了两个角色的运算量。
(2)要保持MESH的材质数量尽可能低。一般建议身体的材质数量为2-3个,当然如果你有武器的材质,也是需要单独一个的,因为你需要换武器。
(3)一般来说游戏中的骨骼数量为15-60个。骨骼越少运行速度越快,
(4)面数主要是看游戏的质量要求,IOS上需要更少的面。参考《IOS系统模型面数及贴图要求》
(5)把IK控制器和FK控制器分离,当动画导入以后,IK的节点将会烘焙到FK上,其实UNITY并不需要IK节点,你可以删除它们。
(6)创建一个公共的骨架,这样就可以让你让不同的角色之间共享动作了。
(7)给每一个骨骼正确的命名,方便团队工作,也方便类似于Motionbuilder的动作软件,不然你得每次指定骨骼。
(8)UV接缝的数量尽可能少
5. 贴图
(1) 贴图在可能的前提下,选用最适合该平台的格式和大小,1024以上IO速度就很慢了,要注意,如果是动态IO,一定要512内。
(2)有些中尽量少的使用透明贴图。透明对象的渲染,特别是占用屏幕大范围的透明贴图,会非常非常耗效率。注意,不是这张贴图大,而是栅格化之后该透明贴图在屏幕上占用像素多。
    t-k��n:�/0 ��/ idi-font-weight:bold'>、注意容器内注册的类型应为ExternallyControlledLifetimeManager类型的生命周期,外 部控制生命周期管理器,这个生命周期管理允许你使用RegisterType和RegisterInstance来注册对象之间的关系,但是其只会对对象 保留一个弱引用,其生命周期交由外部控制,也就是意味着你可以将这个对象缓存或者销毁而不用在意UnityContainer,而当其他地方没有强引用这 个对象时,其会被GC给销毁掉。在默认情况下,使用这个生命周期管理器,每次调用Resolve都会返回同一对象(单件实例),如果被GC回收后再次调用 Resolve方法将会重新创建新的对象。

测试如下:

using XZL.Plugin;
public partial class Form1 : Form
{
Dictionary<string, string> _plugins;
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
this.button1.Click += new EventHandler(button1_Click);
}
void button1_Click(object sender, EventArgs e)
{
var p = PlugInManage.Resolve(_plugins[listBox1.SelectedItem.ToString()]);
p.LoadPlugin();
//GC.Collect();
}
void Form1_Load(object sender, EventArgs e)
{
_plugins = PlugInManage.Load(System.IO.Path.GetDirectoryName(Application.ExecutablePath)
+ "" + "plugins");
foreach (var item in _plugins)
{
listBox1.Items.Add(item.Key);
}
}
}


using XZL.Plugin;
public partial class Form1 : Form,IPlugin
{
public Form1()
{
InitializeComponent();
}
public void LoadPlugIn()
{
this.Show();
}
string IPlugin.PluginName
{
get { return this.Text; }
}
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-22 02:52 , Processed in 0.082948 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部