【填坑】UE4&Android 想调试下怎么就这么麻烦吗

手游偶尔会面世崩溃,就打了止测试边调试的心迹,实践起来没有想象着那顺。
参见《运用Nsight Tegra联机调试UE4
Android端游戏》。

图片 1

问题讲述

一点只手机,直接运行Debug几乎都到即等同步就是搁浅了。

图片 2

这儿戏是早就设置成功了之,比较异常的凡在【OPPO OPPO A57 Android 6.0.1
(API 23) 】上除了安装游戏外,还设置了一个事物,其它手机都无出安。
但是网上几乎找不至“com.nvidia.pentak.debugproxy”相关的旁消息。

图片 3

既是游戏就安装,就尝试手动启动游戏,再附加到过程。
会首先“Pulling device files…”

图片 4

联网下,【samsung SM-G9280 Android 7.0 (API 24)
】上会起是错误信息。
个人感觉跟是否Root应该关系不大,好像是三星对run-as的支持有问题。

图片 5

【LGE Nexus 5X Android 7.1.1 (API 25) 】【QiKU 8692-A00 Android 6.0.1
(API 23)】【Meizu PRO 5 Android 5.1 (API 22)】上便还咬在了“Starting GDB
debugger…”处。

图片 6

这儿【输出】窗口的打印信息为(除了warning详情不相同外相似):

Nsight Tegra: Starting debug server on device...
Nsight Tegra: Starting C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\NVIDIA\NSIGHT TEGRA\3.4\Debuggers\arm\gdb.exe...
Nsight Tegra: Running script E:\Develop\Shooter\Client\Intermediate\Android\APK\libs\armeabi-v7a\gdb.setup...
Nsight Tegra: Connecting to remote device...
Loaded 'linker'
......
# Loaded 一些文件
......
warning: Could not load shared library symbols for 15 libraries, e.g. /system/framework/arm/boot.oat.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?

warning: Could not load shared library symbols for 3 libraries, e.g. /data/dalvik-cache/arm/system@framework@tcmclient.jar@classes.dex.

warning: .dynamic section for "C:\Users\Administrator\AppData\Local\Temp\Nsight_Tegra_devices\860BCNP223J3\symbols32\system\lib\libgnustl_shared.so" is not at the expected address (wrong library or version mismatch?)

假若【NVIDIA】窗口会陆续出现谬误提示,最终还是败退。

图片 7

看了“%AppData%\NVIDIA Corporation\Nsight
Tegra\Logs”下的日志,感觉是否以及“com.nvidia.pentak.debugproxy”有接触关系,其它为要没有啥头绪。

2017-08-17 11:55:09.1209|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "13-target-select remote :2020"
......
# stdout 了一些文件
......
2017-08-17 11:55:29.1331|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-target-select remote :2020" command in 20000 ms. The command is timed-out.
2017-08-17 11:55:29.1331|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "14-thread-list-ids"
2017-08-17 11:55:49.1332|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-thread-list-ids" command in 20000 ms. The command is timed-out.
2017-08-17 11:55:49.1332|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "15-exec-continue"
2017-08-17 11:56:09.1474|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-exec-continue" command in 20000 ms. The command is timed-out.
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "-exec-interrupt"
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "-gdb-exit"
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.PentaKPackage|[PentaKPackage] Mode changed to DBGMODE_Design
2017-08-17 11:57:02.8154|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] stderr:This application has requested the Runtime to terminate it in an unusual way.
2017-08-17 11:57:02.8154|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] stderr:Please contact the application's support team for more information.

OPPO下也未是得心应手的,因为它调试安装都要输入密码,这个历程遭到为无懂得它们处理了呀,稍不留神就会见造成安装、运行无成事。

图片 8

昨日折腾了同等龙,暂时没什么好之想法了,等发出矣再也尝试吧~
世家而起更还是千方百计的,欢迎指教!

岂来之需求?

