如何在Unity3D 5.x中添加简单的水效果

如何在Unity3D 5.x中添加简单的水效果,第1张

首先,导入系统自带的水资源包,鼠标右击Project视图中的Assets文件夹,在d出来的列表中选择“Import Package”-->"Water(Basic)",
或者点击菜单栏上的“Assets”按钮,在出现的下拉菜单中,选择“Import Packager”-->“Water(Basic)”,如下图所示。这两种方法都可以添加系统自带的水资源包。
然后,会d出一个“Importing package”窗口,可以自由选择其中的资源包,一般默认全部导入即可,点击右下角的“Import”按钮实现导入。
导入过后,点击Project视图的Assets-->Standrad Assets-->Water(Basic),在右侧的视图中可以看到Daylight和Nighttime,选择其中的一个将其直接拖入到场景中,
在Inspector视图中可以看到添加了“Water Simple(Script)”与“Daylight Simple Water”,
点击“Daylight Simple Water”,在下拉图中可以看到一个水设置的具体信息,如下图所示。
我们将托入到场景中的水模型(椭圆形状)进行拉伸,使其符合场景的需要,
然后,点击Unity3D编辑器上的运行按钮,可以看到水效果,可以看到水波在荡漾,效果比较符合现实。

第1步打开unity3d场景在里面导入一个相对更复杂的模型。第2步首先我们给这个模型添加Rigdibody刚体组件。第3步接着在Compont给其添加Mesh Collider组件。第4步勾选里面的 Convex,会默认根据自己的模型生成一个碰撞范围,但是不是很精确。第5步如果要更精确的碰撞,我们可以根据模型对应的部分,创建多个碰撞网格模型。第6步然后我们展开模型,把里面的网格ear1拖放到Mesh中,然后勾选Convex就可以在对应的位置建立碰撞范围,比如这里的右边的耳朵。第7步接着我们可以再次添加一个Mesh Collider把模型的另一个耳朵ear也添加上碰撞范围ear2。第8步同样的方式我们可以把模型需要添加碰撞的地方都添加上去,然后运行就可以得到更真实的物理效果了。特别提示作为碰撞使用的每个模型网格点面不能超过256个,否则转换的时候会报错。
使用unity3D制作场景的时候,我们需要在里面导入各种模型,其中有些比较复杂的模型我们需要给其添加碰撞效果,这时候我们可以使用对应的网格碰撞组件,然后自己设置相对更精确的网格作为碰撞检测的范围就可以了,下面就给大家带来实际 *** 作,希望能帮助到有需要的人。

工具/软件
电脑型号:联想(Lenovo)天逸510S; 系统版本:Windows7; 软件版本:Unity3D
方法/步骤
第1步
打开unity3d场景在里面导入一个相对更复杂的模型。

第2步
首先我们给这个模型添加Rigdibody刚体组件。

第3步
接着在Compont给其添加Mesh Collider组件。

第4步
勾选里面的 Convex,会默认根据自己的模型生成一个碰撞范围,但是不是很精确。

第5步
如果要更精确的碰撞,我们可以根据模型对应的部分,创建多个碰撞网格模型。

第6步
然后我们展开模型,把里面的网格ear1拖放到Mesh中,然后勾选Convex就可以在对应的位置建立碰撞范围,比如这里的右边的耳朵。

第7步
接着我们可以再次添加一个Mesh Collider把模型的另一个耳朵ear也添加上碰撞范围ear2。

第8步
同样的方式我们可以把模型需要添加碰撞的地方都添加上去,然后运行就可以得到更真实的物理效果了。


特别提示
作为碰撞使用的每个模型网格点面不能超过256个,否则转换的时候会报错

unity3d雾效打开全是灰色是由于雾效模拟效果。Unity能够进行基本的雾效模拟,所谓雾效,就是在远离人们视角的方向上,物体看起来像被蒙上了某种颜色,颜色为灰色。这种技术的实现实际上非常简单,就是根据物体距离摄像机的远近,来混合雾的颜色和物体本身的颜色即可。

在这一环节,我么要学习一下如何场景中添加雾。 来源:王蛟[点击放大] 如你想在3dsmax场景中添加雾,请执行以下 *** 作: 1创建场景的摄影机视图,然后在摄影机的创建面板的参数中启用“环境范围”组中的“显示”,将调整近距范围和调整远距范围设置为包括渲染中要应用雾效果的对象。要注意的是,通常情况下将“远距范围”设置在对象的上方,将“近距范围”设置为与距离摄影机最近的对象几何体相交。 2选择“渲染”>“环境”,在“环境”面板的“大气”下,单击“添加”,“添加大气效果”对话框将显示。 3选择“雾”,确保选择“标准”作为雾类型,然后单击“确定”。如果要使用分层雾,请选择“分层”作为雾类型,然后设置分层雾的参数。通过向列表中添加多个雾条目并选择“分层”,值得注意的是在3dsmax的场景中可以包含多个雾层。

因为加了雾效,在远处就只能看到雾了
可以关闭或者调解雾效的距离,不过这不影响游戏,反而会增加游戏的真实感。而玩家是不会跑到那么高的地方
在edit——renderSetting中设置fog

我们都希望能够在场景中投入一百万个物体,不幸的是,渲染和管理大量的游戏对象是以牺牲CPU和GPU性能为代价的,因为有太多Draw Call的问题,最后我们必须找到其他的解决方案。

在本文中,我们将讨论两种优化技术,它们可以帮助您减少Unity游戏中的Draw Call数量以提高整体性能:批处理和GPU Instancing。

开发者在日常工作中遇到的最常见的问题之一是性能不足,这是由于CPU和GPU的运行能力不足。一些游戏可以运行在PC上,但是在移动设备上不行。游戏运行时运行是否流畅受Draw Call数量的影响很大。有几个解决方案能帮助您解决这个问题。最常见的是批处理,包括Static Batching和Dynamic Batching。

