5月18日,Qualcomm在北京举行Qualcomm骁龙游戏与图形开发者研讨会。嘉宾们分享了GPU框架特性、移动游戏性能与功耗优化技巧,以及3D效果渲染技巧等话题。

5月18日,Qualcomm在北京举行Qualcomm骁龙游戏与图形开发者研讨会。Qualcomm创新工程中心高级工程总监Zack Zhou、Qualcomm工程师兼经理文艳山、Qualcomm® CDMA Technologies (QCT) 芯片部高级内容组高级工程师李娟、Qualcomm资深工程师张涛,在现场为开发者们分享了Qualcomm Adreno GPU框架特性、移动游戏性能与功耗优化技巧,以及3D效果渲染技巧等话题。

Qualcomm创新工程中心高级工程总监Zack Zhou

今天嘉宾们主要分享了基于Adreno 4系列的图形渲染、性能优化等话题。Zack首先分享了一个数字:1万。根据统计,2014年,全国有大约1万多款手机游戏上市,出现这种井喷现象主要归因为两点,一方面是移动游戏市场日趋成熟,而且手机终端销量的剧增也进一步扩大了市场;另一方面,手机GPU的性能得到了提升,可以实现更多功能,这让更多游戏开发商能更容易地将现有游戏移植到移动端上。

Adreno 4系列也分高中低端,有405、420、430。虽然他们的性能效果不一样,但优化方式和整体架构非常相似。Zack在上午的分享中主要谈到了两点:Tiled渲染架构和动态Flex Render技术。

Tiled渲染其实就是指,在渲染游戏画面时,将画面分割为一个个小块,逐一进行渲染,而不是像传统地对画面整体做渲染。这样做的好处是,它可以最大限度地减少不必要的主机内存数据流量,可以降低功耗。当游戏的Draw Call过多时,肯定会让功耗增大,而这时芯片的温控机制会开始起作用,限制其性能的发挥,这就会出现我们常看到的卡顿、Crash等现象。Tiled渲染可以避免这种情况。同时,Adreno可以根据画面的复杂度,在Tiled渲染和直接渲染之间动态切换,这就是Flex Render技术。

在下午的分享中,Zack给开发者们分享了一些性能优化和功耗优化的建议。首先就是减少工作量。对于中低端手机来说,1280×720是比较合理的图像选择,这个分辨率也同样适用于高端机型。在处理反射、折射等特效的时候,可以使用1/2分辨率甚至更小的buffer,它仍然可以产生极好的效果。

第二点就是减少Draw Call,因为每个Draw Call都会增加CPU的工作量,每一帧有50个Draw Call并不会带来影响,但是每一帧有500个Draw Call时则会大幅影响游戏性能。同时,当多个物体使用同样的Shader和图形状态时,可以放在同一批进行处理,这样可以减少Draw Call的数量。第三点就是减少数据带宽的使用,比如使用纹理压缩、使用mipmap等。

Qualcomm工程师兼经理文艳山

文艳山在上午的演讲中,分享了3D图形在Adreno中从顶点处理、顶点装配、像素处理,到测试、混合的过程。同时,他还进一步介绍了Tiled渲染的特点与原理。

有限的帧缓冲区带宽和更低的功耗要求,使得Tiled渲染成为更为有效的方式。在GPU内部有一个独立的快速缓存叫GMEM。每个图像都会被分割为一个个小的bin(Qualcomm内部将这些被分割成一个个方块的图像称为bin)。bin的大小由GMEM的大小除以渲染目标的格式(包括深度缓存的格式)和大小来决定。软件会为每个bin创建一个三角形“可见性数据流”。渲染过程会利用可见性数据流来绘制可见的像素点。每个bin的所有像素都被画到GMEM中,GPU会降GMEM中混合好的像素,以一个整体的形式写回到系统内存的帧缓冲区中,这叫做一次“Resolve”。

Qualcomm芯片部高级内容组高级工程师李娟

李娟分享了Adreno SDK、Adreno SDK Texture Tools、Visual Studio、骁龙LLVM编译器等了相具体功能特性。Qualcomm为游戏开发的编程、模拟、编译、部署、分析等每一个环节都提供应的开发与优化工具。以Adreno SDK Texture Tools为例,它提供了以下特性:

  • 并排观察原始图像和被压缩或解压缩后的图像
  • 比较原始图像和被压缩或解压缩后图像的不同点
  • 从中挑选16种压缩类型,包括ETC,ASTC
  • 保存图片成KTX或DDS格式
  • 许多压缩和非压缩纹理格式之间转换的实用工具
  • 跨平台库和API支持
  • 减少内存带宽需求
  • 尝试不同的压缩和位深
  • 找到最佳尺寸和视觉效果

Qualcomm资深工程师张涛

张涛分享了如何绘制渲染皮肤、衣服布料、毛皮等材质,以及景深、玻璃扭曲等光影特效。

以皮肤为例,皮肤渲染是实时计算机图形学的难题之一。一方面这是因为皮肤光照的复杂性;另一方面,观察者对皮肤太熟悉了,一旦结果看起来“不像”他们就很难接受。关于皮肤的光照模型有几个,比如Hanrahan和Krueger在1993年的Siggraph上首次将皮肤进行分层模拟计算光照反射。他们的方法看起来非常逼真,但是每个光照计算需要100个指令,这对于实时的要求来说太昂贵了。

在这个例子中,我们展示一个经过优化过的皮肤渲染算法,它可以运行在移动设备上。这个技术通过在阴影区域的漫反射中加入暖色调来逼近次表面散射。我们在漫反射计算中加入Minnaert光照项,这是非常关键的一步,它使得皮肤看起来柔嫩,最后我们通过加入镜面高光使皮肤看起来富有光泽。

我们稍后将对部分嘉宾的演讲进行详细整理,敬请关注。

如果您有任何开发疑问,欢迎进入Qualcomm开发者社区提问,Qualcomm工程师将定期为大家解答。

从GPU到3D渲染:游戏图形渲染技巧与性能优化相关推荐

  1. 如何增加3d渲染的逼真感?提高3d渲染真实感的技巧

    照片写实主义是一种艺术,它需要图形媒体来创造独特的艺术品,看起来非常有说服力.专业艺术家研究图像并使用照片写实技术从中创作艺术品.真实感可以在 2D 和 3D 渲染中实现,该过程称为真实感渲染.专业人 ...

  2. Android渲染时间 太长,Android性能优化之渲染篇

    1)基本概念 在一个典型的显示系統中,一般包括CPU.GPU.display三個部分, CPU负责計计算数据,把计算好数据交給GPU,GPU会对图形数据进行渲染,渲染好后放到buffer里存起來,然后 ...

  3. 游戏服务器架构与性能优化相关的一些问题

    问题一:游戏在线人数过多出现卡顿,是怎么造成的?服务器硬件还是网络或是其他原因? 答:原因有很多种,要根据不同情况进行分析: 1.手机或者电脑的性能不好,客户端自己卡顿,表现在fps很低: 2.网络本 ...

  4. 游戏开发51课 性能优化9

    4.5 光照模型(Lighting/Illumination Model) 4.5.1 Flat Shading(平面着色) 根据表面法向量计算光照,并应用到整个面片上.速度最快,效果最差,容易暴露物 ...

  5. 游戏开发48课 性能优化6

    3.7.2 算法优化 思路是找出最耗CPU的算法或逻辑,优化之. 空间换时间.利用预排序/预处理/缓存/动态规划等等思路换取CPU的性能. 选取更快的算法.属于数据结构和算法的范畴,思路是将O(n2) ...

  6. PHP 提高PHP性能的编码技巧以及性能优化

    0.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这 么做,它是 一种可以把多个字符串当作参数的"函数&qu ...

  7. 游戏开发57课 性能优化14

    5. 内存优化 内存优化目的是加快IO,防止卡主线程,防止频繁操作(创建/删除)内存,避免内存碎片化和占用过高. 5.1 缓存法 与CPU的缓存计算类似,思路是将需要重复创建的对象缓存起来,销毁时将它 ...

  8. [前端技巧] 网站性能优化(FCP、lCP)

    网站性能优化 FCP(First Contentful Paint), 首次内容绘制 LCP(Largest Contentful Paint), 最大内容绘制 打开控制台,选择 lighthouse ...

  9. 3D渲染技术分享:3D游戏开发渲染调试高级技巧

    零.本文主要知识点 友情劝退:全文7400+字 如果知识点里没有你想要的,那可以直接拉到底,与评论区大神一战. 最初的计划是想写一篇关于KylinsGraphicsDebugger实现原理的文章,但感 ...

最新文章

  1. java datetime int_关于jodatime:Java中DateTime对象之间的小数天数
  2. 从易于扩展扩展的角度来设计FizzBuzzWhizz
  3. CSS3 @font-face 规则
  4. 致远今目标移动APP无法脱离PC单独使用
  5. java6 disable ssl2.0_SpringBoot2.0如何启用https协议
  6. commit之后,想撤销commit
  7. TabHost两种实现方式
  8. qgis在地图上画导航线_在Laravel中的航线
  9. 生日快乐网站_【总结 】文化自信源自基层贺房氏网站建站十五周年
  10. 第 4 章 MySQL 锁机制
  11. python笔记14-读取yaml配置文件(pyyaml)
  12. Python3学习阶段记录(Python3.8安装)
  13. Mesos和Docker的集成
  14. 计算机视觉实战(八)直方图与傅里叶变换
  15. Java 垃圾收集策略、垃圾分代回收算法、垃圾回收运作流程
  16. catia车灯设计——一些设置
  17. 电机与拖动:异步交流电动机改变电压,转子电阻及频率的机械特性曲线(Matlab实现方法)
  18. 计算机中的没有文件怎么处理方法,电脑重启后桌面上文件没有了怎么办
  19. 颜色模式(RGB、HSV、Lab)
  20. 胜利大逃亡 --- bfs记录

热门文章

  1. android 多进程 坑,Android 开发中踩过的坑之八:多进程问题
  2. linux mount 默认读写,Linux mount 修改文件系统的读写属性
  3. 2_数据分析—认识pandas
  4. k8s部署tomcat及web应用_k8s部署tomcat应用服务
  5. python if _name_==_main__如何理解Python中的if __name__ == ‘__main__’
  6. java subset_Java TreeSet subSet()方法
  7. c语言log_Morn:一个极简的C语言日志
  8. 小学计算机教室管理制度范本,《中小学微机室规章制度》.doc
  9. java excel 晒新年操作_JAVA使用POI操作excel
  10. html摇晃的桃子代码,index.html