Vulkan API的性能及兼容性

news2024/11/21 0:38:57

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


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

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
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(九)笔记.net学习之委托和事件、多播委托、观察者模式

1.委托得声明、实例化和调用 (1)委托:本质是一个类,继承自System.MulticastDelegate,里面内置了几个方法,如构造函数等。 (2)声明委托:委托无方法体,可以有返回值或参数…

Linux文件系统和软硬连接

目录 1.文件组成 2.文件系统 3.软硬连接 1.文件组成 先来看看文件的属性部分: 文件属性由权限,硬连接数量,所属组,所属人,大小和修改时间构成。 再来看看文件由的一个的东西inode 793395 793328就是inode 2.文件系…

聚观早报 |中国企业成世界杯最大金主;马斯克恐失去世界首富位置

今日要闻:中国企业成世界杯最大金主;马斯克恐失去世界首富位置;刘强东称对不起京东高管;苹果在沪最大代工厂重启招工;威马汽车上海全员工资打折中国企业成世界杯最大金主 据报道,作为全球最为瞩目的赛事之一…

谁懂,java后端面试多次惨败并发的苦!幸好有阿里首发并发编程学习文档,系统全面还便于上手!

什么是并发 并发指的在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 并发和并行是十分容易混淆的概念。并发指的是多个任务交…

如何测试 esp-matter_example_light 例程

此例程支持三种配网方式: 苹果手机扫码配网chip-tool 命令配网Matter 指令配网 1 使用苹果手机扫码配网 说明文档:Apple Matter 测试方法 所需设备: 苹果手机(最新版本 IOS 系统)苹果音响(Apple-Matter&a…

【文本挖掘】业绩预告原因·其一

下载数据及提取信息 在此单列前15行: 000001,平安银行,预计本公司2006年度净利润与上一年度相比将增长300%-350%。2)业绩变化原因:利润的显著增长主要是由于利差的改善、资金运用效率的提高和贷款的良好增长,不良资产的成功清收和资产质量的…

基于PHP+MySQL企业网站的设计与开发

现如今,企业网站是商业贸易中的一条非常重要的道路,可以把其从传统的实体模式中解放中来,让用户足不出户就了解到企业的各种信息,为用户提供了极大的方便,网新帮德网站的主要功能包含:企业简介,新闻功能信息,企业业务信息,在线留言等功能。网站分为管理员、会员用户…

计算机组成原理期末复习第三章-1(唐朔飞)

计算机组成原理期末复习第三章-1(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&am…

Ubuntu 20.04安装ipopt和cppAD(安装全流程+报错解决)

文章目录参考资料1. Ipopt安装1. 方式1: 命令行安装2. 方式2:源码安装3. 方式3:源码安装4. Ipopt测试5. 报错修复2. CppAD安装1. 方式1:命令行安装2. 方式2:源码方式安装3. CppAD测试3. 测试Ipopt与CppAD是否可用1. 例…

uni——app、H5省市区选择

案例演示 步骤 封装的组件&#xff0c;之后引用组件。 父&#xff1a; <pickerAddress change"change"><input type"text" placeholder"请选择所在地区" :value"value" /><image :src"$common.image(/static/p…

[附源码]java毕业设计新闻发布和评论管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

安装Jenkins

安装Jenkins jenkins官网 1、安装jdk 1&#xff09;yum安装 yum search java|grep jdk # yum查看jdk版yum install -y java-11-openjdk #安装jreyum install -y java-devel #安装jdk2&#xff09;自定义安装 ①下载java ②上传解压tar ③配置环境变量&#xff08;此步…

原生js 之 (BOM操作)

BOM(浏览器对象模型) Window对象对应着浏览器窗口本身&#xff0c;它的属性和方法通常被统称为BOM (浏览器对象模型) BOM 提供了独立于内容而与浏览器窗口进行交互的对象。 BOM主要用于管理窗口与窗口之间的通讯&#xff0c;因此其核心对象是Window BOM由一系列相关的对象组成…

Spark DAG及内存迭代计算

文章目录DAGJob与Action之间的关系DAG和分区DAG宽窄依赖DAG宽窄依赖的划分Spark内存迭代计算总结Spark是怎么做内存计算的&#xff1f;DAG的作用&#xff1f;Stage阶段划分作用&#xff1f;Spark为什么比MapReduce快&#xff1f;DAG Spark的核心是根据RDD来实现的&#xff0c;…

cubemx stm32 lu90614模块 人体温度检测模块 可以替代温枪 驱动代码

lu90614 使用串口通信在&#xff0c;指值得注意的是&#xff0c;他的TX接单片机的TX&#xff0c;RX接单片机的RX&#xff0c;和其他的串口设备不一样。 模式切换包 lu90614有两种模式&#xff0c; 一个是物温模式&#xff0c;一个是体温模式&#xff08;检测人体温度用体温…

【CSDN 竞赛—第10期】所有题目解法的思考和总结

目录 一、 熊孩子拜访 二、 走楼梯 三、括号上色 四、喜水青蛙 一、 熊孩子拜访 已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。 我的解题思路&#xff08;通过所有测试用例&#xff0…

[附源码]java毕业设计星期八酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Opengl ES之PBO

叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了&#xff0c;然而这个系列还远没有到完毕地步&#xff0c;后续至少还有关于Opengl矩阵变换、YUV与RGB互转、Opengl水印贴图、Opengl转场动画等主题文章。 断更的主要原因如果给自己找个借口的话可以说是工作比价…

1100w播放、45w涨粉!黑马UP在B站20天逆袭登顶!

在B站生活区里&#xff0c;“搞笑区”的流量独占鳌头&#xff0c;创作者也是络绎不绝。 为此&#xff0c;B站官方对搞笑内容创作布局了长期的扶持计划&#xff0c;比较热门的两个活动“搞笑新星训练营”、“搞笑研究所”是搞笑内容投稿最多的&#xff0c;至今两个活动已经分别…

动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

摘要&#xff1a;在本案例中&#xff0c;我们将展示如何基于A2C算法&#xff0c;训练一个LunarLander小游戏。本文分享自华为云社区《使用A2C算法控制登月器着陆》&#xff0c;作者&#xff1a;HWCloudAI 。 LunarLander是一款控制类的小游戏&#xff0c;也是强化学习中常用的…