搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
2023面试高手
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
one piece_娜美_01_one piece hentai
2
CrossOver软件2023破解激活码_crossover-wine注册
3
Spring Boot(四):Thymeleaf 使用详解_spring thymeleaf
4
NX+Ubuntu18.04+ROS Realsense(RealSenseD435i )的安装与使用_realsense安装
5
记录:rosdep update
6
js通过a标签的方式下载文件并对其重命名的完整方案_a标签下载文件重命名
7
JavaScript中的Array.prototype.forEach()方法(简介+重写)_js array.prototype.foreach
8
leetcode 94 二叉树的中序遍历(java)_lecode中树的输入root = [1,null,3,2,4,null,5,6]是怎么转化成节点的
9
R语言入门笔记2.1
10
c#--正则表达式(项目常用)_c# 正则表达式 数字
当前位置:
article
> 正文
关于Unity3D的一些优化_3d的顶点优化的点不在线上
作者:2023面试高手 | 2024-02-16 15:10:32
赞
踩
3d的顶点优化的点不在线上
最简单的优化建议:
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的使用。
13.shader中不要用复杂的计算pow,sin,cos,tan,log等。
14.shader中越少Fragment越好。
15.注意是否有多余的动画脚本,模型自动导入到U3D会有动画脚本,大量的话会严重影响消耗CPU计算。
16.注意碰撞体的碰撞层,不必要的碰撞检测请舍去。
1.为什么需要针对CPU(中央处理器)与GPU(图形处理器)优化?
CPU和GPU都有各自的计算和传输瓶颈,不同的CPU或GPU他们的性能都不一样,所以你的游戏需要为你目标用户的CPU与GPU能力进行针对开发。
2.CPU与GPU的限制
GPU一般具有填充率(Fillrate)和内存带宽(Memory Bandwidth)的限制,如果你的游戏在低质量表现的情况下会快很多,那么,你很可能需要限制你在GPU的填充率。
CPU一般被所需要渲染物体的个数限制,CPU给GPU发送渲染物体命令叫做DrawCalls。一般来说DrawCalls数量是需要控制的,在能表现效果的前提下越少越好。通常来说,电脑平台上DrawCalls几千个之内,移动平台上DrawCalls几百个之内。这样就差不多了。当然以上并不是绝对的,仅作一个参考。
往往渲染(Rendering)并不是一个问题,无论是在GPU和CPU上。很可能是你的脚本代码效率的问题,用Profiler查看下。
关于Profiler介绍:http://docs.
unity3d
.com/Documentation/Manual/Profiler.html
需要注意的是:
在GPU中显示的RenderTexture.SetActive()占用率很高,是因为你同时打开了编辑窗口的原因,而不是U3D的BUG。
3.关于顶点数量和顶点计算
CPU和GPU对顶点的计算处理都很多。GPU中渲染的顶点数取决于GPU性能和SHADER的复杂程度,一般来说,每帧之内,在PC上几百万顶点内,在移动平台上不超过10万顶点。
CPU中的计算主要是在蒙皮骨骼计算,布料模拟,顶点动画,粒子模拟等。GPU则在各种顶点变换、光照、贴图混合等。
【个人认为,具体还是看各位的项目需求,假设你项目的是
3d游戏
。你游戏需要兼容低配置的硬件、流畅运行、控制硬件发热的话,还要达到一定效果(LIGHTMAP+雾效),那么顶点数必定不能高。此时同屏2W顶点我认为是个比较合适的数目,DRAWCALL最好低于70。另,控制发热请控制最高上限的帧率,流畅的话,帧率其实不需要太高的。】
4.针对CPU的优化——减少DRAW CALL 的数量
为了渲染物体到显示器上,CPU需要做一些工作,如区分哪个东西需要渲染、区分开物体是否受光照影响、使用哪个SHADER并且为SHADER传参、发送绘图命令告诉显示驱动,然后发送命令告诉显卡删除等这些。
假设你有一个上千三角面的模型却用上千个三角型模型来代替,在GPU上花费是差不多的,但是在CPU上则是极其不一样,消耗会大很多很多。为了让CPU更少的工作,需要减少可见物的数目:
a.合并相近的模型,手动在模型编辑器中合并或者使用UNITY的Draw call批处理达到相同效果(Draw call batching)。具体方法和注意事项查看以下链接:
Draw call batching : http://docs.unity3d.com/Documentation/Manual/DrawCallBatching.html
b.在项目中使用更少的材质(material),将几个分开的贴图合成一个较大的图集等方式处理。
如果你需要通过脚本来控制单个材质属性,需要注意改变Renderer.material将会造成一份材质的拷贝。因此,你应该使用Renderer.sharedMaterial来保证材质的共享状态。
有一个合并模型材质不错的插件叫Mesh Baker,大家可以考虑试下。
c.尽量少用一些渲染步骤,例如reflections,shadows,per-pixel light 等。
d.Draw call batching的合并物体,会使每个物体(合并后的物体)至少有几百个三角面。
假设合并的两个物体(手动合并)但不共享材质,不会有性能表现上的提升。多材质的物体相当于两个物体不用一个贴图。所以,为了提升CPU的性能,你应该确保这些物体使用同样的贴图。
另外,用灯光将会取消(break)引擎的DRAW CALL BATCH,至于为什么,查看以下:
Forward Rendering Path Details:
http://docs.unity3d.com/Documentation/Components/RenderTech-ForwardRendering.html
e.使用相关剔除数量直接减少Draw Call数量,下文有相关提及。
5.优化几何模型
最基本的两个优化准则:
a.不要有不必要的三角面。
b.UV贴图中的接缝和硬边越少越好。
需要注意的是,图形硬件需要处理顶点数并跟硬件报告说的并不一样。不是硬件说能渲染几个点就是几个点。模型处理应用通展示的是几何顶点数量。例如,一个由一些不同顶点构成的模型。在显卡中,一些集合顶点将会被分离(split)成两个或者更多逻辑顶点用作渲染。如果有法线、UV坐标、顶点色的话,这个顶点必须会被分离。所以在游戏中处理的实际数量显然要多很多。
6.关于光照
若不用光肯定是最快的。移动端优化可以采用用光照贴图(Lightmapping)去烘培一个静态的贴图,以代替每次的光照计算,在U3D中只需要非常短的时间则能生成。这个方法能大大提高效率,而且有着更好的表现效果(平滑过渡处理,还有附加阴影等)。
在移动设备上和低端电脑上尽量不要在场景中用真光,用光照贴图。这个方法大大节省了CPU和GPU的计算,CPU得到了更少的DRAWCALL,GPU则需要更少顶点处理和像素栅格化。
Lightmapping : http://docs.unity3d.com/Documentation/Manual/Lightmapping.html
7.对GPU的优化——图片压缩和多重纹理格式
Compressed Textures(图片压缩):
http://docs.unity3d.com/Documentation/Components/class-Texture2D.html
图片压缩将降低你的图片大小(更快地加载更小的内存跨度(footprint)),而且大大提高渲染表现。压缩贴图比起未压缩的32位RGBA贴图占用内存带宽少得多。
之前U3D会议还听说过一个优化,贴图尽量都用一个大小的格式(512 * 512 , 1024 * 1024),这样在内存之中能得到更好的排序,而不会有内存之间空隙。这个是否真假没得到过测试。
MIPMA
ps
(多重纹理格式):
http://docs.unity3d.com/Documentation/Components/class-Texture2D.html
跟
网页
上的略缩图原理一样,在3D游戏中我们为游戏的贴图生成多重纹理贴图,远处显示较小的物体用小的贴图,显示比较大的物体用精细的贴图。这样能更加有效的减少传输给GPU中的数据。
8.LOD 、 Per-Layer Cull Distances 、 Occlusion Culling
LOD (Level Of Detail) 是很常用的3D游戏技术了,其功能理解起来则是相当于多重纹理贴图。在以在屏幕中显示模型大小的比例来判断使用高或低层次的模型来减少对GPU的传输数据,和减少GPU所需要的顶点计算。
摄像机分层距离剔除(Per-Layer Cull Distances):为小物体标识层次,然后根据其距离主摄像机的距离判断是否需要显示。
遮挡剔除(Occlusion Culling)其实就是当某个物体在摄像机前被另外一个物体完全挡住的情况,挡住就不发送给GPU渲染,从而直接降低DRAW CALL。不过有些时候在CPU中计算其是否被挡住则会很耗计算,反而得不偿失。
以下是这几个优化技术的相关使用和介绍:
Level Of Detail :
http://docs.unity3d.com/Documentation/Manual/LevelOfDetail.html
Per-Layer Cull Distances :
http://docs.unity3d.com/Documentation/ScriptReference/Camera-layerCullDistances.html
Occlusion Culling :
http://docs.unity3d.com/Documentation/Manual/OcclusionCulling.html
9.关于Realtime Shadows(实时阴影)
实时阴影技术非常棒,但消耗大量计算。为GPU和CPU都带来了昂贵的负担,细节的话参考下面:
http://docs.unity3d.com/Documentation/Manual/Shadows.html
10.对GPU优化:采用高效的shader
a.需要注意的是有些(built-in)Shader是有mobile版本的,这些大大提高了顶点处理的性能。当然也会有一些限制。
b.自己写的shader请注意复杂操作符计算,类似pow,exp,log,cos,sin,tan等都是很耗时的计算,最多只用一次在每个像素点的计算。不推荐你自己写normalize,dot,inversesqart操作符,内置的肯定比你写的好。
c.需要警醒的是alpha test,这个非常耗时。
d.浮点类型运算:精度越低的浮点计算越快。
在CG/HLSL中--
float :32位浮点格式,适合顶点变换运算,但比较慢。
half:16位浮点格式,适合贴图和UV坐标计算,是highp类型计算的两倍。
fixed: 10位浮点格式,适合颜色,光照,和其他。是highp格式计算的四倍。
写Shader优化的小提示:
http://docs.unity3d.com/Documentation/Components/SL-ShaderPerformance.html
11.另外的相关优化:
a.对Draw Call Batching的优化
http://docs.unity3d.com/Documentation/Manual/DrawCallBatching.html
b.对Rendering Statistics Window的说明和提示:
http://docs.unity3d.com/Documentation/Manual/RenderingStatistics.html
c.角色模型的优化建议
用单个蒙皮渲染、尽量少用材质、少用骨骼节点、移动设备上角色多边形保持在300~1500内(当然还要看具体的需求)、PC平台上1500~4000内(当然还要看具体的需求)。
http://docs.unity3d.com/Documentation/Manual/ModelingOptimizedCharacters.html
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/2023面试高手/article/detail/94578
推荐阅读
article
「
Unity3D
」(
10
)
自定义
属性
面板
Inspector
详解_
unity
propertyfiel...
https://zhuanlan.zhihu.com/p/34234315EditorGUILayout.Propert...
赞
踩
article
unity3d
All
compiler
error
s
have
to be fixed befor...
unity3d
All
compiler
error
s
have
to be fixed before you can ...
赞
踩
article
GameFrameWork
框架(
Unity3D
)使用笔记(九)
AssetBundle
和游戏打包_u...
如果使用了
GameFrameWork
框架的话,你会发现你点击Build And Run按钮打包运行大概是运行不起来的。本...
赞
踩
article
Unity3d
数字
模型
制作
规范
_
unity
拍的视频怎么数字化
模型
...
数字
模型
制作
规范
本文提到的所有
数字
模型
制作
,全部是用3D MAX建立
模型
,即使是不同的驱动引擎,对
模型
的要求基本是相同的...
赞
踩
article
Unity3D
AssetBundle
打包与加载_
unity
packassettemp
...
Unity3D
简单的
AssetBundle
打包与加载转载:Unity
AssetBundle
从入门到掌握(适合初学者...
赞
踩
article
Unity3d
C#开发
WebGL
平台转
微信
小游戏
保姆级教程(喜大普奔)_
unity
webgl
微信
...
前言之前馋与wx
小游戏
的大流量的广告分成,用cocos creator拼拼凑凑的搞了两个
小游戏
上线,结果反响平平,个人感...
赞
踩
article
Unity3D
官方教程:
WebGL
(一)_
unity
-
webgl
-
utilities
...
Unity3D
官方教程:
WebGL
什么是 Unity
WebGL
?创建一个Unity
WebGL
项目_
unity
-web...
赞
踩
article
Unity3d
微信
小
程序
(
小
游戏)项目实现流量主接入功能(含源码)_
unity
接入
微信
小
程序
...
很早之前编写了Unity导出
微信
小
游戏的博客,也尝试自己做了个Demo上线了,基本没更新过,不过几个月的时间,用户超过了...
赞
踩
article
Unity3d
2020.3.10总是出现
Hold
on...(
busy
for xxx)... I...
问题如题的问题,总是时不时出现下图的
进度条
,在打开vs(2019)工程时一定会出现,而且等待很长时间也不会结束。进度不会...
赞
踩
article
Unity3d
发布打包后无法
运行
exe 报错
Failed
to
load
mono
解决...
问题点击
运行
发布后的.exe就会出现如下错误:解决原来生成的包里的文件夹在拷贝时少拷了MonoBleedingEdge文...
赞
踩
article
Unity3d
微信
小
程序
游戏_
unity
微信
小
程序
广告...
下载 Unity 插件Plugin for wx game申请小
程序
微信
小
程序
记下 APPIDUnity示例项目1.新建...
赞
踩
article
Unity3D
官方教程:
WebGL
(二)
_
webgl
有
日志
吗...
部署压缩工程调试及问题捕获
_
webgl
有
日志
吗
webgl
有
日志
吗 ...
赞
踩
article
【
Unity
3D
】
Unity
脚本 ④ (
游戏
物体
GameObject
的
坐标
| 修改
游戏
物...
一、
游戏
物体
GameObject
的
坐标
、二、 修改
游戏
物体
GameObject
的本地
坐标
_
unity
获取对象...
赞
踩
article
Unity3D
学习
路线?_
unity3d
学习
路线...
Unity是目前最主流的游戏开发引擎,AppStore里面排名前列的游戏绝大部分都是采用Unity引擎来开发的,所以Un...
赞
踩
article
Unity3D
学习
路线图_
unity3d
学习
路线...
在
学习
过程中要多做实践,多尝试,多看官方文档和社区分享。同时,可以参加线上和线下的相关活动,结交志同道合的朋友,互相
学习
...
赞
踩
article
Unity3D
之
学习
路线
与
学习
经验分享_
dotweentimeline
...
转自:https://blog.csdn.net/qq_22521529/article/details/8310883...
赞
踩
article
Unity3D
多人
联机
网络游戏
开发都存在哪些误区详解_
unity
多人
联机
常见问题
...
通过使用插值和平滑技术、服务器端验证、数据加密、数据压缩和服务器负载均衡等技术解决方案,可以提高游戏的性能和安全性,提供...
赞
踩
article
Unity3D
如何
用
unity
引擎然后
用
c#
语言
搭建
自己的
服务器
_
unity
服务器
搭建
...
接下来,我们需要在Unity的菜单栏中选择“Edit”->“Project Settings”->“Player”,在I...
赞
踩
article
unity3d
:
YooAsset
零
冗余
构建
Assetbundle代码分析...
1.每个收集器下asset会
构建
出BuildAssetInfo,这种asset是没有
冗余
,只有依赖列表2.每个依赖ass...
赞
踩
article
Unity3D
打造基于
YooAssets
的
资源
管理
框架
详解_
yooasset
资源
卸载...
Unity3D
是一款强大的跨平台游戏引擎,广泛应用于游戏开发、虚拟现实和增强现实等领域。在
Unity3D
中,
资源
管理
是一...
赞
踩
相关标签
unity
游戏开发
2d游戏
GameFrameWork
UGF
c#
AssetBundle
数字模型制作规范
assetbundle
1024程序员节
Unity微信小游戏
u3d微信小游戏
unity3d
WebGL
Unity源码
bug
Unity3d打包
Unity打包错误
Unity无法运行
运行错误
微信小程序
webgl