釜底抽薪方案

从今最后之Time
out入手,顺便搜了生日志里的Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager关键字,参见Failure
to attach debugger due to GDB command
time-out,尝试调整了“Timeout,
s”的价值,居然就可了!::>_<::

图片 9

于“Starting GDB debugger…”开始打界面会冒出假死的景。
成就后会见并发下一样步“Starting Java
debugger…”,这步成功快速,随后提示框关闭,正式进入调试状态。

图片 10

这儿退出游戏时会健康输出日志。

线程 'Thread-14961 [Java]' (0x43) 已退出,返回值为 0 (0x0)。
线程 'Thread-6 [Java]' (0x49) 已退出,返回值为 0 (0x0)。
Program exited normally
程序“[21436] com.test.shooter”已退出,返回值为 0 (0x0)。

旗帜鲜明,由于不同之装备配备不同。导致其CPU和GPU处理能力有高有低。同样的游玩想要于具备设施上运行流畅且画面好,是未可能的。这虽需我们针对不同的装备能力开展画质调节,以管教游戏的珠圆玉润运行。

别疑惑

  • 直白运行Debug,貌似只有OPPO上首先赖正常安装“com.nvidia.pentak.debugproxy”的情况下会正常进入调试状态,再次运行无履安装为还是颇,其它手机为要挺。
  • 除开三星体外其余附加进程都早已OK,不同机型需要的time还不尽相同。
  • “com.nvidia.pentak.debugproxy”到底是干嘛用之!?

咱俩需要控制什么?

想念只要博我们得控制什么,只需要找来影响游戏运行效率的触及即可。
当然在此不克挨个列举出富有戏类的接触。但笔者就个人经历,列有一些可知就此点。

\贴图精度*

\渲染面数*

\料复杂度*

\粒子数目*

\阴影质量*

\水面效果*

\增强性场景竞相*

\发动机后期效益*

脚,我们就算一个接触一个点来说明原因,并为出大规模的优化措施。

贴图精度:SKIP MIPMAP

贴图精度影响之是tex2D、texCUBE等采样指令的进度。对于显卡较软的机来说,可能会见是相同万分瓶颈。一般的发动机都提供了SKIP
MIPMAP的力。

SKIP MIPMAP即在上传贴图数据的当儿,跳了指定级数的MIPMAP。
这样以SHADER中进行访问时,使用的就是不如级别的贴图精度。
比如,一摆放1024×1024的贴图。 SKIP MIPMAP设置为1。表示一旦跨越一级MIPMAP。
那SHADER中采样的时刻。最可怜分辨率将会晤是512×512。

渲染面数:裁剪&LOD&DETAIL

渲染面数与DRAW CALL数目,会被GPU个富有、GPU频率限制。
当超出负载时,帧率会突然下降。
这就要求我们需要针对渲染面数有一个格外好之控制。常见的操纵手法来3种

1、减多少裁剪距离

    剪裁距离的压缩,会拿天的山山水水裁剪掉。 从而减少DRAW
CALL和提交的面数。

   
注:这里说之回落裁剪距离,一定是暨视锥体裁剪时一起下,当靠摄像机的FAR
CLIP PLANE,作用好有些。

2、模型LOD

    随着距离的长,景物的细节会扣押不到头。此时咱们得以减细节。

    注:LOD的切换,可以是零星个政策分管。 一凡距,二是基于机型配备。
取距离计算结果及机型配备结果丁最为老之LOD等级。

3、隐藏细节

   
场景中的风物,根据程序关系进行标记。不同之顺序关系之景点,受不交与的剪距离的影响。
比如,地表可看距离吗1000,树木可视距离为800,花草可张距离也500。

   
注:主次细节的示为,可以是简单个政策分管。一凡是距离,二凡是基于机型配备。距离计算结果及机型配备结果尚且需要出示时,才显示。

材质复杂度:切换SHADER

