3D游戏程序设计之Quake综述
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动画系统可以分为两种:一是骨骼动画系统,二是模 型动画系统,前者用内置的骨骼带动物体产生运动, 比较常见,后者则是在模型的基础上直接进行变形 19
3D引擎的核心-渲染: rendering pipeline
Graphics rendering pipeline
流水线的主要功能是根据给定的虚拟摄像机、三维物体、光 源、光照模型、纹理等绘制一幅二维图像
主要处理大部分多边形和顶点操作
Model & view Transform
Lighting
Projection
Clipping
Screen Mapping
几何层可进一步细分为上述功能层
23
3D引擎的核心-渲染: Rasterizer Stage(光栅化层)
目的:计算每个象素的颜色 处理Per-pixel operations 每个象素的信息存在颜色缓存(color buffer) 采用双buffer技术:绘制在back buffer进行,当绘制完
预处理每个表面光照,并生成level文件
5
Id Tech
Id Tech3
2005年Id公开了QuakeIII的所有源码(游戏引擎,Level编辑器,机器人), 其代码中的 注释极为详细
/*
==============
VM_Call
Upon a system call, the stack will look like:
采用了Gouraud shading high-level shader language and a method for rendering
volumetric fog
7
Id Tech
Id Tech4
Doom3 Engine, renderer部分被重写了 编程语言使用C++, 而不是 C 主要技术特点
单进程client-server通信采用memory buffer. 多进程采 用TCP. UDP等通信协议
Server采用了quake-c做为脚本语言(QVM)
Client是数据驱动的,quake数据主要有两种
The world: walls, floor, textures
14
通信与延迟
主要技术特点
using a more advanced MegaTexture approach using textures with up to 128000x128000 pixel resolution(20G)
the renderer will include is a penumbra in the shadowing, by using shadow maps
Level/scenario design: American McGee, Sandy Petersen, John Romero, Tim Willits
1997年12月9日:Quake2全球发布
小花絮: 1997年初Bill Gates和John Carmack争论了关于D3D 与OpenGL的优缺点(起因是1996年低John发表了关于D3D IM 模式非常差的文章)
11
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能 3D数学知识
12
体系结构
13
Client/Server
每个quake进程都是平等的, 并同时包含client, server 两个模块
游戏逻辑(gameplay)和现实模拟(simulation)都是在 server端实现的. client端收集关于键盘,鼠标和游戏手 柄的输入, 并把消息发送给server, server在指定的时间 内(fixed timeslice)完成处理并把结果反馈给client. Client要在下一帧时间到来之间完成显示
1999年12月5日:Quake3 arena全球发布
同年Unreal Technology发布了基于D3D的Unreal Engine, 其性 能和效果并不亚于Quake3
2005年10月18日:Quake4上市
这中间Id开始为各种设备和平台移植Quake, 如手持设备,
Mobile等
2
Quake Family Tree
18
3D引擎的基本组成部分
渲染是引擎最重要的功能。渲染引擎在引擎的所有部 件当中是最复杂的,它的强大与否直接决定着最终的 输出质量
物理系统,这可以使物体的运动遵循固定的规律,例 如,当角色跳起的时候,系统内定的重力值将决定他 能跳多高,以及他下落的速度有多快,子弹的飞行轨 迹、车辆的颠簸方式也都是由物理系统决定的。碰撞 探测是物理系统的核心部分,ቤተ መጻሕፍቲ ባይዱ可以探测游戏中各物 体的物理边缘
9
Id Tech
10
Id Tech
Id Tech6
目前还处于概念期 John Carmack关于Id下一代Engine的一些想法
ray tracing在短期内替代rasterization不太现实,除非Intel推出新 的处理器Larrabee(140亿/秒像素处理能力)
Ray tracing和rasterization的混合方式还是有前景的 Mulit-GPU graphics and Conclusions
id Tech 5 engine will be OpenGL based, thus not requiring DirectX 10 to run
跨平台 high dynamic range rendering-centric effects, and motion blur 支持多线程,多核计算
3
Id Tech
Id Tech1
1992年John Carmack开发了世界上第一个全新的3D引擎: Doom Engine
主要技术特点
Full texture mapping of all surfaces
Varying light levels
allowing effects such as highlights and shadows
Video Memory (Textures)
Xformed, Lit
Vertices (2D)
Fragments (pre-pixels)
GPU
Final pixels (Color, Depth)
Render-to-texture
硬件实现的唯一好处:速度!
25
3D引擎的核心-渲染: GPU Graphics State
Application
Vertices (3D)
CPU
VVeerrtetexx PPrroocceessssoorr
Assembly & Rasterization
PPiixxeell PPrroocceessssoorr
成后,再交换到front buffer 在该层解决可见性问题: 大部分图形硬件采用Z-buffer
技术 Z-buffer:存贮离摄像机最近点场景的Z值
24
3D引擎的核心-渲染: 硬件加速
Application
CPU
Geometry
Rasterizer
GPU
硬件加速
硬件加速从流水线的末端开始,然后逐步 往高层发展,目前有些应用层的工作已经 可以用可编程硬件来实现。
sp+32 parm1
sp+28 parm0
sp+24 return value
sp+20 return address
sp+16 local1
sp+14 local0
sp+12 arg1
sp+8 arg0
sp+4 return stack
sp
return address
An interpreted function will immediately execute
增加了bump mapping, normal mapping, and specular highlighting预处理
use of entirely dynamic per-pixel lighting
8
Id Tech
Id Tech5
2007年John Carmack在8核Apple Macintosh机器上演示了该 引擎,当前还未公开
通信:混合使用UDP, TCP
score, level数据采用可靠连接传输 game state(players and objects location……)数据采用非可靠
连接传输 Server FPS: 服务器采用固定频率发送消息,大约为10-20/s
延迟
关键操作强制使用了一个比较大的延迟时间, 以尽量保证每个 client的一致性.(如射击等)
3D游戏程序设计之Quake综 述
Yangxf 2008
0
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能
1
Quake年表
1996年7月31日:id software推出了自己的全新作品《Quake》
Programming: John Carmack, Michael Abrash, John Cash
流水线的速度是由最慢的部分(bottleneck)而非最快部分决 定的
20
Three3Dco引nc擎ep的tu核al 心sta-ge渲s: 染: 体系结构
Application
Geometry
Rasterizer
Each stage may be a pipeline
21
3D引擎的核心-渲染: Application Stage(应用层)
部分操作采用了先斩后奏的原则,如果玩家转换视角。 处理延迟的原则:不求绝对同步,只要能达到玩家可感知程
度即可
15
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能
16
游戏引擎在哪里?
17
什么是引擎?
我们可以把游戏的引擎比作赛车的引擎,玩家所体验到的剧情、 关卡、美工、音乐、操作等内容都是由游戏的引擎直接控制的, 它扮演着中场发动机的角色,把游戏中的所有元素捆绑在一起, 在后台指挥它们同时、有序地工作。简单地说,引擎就是“用于 控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相 对位置,到接受玩家的输入,以及按照正确的音量输出声音等 等。”
引入binary space partitioning方法
第一个真正意义上的游戏内容和游戏引擎的分离
4
Id Tech
Id Tech2
1997年Id发布了美国第一款FPS电脑游戏 QuakeII, 后续并移植到Microsfot Windows, GNU/Linux, Xbox360, Apple Macintosh等
an OP_ENTER instruction, which will subtract space for
locals from sp
==============
6
*/
Id Tech
主要技术特点
使用MD3 format作为3D Model文件格式,3D动画采用per-vertex animation(或称为Morph target animation, 移动轨迹动画), 而不 是skeletal animation(骨骼动画), 并使用了关键帧技术
主要技术特点
support for hardware-accelerated graphics
support for the traditional software renderer
subdivision of some of the components into dynamic-link libraries
经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统 共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理 系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和 插件,几乎涵盖了开发过程中的所有重要环节
主流游戏引擎
Doom-Quake
Unreal
Lithtech
CryEngine
用软件来实现,用户可完全控制(而其它层则建立在 硬件之上)
应用层的输出为Rendering primitives(如点、线和三 角形)
Processes:碰撞检测、纹理动画、基于变换的动画、 Morphing、响应输入设备(键盘、鼠标、VR头盔)的 操作等
22
3D引擎的核心-渲染: Geometry Stage(几何层)
3D引擎的核心-渲染: rendering pipeline
Graphics rendering pipeline
流水线的主要功能是根据给定的虚拟摄像机、三维物体、光 源、光照模型、纹理等绘制一幅二维图像
主要处理大部分多边形和顶点操作
Model & view Transform
Lighting
Projection
Clipping
Screen Mapping
几何层可进一步细分为上述功能层
23
3D引擎的核心-渲染: Rasterizer Stage(光栅化层)
目的:计算每个象素的颜色 处理Per-pixel operations 每个象素的信息存在颜色缓存(color buffer) 采用双buffer技术:绘制在back buffer进行,当绘制完
预处理每个表面光照,并生成level文件
5
Id Tech
Id Tech3
2005年Id公开了QuakeIII的所有源码(游戏引擎,Level编辑器,机器人), 其代码中的 注释极为详细
/*
==============
VM_Call
Upon a system call, the stack will look like:
采用了Gouraud shading high-level shader language and a method for rendering
volumetric fog
7
Id Tech
Id Tech4
Doom3 Engine, renderer部分被重写了 编程语言使用C++, 而不是 C 主要技术特点
单进程client-server通信采用memory buffer. 多进程采 用TCP. UDP等通信协议
Server采用了quake-c做为脚本语言(QVM)
Client是数据驱动的,quake数据主要有两种
The world: walls, floor, textures
14
通信与延迟
主要技术特点
using a more advanced MegaTexture approach using textures with up to 128000x128000 pixel resolution(20G)
the renderer will include is a penumbra in the shadowing, by using shadow maps
Level/scenario design: American McGee, Sandy Petersen, John Romero, Tim Willits
1997年12月9日:Quake2全球发布
小花絮: 1997年初Bill Gates和John Carmack争论了关于D3D 与OpenGL的优缺点(起因是1996年低John发表了关于D3D IM 模式非常差的文章)
11
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能 3D数学知识
12
体系结构
13
Client/Server
每个quake进程都是平等的, 并同时包含client, server 两个模块
游戏逻辑(gameplay)和现实模拟(simulation)都是在 server端实现的. client端收集关于键盘,鼠标和游戏手 柄的输入, 并把消息发送给server, server在指定的时间 内(fixed timeslice)完成处理并把结果反馈给client. Client要在下一帧时间到来之间完成显示
1999年12月5日:Quake3 arena全球发布
同年Unreal Technology发布了基于D3D的Unreal Engine, 其性 能和效果并不亚于Quake3
2005年10月18日:Quake4上市
这中间Id开始为各种设备和平台移植Quake, 如手持设备,
Mobile等
2
Quake Family Tree
18
3D引擎的基本组成部分
渲染是引擎最重要的功能。渲染引擎在引擎的所有部 件当中是最复杂的,它的强大与否直接决定着最终的 输出质量
物理系统,这可以使物体的运动遵循固定的规律,例 如,当角色跳起的时候,系统内定的重力值将决定他 能跳多高,以及他下落的速度有多快,子弹的飞行轨 迹、车辆的颠簸方式也都是由物理系统决定的。碰撞 探测是物理系统的核心部分,ቤተ መጻሕፍቲ ባይዱ可以探测游戏中各物 体的物理边缘
9
Id Tech
10
Id Tech
Id Tech6
目前还处于概念期 John Carmack关于Id下一代Engine的一些想法
ray tracing在短期内替代rasterization不太现实,除非Intel推出新 的处理器Larrabee(140亿/秒像素处理能力)
Ray tracing和rasterization的混合方式还是有前景的 Mulit-GPU graphics and Conclusions
id Tech 5 engine will be OpenGL based, thus not requiring DirectX 10 to run
跨平台 high dynamic range rendering-centric effects, and motion blur 支持多线程,多核计算
3
Id Tech
Id Tech1
1992年John Carmack开发了世界上第一个全新的3D引擎: Doom Engine
主要技术特点
Full texture mapping of all surfaces
Varying light levels
allowing effects such as highlights and shadows
Video Memory (Textures)
Xformed, Lit
Vertices (2D)
Fragments (pre-pixels)
GPU
Final pixels (Color, Depth)
Render-to-texture
硬件实现的唯一好处:速度!
25
3D引擎的核心-渲染: GPU Graphics State
Application
Vertices (3D)
CPU
VVeerrtetexx PPrroocceessssoorr
Assembly & Rasterization
PPiixxeell PPrroocceessssoorr
成后,再交换到front buffer 在该层解决可见性问题: 大部分图形硬件采用Z-buffer
技术 Z-buffer:存贮离摄像机最近点场景的Z值
24
3D引擎的核心-渲染: 硬件加速
Application
CPU
Geometry
Rasterizer
GPU
硬件加速
硬件加速从流水线的末端开始,然后逐步 往高层发展,目前有些应用层的工作已经 可以用可编程硬件来实现。
sp+32 parm1
sp+28 parm0
sp+24 return value
sp+20 return address
sp+16 local1
sp+14 local0
sp+12 arg1
sp+8 arg0
sp+4 return stack
sp
return address
An interpreted function will immediately execute
增加了bump mapping, normal mapping, and specular highlighting预处理
use of entirely dynamic per-pixel lighting
8
Id Tech
Id Tech5
2007年John Carmack在8核Apple Macintosh机器上演示了该 引擎,当前还未公开
通信:混合使用UDP, TCP
score, level数据采用可靠连接传输 game state(players and objects location……)数据采用非可靠
连接传输 Server FPS: 服务器采用固定频率发送消息,大约为10-20/s
延迟
关键操作强制使用了一个比较大的延迟时间, 以尽量保证每个 client的一致性.(如射击等)
3D游戏程序设计之Quake综 述
Yangxf 2008
0
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能
1
Quake年表
1996年7月31日:id software推出了自己的全新作品《Quake》
Programming: John Carmack, Michael Abrash, John Cash
流水线的速度是由最慢的部分(bottleneck)而非最快部分决 定的
20
Three3Dco引nc擎ep的tu核al 心sta-ge渲s: 染: 体系结构
Application
Geometry
Rasterizer
Each stage may be a pipeline
21
3D引擎的核心-渲染: Application Stage(应用层)
部分操作采用了先斩后奏的原则,如果玩家转换视角。 处理延迟的原则:不求绝对同步,只要能达到玩家可感知程
度即可
15
目录
Quake过去,现在和未来 Quake体系结构 游戏引擎 BSP 光照与阴影 基本物理 人工智能
16
游戏引擎在哪里?
17
什么是引擎?
我们可以把游戏的引擎比作赛车的引擎,玩家所体验到的剧情、 关卡、美工、音乐、操作等内容都是由游戏的引擎直接控制的, 它扮演着中场发动机的角色,把游戏中的所有元素捆绑在一起, 在后台指挥它们同时、有序地工作。简单地说,引擎就是“用于 控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相 对位置,到接受玩家的输入,以及按照正确的音量输出声音等 等。”
引入binary space partitioning方法
第一个真正意义上的游戏内容和游戏引擎的分离
4
Id Tech
Id Tech2
1997年Id发布了美国第一款FPS电脑游戏 QuakeII, 后续并移植到Microsfot Windows, GNU/Linux, Xbox360, Apple Macintosh等
an OP_ENTER instruction, which will subtract space for
locals from sp
==============
6
*/
Id Tech
主要技术特点
使用MD3 format作为3D Model文件格式,3D动画采用per-vertex animation(或称为Morph target animation, 移动轨迹动画), 而不 是skeletal animation(骨骼动画), 并使用了关键帧技术
主要技术特点
support for hardware-accelerated graphics
support for the traditional software renderer
subdivision of some of the components into dynamic-link libraries
经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统 共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理 系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和 插件,几乎涵盖了开发过程中的所有重要环节
主流游戏引擎
Doom-Quake
Unreal
Lithtech
CryEngine
用软件来实现,用户可完全控制(而其它层则建立在 硬件之上)
应用层的输出为Rendering primitives(如点、线和三 角形)
Processes:碰撞检测、纹理动画、基于变换的动画、 Morphing、响应输入设备(键盘、鼠标、VR头盔)的 操作等
22
3D引擎的核心-渲染: Geometry Stage(几何层)