Categories News

流式加载后,为什么GPU仍在裁剪大量三角形 – UWA问答 | 博客 | 游戏及VR应用性能优化记录分享

1)流式加载后,为什么GPU仍在裁剪大量三角形2)开启级联阴影后,三角形数量为什么明显增加 这是第488篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:793972859 本次推送的实战案例来自于使用UWA服务的项目的真实且典型的问题。UWA将关键线索、定位路径与处理建议整理成了可复用的案例笔记,便于大家快速对照、排查自身项目中的同类问题。 实战案例 Q1:大地图已经做了流式加载,只加载角色附近区域,但GPU里仍有大量三角形被裁剪。为什么还会出现这种情况? A:可以先看UWA GOT Online报告中GPU Input Primitive的数据,继续拆分Culled Primitives的具体构成。 以报告中第830帧为例,Culled Primitives约95.8万,其中Facing & XY Plane Culling Primitives约43.2万,Z Plane Culling Primitives约21万,Coverage Culling Primitives约31.6万。 Facing & XY Plane Culling里包含背面剔除,这本身属于正常的渲染流程,而且目前无法继续区分其中有多少来自背面剔除、多少来自XY方向超出范围,所以不能直接把这部分都当成无效开销。 Z Plane Culling可以优先检查场景里是否有覆盖范围比较大的Mesh。比如一块Mesh横跨较大的空间,其中一部分几何已经超出摄像机视锥的前后范围,但整块模型仍然被提交给GPU,这种情况下可以评估大块Mesh是否需要适当拆分。 Coverage Culling则可以重点检查LOD。如果模型已经离相机很远,但仍保持近距离时的高面数,三角形投射到屏幕后会非常小,其中一部分甚至覆盖不到有效采样点,最后被GPU裁掉。可以检查远距离LOD是否降得足够。 Q2:项目里的角色支持换装,如果给不同衣服都做LOD成本比较高,这种情况下角色LOD还需要做吗? A:可以先确认角色对当前三角形数量的影响有多大,再决定是否值得做。比较简单的方式是在相同场景、相同视角下做一组开关测试,一组正常显示角色,一组把角色关闭,再对比Primitive相关数据。 角色关闭后三角形数量和裁剪数据明显下降,说明角色对当前几何压力的贡献较大,可以进一步评估角色LOD;数据变化不明显,则优先把精力放在场景模型上,继续检查大块Mesh和场景LOD。 实战案例 Q:高画质开启级联阴影后,三角形数量从几十万涨到100万以上,这部分增长和级联阴影有关吗? A:有关系。级联阴影会让部分物体重复参与阴影绘制,同一个物体除了正常渲染,还可能需要参与额外的阴影绘制,所以GPU需要处理的几何量也会增加。 高画质下Triangle数量 中画质下Triangle数量 从GOT Online报告数据来看,两档画质下的几何量差异比较明显。中画质下大部分场景维持在几十万,峰值约62.1万;高画质下则多次接近或超过100万,峰值约130.6万。 不过,高画质下可能还同时调整了其他渲染配置,所以不能把这部分增长全部归到级联阴影上。可以固定场景和摄像机视角,只调整级联阴影相关配置,再对比Triangle或Input Primitive的变化。 中画质GPU…

Read More
Categories News

MANGA MILLION 繁體中文怎麼看?集英社免費漫畫免註冊教學

本文重點:MANGA MILLION 是集英社創業 100 週年推出的免費線上漫畫網,把約 100 萬頁、近 400 部作品翻譯成 100 多種語言開放給全世界,免註冊也不用安裝,用瀏覽器就能看,目前收錄的 382 部作品裡有 87 部提供繁體中文。 集英社慶祝創業 100 週年(1926 年創立),推出「MANGA MILLION」免費線上漫畫網!把約 100 萬頁、近 400 部漫畫免費開放給全世界,超過 100 種語言,而且有繁體中文,免註冊就能在線上看熱門漫畫。MANGA MILLION 目標很簡單:希望讓從來沒接觸過漫畫的人也能透過這個網站入門,截至 2026 年 8 月 8 日,累積讀者數 21 萬多,累積閱讀頁數已超過 6000 萬。 MANGA MILLION 是什麼? MANGA MILLION(マンガミリオン)是集英社 100 週年企劃,在 2026 年 8…