材质复杂度是一体画质和效率控制体系面临的大头,毕竟大部分底开发都盖材质而起。归根结底,材质复杂度的操纵,就是切换不同之SHADER。
使得GPU运算复杂度降低。笔者与的引擎以及戏支付项目面临,遇到了些微栽。

1、宏控制的SHADER编译

   
宏控制的SHADER编译,是赖在SHADER中应用有宏定义。在对SHADER进行编译时,将装备定义之宏开关附加到SHADER代码顶部,编译器根据宏内容进行编译。
这个方案的助益是,一学代码适配多个装备配备。但以此方案吗发出一个缺陷,就是如要进行实时切换,则会触发SHADER的复编译。如果是手机种类,一般还是开行之早晚进行硬件检测,选择最为契合当下机型的编译配置进行材料的初始化。
而对于端游等档次,则需考虑动态切换问题。

    注:这个方案,汇编级的SHADER不支持。 比如DX ASM、STAGE3D AGAL。

PS:笔者曾工作的公司之一个自研手游3D引擎是因此的这个方案,十分好用。
前提是中不要为玩家切换画质。

PPS:UNITY3D也支撑这种方案。

2、切换Technique

及时是依据一个料拥有多单Technique,且Technique不是用来区别材质。
也就是说,在这种情形下,Material作为有别于一个型材质的单元。
其外含的Technique用于做装备的习性适配。这样的方案下,不同的图景下,需要切换高中低配置时,只需要切换Technique即可。

流淌:这个方案,常见引擎都支持,如OGRE,UNITY3D。

粒子数目:禁用发射器

一个粒子特效可能发一个还是多单发射器组成。这样的话,我们可为各级一个发射器指定一个LOD等级(如果无支持额外添加数据的,可以经发射器名字加前缀,比如
LOD0_FIRE0,LOD1_FIRE1等)。
我们再次因玩家的取舍要配备禁用发射器。以达到减少粒子计算和渲染之支出。

阴影质量:SHADOW MAP精度&选择性开关

影子的是增高画质的一个有利武器。
但是当玩家机器配置无法也影子质量买只时,就只有选择性关闭了。
比如,可以被NPC,怪物,BOSS,其他玩家,玩家自己尚且配置一个投影标记。
一般生 实时阴影、脚的黑圈、关闭
三栽。再根据机型配备或者玩家选择进行动态的开关各单位的阴影。

阴影的频率开销还于另外一些参数的影响。比如SHADOW
MAP的分辨率,是否要以软阴影等。

水面效果:折射&反射&普通水面

水面效果一般生以下4种

1、实时折射  + 实时反射 ( 现在的主流配置)

2、实时反射(早期有MMORPG使用)

3、普通水面+CUBEMAP反射(丝路传说那种)

4、普通半晶莹剔透水面(WOW早期那种)

一经都落实了,那根据玩家选择即可。 和LOD一样,取玩家选择与配备的最为酷价值。

增强性场景竞相

本,地上的鸟在往返走动,玩家跑过时,会大吃一惊飞。
又按,玩家进入草丛时,草丛会因为受玩家力的震慑左右颤巍巍。

这么的组成部分细节,着实令全体社会风气展示更实事求是。
但CPU和GPU的额外开销,也是一律画非聊之账目。
因此,提供一个部署,供玩家和机型开关。

发动机后期效益

发动机后期效益,如BLOOM,HDR,热力扭曲等,都见面带来不聊之付出。
提供开关被玩家或者机型配备即可。

总结

俺们不期自己之一日游以各级一个玩家的机器上,都美仑美奂。
但我们盼望自己之游艺,能够通的运作于每一个玩家的机器上。
这样至少给了玩家一不成体会者游乐的空子。
如果玩家愿意呢这娱乐升级好的安排,那又何尝不是相同桩值得被丁满之转业!

发表评论

电子邮件地址不会被公开。 必填项已用*标注