默认画质的机型适配方案

news/2024/7/10 5:16:37 标签: 机型适配, 优化, Shader, 贴图

1)默认画质的机型适配方案
2)Unity TempBuffer的出处如何查看
3)Active和Deactive耗时高的物体优化方式
4)自定义Shader在场景烘焙光照贴图后材质变黑

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

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


LOD

Q:我们现在的方案是按照CPU性能分档来做的,不过机器性能分档还和GPU/分辨率等相关,我们的分档和UWA提交测试时的机器分档就不一样。请教下大家是怎么做的?

A:个人认为没有必要死板的遵循某一准则,比如某些公司的标准中以高通的SoC型号的数字来分档,大于某个数字的就算第一档,但其实近两年新出的一些中端芯片综合性能已经明显高于几年前的旗舰芯片。

所以我们团队在做这个功能时,主要遵循的规则是:在满足研发/发行的强制要求的前提下,结合项目类型及性能瓶颈点,为每一个设备在帧数达标的前提下选取其能接受的最高画质。

以下举两个例子说明:

例如一些较老的使用高通810的机器,这一代芯片发热较严重,虽然在一些公司的标准中属于一档机,但由于经常会降频,所以我们只会将其设置成中等画质。

例如OPPO R9等一些较老的联发科的芯片,在实际测试中性能表现很糟糕,所以相比同年发布的同级别高通芯片,会特意将其降低一档。

在我们项目中实际分级时,分为5档。前面说了要尽量细致地照顾到所有机器,所以我们维护了一张表格,根据不同机器的参数将其映射到5档里面。

iOS设备,主要根据其Device Model来划分,iOS由于设备量很少,基本通过其型号就能预估出大概的性能范围,具体的DeviceModel信息网上资料很多,可以参考:https://stackoverflow.com/questions/26028918/how-to-determine-the-current-iphone-device-model

Android设备主要根据其GPU型号来划分,我们主要参考:https://www.techcenturion.com/mobile-gpu-rankings

根据这个帖子中给出的评分初步整理,然后结合实际测试运行下来的情况进行微调。

另外分级中的每档的具体设置,需要具体项目具体分析,基本上主要的设置无非就是分辨率、屏幕后处理、材质精度、阴影设置、LOD设置等等。

感谢范君@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5df34c3fce53cf56002cad31


RenderTexture

Q:请问这些TempBuffer的出处从哪里可以查看呢?

 

A:我们是在每次GetTemporary的时候,把返回的RenderTexture的名字改掉,这样在这里显示的就是改过的名字。重灾区还是在后处理上,bloom和depth of field要重点关注。

感谢王宇@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5dfb29e973f93355f9667f43


Active

Q:对于Active和Deactive耗时高的物体优化方式是移出摄像机范围吗?

A:首先可以在UWA的线上测评服务中测一下目前的Activate和Deactivate的具体数据。


如果您项目发现两项相差过大(如Activate次数是1W,Deactivate次数是1K),说明本身有很多操作是无用操作,可以通过 报告下方的列表查看具体是对什么GameObject进行了Activate/Deactivate操作。


通过对比差异就可以判断哪些GameObject存在无用操作。

 

对于这类问题,建议在代码里用bool变量记录状态,不要直接用SetActive或activeSelf等API,其耗时影响会比较大。

对于确实需要频繁显示/隐藏的物体,尤其是UI组件(常见的如战斗内的UI血条),建议采用移出屏幕、修改Scale、修改透明度等方式替代SetActive操作。具体相关案例在我们之前的直播和案例精讲中都有提到。

该回答回由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e0083e873f93355f9667f58


Shader

Q:自定义的Shader在场景烘焙光照贴图后:

  • 如果我把Shader打包,那么场景加载后,材质是黑的。
  • 如果Shader不打包,那么场景加载后,正常。

我们也找了一些资料,讲Custom Shader烘焙光照的问题,看了下他们的处理方法,就是在指定下材质的Shader,但是很少有资料讲到这种情况的正式制作流程应该是怎样的,还有就是它的底层原理,不知道大家是否有相关的处理经验和材料呢?感谢!

A:可以按照下图中的参数设置一下Graphics Settings的Shader Stripping试一下效果。


这里会把Lightmap相关的Keyword剔除。

 

也可以只勾选项目实际用到的Lightmap模式,相应的Shader变体会少一点。

该回答回由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e008ce5ce53cf56002cad6b

封面图来源于网络


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

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


http://www.niftyadmin.cn/n/1031006.html

相关文章

搭建Eureka-Server集群

1. 简介 Eureka作为微服务注册中心, Eureka-Server可以搭建多台服务注册中心实例, 并相互进行注册, 形成高可用的集群. 2. 创建Eureka注册中心微服务 创建微服务应用microservicecloud-eureka 2.1 导入依赖 <dependencies><dependency><groupId>org.spr…

浅谈Assets——Unity资源映射

本篇文章是Addressable基础篇系列第一节&#xff0c;文末可点击查看其它章节。 一、什么是Assets 对于Assets&#xff0c;一般来说我们有两层认知&#xff1a;一层来自于Unity的默认工程目录Assets&#xff0c;一层来自于Unity的打包系统AssetBundles。那么我们就从这两个方面…

微服务-负载均衡Ribbon

1. 简介 在分布式微服务架构中, 微服务应用多是以集群的方式部署来保证微服务的高可用性. 那么服务消费方是通过什么方式的负载均衡策略调用到集群中的微服务提供方的呢? Spring Cloud给我们提供了解决方案: Ribbon. 2. Ribbon的负载均衡策略 Ribbon提供了轮询, 随机, 权重…

InteliJ-IDEA-高效技巧(三)

why 在学习主流框架源码时, 经常要在各个源码的类或方法的调用间来回穿梭查看, 这就需要一款很好用IDE工具来打辅助. InteliJ-IDEA工具就提供了强大的源码追踪和继承链展示功能. 下面就记录自己学习过程中用idea到的diagram功能. 查看继承关系 在你想查看的类的标签页内&…

透视相机怎么得到正交效果

1&#xff09;透视相机怎么得到正交效果 2&#xff09;Unity 2018异步加载场景时isDone不为true 3&#xff09;关于AssetBundle的疑惑 4&#xff09;www下载图片是否支持直接下载成各个平台支持的压缩格式 5&#xff09;场景CombinedMesh移除法线等多余信息 这是第189篇UWA技术…

微服务-熔断器Hystrix

1. 雪崩效应 复杂的分布式体系结构中的应用程序很多都有依赖调用关系, 每个依赖关系有些时候会出现不可避免的失败(异常,超时,网络故障等). 这种多个服务层调用&#xff0c;基础服务的故障可能会导致级联故障&#xff0c;进而造成整个系统不可用的情况&#xff0c;这种现象被称…

AssetBundle的原理及最佳实践

本篇包含了Addressable基础篇系列的第三节和第四节&#xff0c;第一节《浅谈Assets——Unity资源映射》&#xff0c;第二节《Resources目录的优点与痛点》&#xff0c;可点击回顾。本文主要介绍Addressable基础篇系列中的AssetBundle原理和AssetBundle最佳实践。 三、AssetBun…

微服务-API网关Zuul

1. Why 微服务为什么需要API网关, 因为在微服务架构中&#xff0c;后端服务往往不直接开放给客户端&#xff0c;而是通过一个API网关根据请求的url&#xff0c; 路由到相应的服务。当添加API网关后&#xff0c;在第三方客户端和后端服务之间就创建了一面墙&#xff0c;这面墙直…