Static Batching可以让引擎降低任何尺寸网格的Draw Call,如下图所示:

要让场景中的物体使用Static Batching,需要将其标记为Static,并在Mesh Renderer中共享相同的材质,因为Static Batching不会在CPU上做顶点转换,所以它通常比Dynamic Batching更有效。不过它会使用更多的内存,例如你的场景中有相同物体的多个副本,Unity会将它们组合成一个大网格并可能会增加内存使用。Unity将尽可能多的网格结合到一个静态网格中,并将其作为一个Draw Call提交。这种方法的缺点是:标记为Static的物体在其生命周期中不能移动。

Dynamic Batching启用时,Unity将尝试自动批量移动物体到一个Draw Call中。要使物体可以被动态批处理,它们应该共享相同的材质,但是还有一些其他限制:

顶点数量: Dynamic Batching场景中物体的每个顶点都有一定的开销,因此批处理只适用于少于900个顶点属性的网格物体。举个例子,如果你的着色器使用顶点位置,法线和一个UV,那么你可以动态批处理多达300个顶点;而如果你的着色器使用顶点位置,法线,UV0,UV1和切线,那么只有180个顶点。值得注意的是,属性计数限制可能会在将来更改。

镜像信息: 如果物体包含的Transform具备镜像信息,例如A物体的大小是(1f, 1f, 1f),而B物体的大小则是(-1f, -1f, -1f),则无法做批处理。

材质 :如果物体使用不同的材质实例,即使它们本质上相同,也不会被批量处理。而Shadow Caster Rendering是个例外。

渲染器: 拥有光照贴图的物体有其他渲染器参数,例如光照贴图索引或光照贴图的偏移与缩放。一般来说,动态光照贴图的游戏对象应该指向要批量处理的完全相同光照贴图的位置。

不能使用Multi-pass着色器的情况: 几乎所有的Unity着色器都支持多个灯光的正向渲染模式(Forward Rendering),这要求额外的渲染次数,所以绘制 “额外的每像素灯”时不会被批处理;Legacy Deferred(Light Pre-Pass)渲染路径不能被动态批处理,因为它必须绘制物体两次。

Dynamic Batching通过将所有物体的顶点转换为CPU上的世界空间来工作,所以它只能在渲染Draw Call的工作量小于CPU顶点转换工作量的时候,才会起到提高性能的作用。当用游戏机或如Metal这样的现代API,Draw Call的开销通常低得多,Dynamic Batching就无法提高性能了。了解到以上限制后,如果明智地使用批处理,可以显著提高您游戏的性能。

提高图形性能的另一个好办法是使用GPU Instancing。GPU Instancing的最大优势是可以减少内存使用和CPU开销。当使用GPU Instancing时,不需要打开批处理,GPU Instancing的目的是一个网格可以与一系列附加参数一起被推送到GPU。要利用GPU Instancing,您必须使用相同的材质,且可以传递额外的参数到着色器,如颜色,浮点数等。

Unity从54版本开始支持GPU Instancing。 唯一的限制是在游戏物体上要使用相同的材质和网格。 目前支持以下平台:

Windows DX11/DX12 和 SM 40 或更高/OpenGL 41 或更高

OS X and Linux:OpenGL 41 and above

移动:OpenGL ES 30 或更高/Metal

PlayStation 4

Xbox One

如果您想要进行进一步的优化,例如减少管理场景物体的开销,您也可以使用GraphicsDrawMeshInstanced方法。 您只需要传递您的网格,材质和附加属性来绘制您的物体。现在的限制是一次最多1023个实例。在Unity 56中,我们添加了GraphicsDrawMeshInstancedIndirect的新方法,可以用来指定需要渲染的实例数量。

要创建支持GPU Instancing的基本标准表面着色器,可以在您的项目里面点击:

Create->Shader->StandardSurfaceShader(Instanced)。

然后,在材质属性中选择新创建的着色器。

虽然实例化的物体共享相同的网格和材质,但您可以使用MaterialPropertyBlock API为每一个物体设置单独的着色器属性。

如果一个游戏对象被标记为“Static”并且打开了Static Batching,那么这个游戏对象就不能进行GPU Instancing,检视器中会出现一个警告框,提示“静态批处理”标志可以在播放器设置(Player Settings)中取消。如果游戏对象支持Dynamic Batching,但是它使用的某个材质可以进行实例化,那么这个游戏对象将不会被批处理,并且将被自动实例化。

当使用Forward Rendering渲染模式,受多个灯光影响的物体无法有效地实例化。只有Base Pass可以有效地利用实例化,而不是添加的Pass。此外,使用光照贴图或受不同光或Reflection probe影响的物体无法实例化。如下图所示,您可以在Frame Debug中发现和GPU Instancing相关的Draw Call被标记为“Draw Mesh(Instanced)”。

GPU Instancing是一个非常强大的功能。在Unity 56中,您可以使用GraphicsDrawMeshInstancedIndirect绘制大量网格。在Mac Pro中,我们能够画出约68万个具有不同颜色的移动立方体并保持稳定的60帧每秒的帧率。

下图是一个示例场景,超过6千个包子在天空中围绕一个大碗飞翔,它们都投射和接收阴影。由于使用了GPU Instancing,几乎没有性能开销。这里的包子模型使用了StandardSurface Shader(Instanced)。

在本文中,我们描述了用于优化渲染性能的两种最流行的技术:批处理和GPU Instancing。我们向您展示了如何在实践中使用它们并讨论可能的应用。正因为有诸如批处理和GPU Instancing等优化技术的存在,我们能够绘制大量的对象并保持稳定的性能。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13402459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存