渲染

cocos2d-x多线程渲染的一些探讨

可行性:

游戏循环主要包括这几个部分:
1、硬件事件,主要就是指触屏事件,按键事件和鼠标事件;
2、游戏事件,主要指定时器事件和预定义事件,比如schedule;
3、游戏逻辑,对于胖脚本端来说,这个就指的脚本逻辑;
4、渲染数据的生成,在引擎里面就是指node的visit,这里计算生成所有即将发往OpenGL的数据,包括顶点纹理坐标等attribute数据,变换矩阵纹理等uniform数据,混合模式等渲染状态;
5、通过OpenGL接口把所有数据发往OpenGL。

这几个步骤里面,只有第五个步骤需要涉及到OpenGL操作,而前面四个步骤都是为第五个步骤做准备,而第五个步骤不用或者很少需要反馈数据给前面四个步骤。这是一个典型的生产者消费者模式,在很低线程同步开销的情况下课采用多线程处理。

必要性:

处理游戏逻辑(包括前四个步骤)承担了太多cpu运算,而发数据到OpenGL也相当耗时,尤其涉及到多次的渲染状态切换。在多核cpu上面把二者分开可以提高并行性,进而提高游戏帧率。

一些方案:

VR沉浸体验的要求

大家好!今天我来这里主要介绍的是使用UE4做VR内容的一些优化技巧。VR需要给大家一个沉浸式的体验,这要求两点:一点是你的画面要尽可能的精美,另外一点是你的呈现要尽可能的流畅。

这两点其实是相互矛盾的,因为你画面做的越细致、越精美,其实你的内容就越重,你的渲染压力也就越大。你要做到75帧双眼同时渲染难度就非常高。

我们看用UE4引擎帮你做了多少事情,第一个已经早就完成了。引擎的输入更新并不是只有一次,传统引擎输入可能是游戏线程一开始有个输入,把所有这帧的输入都获取。获取完之后游戏线程再计算游戏逻辑然后送给渲染线程绘制。这种情况下,假设我们游戏跑在60帧,最后更新的HMD或者其它输入设备的最后数据,其实都是要有16毫秒左右的延迟。

最简单可以做的第一步是引擎在把数据送给渲染线程之前,我们会把整个渲染的View Matrix重新更新一遍,游戏逻辑是按照这一帧刚开始收集到的数据来计算。视点其实是通过游戏线程的逻辑线程几乎已经结束后送给渲染线程来计算的。

【视频】PowerVR 光线追踪提供实时,逼真的渲染

为全方位发展,Imagination开发了与光线追踪相关的IP,而光线追踪技术一直被认为是计算机图形学中的“圣杯”,其使得超写实光照的开发更加简单明了。

PowerVR 光线追踪提供实时,逼真的渲染

前往Imagination官方优酷观看: http://v.youku.com/v_show/id_XMjgxMTc1MTY4OA==.html

Unity&Shader高级篇-渲染路径(Rendering Paths)

一、前言

在Unity的Camera中常常会看到一个Rendering Paths的选项,里面有5个选项,其中两个比较重要的选项分别是“Deferred Shading”和“Forward Rendering”,在我还是初学Unity的时候,并没有在意太多。如今随着学习Shader的深入慢慢领会到了这两个渲染路径的重要性。下面就这两个渲染路径的区别和优缺点做一个学习记录。

主要参考文献
维基百科:Deferred_shading
Unity官网:Deferred shading rendering path

可编程渲染管线与着色器语言

大家好,今天想给大家介绍一下可编程渲染管线和着色器语言的相关基础知识,使想上手SHADER编程的童鞋们可以快速揭开SHADER语言的神秘面纱

由于时间有限,我决定只讲三个主要方面的内容,其过程中肯定会有不详细之处,还请见谅,就算是抛砖引玉,给大家一个简单的入门引路。

本章内容总共分为三个部分 一、3D渲染管线工作流程 二、可编程管线 三、着色器语言

3D渲染管线作为整个工作流程的基础,是不可或缺的基本知识。因此,作一定的讲解是有必要的。 但作为一个回顾内容,就不会对具体的内容进行讲解,比如如何进行坐标系变换,如何进行光栅化等等。 我们仅关注的是整个工作的过程。

甚至,我们更关心的不是整个工作过程中的细节,而是我们所必须要关注的几大流程。 如下图

1

数据填充

当我们想实现一次渲染效果的时候,数据的提交(填充)是不可缺少的。 因此,工作流程的第一步就是要处理输入的数据。