Read More
Categories News

内存数据不再逐页翻!GOT Online开启“精准降本增效”模式

对很多项目组来说,“内存”永远是性能优化里避不开的硬骨头。但每次分析报告时,寻找各种内存指标、整理不同岗位的内存数据,往往耗费了大量的无用时间。GOT Online此次更新,主打的就是把核心内存数据集中呈现,并全面增强了对内存细分资源的定位能力。 除了针对内存分析的重磅升级,本次还同步上线了函数Top10耗时点和函数组数据一键导出等实用功能。 聚合常用指标:按需定制专属面板 做性能排查时,程序、美术、测试打开的是同一份报告,但关注点完全不同。哪怕都在美术团队,场景、角色、特效需要盯着的数据也差了十万八千里。 结果就是每次打开报告,都得重新翻页、找指标、做对照。数据明明都在,时间却花在了“去哪里找”上。好的性能工具,从不强求全员看同一份大表,而是让每个人打开报告的第一眼,都能直奔自己的“主战场”。 GOT Online本来就支持自定义模板,这次进一步把内存分析模块中的指标也放进了面板。以后经常看的内存数据,直接集中搬到自定义面板里,大家按自己的工作内容建立模板,搞场景的看场景,搞特效的看特效。关注的数据一眼就能拿到,不用再在大大小小的页签里绕圈子。 结合同步更新的场景性能表,还能进一步看清各个场景区间的细分指标。像 DrawCall 均值/峰值、不透明与半透明 DrawCall 分布等数据一目了然,甚至超标项还会直接高亮预警。看到哪个场景区间有问题,点击对应行的“查看场景数据”就能秒级跳转深挖,排查效率直接拉满。 深挖Unreal资源:三步锁定内存大户 自定义面板解决了“内存数据怎么看更快”的问题。但一旦发现内存异常飙升,接下来还是得回答那个最现实的问题:到底是哪类资源占得多?最后又落到了哪个具体的资产上?性能排查最怕凭空盲猜,缩短排查路径的本质,就是尽可能减少这种无效猜想的过程。 GOT Online之前已经支持Unity项目的资源内存分析,这次把这项能力也补齐给了Unreal项目。现在Unreal项目也可以直观查看资源内存趋势、数量变化和不同资源的占用分布。纹理、网格、动画、音频、材质、Shader、RenderTexture和粒子系统等,都能分类查。 以前看到内存涨了,大家第一反应只能是猜:“是不是纹理爆了?还是RenderTexture没释放?”现在可以先看类型分布,纹理占用明显抬高,就先查纹理;RenderTexture数量不对,就继续盯RenderTexture。 看清类型后,点进具体资源列表,资源名称、内存占用峰值、数量、生命周期直接展现。如果是纹理,还能结合尺寸、格式、Mipmap和Streaming等属性继续判断。这样排查路径就彻底顺了:先看内存怎么变 ➔ 再看是哪一类 ➔ 最后追到具体资源。报告不会替项目直接下结论,但至少不用对着一条上涨曲线干猜了。 标出耗时Top10:快速定位最慢帧 一条耗时曲线上可能有成千上万个数据点,真正值得关注的,通常只是少数几个卡顿峰值。以前排查偶发问题,沿着曲线来回翻,大部分时间看到的都是正常数据。但性能优化的黄金法则,永远是先干掉最显著的瓶颈。别把有限的精力浪费在那些平稳正常的帧上。 现在,只需点击按钮,就会直接在曲线上标出Top10最慢的点。哪些位置拖了后腿,一眼就能挑出来,再结合对应帧、线程和上下文去深挖。当然,Top10只是耗时最高的位置,不代表它一定就是卡顿根因。但它至少把范围缩小了。与其从头到尾逐帧找,不如先盯住这10个最可疑的位置,排查效率显然高得多。 导出一键完成:告别手动搬运数据 很多团队都会按照项目特点建立“函数组”,把长期关注的函数整理在一起,用来做版本复测、设备对比或问题回归。麻烦的是,报告一多,这些函数组和对应耗时数据也会散在不同地方。后面想做对比,或者交给其他同事继续分析,往往还得手动重新整理一遍。 性能优化本身就足够消耗脑力了,完全没必要再把时间消耗在重复的数据搬运上。GOT Online现在支持一键导出所有函数组以及对应耗时数据。导出结果既有整体汇总(总耗时均值、自身耗时均值、耗时占比等),也有组内每个函数的详细耗时和调用数据。 同时,这项数据也已经同步支持OpenAPI拉取。不仅可以手动导出Excel,还能直接接进团队内部的自动化平台或对比工具。版本复测时,把不同报告的导出结果拿来一比,或者用接口自动跑对比脚本就行,不用再傻傻地逐个函数组去抄数据了。 场景横向对比:一眼找出表现异常 长时间运行的测试报告里,往往穿插了多个场景。真正开始深挖之前,第一步通常不是直接查某个具体函数,而是先找出“哪个场景表现不太对”。 GOT Online针对Unity项目重做了场景概览页,把不同场景的关键指标(FPS、CPU、GPU、内存、耗电和温度)拉到一起横向对比。哪个场景FPS突然掉底,哪个场景内存数据异常,通过图表和列表一眼就能看出来。先把差异摆出来,告诉你哪里值得继续看,至少打开报告后不用对着一堆指标发愣。 更多实用补充:卡顿堆栈与温耗均值 OpenAPI同步补充卡顿数据:新增卡顿帧列表、卡顿堆栈树和场景卡顿堆栈。单份报告可以直接在页面分析;报告数量多了,可以通过接口接入内部自动化平台,批量筛选异常报告。 新增温度和功耗“平均值”:峰值高只能说明设备某个瞬间很忙,均值高才代表持续高负载。现在结合“峰值”和“均值”一起看,更能判断设备是不是持续发热或降频。 性能报告里的数据越来越多当然是好事,但如果每次分析都要在不同页面之间来回翻、重新找指标、手动整理表格,再完整的报告也会让人看得很累。 这次GOT Online的更新,做的事情其实很纯粹:把大家最关心的内存和常用数据放得更近一点,把值得关注的异常提前挑出来。真正高效的研发体验,从来不是一味地堆砌数据量,而是让最关键的信息在你需要的时候触手可及。排查顺手了,优化效率自然就上去了。 最后说两句: 工具的价值,不仅在于它能算得多快,更在于它能不能真的融入团队的日常流转中,帮大家准时下班。 我们深知,在项目期引入或者尝试一个新工具是有成本的。为了让大家能毫无负担地验证这波更新的疗效,我们特别开放了「两周 GOT Online 免费试用通道」,并且会提供专属的性能专家诊断名额。 不管你们现在卡在什么性能瓶颈上,联系我们的商务同学,UWA…

