Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Unity 2d,多层背景透照_Performance_Unity3d_2d_Gpu Overdraw - Fatal编程技术网

Performance Unity 2d,多层背景透照

Performance Unity 2d,多层背景透照,performance,unity3d,2d,gpu-overdraw,Performance,Unity3d,2d,Gpu Overdraw,这个问题的定义很简单,但我无法找到一个简单或直接的解决方案。 我有一个背景,由几个不透明层组成: 梯度天空(1张,静态) 明亮的大山(1片,移动一点) 较暗[较近]的山脉(随机生成的几张图片,移动速度更快) 更暗[更近]的山脉,有一些细节(一些随机生成的图片,移动得更快) 我经历了透支:每一幅画都是一幅画接一幅画。每一层都是动态的,所以我不能只切割一半的天空或山的一半。然而,50%的图片只有一种纯色+全透明 问题1:防止背景透支的最佳做法是什么?考虑最简单的例子:背景天空(100%屏幕)+移动山

这个问题的定义很简单,但我无法找到一个简单或直接的解决方案。 我有一个背景,由几个不透明层组成:

  • 梯度天空(1张,静态)
  • 明亮的大山(1片,移动一点)
  • 较暗[较近]的山脉(随机生成的几张图片,移动速度更快)
  • 更暗[更近]的山脉,有一些细节(一些随机生成的图片,移动得更快)
  • 我经历了透支:每一幅画都是一幅画接一幅画。每一层都是动态的,所以我不能只切割一半的天空或山的一半。然而,50%的图片只有一种纯色+全透明

    问题1:防止背景透支的最佳做法是什么?考虑最简单的例子:背景天空(100%屏幕)+移动山(80%屏幕)。 问题2:有些山是简单的图片——一种不透明的颜色,弯曲的形状,其余的是完全透明的。我应该继续在精灵中使用它们作为纹理,还是我必须进行一些实践才能以不同的方式使用它们?
    背景的外观:

    关于你的第一个问题,如果我理解正确,最简单的解决办法就是改变图片的z位置。

    关于你的第一个问题,如果我理解正确,最简单的解决方案是更改图片的z位置。

    在使用alpha的精灵和纹理时,为每一层、每一帧绘制相同的像素,这是导致过度绘制的基本原因。尝试避免将纹理压缩为RGB而不是RGBA

    当使用精灵和alpha纹理时,会为每个层、每个帧绘制相同的像素,这是导致过度绘制的基本原因。尝试避免将纹理压缩为RGB而不是RGBA回答:

  • 没有防止透支的解决方案,除非从头开始写一些东西。它很可能涉及网格和智能运行时自适应,具体取决于层的位置
  • Unity现在支持SVG。我对此进行了测试,它比单独使用纹理更好(取决于顶点的数量)。正确导入的SVG图像中没有纹理,这会阻止SetPassCalls的增加和整体纹理加载/卸载
  • 透支是低端设备的问题,最佳做法是尽量减少层数。但是,可以做一些额外的事情

    • 首先,空场景渲染的成本应尽可能低。这意味着没有后处理,没有未优化的脚本等。简单的FPS计数器和低端设备的温度测量将在这里有所帮助
    • 然后,着色器的选择最为重要。最简单的着色器形式是未照明/*。但是,它们不如默认着色器灵活(也可以认为是轻量级的)
    • SetPassCalls可能是一个重要的主题,但对我来说,它并不是一个设备崩溃。从本质上讲,所有背景最好包含在一个图集中,共享同一个着色器,并且在两者之间不包含任何其他内容。通过这种方式,您可以拥有任意多个层,并且所有内容都将在一次绘制过程调用中绘制
    • 最后,避免全屏动态照明。光源的照明应尽可能少,面积越小越好。照明质量也可以切换。我仍在和灯光作斗争,并试图将烘焙应用到我的任务中,但到目前为止,摆脱背景全屏灯光是一个巨大的FPS提升
    答案:

  • 没有防止透支的解决方案,除非从头开始写一些东西。它很可能涉及网格和智能运行时自适应,具体取决于层的位置
  • Unity现在支持SVG。我对此进行了测试,它比单独使用纹理更好(取决于顶点的数量)。正确导入的SVG图像中没有纹理,这会阻止SetPassCalls的增加和整体纹理加载/卸载
  • 透支是低端设备的问题,最佳做法是尽量减少层数。但是,可以做一些额外的事情

    • 首先,空场景渲染的成本应尽可能低。这意味着没有后处理,没有未优化的脚本等。简单的FPS计数器和低端设备的温度测量将在这里有所帮助
    • 然后,着色器的选择最为重要。最简单的着色器形式是未照明/*。但是,它们不如默认着色器灵活(也可以认为是轻量级的)
    • SetPassCalls可能是一个重要的主题,但对我来说,它并不是一个设备崩溃。从本质上讲,所有背景最好包含在一个图集中,共享同一个着色器,并且在两者之间不包含任何其他内容。通过这种方式,您可以拥有任意多个层,并且所有内容都将在一次绘制过程调用中绘制
    • 最后,避免全屏动态照明。光源的照明应尽可能少,面积越小越好。照明质量也可以切换。我仍在和灯光作斗争,并试图将烘焙应用到我的任务中,但到目前为止,摆脱背景全屏灯光是一个巨大的FPS提升

    我不确定您是否这样做了。我已经设置了z层,但据我测试,它不能防止透支。你能告诉我们你得到了什么结果和想要的结果吗?我不确定你是否这样做了。我已经设置了z层,但据我测试,它不能防止过度绘制。你能告诉我们你得到的结果和期望的结果是什么吗?如果这有助于aIso转到主摄像头,并将Skybox更改为“不清除”,将渲染路径更改为“前进”。我看不到,RGB图片将如何解决最终目标o