Gamebryo3.0SDK翻译-Lightspeed介绍

来源:互联网 发布:线切割锥度编程 编辑:程序博客网 时间:2024/05/01 11:52


Lightspeed介绍

一、简介

Emergent 公司

设计原则:Rapid Prototyping,Rapid iteration

LightSpeed的新特征

(1) 新实体和行为系统

基于数据驱动的实体定义

实体的组成

多种语言的定义行为(C++ 或 Lua)

(2) 交互型游戏框架(Cross-platform game framework)

模拟

即时编辑

支持第三方插件

(3) 工具

Toolbench

实体模型工具(EMT)

世界构造工具(World Buider)

脚本调试器(Script Debugger)

Rapid Particle Iteration withi Maya

(4) 内核运行

多线程分配策略(Multi-threaded allocator enhancement)

直接着色选绘(Shader-directed rendering)

渲染优化(Rendering optimization)

1. 美术和策划

(1) 插件:3ds max Plug-in, Maya Plug-in, or XSI Plug-in

(2) 工具:Entity Model Tool

WorldBuilder:和Toolbench一起工作

SceneDesigner

Asset Viewer

Animation Tool

2. 脚本

3. GB新人

系统组成 

(1) 通用功能(Programmer Level)

(2) 动画

(3) 粒子系统:方法:美术导出特效文件—NIF或程序来制作

(4) 纹理

(5) 着色系统

(6) 交互库(NiMesh Library)

(7) 物理(NiPhysX)

(8) 多线程处理(Floodgate):处理多核相关

(9) 处理平台独立相关的—NiApplication,NiSample,NiCursor,NiInput,NiFont

(10)日志,调试

(11)消息

(12)运行时服务:方便命名,组织

(13)系统服务:

(14)模型:是实体的数据实例

(15)实体:是运行时的游戏逻辑对象,包括属性和行为

(16)内核运行服务:提供了内核系统层与游戏框架系统层之间的接口,包括场景图服务、动画服务、光照服务。

4. GB专家

5. 编辑工具选项

工具 

MAX导出插件、Maya导出插件、XSI导出插件、世界构造器、实体模型工具、脚本调试工具、动画工具、场景设计工具、场景查看器(Asset Viewer)、工具插件

二、学习Lightspeed

1、开发指南

(1) 数据驱动游戏(Data Driven Games)

修改后可以即时更新运行的游戏,而不需要重新编译

游戏代码中核心是一个模块化、可扩展的Game Framework,他的每一功能单元有相应系统服务提供,如RenderService。

(2) 场景编辑—World Builder

(3) 游戏对象编辑

(4) 游戏行为编辑

(5) 模型编辑

2、GB的架构

(1)设计原则

clip_image002

快速创建工作原型(working prototype)

降低开发成本

提供通用的游戏框架

支持跨平台

(2)架构概览

系统组成

clip_image004

· The Foundation subsystem abstracts platform-specific SDK libraries and offers utilities and helpers that could apply to almost any program. All of the other subsystems rely on Foundation.

· The Core Runtime subsystem consists of code for rendering, animation, effects, scene management, input services, and many other important visual and user interface technologies for game clients.

· The Game Framework subsystem contains simulation-related functionality, including entities, scheduling, behaviors, and script execution.

游戏组件

各种组件是相互独立的用户可以选择使用这些组件,以服务的形式提供功能。

工具

· Toolbench

· DCC exporters (3ds Max, Maya, and XSI)

· Several other tools for programmers, designers, and artists

(3) Fundation

它是整个GB最底层,所有的其它子系统都是建立在此之上,主要提供了如下功能

· File Access

· Memory Management

· Logging

· Asserts

· Critical Sections / Semaphores

· Threading / Thread Local Storage

· Service Manager / System Services

· Message Service

· PhysX Library Interface

系统服务和服务管理器

Fundation中最重要的功能就是提供服务管理器,它是应用程序的核心。负责管理所有的系统服务-维护它们的生命周期;在每一帧提供处理时间。发布者-代表了消息发送的方式,注册者-带表了消息的接受处理