Read More
Categories News

We Were Here Together 免費領取教學|Epic 雙人合作解謎(2026)

想找一款能和朋友一起玩、又燒腦的遊戲嗎?Epic Games Store 本週推出的限時免費作品《We Were Here Together》正好適合。這是一款專為雙人設計的合作解謎冒險遊戲,兩名玩家分隔兩地、只能靠對講機互通有無,攜手破解一道又一道的謎題。原價 12.99 美元(約新台幣 390 元),現在只要在期限內領取就能永久保留。喜歡這類免費遊戲,Epic 每週都會輪替不同作品,近期還送出過《Luto》,Steam 同一時間也有《夜勤人 Moonlighter》可以一起收進收藏庫。 遊戲資訊與領取連結 活動截止:台灣時間 2026 年 8 月 13 日晚上 11:00 前 支援平台:Windows 遊戲簡介與特色 一款「聽聲辨位」的合作解謎遊戲 《We Were Here Together》是 Total Mayhem Games 推出的 We Were Here 系列作品,於 2019 年 10 月正式上市。故事描述兩名南極探險家收到求救訊號,決定展開救援行動。兩人在冰天雪地中分頭前進,一個在外探索基地與峽谷,另一個深入代號「城堡岩(Castle Rock)」的古堡,透過一支對講機維繫聯繫。 這款遊戲最大的特色就在於「資訊不對稱」。你看得到的東西,隊友看不到;隊友手上的線索,你也摸不著。想要通關,唯一的辦法就是把眼前所見清楚描述給對方,再一起拼湊出答案。也因此它不只是解謎遊戲,更像是一場考驗溝通能力的默契測驗。如果你喜歡這種考驗團隊默契的合作玩法,也可以看看先前限免的《Yet Another Zombie Defense…

