3

Vulkan API的性能及兼容性 - UWA问答 | 博客 | 游戏及VR应用性能优化记录分享 | 侑虎...

 1 year ago
source link: https://blog.uwa4d.com/archives/TechSharing_314.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1)Vulkan API的性能及兼容性
​2)FrameTiming.gpuFrameTime获取GPU耗时有什么条件
3)MMO里面的寻路网格如何制作
4)万国这种联盟边界的实现思路


这是第314篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Rendering

Q:请问一下目前Android设备用Vulkan API的项目多吗,性能、兼容性及稳定性如何?

A:Vulkan用的比较好的应该是《天涯明月刀》手游,《王者荣耀》在三星平台上也开发过一段时间的Vulkan的版本,但是之后好像就更新打回ES版本了。

感谢萧小俊@UWA问答社区提供了回答

有没有更多的开发者能提供一些Vulkan稳定性相关的经验分享呢?欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6114de488f8c834241698b95


Rendering

Q:手机为什么上获取不到FrameTiming.gpuFrameTime的时间?

版本Unity 2020.3,手机华为 Mate 30P,CPU时间可以显示但GPU时间获取不到,测试代码如下:

using System;
using UnityEngine;
using Unity.Profiling;

public class FrameTimingsHUDDisplay : MonoBehaviour
{
    GUIStyle m_Style;
    // Profiling state.
    private int frameCount = 0;
    private float accumulatedFrameTimeCPU = 0.0f;
    private float accumulatedFrameTimeGPU = 0.0f;
    private float frameSampleRateMS = 0.0f;
    private FrameTiming[] m_FrameTimings = new FrameTiming[1];

    void Awake()
    {
        m_Style = new GUIStyle();
        m_Style.fontSize = 15;
        m_Style.normal.textColor = Color.white;
    }

    void OnGUI()
    {
        CaptureTimings();

        var reportMsg =
            $"\nCPU: {m_FrameTimings[0].cpuFrameTime:00.00}" +
            $"\nMain Thread: {m_FrameTimings[0].cpuFrameTime:00.00}" +
            $"\ncpuTimeFrameComplete: {m_FrameTimings[0].cpuTimeFrameComplete:00.00}" +
            $"\ncpuTimePresentCalled: {m_FrameTimings[0].cpuTimePresentCalled:00.00}" +
            $"\nGPU: {m_FrameTimings[0].gpuFrameTime:00.00}" +
            $"\nCPUTotal: {accumulatedFrameTimeCPU:00.00}" +
            $"\nCPUAverage: {(accumulatedFrameTimeCPU / frameCount):00.00}" +
            $"\nGPUTotal: {accumulatedFrameTimeGPU:00.00}" +
            $"\nGPUAverage: {(accumulatedFrameTimeGPU / frameCount):00.00}";

        var oldColor = GUI.color;
        GUI.color = new Color(1, 1, 1, 1);
        float w = 300, h = 210;

        GUILayout.BeginArea(new Rect(32, 100, w, h), "Frame Stats", GUI.skin.window);
        GUILayout.Label(reportMsg, m_Style);
        GUILayout.EndArea();

        GUI.color = oldColor;
    }

    private void CaptureTimings()
    {
        FrameTimingManager.CaptureFrameTimings();
        uint frameTimingsCount = FrameTimingManager.GetLatestTimings(1, m_FrameTimings);

        if (frameTimingsCount != 0)
        {
            accumulatedFrameTimeCPU += (float)m_FrameTimings[0].cpuFrameTime;
            accumulatedFrameTimeGPU += (float)m_FrameTimings[0].gpuFrameTime;
        }
        else
        {
            accumulatedFrameTimeCPU += Time.unscaledDeltaTime * 1000.0f;
            // No GPU time to query.
        }

        ++frameCount;
    }
}

以上问题有哪位大拿也曾经做过类似的测试,可以来分享一下,欢迎转至社区交流:
https://answer.uwa4d.com/question/63440ef8dec0b5016d28fcf1


Q:MMO里面的寻路网格如何制作呢?

自动生成的不精准。美术制作是拼起来的,某些点忘记连或者重叠会有问题。一般是怎么解决的呢?现在就是美术单独做的Mesh,但是他们的Mesh如果由两个面点没连着,或者某个三角形的2个点,重叠了,就会有问题。

A:简单说下思路,把地形当做一个2D平面,代码创建一个x*y大小的Mesh,格子大小保持Unity的单位1就行,这个Mesh了你控制好覆盖这个2D平面,然后从Mesh的每个顶点坐标向下发射射线,检测碰撞,计算当前顶点的高度。算好后,就修改Mesh的各个顶点高度。这样,Mesh成型后就是个大概的地面建筑模型了。

然后编个简单Shader,只显示顶点色和边沿。这方面网上有很多Shader。Mesh就用这个Shader,即可显示网格样子。实在不行,你Scene里面的网格模式。

接着就是写代码,根据鼠标点击滑动坐标,把对应的Mesh网格涂色即可,比如涂绿色为路面。红色为障碍。最后计算这些格子的x,y坐标。用A*算法寻路即可。

感谢牛头人不服@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/62b061119b935a01f583e514


Rendering

Q:请教一下万国这种联盟边界的实现思路。

是多个Quad交叉重叠后,想办法把他们交叉的区域不绘制?还是直接自己Draw一个这样的多边形的Mesh?

1.png

A1:万国这个应该用的地图16位状态拼接的方法。可以借鉴暴雪的地图地表的生成方式。

感谢1 9 7 3-311135@UWA问答社区提供了回答

A2:万国是Draw Mesh。在不同的LOD下,精细度不同。我之前抓过Mesh看过。

感谢承影@UWA问答社区提供了回答

是否还有更多的实现方法呢?欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6264eb5836a2fd066de67469

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK