当前位置:网站首页>游戏优化性能杂谈(十一) - 知乎
游戏优化性能杂谈(十一) - 知乎
2020-11-08 08:54:00 【osc_eoqljui5】
VS之后,是光栅化阶段。这个阶段属于固定功能(不可编程)阶段,通常被认为是执行效率很高的,所以往往会被忽视。
其实就我所观察到的情况来言,这部分成为瓶颈的情况,并不罕见。比如《原神》在开发过程当中,就出现过这样的情况。
《原神》当时的情况是,游戏当中当人物爬树的时候,为了避免树冠遮挡人物,会有一个将树冠变成半透明的效果。普通的半透明渲染是已知的性能杀手,所以这里开发商采用了用stencil抠掉一些像素,也就是所谓的dither(抖动)的方法。如果不了解这种方法,可以想象一下报纸上的那些图片,都是一些点状的图案组成的。
按理说,这种镂空会减少需要渲染的像素,也就是PS的工作量。但是开发组发现,最终结果是不降反升。也就是渲染时间反而增加了。而且更加不可思议的是,通过对比开关此效果的GPU跟踪文件,可以观测到PS工作量的确是明显减少,但是渲染时间并没有变化甚至是略微变长了。
其实原因就在于光栅化。VS输出的三角形,在光栅化模块进行光栅化之后,形成PS工作量。在光栅化之前,会进行根据三角形级别的背面/正面剔除、视锥剔除/裁剪,以及零面积/小三角形剔除。但是,基于stencil测试级别的排除,并不是发生在三角形级别,而是发生在光栅化之后的fragment级别。也就是说,dither虽然减少了进入PS阶段的fragment数量,但是并不影响光栅化的工作量。
但是如果仅仅是如此,那么dither开启之后,应该还是快些。因为光栅化工作量一样,但是PS工作量减少,应该是变快的。但是实测是变慢,这又是为什么呢?
这是因为在当代的桌面GPU当中,引入了tile-based rasterization。注意这并不是移动平台的TB(D)R,因为它只限rasterization阶段。
具体来说,GPU并非是一次性将三角形按照渲染分辨率拆解成为fragment,而是以更低的分辨率,比如1/8目标分辨率,进行光栅化。比如,如果我们的画面最终是1920x1080,则GPU首先是以240x145这个分辨率进行光栅化,然后再对每个光栅化结果(8x8像素)进行进一步光栅化。(具体做法及尺寸不同GPU型号可能有显著差异)
这种做法有一个好处,就是可以大幅提高pre Z以及pre Stencil的效率。如果低分辨的一个单位(tile)整体上在pre Z测试或者pre Stencil测试当中被拒绝,那么就没有必要再对其进行更加精细的光栅化。
而在我们这个案例当中的情况是,其使用的Stencil模板,也就是“镂空”的模板,其中洞洞的图案并没有对齐这个tile。也就是说,当以tile为单位去做pre Stencil的时候,永远是无法拒绝(因为tile当中蒙版数值不一样,部分通过部分拒绝)。相比较不开dither的情况,等于是白白多了一个stencil测试但是光栅化的工作量一点儿都没有减少,反而是在光栅化过程当中多了一个查询stencil的步骤。所以光栅化效率反而变低了。
版权声明
本文为[osc_eoqljui5]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4255780/blog/4707896
边栏推荐
- 什么你的电脑太渣?这几招包你搞定! (Win10优化教程)
- SQL Server 2008R2 18456 error resolution
- 洞察——风格注意力网络(SANet)在任意风格迁移中的应用
- What? Your computer is too bad? You can handle these moves! (win10 optimization tutorial)
- VC6 compatibility and open file crash resolution
- Unparseable date: 'mon Aug 15 11:24:39 CST 2016', time format conversion exception
- November 07, 2020: given an array of positive integers, the sum of two numbers equals N and must exist. How to find the two numbers with the smallest multiplication?
- 成功解决An error ocurred while starting the kernel
- [original] about the abnormal situation of high version poi autosizecolumn method
- 2020天翼智能生态博览会中国电信宣布5G SA正式规模商用
猜你喜欢
解决RabbitMQ消息丢失与重复消费问题
laravel8更新之速率限制改进
Improvement of rate limit for laravel8 update
Swiper window width changes, page width height changes lead to automatic sliding solution
Test requirements for MIC certification of Bluetooth 2.4G products in Japan
Search and replace of sed
Adobe Prelude / PL 2020 software installation package (with installation tutorial)
c# 表达式树(一)
What details does C + + improve on the basis of C
PerconaXtraDBCluster8.0 最详尽用法指南
随机推荐
什么你的电脑太渣?这几招包你搞定! (Win10优化教程)
laravel8更新之速率限制改进
Julia 是如何风靡起来的?
Swiper window width changes, page width height changes lead to automatic sliding solution
Bili Bili common API
Unparseable date: 'mon Aug 15 11:24:39 CST 2016', time format conversion exception
OSChina 周日乱弹 —— 之前呢,我一直以为自己是个……
python学习 day1——基础学习
Which is more worth starting with the difference between vivos7e and vivos7
iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
GET,POST,PUT,DELETE,OPTIONS用法与说明
QT hybrid Python development technology: Python introduction, hybrid process and demo
Wanxin Finance
python_ scrapy_ Fang Tianxia
Qt混合Python开发技术:Python介绍、混合过程和Demo
An error occurred while starting the kernel was successfully resolved
i5 1135g7和i5 1035g1参数对比区别大吗? 哪个好
架构师(2020年11月)
盘点那些你没想到的云计算应用场景(上)
These core technology of object-oriented, after you master it, you can have a good interview