系统服务提供了应用程序需要的相关功能。每一个系统服务独立设计,完成特定的功能。这些服务之间以消息异步的形式进行交互。这些服务根据需要来进行添加和删除。

消息系统

它也是一种系统服务,使用发布-注册(pulish-subscribe)机制来进行消息的发送和接受。

(4)Core Runtime

提供了几何、场景图的管理,动画、渲染以及其它实时系统,主要功能如下:

clip_image006

(5)Game Framework

提供基本的游戏行为,主要包含如下功能:

· Data-driven Entity System

· Lua Script Engine

· World and Entity Loaders

· Rapid Iteration Services

数据驱动实体系统

数据驱动实体系统是Game Framework的核心,实体包含了属性和行为,它们被封装在Entity Model类中。在实体建模工具中可以定义这些模型,一个模型可以混合和继承其它模型,子模型可以重载父模型的属性和行为。

Scheduler控制运行时处理,这些Scheduler是一个系统服务,它维护了一系列运行时脚本和行为触发事件。它和实体管理器一起来激活相应实体的行为。

实体管理器负责管理和运行时创建实体。Scheduler在管理器上触发行为,从而响应相应的事件,以及同其它实体进行交互。这些交互是异步的。

(5) System Service

GB Lightspeed的Foundation子系统使用一个Service oriented paradigm去协调命令和优化Foundation和客户端程序中的各模块。每一个服务拥有特定的功能。这些服务之间是彼此独立的,它们之间的交互是通过消息服务中的异步消息来实现的。应用程序允许自定义符合自己要求的各种服务。

Fundation的系统服务框架是有服务管理器和相关特定的系统服务组成,应用程序可以根据需要来创建和注册特定的系统服务,一旦注册完成,应用程序会激活服务管理器的主循环。服务管理器在每一帧提供系统服务循环。

服务管理器按顺序控制了复杂的初始化和关闭。Lightspeed的关键服务都是按一定顺序来初始化的。

这种框架,允许开发者可以根据需要来创建相应的服务从而建立应用程序。

系统服务和应用程序

系统在每一帧都会进行循环,一旦一个系统服务在一帧需要处理大量工作,此时会地降低帧速。为了避免这种情况,系统服务可以设计成使用多帧来处理长时间的命令。也可以使用多线程来处理。

异步通信

(6) Message System

GB Lightspeed的消息系统抽象了两种消息-远程消息、本地消息。当对象注册一个消息时,必须提供该消息的处理函数。

应用程序可以对消息类进行继承,一个新消息子类被一个工厂注册,从而支持网络功能。

消息系统使用一个Category决定怎么样去路由一个消息,一个Category可以被认为是一个地址。消息发送者无需知道消息的接受者,它只需发布一个合适的Category。消息接受者只需注册它感兴趣的消息Category,从而该Category消息会直接投递到注册该Category的对象。

消息处理注意事项

消息的发送方式

Send:使用异步方式发送消息,消息被发送到消息系统的消息队列中,消息的处理可能发送在下一帧。

SendImmdiate:消息的发送会被立即处理,基于回调机制。

(7) Entities

实体游戏中最小的个体。

实体使用数据驱动模板-Model来定义属性和行为。实体创建和编辑实体模型的工具-Entity Modeling Tool(EMT)。

实体的创建是异步的,运行时床架的实体是不可用的,知道它被加入到实体管理器中,从而对于Scheduler可用。在实体可用之前你是不能操作实体的。

你可以通过监听“OwenedEntityAdded”消息来判断实体是否可用。同理判断游戏世界中的所有实体是否可用可以通过-“EntityCreationgComplete”或“OnEntitySetFinished”。

实体的资源加载可以通过“OnAssetsLoaded”函数。

(8) Scheduler

Scheduler是一个系统服务,该系统服务触发实体的行为。实体间的交互是通过发送事件的。这些事件会被Scheduler截获。一个事件会被Scheduler通过游戏事件来管理。

(9) Asset Runtime Service

GB提供了“资源运行时服务”来独立访问本地资源。它会及时发现、通知资源的改变。

3、相关例子学习

