本专栏内容均为学堂在线慕课《3D游戏引擎架构设计基础》中的内容。我的将其转化成文字和图片的版本(我的更加喜欢文字版本的教程,阅读速度更快不少),方便查阅。
原课程连接:3D游戏引擎架构设计基础。web
渲染的定义:将三维矢量描述的场景转换到二维像素描述的场景的处理过程,是整个游戏引擎功能模块是最重要的内容。算法
相关的概念描述包括:
为了提高渲染的效率,能够采用不可见物体剔除,包括:编程
根据摄像机位置,剔除视见体外的物体(能够经过包围体)多线程
判断视见体中物体的遮挡关系,剔除被遮挡的物体(能够经过包围体)架构
剔除可见物体的背面异步
真实感渲染中,包括如下内容的计算和融合获得渲染结果。svg
光照,指根据场景定义的灯光、材质等属性,用图形库支持光照模型渲染场景。其中光照模型包括:局部光照模型,全局光照模型,光照绘制算法等,光照计算经过光源、三角形面片的顶点法向量和材质等属性计算。光源是不可渲染的,只是做为计算真实感场景的属性,自己不被渲染。线程
纹理:纹理映射是增长场景网格模型真实感表现效果的方法。纹理是由像素表示的,是以贴图映射的形式与网格模型关联起来,其纹理涂是一种资源文件。如.jpg,.tga,.bmp,.png,.tif等,能够与光照、阴影、特效等产生混合效果。纹理映射方法包括:多重纹理、凹凸纹理、光泽纹理、投影纹理、环境纹理等。架构设计
阴影,能够产生场景深度和立体效果。阴影区域就是,在视点位置看是可见区域,但在光源位置看是不可见区域,示意图以下:设计
其中软阴影的概念为:若是是面光源照射物体,则影子区域呈现为软阴影,即阴影由全阴影区和半阴影区组成,示意图以下:
LOD(Level of Detail)是指渲染时,使用较少的细节表示较小的、较远的或不过重要的场景物体。实现方法包括:离散LOD(静态LOD),连续LOD(动态LOD)和视点依赖LOD等。
OGRE主渲染循环:
OGRE主渲染时序图:
OGRE SceneManager类的渲染操做:
SceneManager::_renderScene(Camera *camera, Viewport *vp, bool includeOverlays)
SceneManager::_renderVisibleObjects(void)
SceneManager::renderVisibleObjectsDefaultSequence(void)
SceneManager::_renderQueueGroupObjects(RenderQueueGroup *pGroup, QueuedRenderableCollection::OrganisationMode om)
SceneManager::renderBasicQueueGroupObjects(RenderQueueGroup *pGroup, QueuedRenderableCollection::OrganisationMode om)
加粗样式
SceneManager::renderObjects(…);
QueuedRenderableCollection::acceptVisitorGrouped(…)
QueuedRenderableCollection::acceptVisitor(…);
SceneManager::SceneMgrRenderableVistor::VISIT(Pass *p, Renderable *r);
SceneManager::renderSignleObject(…)
SceneManager::_issueRenderOp(…)
GLRenderSystem::_render(RenderOperation &op)//使用OpenGL渲染
以上Step总结:
Panda3D渲染过程:
Panda3D渲染核心类和类关系:
下面是几种Panda3D场景渲染的核心类详细描述:
Panda3D渲染管理:
应用程序启动渲染;
对于视见体,剔除不可见物体,创建渲染队列和状态,并排序;
执行渲染,得到一帧渲染结果
应用程序更新场景,循环开始下一帧渲染,转2.
Panda3D主渲染流程:
其中的几个子过程以下: