摘要:
注:大部分类容摘自GDC2008:<> 1.工具 Microsoft: PIX NVIDIA: PerfHUD,Fx Composer AMD: GPU PerStudio 2.诊断方法 (1)错误分析 Game Cresh(游戏崩溃) Blank Screen Missing Objects Flickerring (2)瓶颈分析 Cul... 阅读全文
2012年3月19日
2011年6月11日
摘要:
一、Vertex Shader 1. 顶点着色器处理数据流成图 2.Vertex Shader Virtual Machine(顶点着色器虚拟机) (1)它是一个能够认识顶点着色器是怎样工作的概念模型。模型空间->投影空间;使用指令来驱动ALU。 (2)VS Shader Layout A.指令分类:和其他程序一样,某些指令必须在其它指令调用之前 B.例子: C.说明 versi... 阅读全文
2011年5月7日
摘要:
一、基本介绍1: 把一个空间分割为许多chunks;这些chunk不会重叠;空间中的一个点只能属于一个chunk。2: 一个chunk是一个三维的容器(volume),它包含了许多场景对象。这些场景对象包括models、lights、entities、terrain blocks。把这些场景对象称作:chunk item。3: chunk也定义一些平面来组成边界,这些面可能定义portal,暗示可见的相邻chunk。4: portal是一个多边形符号,它包含一个标识从而决定一个物体是否可以通过。二、文件格式三、场景中的对象1: includes2: Models3: Entities4: Bo 阅读全文
2011年3月20日
摘要:
第一章 介绍 第二章 图形渲染管线 2.1 架构 实时渲染管线分为三个阶段:Application、Geometry、Rasterizer。 管线的最慢阶段决定了渲染速度和图像的更新率。 2.2 应用程序阶段 该阶段主要在CPU上执行,基于软件实现的,程序员可对其进行完全控制。如碰撞检测、加速处理(基于视口的裁剪)等,它可以在多核机子上进行并行处理。 在该阶段的最后,几何体会被编程几何图元-点、线... 阅读全文
2011年3月13日
摘要:
1.Depth Peeling(深度剥离) “深度剥离(Depth Peeling)足一种对深度值进行排序的技术 它的原理也比较肓观,标准的深度检测使场景中Z值最小的点输出到屏幕上,也就是离我们最近的顶点。但还有离我们第二近的顶点,第 近的顶点存在。要想显示它们,可以用多遍渲染的方法。在第一遍渲染时,按正常方式处理,这样就得到了离我们最近的表面中每个顶点的Z值 在第二遍渲染时,把现在每个顶点的深度值和刚才的那个深度值进行比较,凡是小于等于第一遍得到的Z值,把它们剥离,后面的过程依此类推即可。 这种效果在OpenGL里实现起来比较简单,可以使用ARB扩展功能中的API函数。在DirectX里模仿 阅读全文
2011年3月6日
摘要:
在固定管线的光照阶段,光照方程根据顶点颜色、光源、材质来计算最终的顶点颜色,在GB中顶点属性(NiVertexProperty)决定光照方程的计算方法。1.Gamebryo SDK提供的光照方程: 这里要注意: 说明:这三种颜色值的选择是根据顶点属性(NiVertexPeoperty)来设置的,可以选择是顶点颜色或者材质的 相关颜色。2.Gamebryo SDK顶点属性说明(NiVertextColorProperty)(1)源顶点模型(Source Vertex Mode) 该模型的主要作用是,在计算光照(明暗)方程时,使用哪个颜色-顶点颜色还是材质颜色(DX也有类似的 设置)。 SOUR. 阅读全文
摘要:
参考文献摘录:1《Terrain Rendering in frostbite using procedural shader splatting》(找到)2《Using Vertex Texture Displacement for Realistic Water Rendering》(找到)3《using vertex texture displacement of reallistic water rendering》(没找到)4《rencent advances in mesh morphing》(找到) 阅读全文
2011年2月27日
摘要:
帧渲染系统 一、简介 帧渲染系统提供了负责的特效提供了一个简单的方法。它提供了一些手动的方法。 在应用程序中,通过帧渲染系统可以在初始化时做好所有的配置工作。当渲染时,可以 自动执行这些被封装好的特效绘制操作。 二、剖析一帧 该系统允许事先建立复杂的渲染特效,从而在每一帧会自动执行。系统中提供了一些列可激活、禁止、重置的对象来做这些工作。特定帧中的对象可以被另一个使用了帧系统的应用程序调用。 Re... 阅读全文
摘要:
Shader System 一、 介绍 GB的NiShader系统控制了物体如何被渲染的,包括它们的顶点和像素 着色。NiShader被NiMaterial创建,NiMaterial会分析物体的状态从而决定、创建合适的NiShader对象。材质和着色组成了pipline,它们时基于数据驱动的(data-driven)。 一个shader在GB中代表了一个完整物体的渲染特效。它和DX中的termin... 阅读全文
摘要:
Mesh Profile System 总的来说,一个Mesh的配置文件(profile)是一个模板,这个模板定义了一个导出Mesh时如何形成的以及在tool plug-in pipeline中如何被操作。Plug-in更关注的是一个导出Mesh是如何创建的。如,一个plug-in期望得到一个拥有数据流Mesh,这些数据流携带了特殊命名词法(semantic name)或特殊的格式。在plug-i... 阅读全文
摘要:
Material System 一、 简介 GB的材质系统是一种基于NiMesh的渲染状态创建相应NiShader实例的机制。开发者经常需要为多个对象进行同种特效处理,以及当单个NiShader无法满足绘制需求时,与其让一个美术为不同几何体提供不同的NiShader,不如使用单个NiMaterial,它可以在运行时为每一个几何体提供合适的NiShader。 一个简单材质可以查询mesh从而决定它是... 阅读全文
摘要:
NiEntity 场景包含一系列实体,这些实体代表了游侠对象。它拥有很多属性。和实体相关的都放在NiEntity库中。 注意:Game framework中的实体拥有行为,能和world builder tool交互 一、 NiEntity接口 实体库中的接口包括实体、组件等,这些接口没有继承于NiRefObject和NiObject而自身实现了引用计数和RTTI. NiEntityPropert... 阅读全文
摘要:
NiTerrain 一、 介绍 1、 地形架构 GB中的地形是场景图系统的扩展。可以使用NiEntity来创建地形,即向场景中添加一个包含一个NiTerrainComonent的组件实体。 地形可以被分割成一个父亲NiTerrain和孩子NiTerrainSector。NiTerrainComponent可以当作NiTerrain对象中的一个实体接口,并且负责处理和管理场景中的地形。 NiTerr... 阅读全文
摘要:
Texturing一、 纹理基本常识1. 简介GB纹理系统包括:多纹理、投影纹理(Projected texture)、动态纹理、渲染纹理。2. 纹理的基本使用要想使用和标准材质一起使用纹理,应用程序必须做以下两件事:为数据流定义纹理坐标;挂载纹理属性(包括纹理资源、和纹理的处理方式)。3. 纹理属性及其组成部分纹理属性包括两大部分信息:(1) 一个或多个Map,该Map定义每个纹理相关的设置。不同的Map代表不同类型的纹理特效。其中,Base Map(或者Diffuse Map)代表了物体的顶点自发光颜色。(2) 纹理的挂载模式(texture-apply mode).定义了一组纹理如何影响 阅读全文
摘要:
NiMesh一、 NiMesh简介NiMesh库提供了一些列具有平台独立性的类,从而完成和几何体之间的交互。1. 术语(terminology)Stream:是一个抽象的数据缓冲区,可以包括一个或多个顶点、顶点索引以及用户自定义的元素Usage:stream封装了一个缓冲区,这些缓冲可以被用作不同的目的。GB使用Usage来标志该stream的用途:USAGE_VERTEX-顶点数据USAGE_VERTEX_INDEX-顶点索引数据USAGE_USER-自定义数据类型,GB渲染器使用用户自定义stream来保存shader constant数组。Element:一个元素代表一个数据数组,该数据 阅读全文
摘要:
NiApplicationNiApplication是针对Gamebryo示例创建的跨平台框架。它的主要功能有—创建窗口、创建渲染器、创建输入系统以及提供命令行(command line)的访问接口。一、基本知识1. 基本物体的创建SceneNiNodePtr m_spCene:指向场景的根。Virtual bool CreateScene:分配一个Node给m_spSceneCameraNiCamraPtr m_spCameraVirtual bool CreateCamra:创建NiCameraRendererNiRendererPtr m_spRenderer:Virtual bool 阅读全文
摘要:
Object System一、 简介1. 引用计数和智能指针GB中NiRefObject子类都是基于引用计数的,使用智能指针实现引用计数的半自动化。正如在NiRefObject中讨论的那样,智能指针智能指向在堆上动态分配的对象。永远不要将智能指针指向一个在栈上的对象(局部变量)。永远不要将智能指针指向一个静态的对象。如果一个函数使用智能指针作为参数,那么不要把一个没有被其他智能指针引用的对象常规指针作为参数传入到函数中。智能指针系统提供了两个宏,一个永远定义智能指针类型另一个用来智能指针类型转换。类型定义的宏是NiSmartPointer(classname)。例子如下NiSmartPoint 阅读全文
摘要:
RendererDx9一、 NiDx9Renderer基础1. 创建一个Dx9Renderer在全屏下需要设定屏幕的大小和深度。不支持多渲染器共存简单版:static NiDX9Renderer* Create(unsigned int uiWidth, unsigned int uiHeight, unsigned int uiUseFlags,NiWindowRef kWndDevice,NiWindowRef kWndFocus)高级版:static NiDX9Renderer* Create(unsigned int uiWidth, unsigned int uiHeight, un 阅读全文
摘要:
克隆对象Cloning InternalsCloning Internals Cloning是产生对象的拷贝的一种方法。应用程序调用下面的的函数来克隆对象。第一个函数使用缺省值来克隆对象名称,这在后面讨论。第二个版本允许通过NiClonigProcess来实现局部控制,这是为多线程情况下设计的函数。 NiObject* NiObject::Clone(); NiObject* NiObject::Clone(NiCloningProcess& kCloning); 使用克隆而不是通过例如从NIF文件中重复加载场景图的优点是这一类型的对象往往要耗费很多的内存,通过克隆来像NiGeomet 阅读全文
摘要:
一、 概述1. 简介由于实体通常是有Model来定义的,所以在创建实体时必须知道model ID。所有的模型定义都被封装在一个FlatModel类中(它封装了model的所有属性和行为),每个entity包含了一个flatmodel实例。对于实体的属性支持“clone-on-write”。这样可以使得实体所占的内存达到最小。如,名字和其它一些属性不用包含在真正的实体中,可以通过getpropertyname()在flatmodel中寻找。当一个实体被初始化时,会从它对应的flatmodel中“克隆”所有的属性,这种方式使得所创实体中只需保存这些属性的引用即可。Entity:是一个游戏对象,每一 阅读全文