此文对于程序员和美术制作人员都有很大的帮助作用,希望你看完后对基于物理的渲染有个整体的理解,此篇翻译的文章(The Comprehensive PBR Guide by Allegorithmic - vol. 1)基本上是从美术的角度来解释基于物理的渲染,有时间我会把程序部分的知识再细致讲一下,包括理论和实现,我自己目前也在学习阶段,主要在研究UE4的基于物理的渲染,希望在接下来的时间里出一个比较详细的文章来从程序员的角度详细阐述实现原理。By 风恋残雪

光是一种复杂的现象,因为它同时具有波和粒子的属性。因此,创建了不同的模型来描述光的行为。作为制作贴图的美工,我们关心光-射线模型,因为它描述了光和介质是如何交互的。对于我们来说,理解光线如何跟介质表面交互很重要,因为我们的工作就是要制作描述那个表面的贴图。我们制作的贴图和材质用来在虚拟世界中跟光线交互,我们对光如何表面了解得越多,我们制作的贴图看起来就越好。

在这个指南里面,我们会讨论物理背后的理论,它是基于物理渲染的模型的理论基础。让我们从光线说起然后逐步扩展到基于物理渲染的关键因素。

光线(Light Rays)

移动GPU渲染原理的流派——IMR、TBR及TBDR

作者:借你一秒

移动GPU相对桌面级的GPU只能算是未长大的小孩子,虽然小孩子在某些场合也能比成人更有优势(比如杂技、柔术之类的表演),但在力量上还是有先天的差别,主要表现在理论性能和带宽上。

  与桌面GPU动辄256bit甚至384bit的位宽、1.2-1.5GHz的高频显存相比,移动GPU不仅要和CPU共享内存带宽,而且普遍使用的是双32bit位宽、LPDDR2-800或1066左右的内存系统,总带宽普遍在10GB/s以内,悲催的Tegra 3使用的还是单通道内存模式,搭配DDR3L的带宽不过6.4GB/s。

目前GPU性能最强大的iPad 4带宽也不过17GB/s(图片源于Anandtech)

视频: PowerVR SDK 工具介绍 - PVRTune

PVRTune 概述视频展示了PVRTune的核心功能:一种实时的GPU性能分析工具,他通过捕获时序数据和计数器来鉴定性能瓶颈。该视频总结了该工具内数据是如何分析的?计数器的细节,秒闪的性能监控,以及渲染状态下的覆盖特性也被充分阐述。

如何理解渲染的瓶颈问题?

这是一种常见的误解,即相同的行为可以加速任何应用程序。例如:

 减少多边形数量:如果应用程序的瓶颈是片段处理或纹理带宽,则此操作的唯一结果将是在不提高渲染速度的情况下降低应用程序的图形质量。事实上,如果更简单的模型导致更多的渲染目标被具有复杂碎片的材质覆盖,那么这实际上可能会减慢应用程序的速度。

 降低渲染分辨率:在这种情况下,如果应用程序的碎片处理工作负载不是瓶颈,那么这也只会降低应用程序中图形的质量,而不会提高性能。

实际上,只有通过使用正确工具进行分析才能确定应用程序的限制因素后,才能应用优化工作。认识到一旦完成工作之后,应用程序需要重新分析才能确定工作是否确实提高了性能,以及瓶颈是否仍处于图形管线的同一阶段,这一点也很重要。渲染的限制阶段现在处于不同的位置,并且应该相应地针对进一步的优化。

什么是渲染流水线?

渲染流水线的工作任务在于由一个三维场景出发、生成(或者说渲染)一张二维图像。换句话说,计算机需要从一系列的定点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以识别的图像。而这个工作通常是由CPU和GPU共同完成的。

渲染流程分为3个阶段:应用阶段(Application)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage).

注意,这里仅仅是概念性阶段,每个阶段本身通常也是一个流水线系统,即包含了子流水线阶段下图显示了3个概念阶段之间的联系。

应用阶段

从这个名字我们可以看出,这个阶段是由我们的应用主导的,因此通常由CPU负责实现,换句话说,我们这些开发者具有这个阶段的绝对控制权。

在这个阶段中,开发者有3个主要任务:

首先,我们需要准备好场景数据,例如摄像机的位置、视锥体、场景中包含了哪些模型、使用了哪些光源等等;

其次,为了提高渲染性能,我们往往需要做一个粗粒度的剔除(culling)工作,以把那些不可见的物体剔除出去,这样就不需要再移交给几何阶段处理;

最后,我们需要设置好每个模型的渲染状态。

同步内容
--电子创新网--
粤ICP备12070055号