首页 > 其他分享 >Vulkan API的性能及兼容性

Vulkan API的性能及兼容性

时间:2022-11-23 16:12:19浏览次数:62  
标签:兼容性 Mesh FrameTimings API private 00.00 UWA Vulkan

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稳定性相关的经验分享呢?欢迎大家转至社区交流。


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;
    }
}

  

以上问题有哪位大拿也曾经做过类似的测试,可以来分享一下,欢迎转至社区交流。


Mesh

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问答社区提供了回答


Rendering

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

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

 

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

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

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

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

是否还有更多的实现方法呢?欢迎大家转至社区交流。

封面图来源于网络


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

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

标签:兼容性,Mesh,FrameTimings,API,private,00.00,UWA,Vulkan
From: https://www.cnblogs.com/uwatech/p/16918601.html

相关文章

  • 更新 | Eolink IDEA 插件 “Eolink ApiKit” 最新版本 1.1.3 发布
    本月,EolinkIDEA插件“EolinkApiKit”已更新最新版本1.1.3 ......
  • Edge 浏览器出现兼容性问题
    Edge浏览器出现兼容性问题1.打开电脑任务管理器,关闭所有msedge.exe。2.关闭后,重启Edge浏览器,若重启后没有再弹窗兼容性问题,这时就可以进入下一步。3.打开浏览器——......
  • HTML tag attribute selector API All In One
    HTMLtagattributeselectorAPIAllInOnedemos$$//ChromeDevToolsAPI,$$constimgs=$$(`img[src$=".gif"]`);for(constimgof){console.log(`iimg......
  • 前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口
    〇、前言在前端项目开发时,我们可以通过配置代理proxy来访问本地或者是远程接口,但是部署后代理就失效了。如果项目部署在IIS上,就没法去对应到指定接口,此时就需要IIS......
  • 5种典型 API 攻击及预防建议
    API帮助跨多个设备互连多个应用程序或软件系统,定义它们可以发出的调用或请求的种类、调用的方式、应使用的数据格式以及应遵守的约定。API已经发展成为重要的互连,支持不......
  • wxPython绘图API
    简单介绍一个Pthon的绘图库wxPython.GDI+(图形绘制接口),CoreGraphics和Cairo库形成wxPython绘图API的框架。wx.GraphicsContext是主要绘制对象,使用它来创建各种设备上下文......
  • devtool.py -- 一个FastAPI的开发环境便捷脚本
     用惯了Django的manage.py所以在FastAPI的项目里,也写了一个类似的脚步:#!/usr/bin/envpythonimportsubprocessimportsysfrompathlibimportPathfromtypingi......
  • Kubernetes_静态Pod网关apiserver的audit审计日志
    前言审计日志是kube-apiserver中比较常见的一种加固手段,通过对每一次请求的行为进行审计,从而达到加固集群的目的,同时,审计日志还能够帮助我们troubleshooting,因为每一次......
  • Talend API Tester安装&使用
    为什么记录这个笔记?国内网站各种黑资料,不是病毒就是收费,所以需要记录一个靠谱的知识元。为了节省空间不提供任何图片,自己找不到拉倒安装说明:https://www.cccitu.com/49......
  • FastAPI使用typing类型提示
    typing是Python标准库,用来做类型提示。FastAPI使用typing做了:编辑器支持;类型检查;定义类型,requestpathparameters,queryparameters,headers,bodies,depende......