五、美术开发

1.Viewing in 3ds Max

2.Exporint from 3ds Max

3. The Scene Graphic and 3ds Max

· Coordinate Systems and Units

· Nodes

· Groups

· Helper Objects

· Cameras

· Shapes

· Collision Detection

· Portals

· Level Of Detail

· Particle Systems

· Billboards

六、程序开发

1. 相关主题

(1) Basic

l 类的继承结构

clip_image008

clip_image010

l 对象系统

使用了RTTI、智能指针、流操作等

l 静态对象和对象的生命期

l 命名相关

l 模板类:Lists、Array、Map等…………….

l Unicode

GB支持UTC-2和Ascii,而不支持UNICODE和_UNICODE

(2) 场景图

l 变换和坐标系

世界坐标系(World coordinate system):

模型坐标系(Model coordinate system):从根节点到物体的所有变换的集合

局部坐标系(Local coordinate system):相对于父节点的变换

GB使用的是右手坐标系,NiMatrix3是顺时针的,NiQuaterninon是逆时针

l NIAVObject的子类:

场景图中所有物体都继承于NIAVObject,主要有以下集中类型的物体

NiAVObject 
NiCamera 
NiDynamicEffect 
NiLight 
NiAmbientLight 
NiDirectionalLight 
NiPointLight 
NiSpotLight 
NiTextureEffect 
NiRenderObject

NiMesh 
NiPSParticleSystem 
NiNode 
NiBillboardNode 
NiBSPNode 
NiSortAdjustNode 
NiSwitchNode 
NiLODNode

l 类的描述

l 更行场景图

它沿子图进行深度优先访问,计算世界变换矩阵和包围球,因子最小化可视节点的数量。在更新完矩阵之后。沿着递归调用返回,更新世界包围球。总的来说,递归一个路径时变换操作被更新,而返回时包围球被更新。

在场景图的数据处理初始化中,当应用程序使用到场景图前,至少要对场景图的根节点进行一次例行update,这样保证所有节点的世界信息及本地信息都是最新的。

注意任何在父节点或者祖节点的Update调用,可以代替对象自己的Update调用。注意在场景图中Update应该尽量少调用。仅仅因为一个叶节点变化每帧都在场景图上调用Update将会降低性能。

l 网格数据共享

clip_image012

l 修改网格数据:主要指实时修改形状、颜色、纹理等。

可以使用NiMorphMeshModifer来实现

(3) 场景渲染

clip_image014

The actual set of steps that must be taken to render a frame to the screen is slightly more involved than the high-level discussion or dataflow implied, as there are additional steps required to inform the renderer of the target and mark the beginning and end of rendering. The linked pages below will describe the basic functionality used to render common scenes, and then discuss advanced forms of each rendering step.

1. Prepare the Scene for Rendering

2. Define the View

3. Collect Visible Objects

4. Begin the Current Frame

5. Open the Render Target

6. Pass the View to the Renderer

7. Sort and Render the NiRenderObject objects

8. Close the Render Target

l 初始化渲染场景

更新场景的变换矩阵:Update

更新场景的渲染状态:Update Properties

更新场景的特效状态:Update Effcts

l 渲染属性

节点的渲染属性会影响所有子节点

l Viewing Meshes:

clip_image016

两种摄像机:程序添加,美术添加

l Cameras

相机坐标系:

A:相机位置为坐标系原点

B:X正方向为观察方向

C:Y正方向为屏幕的上方

D:Z正方向为屏幕的右方

GB支持两种投影模式:正交、透视

l Culling

NiDrawScene:完成Cullingy生成可见物体集合,再绘制集合里的物体

也可以通过NiCullingProcess、NiVisiableArray再结合NiDrawScene来完成上述

涉及的物体:

A源物体:就是被处理的对象,包括场景图和NiCamera

B处理工具:NiCullingProcess

C目标物体:NiVisiableArray

NiVisibleArray:是一个存放可见物体的容器,由NiCullingProcess产生这些物体,再对这些可见物体进行排序和渲染

NiCullingProcess:用来进行Culling处理

l 使用帧

for each rendered frame

