因为有不少人都问过我压缩格式的问题,今天飞哥又重新提醒了一次。整理一下发个贴,以供大家查阅和讨论。
各种纹理格式,大家参照下U3D
MANUAL里面的具体描述介绍,这是官方的东西。但我觉得有一部内容是错的,例如占用内存大小。
http://docs.unity3d.com/Manual/class-TextureImporter.html
基本知识点:
DXT格式是Nvidia
Tegra提供的,ETC是安卓原生支持的,OPNEGL2.0都支持。ETC2只有OPENGL3.0支持,PVRTC是Imagination
PowerVR提供的,ATC是Qualcomm
Snapdragon提供的。一般来说,IOS只支持PVRTC的压缩格式。一旦相应的贴图格式不兼容的时候,U3D会自动将其转换成RGB(A)格式。最好的兼容是针对GPU进行打包,例如针对小米的都用ATC格式,但一般开发做不到太细化的选择。所有设备对RGB
16BITS/ARGB 16BITS/RGB A16BITS/RGB 24BITS/ARGB
32BITS等支持都很好,只是这些格式算是非压缩格式,对内存消耗和渲染消耗非常不友好。
关于压缩后的在储存上的大小,假设高清(ARGB32)大小为1,那么大概数据如下:
(2013-07-17 15:10)
标签:
性能优化
渲染管线
优化
图形渲染
drawcall
|
分类:
Unity3d
|
转载请留下本文原始链接,谢谢。本文会不定期更新维护,最近更新于2013.11.09
主要内容也可以参考:
http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html
最简单的优化建议:
1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU。
2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unlit目录下的。它们更高效。
3.尽可能共用材质。
4.将不需要移动的物体设为Static,让引擎可以进行其批处理。
5.尽可能不用灯光。
6.动态灯光更加不要了。
7.尝试用压缩贴图格式,或用16位代替32位。
8.如果不需要别用雾效(fog)
9.尝试用OcclusionCulling,在房间过道多遮挡物体多的场景非常有用。若不当反而会增加负担。
10.用天空盒去“褪去”远处的物体。
11.shader中用贴图混合的方式去代替多重通道计算。
12.shader中注意float/half/fixed的使用。
(2013-06-07 11:20)
标签:
lightmapping
lightmap
动态
it
|
分类:
Unity3d
|
(转载请注明出处,本文会偶尔更新,最近更新于2013.07.17)
1.为什么要用Lightmapping?
简单来说就是实时灯光计算十分耗时,随着光源越多会倍增计算耗时。使用Lightmap模拟灯光带来的效果,便不用去计算灯光,会带来性能上的大大提升。当然你不用灯光效果也是没问题的,具体还是看项目需求。最简单的直接在3dmas或maya里面烘培完贴图顶点色也行。
2.为什么要使用LightProbes?
因为场景中都是假光,动态的物体或角色没有受光会很突兀,显得格格不入。若觉得没关系便不需要管了,想要角色也有这样的效果就需要用到LightProbes。
3.Lightmapping入门
这部分我就不写了,我写也不完整,便将自己觉得不错的文章贴出来让大家参考学习。
官方教程:
Lightmapping基本使用方式:
http://docs.unity3d.com/Documentation/Manual/Lightmapping.html
深入了
标签:
nan
time.deltatime
realtimesincestartup
除0
异常
|
分类:
Unity3d
|
在游戏运行时,代码若写得不安全很容易出现NAN的异常。一旦NAN出现整个游戏不崩溃也坏死掉了,游戏上了则是要被直接打回来的节奏,更是一个开发及测试人员每人都要扣3000块的大BUG。
一般表现为:
1.
transform.rotation assign attempt for 'XXX' is not valid.
Input rotation is {NaN, NaN, NaN, NaN}.
2.
Getting an error of rigidbody.force assign attempt for 'XXX'
is not valid. Input position is { NaN, NaN, NaN }
3.
transform.localEulerAngles assign attempt for 'XXX' is not
valid. Input localEulerAngles is { NaN, 0.000000, -0.000000 }
反正各种各样类似了,有些还不直接报你错,间接来搞你让你找半天。
NAN就是字母意思了,NOT A NUMBER,一般是由于一个数除0造成的,所以若设计有除就要留心去确保安全。
一些简单的计算可以让人更好理解:
1 / 0 = NaN
1 + NaN = NaN
2 * NaN = NaN
(2013-04-29 18:24)
标签:
fps
游戏帧数
targetframerate
it
|
分类:
Unity3d
|
关于FPS,在PC端来说,游戏帧数跑得越高越好,FPS跑得越高游戏就越流畅,当然太高也没什么必要。
不过在手机平台上,游戏帧数跑高了,CPU和GPU负荷相应则会增大。CPU和GPU负荷大的话那代表着其发热量也相应会大很多。发热大可是很糟糕的事情,极大影响游戏体验。
所以也并非帧数越高越好。只要玩起游戏来不卡的话,我觉得这个帧数就可以了。
60帧是非常流畅的帧数,所有最高设为60帧则足够了。30帧的话也勉强能够接受,看大家游戏项目需求是怎么样了。若3D效果不多的话,可以考虑帧速低一点也没关系。
1.UNITY3D设置帧数FPS的方法
3.5以后的版本,可以直接设置Application.targetFrameRate。直接修改脚本就可以了。
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void Awake() {
Application.targetFrameRate =
60;
(2013-01-22 20:09)
标签:
bug
invalidoperationexce
sync
it
|
分类:
Unity3d
|
详细信息:
InvalidOperationException: out of sync
System.Collections.Generic.Dictionary`2+Enumerator[UnityEngine.KeyCode,System.Boolean].VerifyState
()
System.Collections.Generic.Dictionary`2+Enumerator[UnityEngine.KeyCode,System.Boolean].MoveNext
()
System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[UnityEngine.KeyCode,System.Boolean].MoveNext
()
InputManager.CheckControleKyes ()
MMOController.FixedUpdate ()
从信息上看来,是用了DICTIONNARY的问题。经过查阅资料,发现问题出在迭代修改DICTIONARY的地方:
foreach (string key in dict.Keys)
{
temp =
dictAssetBundleRefs.TryGetValue(key, out value);
修改temp的值
或者删除temp
}
不可以迭代去修改dictionnary,正如我看到一
(2012-12-03 11:23)
标签:
unity3d
fbs
0.01
导入模型
模型
|
分类:
Unity3d
|
这个问题挺常见的,主要是U3D与MAX的单位不一致造成的,常用的解决方法有两个。可以参照下面那个帖子,写得挺不错的,还有一些优化事项。
还有另一个直接将模型导入的0.01设置改过来的方式。直接修改U3D的EDITOR类的导入设置。
在EDITOR里面直接加入以下脚本(Assets/Editor/FBXScaleFix.cs),每次导入模型让其大小直接变为1的正常单位。
using UnityEditor;
public class FBXScaleFix : AssetPostprocessor
{
public void OnPreprocessModel()
{
ModelImporter modelImporter =
(ModelImporter) assetImporter;
modelImporter.globalScale = 1;
&
标签:
sql
数据库
字段
类型
大小
it
|
分类:
个人参考资料
|