Read More
Categories News

动画示例项目旋转浅析 – GASP Rotation – UWA问答 | 博客 | 游戏及VR应用性能优化记录分享

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息! 前言 UE:5.7.1 GASP:5.7 本文是以Mover版本角色来进行浅析GASP中旋转的实现,包括Strafe移动,AimOffset,TurnInPlace。 同时也会结合分析Lyra和ALS的一些实现方案。 1. Debug与基础RotationMode 1.1 Debug 为了更方便查看旋转相关的Debug信息,我们需要打开Widget中的Draw Shapes,就会看到下图这样很多的箭头,其中有意义的部分为: 圈内黑色大箭头:Root根骨骼朝向 圈外黑色小箭头:角色(碰撞体)朝向 亮粉色箭头:TargetOrientation旋转偏移前的目标朝向 暗粉色箭头:TargetOrientation+RotationOffset旋转偏移后的目标朝向 橙色箭头:MovementIntent,角色的期望运动方向 绿色弧线:当前MovementDirection移动朝向的范围 1.2 RotationMode在GASP中,旋转模式分为OrientToMovement、Strafe和Aim,如果你是用过ALS的,那么它们是与VelocityDirection、LookingDirection和Aiming一一对应的。 OrientToMovement:角色将旋转至面向移动方向 Strafe:角色在移动时将大体面向瞄准方向旋转 Aim:角色将始终以最小偏移量精确面向控制器旋转方向,也算是Strafe模式 RotationMode主要是由玩家的按键输入以及游戏模式决定,在GASP中可以通过鼠标中间切换Strafe和Movement两种模式,并且可以按住右键进入Aiming模式。在常见的开放世界游戏中大多都是默认使用OrientToMovement模式,而当玩家拿起弓箭或者枪械瞄准时则会进入Strafe之中。 其中OrientToMovement比较简单,角色朝哪边移动就转向哪边即可,就不过多介绍。 2. Strafe基础 2.1 BlendSpace做法存在的问题记得我最早接触Strafe移动还是在跟着一些UE4新手教程做战斗系统的时候,当做到了弓箭瞄准,或者类似只狼锁定目标时,就需要出现玩家始终面朝某个方向,却向着其他方向移动的情况。但是新手教程中的做法往往很简单,例如下图这种,用一个Direction来表示离面朝方向偏差多少角度,然后一个1D BlendTree混合。也有稍微好一点点的会使用2D BlendTree,使用LR/FB来进行混合。 1D因为不是环形的,在遇到从左后切换到右后时,需要经过-180度到180度把中间状态全都走一遍的情况,表现十分奇怪。而2D无论是四向在融合的地方都可能出现预料之外的表现。对于一些融合表现不好的地方可以选择补全八向动画。 若使用RootMotion动画,混合后会出现移速衰减问题,例如前后、左右单方向移动速度均为100,在往左前走的时候速度就只有50 √2 ,但是我们的期望肯定是斜向移动也是100,最简单的做法通过调整动画播放速度,来调整移动速度,但是会比较鬼畜。也可以考虑用程序补偿,缩放一下,或者直接用程序位移。 2.2 程序化多方向动画二维的BlendTree也并不是要固定四个方向的动画,可以根据需要灵活调整为8向,10向都是OK的,GASP则是用到了四个动画F\B\LL\RL,但GASP并不是通过BlendTree混合出来的,使用BlendTree融合在没有动画的角度融合的角色往往会不尽人意,其使用的是OrientationWarping,同样是程序化修改在小范围内效果还是可以的。Lyra更是暴力地只用一个动画就OrientationWarping了360°出来。 OrientationWarping能使脚根据运动方向向不同方向移动。让下半身运动匹配移动方向,而上半身保持不变,以此实现向不同角度进行Strafe。他的实现逻辑是先旋转Root,再反向依次旋转Spine,例如下图中就是使用向正右方移动,但是被Warp了45度到了右前方。 2.3 腿部穿插无论是BlendSpace还是OrientationWarping这些方法都无法解决脚步交叉的问题。而脚步打绕常出现于交叉脚的时候去往另一个Pose融合,但是切换过去的脚前后相反,直接融合过去就会穿插,比如下图本来是向右走的左脚在前,交叉时切回向后的右脚在前,腿就穿了。 为了解决这个问题,一个比较常见的做法就是分扇区,将前向和后向分别作为不同的BlendTree,在每个扇区中都让同一只脚保持在前方,同时保证同样播放进度时脚都是同一的前后位置,这样在扇区内Blend的时候就不会出现前腿要放到后方的穿插情况。同时为了避免在边缘时扇区频繁切换还会加入DeadZone,则让每个扇区的范围扩大一些,有一些重叠区域。 当融合发生时,融合前后的Pose一只脚在前,另一个Pose脚在后就会出现融合时穿插的问题,但其实要修复这个也非常简单,只需要在合适的时机进行融合也可以解决,要么相同脚在前,要么处于非交叉状态,正如下面视频展示。 我们可以选取当他到了什么时间节点我才允许切换过渡,但是这样会影响手感,更好的做法是使用SyncGroup让切换过去的时机对应。 除此之外还可以通过衔接动画方式来解决,通过过渡动画替代动画直接融合,来规避脚部穿插的情况,这样还可以改善在切换过程中仍然是两个直接动画融合可能让表现不符合预期的问题。 3. GASP的Strafe 3.1 MovementDirection分扇区在GASP中,为了避免脚步打绕穿插的问题,同样也用到了分扇区的做法。…