{

CreateFrame

DisplayFrame

}

过程:BegainFrame--àEndFrame-àDisplayFrame

Gamebryo支持离屏渲染(BeginOffScreenFrame and EndOffScreenFrame)

l 使用渲染目标组

GB支持的RenderTareget:Buffer、Texture、Cubemap

l Rendering Meshes

l Object Sorting

l 渲染函数

NiDrawScene:完成Culling、排序、绘制工作

NiDrawVisibleArray:

NiDrawVisibleArrayAppend:

l 屏幕空间的的绘制

(4) 特效处理

l Dynamic Effets介绍

Dynamic Effects主要包含:光照、雾化、倒影、阴影。

它影响所有子节点的物体

被影响的物体被注册在Scope List中(使用AttachAffectedNode方法)

(4) 导入、导出

l 创建NIF文件

使用max或maya插件导出、程序写文件

l 加载NIF文件

使用NiStream类完成加载功能

GB支持后台加载

l NIF文件的输入、输出原理

(4) 其它特征功能

l 声音系统(NiAudio)

l 入口系统

l 碰撞检测系统

主要是针对bounding spheres、alternate bounding volumes、oriented bounding boxes、trangle-triangle之间的碰撞检测

(5) 高质量项目开发

几何体的类型:

· Frequency of movement

o Geometry that moves every frame

o Geometry that moves only in special situations

o Geometry that never moves.

· Type of motion

o Completely independent motion of objects in a subtree

o Motion of an entire subtree as a single, rigid body

GB中的UnpdateSelectedSystem会根据几何体的类型来更新,从而提高效率

提高纹理的加载速度:把纹理以plateform-specific texturesxi形式存储在NIF中

l 提高效率的方法

l UpdateSelected

(5) 内存管理

(6) 蒙皮对象处理

(5) 多线程处理

2. 创建(Build)

3. Fundation

该部分为GB的其它部分提供了一些基本的服务,主要有日志、消息、内存管理、asset管理以及提供了一个系统服务框架,该框架实现了应用程序的主循环和其它服务所需要的时间处理。

4. Core Runtime

该部分是一个面向对象的C++3D引擎库,它的主要特征如下:

· Hierarchical scene graph representation

· Integration with major 3D modeling tools

· Powerful art tool chain integration

· Efficient visible object culling

· Support for advanced 3D hardware acceleration on all platforms

· High-end texturing and rendering effects

· Dynamic collision detection

· Support for 3D audio

· Level-of-detail representations

· Flexible rendering, sorting, and culling methods

主要有以下几部分组成:

· Engine Libraries

o NiSystem

o NiMain

§ Material System

§ Frame Rendering System

§ Shadowing System

§ Shader System

§ Texturing

§ Object Systems

o NiAnimation

o NiCollision

o NiFloodgate

o NiMesh

o NiTerrain

o NiParticle

o NiEntity

o NiPortals

· Platform-specific Rendering Libraries

o NiDX9Renderer

o NiD3D10Renderer

o NiPS3Renderer

o NiWiiRenderer

o NiXenonRenderer (Xbox 360)

· Application Framework

o NiApplication

o NiSample

o NiCursor

o NiFont

o NiInput

o NiUserInterface

o NiVisualTracker

· Other Libraries

o NiAudio

o NiMeshProfileProcessor

o NiMeshProfileXMLParser

o NiMetrics

o NiMetricsOutput

o NiProgramLauncher

o NiSceneGraphUpdateService

5. Game Framework

提供了simulation和gameplay behavior,主要包括“data driven entity system”以及相关服务。同时该部分提供了Toolbench和run-time data formats之间的交互功能。

Game Framework是建立在Fundation子系统上的,但同时也基于core runtime中的相关功能。Core Runtime以插件的形式提供给Fundation服务。

主要特征如下:

· Scripting

· Core Runtime Services

· Behaviors

· Built-ins

· Entities

· Entity properties

· Entity interaction

· Game initialization

· Models

· PhysX System Services

· Scheduler

6. Gamebryo-Physx

7. Tool

七、工具

原创粉丝点击