Read More
Categories News

角色姓名產生器:台日英美俄七種世界觀,附讀音、涵義與時代考據

今天要介紹的「角色姓名產生器」是一個免費的繁體中文原創角色命名工具,在同類服務裡相當少見,明顯以台灣創作者和開 […] 這篇文章「角色姓名產生器:台日英美俄七種世界觀,附讀音、涵義與時代考據」最早出現在免費資源網,請追蹤 Facebook、X (Twitter)、Threads 或訂閱 RSS feed 獲取更多科技新知及免費資源相關介紹教學。 PakarPBN A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines…

Read More
Categories News

想优化哪段就量哪段|GPM自定义区间精准观测任意游戏流程

大家好,今天 小Q 来带你认识GPM新功能:自定义区间统计。 用GPM的,从来不只是做性能优化的同学 —— 主程盯着架构和线上风险,制作人盯着版本质量,运营盯着活动和玩家口碑,QA盯着这版有没有变差。岗位各不相同,但有一件事出奇地一致:你们真正在意的,几乎从来不是“整局的平均数”,而是某一段具体的时刻。 制作人问的是 “新版本上线首日,玩家进游戏那几步顺不顺”; 运营担心的是 “大活动开启那一下会不会卡崩”; 主程要确认的是 “那套新框架在真实战斗里稳不稳”; 做优化的,盯的是 “那段团战的帧率到底掉多少”。 你看,没有谁在优化“整局游戏” —— 大家心里装着的,都是一段一段的“具体现场”,而不是一个笼统的整体数字。 可你打开性能看板,能切的刻度就那么几个:版本、机型、场景。它们都很有用,但有一个共同的前提 —— 边界是系统替你定好的,未必对得上你心里那一段。于是你只能挑一个“最接近”的场景名将就着看,或者干脆翻原始报告、自己对时间戳,把那一段一点点拼出来。 将就是有代价的。你看的那条边界,和你真正在乎的那条边界,一旦错位,均值就会被你根本不关心的部分稀释:你以为在优化“战斗”,其实数字里掺进了一半的待机和跑图。修了半天,你都不确定有没有修在玩家真正难受的那一段上。 所以,做到一定深度的团队,迟早会撞上同一个诉求:能不能让我自己定义“要盯的是哪一段”,而不是被现成的维度框死? 这正是GPM新上线的自定义区间统计要回答的问题。它做的事一句话:把“该量哪一段”的决定权,连同“在哪儿画线”的那支笔,一起交到你手上 —— 你在代码里圈出你真正在乎的那一段,剩下的读数它来给。(这是GPM平台上你自己动手用的功能,不是我替你跑的活;我这篇,是来帮你把“你为什么会需要它”讲明白。) 为什么场景这把尺子,圈不出你要的那一段 先把话说透,不然你会觉得“不就是再多切一个维度嘛”。 均值这东西,是有边界的。你按什么边界去平均,它就只能回答什么边界内的问题。而现成的两把尺子,边界都不由“你要优化的这一段”说了算。 全局均值,边界是整场会话的头到尾。它告诉你“这台设备这局整体流不流畅”,但你要优化的那3秒加载、那一次团战爆发,早被几十分钟的正常帧率稀释得看不见了。 场景均值,边界是“场景切换”的那一刻。场景比全局细得多,这条边界也不一定是引擎定死的 —— 你完全可以按自己的需要去规划场景怎么划。但场景有一条改不掉的铁律:它必须串行,任何两个场景不能重叠。玩家在任一时刻只能处在一个场景里,上一段结束、下一段才开始,像一条不回头的时间线。 就是这条“不能重叠”的铁律,卡死了一大类你真正关心的问题。最典型的是团本里两个同时在场的BOSS:BOSS A血量还没清、BOSS B就登场,两段战斗在时间上叠着,你想分开看“打A卡不卡、打B卡不卡”,场景却只能把这段时间整体归给某一个 —— 你想按BOSS拆,它天生拆不开。不止BOSS —— 一段网络请求正好压在一段渲染上、一个持续的Buff特效横跨了好几波小怪,凡是“两件事在同一段时间里并行发生、你却想拆开各看各的”,场景这把尺子都无能为力。 场景是一条不回头的时间线,一段接一段、绝不重叠;可你想量的东西,常常是能叠在一起的。能不能重叠,就是你为什么需要自定义区间的那道分水岭。 自定义区间做的,就是把这条限制拿掉,再把“画线的那支笔”交回你手上。你在自己的代码里,给一段流程打上一对开始/结束标记、起个名字(对应GPM收到的 custom_interval_begin/custom_interval_end 这对事件),这一段就成了一个能被独立统计的对象。它可以跨好几个场景,可以只是一个场景里的一小截,更可以和另一个区间彼此重叠 —— BOSS A的区间还没结束,BOSS B的区间照样开得起来,两条线各算各的、互不打架。边界怎么画,全你说了算。然后GPM把千百台真机上所有被你这样标过的同名区间,聚合成一张读数:这一段的FPS均值、抖动、低帧、Jank、帧时间超100ms的比例,以及它这一段里的内存、温度、功耗、CPU/GPU表现。 你截图里那几个…

Read More