Professional Documents
Culture Documents
Nghiencuuvaxaydungthunghiem3dengine 141009200558 Conversion Gate01 PDF
Nghiencuuvaxaydungthunghiem3dengine 141009200558 Conversion Gate01 PDF
NG THI AN
0112085
NGUYN NH TON
0112287
LI CM N
Chng em xin chn thnh cm n Khoa Cng ngh Thng tin, Trng i hc
Khoa hc T nhin Thnh ph H Ch Minh to iu kin cho chng em thc
hin ti tt nghip ny.
Chng em xin chn thnh cm n thy Dng Anh c v thy Trn Minh Trit
tn tnh hng dn, ch bo chng em trong sut thi gian lm ti.
Chng em cng xin cm n qu Thy C trong Khoa tn tnh ging dy,
trang b cho chng em nhng kin thc cn thit trong sut qu trnh hc tp ti
trng. Chng em xin gi lng bit n su sc n ba, m, cc bn b ng h,
gip , ng vin em trong sut qu trnh hc cng nh thi gian lm lun vn y
kh khn, th thch.
Mc d rt c gng hon thnh lun vn vi tt c n lc ca bn thn, nhng
chc chn lun vn khng trnh khi nhng sai st v hn ch, knh mong s thng
cm, ch bo ca qu Thy C v cc bn.
Nhm thc hin
Ng Thi An v Nguyn nh Ton
Thng 7 nm 2005
-i-
LI M U
Ngy nay, cc sn phm gii tr m c bit l Game mang li mt ngun li
nhun to ln cho ngnh cng nghip my tnh. Do nhu cu ca th trng tng
nhanh, cc Game ngy cng c cht lng cng cao v thi gian xy dng ngy
cng c rt ngn. Cc Game 3D trn th trng hin nay rt a dng v ni dung
v chng loi nhng cng c im chung l xy dng trn cc Game Engine. Cht
lng ca Game s ph thuc vo cht lng ca Game Engine m n s dng.
Game Engine chnh l phn ct li xy dng Game hin nay v 3D Engine
chnh l phn quan trng nht ca Game Engine. Vic s dng Game Engine xy
dng Game l mt xu th tt yu c nhng Game cht lng cao trong thi gian
ngn. Tic thay, hin nay nc ta vic xy dng Game 3D cng nh Game
Engine vn cn l iu mi m. Chnh v vy, chng em thc hin ti Nghin
cu v xy dng th nghim 3D Engine vi mong mun gp vo nhng vin
gch u tin xy dng nn ngnh cng nghip Game ca nc nh trong tng
lai.
L nhng ngi i sau v c tha hng nhng thnh tu t qu trnh pht
trin cng ngh th gii, chng em p dng nhng k thut mi nht hin nay
vo trong 3D Engine ca mnh. Chng em xy dng nn Nwfc Engine l mt 3D
Engine vi chc nng chnh l dng hnh v qun l tp tin. Sau chng em tm
hiu v xy dng thm mt s h thng khc nh h thng qun l din hot, h
thng vt l, h thng hiu ng (particle v m thanh) kt hp vi 3D Engine
Nwfc to ra ng dng Game demo Dead Rising.
Ni dung ca lun vn c chia lm 4 phn; trong , phn 1 l chng u
tin gii thiu v Game Engine v cho ta ci nhn tng qut v cc Game Engine
ang c s dng trn th gii; phn 2 gm 3 chng 2, 3, v 4 gii thiu cc
thnh phn v cng ngh chnh s dng trong Nwfc Engine; phn 3 gm 5 chng
tip theo (t chng 5 n chng 9) cp n cc thnh phn b sung vo Nwfc
- ii -
- iii -
MC LC
LI CM N............................................................................................................. i
LI M U............................................................................................................ ii
MC LC .............................................................................................................. iv
DANH SCH CC HNH.....................................................................................viii
DANH SCH CC BNG....................................................................................... x
MT S T VIT TT ......................................................................................... xi
Chng 1
Nwfc Engine....................................................................................... 29
- iv -
4.1. Li ni u ................................................................................................56
4.2. bng thi gian thc Shadow Volume..................................................56
4.2.1. C s l thuyt ....................................................................................56
4.2.2. Vertex Shader cho Shadow Volume ...................................................62
4.2.3. Mt s kt qu t c......................................................................63
4.3. Khung cnh bu tri (skybox)...................................................................64
4.3.1. C s l thuyt ....................................................................................64
4.3.2. Vertex Shader cho skybox ..................................................................66
4.3.3. Mt s kt qu t c......................................................................67
4.4. Chiu sng theo im nh s dng normal map v specular map ............69
4.4.1. C s l thuyt ....................................................................................69
4.4.2. Vertex Shader v Pixel Shader cho per-pixel lighting........................75
4.4.3. Mt s kt qu t c......................................................................77
4.5. Tm tt ......................................................................................................79
Chng 5
-v-
- vi -
........................................................................................................... 145
- vii -
- viii -
- ix -
-x-
MT S T VIT TT
3D
3 Dimension
3 chiu
AI
Artificial Intelligence
Tr tu nhn to
ALU
n v s hc v lun l
API
GPU
n v x l ho
HLSL
PS
Pixel Shader
VS
Vertex Shader
- xi -
Chng 1
Tng quan
-1-
-2-
-3-
-4-
-5-
Dark
Basic
Quake
1
Unreal
Halflife
Genesis
Nebula
Quake
2
H thng
Culling
BSP
BSP
BSP
BSP
BSP
BSP
Mipmap
Map mi
trng
Cubic
Lightmaps
T bng
ng
Ni suy
mesh
Terrain
H thng
Particle
Mirrors
Cc mt
cong
bng
Din hot
khung
xng
Nhiu
ngi chi
Nhiu cnh
Game
Engine vt
l
Ngn ng
kch bn
Basic
Basic
Gi c
$100
$10.000
-6-
$10.000
$10.000
(tip theo)
Game
Engine
Game
Studio
Quake
3
Lich_
tech 2
Vulpine
Torque
Crystal
Space
Power
Render
H thng
Culling
BSP
BSP
Portal
Portal
BSP
BSP
Mipmap
Map mi
trng
Lightmaps
T bng
ng
Ni suy
mesh
Terrain
H thng
Particle
Mirrors
Cc mt
cong
bng
Din hot
khung
xng
Nhiu
ngi chi
Nhiu cnh
Game
Dev
Engine vt
l
Ngn ng
kch bn
TLC
C++
Java
C++
C/pyth.
Python
C++
Gi c
$80
$250.000
$75.000
$100
$500
$5.500
-7-
1.5. Tm tt
Trong cng ngh Game tin tin ngy nay hu ht cc Game c xy dng da
trn mt Game Engine. Vic xy dng nn cc Game Engine tr thnh mt xu
th tt yu v pht trin rt mnh m. Mi Game Engine u cha ng trong n
nhiu thnh phn, tp cc thnh phn x l hin th 3D ca Game Engine chnh l
3D Engine. Cht lng ca Game Engine ph thuc vo cht lng ca 3D Engine,
c th ni 3D Engine chnh l phn c trng c bn nht ca Game Engine.
Chng ta c th chia cc Game Engine ra thnh 3 loi l Isometric Engine, FPS
Engine v MMOG Engine. Tuy nhin vic phn chia cc Engine ch mang tnh
tng i v ngy ny cc Engine mang trong mnh rt nhiu chc nng pha trn t
cc loi khc nhm p ng vic xy dng Game tt nht.
Nu mun xy dng Game, ta phi tm hiu, so snh cc Game Engine chn
mt Game Engine ph hp vi ng dng v ti tin. Vic tm hiu cc Game
Engine cn cho php ta to ra mt Game Engine cho chnh mnh tin s dng
vi chi ph u t thp hn.
-8-
Chng 2
Tng quan
Qui trnh x l ho
K thut v l thuyt v Vertex Shader
K thut v l thuyt v Pixel Shader
S dng Vertex Shader v Pixel Shader
Gii thiu v HLSL
Tm tt
-9-
- 10 -
- 11 -
- 12 -
- 13 -
Shader l m hnh mang tnh cht l thuyt gip ta d tip cn v hnh dung cch
thc m Vertex Shader hot ng. Ging nh 1 loi my mc cng nghip, Vertex
Shader nhn d liu u vo (input), sau tin hnh x l d liu bng 1 s tc
v, cui cng l xut ra cc thnh phm l cc d liu u ra (output). Sau y l s
l thuyt:
Trong s trn d liu vertex c truyn t tri sang phi. Cc thanh ghi
(registers) l ni cha v qun l cc d liu u vo v u ra ca Shader. Cc tc
v c thi hnh trong Shader c cu to t 1 tp cc vi lnh hp ng (assemblylanguage instructions), cc vi lnh ny c thi hnh ngay trn n v s hc v
lun l (Arithmetic Logic Unit, ALU) nm trn GPU (Graphic Processor Unit) ca
card 3D. D liu u vo ca Vertex Shader c truyn vo thng qua thanh ghi
u vo (input registers). Vertex Shader sau khi thi hnh s xut cc gi tr u ra
thng qua cc thanh ghi u ra (output registers). D liu u vo ca Shader l
thng tin ca 1 vertex c ly t trong vertex buffer (do chng trnh cung cp),
cc d liu ny c th bao gm ta , php tuyn, ta texture, mu diffuse
D liu u ra ca Vertex Shader c tr thng li cho qui trnh x l (Graphic
Pipeline) chuyn qua cng on x l i tng c s (Primitive processing).
- 14 -
- 15 -
tr
bn
trong
chng
trnh
chnh
thng
qua
phng
thc
IDirect3DDevice9::SetVertexShaderConstantx.
nh ngha d liu trong thanh ghi u vo (Input Register
Declarations). Cc thanh ghi d liu vo nh v0, v1 cn phi c nh ngha d
liu trc khi s dng. Vic nh ngha ny s gip Direct3D nh x c cc d
liu thnh phn trong vertex trn b nh vo ng cc thanh ghi tng ng. Trong
v d trn, thanh ghi v0 s cha ta v tr, v v1 s cha ta texture ca
vertex.
- 16 -
- 17 -
- 18 -
- 19 -
- 20 -
- 21 -
D liu trong m hnh c di chuyn t tri sang phi. Pixel Shader s dng
cc thanh ghi (registers) lu tr, qun l cc d liu u vo (input), u ra
(output), ng thi thao tc trn chng nh vo cc vi lnh c thc thi bi n v
s hc v lun l (ALU). Pixel Shader khi thi hnh s bin i cc thuc tnh bn
trong ca im nh (bao gm v tr, php tuyn, ta texture, mu diffuse)
thnh gi tr mu sc ca im . Cc thanh ghi d liu vo ca Pixel Shader s
nhn d liu vo l cc gi tr ni suy ca vertex. Chc nng ca cc texture
sampler l dng ta texture t cc thanh ghi u vo ly mu texture v tr v
gi tr mu ly c.
Tng t nh Vertex Shader, Pixel Shader s ghi cc gi tr kt qu vo cc
thanh ghi u ra (thng l gi tr mu sc ca im nh). Thanh ghi u ra sau khi
nhn d liu s tr d liu v cho Graphic Pipeline x l tip giai on 2.
Sau y l danh sch cc loi thanh ghi c dng trong Pixel Shader v chc
nng ca chng.
Thanh ghi d liu vo (input registers) cha d liu u vo (nhn c t
qu trnh x l i tng c s (Primitive processing)).
Thanh ghi hng (constant registers) cha cc hng s dng trong ALU.
Thanh ghi tm (temporary registers) cha cc d liu tm thi.
Thanh ghi d liu ra (output registers) cha kt qu tnh ton ca Pixel
Shader.
Thanh ghi iu khin (Flow control registers) iu khin th t cc vi lnh
c thc thi.
Texture sampler dng ta texture ly mu texture sau tr v li cho
Shader.
Cc vi lnh trong Pixel Shader chnh l thnh phn chnh ca Pixel Shader. Cc
vi lnh m nhn vic thc thi mt s tc v ton hc trn d liu v d nh tnh
tch v hng (dot product), nhn ma trn, tnh vector n v... Danh sch cc loi
thanh ghi cng nh cc vi lnh c th kham tho trong Direct3D SDK.
- 22 -
// ch th phin bn
0,0,0,0
// cc ch th nh ngha
1,1,1,1
1.0,0.5,0,0
0,-0.5,-0.25,0
// ly mu texture ti tng 0 vi ta texture th 0
t0
// xut kt qu mu sc vo thanh ghi r0
- 23 -
- 24 -
bng
phng
thc
LPDIRECT3DVERTEXSHADER9 m_pAsm_VS;
// Create the vertex shader
g_pd3dDevice->CreateVertexShader(
(DWORD*)pShader->GetBufferPointer(), &m_pAsm_VS );
- 25 -
Kt qu ca chng trnh
- 26 -
- 27 -
- 28 -
Chng 3
Nwfc Engine
Tng quan
Cc tnh nng ca Nwfc Engine
M hnh xy dng Nwfc Engine
Cu trc ca Nwfc Engine
H thng cht liu (material)
Tm tt
- 29 -
- 30 -
ch hng ti ca Engine ny l pht trin thnh 1 Game Engine, tuy nhin v thi
gian c hn nn trong lun vn ny Nwfc Engine ch c xy dng s tnh tng
va nn gn ging mt 3D Engine hn l 1 Game Engine.
3.2. Cc tnh nng ca Nwfc Engine
Engine cung cp cc tnh nng cho vic pht trin d dng ng dng 3D nh
Game hay cc chng trnh hin th 3D khc. S dng cng ngh dng hnh ha
tin tin nht hin nay trn nn th vin 3D API DirectX9.0c, mc ch ca Engine
l khai thc ht sc mnh ca b vi x l GPU (Graphic Processor Unit) cho vic
dng hnh v hin th ha 3D. Ngoi ra Engine m nhn chc nng qun l v
truy xut hiu qu ti nguyn phn cng nht l b nh Ram v card ha 3D.
Cc tnh nng chnh v 3D
H tr tch hp sn cng ngh Shaders (Vertex Shader v Pixel Shader). Cho
php vit li cc thut ton ha mi nht mi dng trong ng dng hay c th
s dng cc thut ton c Engine ci t sn.
H tr c tp tin .X (ca DirectX). Tp tin .X l mt trong nhng format tp
tin cn bn c h tr bi Engine.
Qun l t ng ton b cc ti nguyn trn phn cng (Ram hay card mn
hnh) cng nh trn b nh ph gip cho chng trnh gim bt gnh nng cho b
nh.
H thng tp tin Parameter linh hot c s dng cho nhiu mc ch trong
cng nh ngoi Engine. N cho php ngi dng t nh dng d liu ring, chc
nng gn ging nh XML.
Phn quan trng nht ca Engine chnh l h thng dng hnh linh hat da
trn c s s dng cc cht liu (material).
Cc tnh nng ph tr
Th vin ton hc.
Th vin h tr x l nh dng tp tin Parameter.
- 31 -
- 32 -
nhim v phi hin thc ha cc giao din (interface) do module chnh cung cp. V
d module m nhn chc nng dng hnh 3D bng Direct3D, module m nhn
chc nng truy xut tp tin. Cc module ny hon ton trong sut (transparent) vi
ng dng u cui, v chng ch c s dng ni b bi module chnh m thi.
Gii thiu s lc v cc module s dng trong Engine.
Module renderer: l tp cc module ph thuc vo th vin ha dng hnh
3D. Hin nay trn th gii ch c 2 th vin ha 3D ph bin c nhiu ngi
s dng l OpenGL v Direct3D (1 phn trong tp hp th vin multimedia DirectX
ca Microsoft), d trong Engine ch c ci t sn module renderer cho th vin
Direct3D m thi (c th l phin bn 9.0c) nhng ta hon ton c th thm module
dng hnh cho OpenGL bng cch pht trin thm module mi m hon ton khng
phi thng bo g cho module chnh hay compile li code. Nhim v ca module
ny phi hin thc ha cc giao din v ha 3D ca module chnh.
Module qun l v truy xut tp tin (file system): m nhn vai tr thao tc,
tm kim trn tp tin cng nh c hay ghi tp tin, ph thuc vo th vin tp tin
nh Standard FileIO, IOStream, hay WIN32 File System. Mi module khc mun
truy xut tp tin u thng qua module ny. Module ny c tch hp trong
module chnh m khng phi l module ri. Ta c th tch ri module ny khi ta
mun s dng cc th vin truy xut tp tin khc nhau (th vin tp tin c s
dng trong Engine l Standard FileIO).
Cc module khc nh module vt l, module ngn ng kch bn (Scripting)
s c pht trin khi m rng Engine sau ny.
3.4. Cu trc ca Nwfc Engine
Engine l mt tp cc thnh phn, mi thnh phn th hin 1 chc nng ring
bit. Mt s chc nng ch s dng cc b nhng hu ht cc chc nng c kt
xut (export) cho ng dng u cui di dng giao din (interface).
- 33 -
- 34 -
- 35 -
trung cn gip ta trin khai cc hnh thc lu tr khc nhau (nh lu tr trong tp
tin zip chng hn).
Parameter files. y l thnh phn h tr nh dng tp tin Parameter ca
Engine. nh dng tp tin Parameter s c trnh by phn sau. Tp tin
Parameter c s dng rt ph bin trong cng nh ngoi Engine. N gip nh
ngha cu trc tp tin material... v c dng rt nhiu cho Game demo.
Math. Th vin ton dng cho 3D, h tr vector 2..4 chiu, quaternion, ma
trn 4x4, color, mt phng.
NwfcUtil. H tr ng dng u cui c th truy xut cc thnh phn trong
Engine.
3.4.2. Cc thnh phn trong RendererDX9 module
Cc thnh phn trong module ny ch yu l cc thnh phn hin thc ha cc
giao din ca Nwfc module trn nn ca 3D API Direct3D 9.0c. y l module
hon ton ph thuc Direct3D. Cc thnh phn:
MeshDX9. Hin thc ha thnh phn Mesh.
ShaderDX9. Hin thc ha Shader.
RenderAPI_DX9. Hin thc ha RenderAPI.
Ngoi ra module ny cn nhiu thnh phn mang tnh cht ni b, ch c s
dng trong module ny m thi.
StateManager. Qun l trng thi phn cng mt cch hiu qu gip tng
tc khung hnh, gim s ln thay i trng thi qua cc ln gi lnh v xung
mc thp nht ng thi phc hi li cc trng thi thay i cho cc ln v sau.
HardwareShaderDX9. y l thnh phn chnh trin khai trc tip cng
ngh Vertex Shader v Pixel Shader trn phn cng, do Shader l cng ngh ph
thuc 3D API, nn thnh phn phi c ci t trong module ny.
- 36 -
- 37 -
- 38 -
Cu trc ca 1 cht liu gm nhiu tng, tng cng cao th mc tru tng
ha cng cao v cng t giao tip vi phn cng, ngc li tng cng thp th giao
tip vi phn cng v ph thuc vo 3D API cng ln.
Material. Chnh bn thn ca cht liu, tng ny c mc tru tng cao
do t giao tip vi phn cng. Material m nhn vai tr x l cc thng s thuc
tnh ng thi chuyn giao cc thng s ny cho cc tng thp hn s dng. Cc
thng s ny c th c material qun l trn tp tin hay trn b nh.
Textures. L cc nh texture ca b mt, cc nh ny c th gm nhiu loi
khc nhau v c s dng cho cc mc ch khc nhau.
Shader. L thnh phn qun l chc nng dng hnh ca material, mi chc
nng v ca material u phi thng qua thnh phn ny. Mt Shader bao gm mt
hay nhiu ln dng hnh (gi l render pass).
Render passes. L 1 ln v hnh nh vo frame buffer. Mi render pass gm
cc trng thi phn cng, vertex shader v pixel shader hay fixed function (khi
khng s dng vertex shader hay pixel shader) c s dng trong ln v .
3.5.3. Material
Material trong Engine c th to bng code hay c t tp tin. nh dng tp tin
ca material l nh dng tp tin Parameter ca Engine. Thng tin material c lu
trong tp tin bao gm cc texture v shader, material h tr ti a 4 texture tng
ng 4 tng texture [0..4] (texture stage) ca Direct3D.
C php ca 1 material nh sau:
textures
{
texture0
texturefile
. . .
texture4
texturefile
}
shader
shaderfile
[ texture flag(s)]
[ texture flag(s)]
- 39 -
"textures/chair1.tga"
"textures/chair1_local.tga"
-normalmap
"textures/chair1_s.tga" [ -specularmap -pointsample ]
"shaders/bump"
- 40 -
- 41 -
- 42 -
- 43 -
3.5.4.2.
Texture flags
ngha
Ch filter texture l ly mu gn nht (nearest point
sample)
-nocompress
-clampu
-clampv
-nomipmap
-minmip
-onebitalpha
-eightbitalpha
-normalmap
-specularmap
-envcubemap
-alphaspecularmap
3.5.5. Shader
Shader l thnh phn qun l cc ln dng hnh ca material cng nh cc thuc
tnh ca cc ln dng hnh. Hnh 3-8 th hin cu trc ca 1 Shader.
Mt shader bao gm nhiu ln dng hnh (render) gi l render pass. Mi render
pass l mt tp cc trng thi phn cng, Vertex Shader, Pixel Shader, tuy nhin c
- 44 -
Bi v 1 Shader cn rt nhiu thng tin v trng thi phn cng cng nh Vertex
Shader v Pixel Shader nn ta cn 1 format file linh ng th c th lu tr cc
thng tin trn, format file Shader s dng trong Engine l Effect file (ca
Direct3D).
- 45 -
3.5.5.1.
Tp tin Effect (hay FX) l nh dng tp tin c bit ca Direct3D. Effect file
ca Direct3D c th c dng vi 3 mc ch sau y:
Dng vit Vertex Shader v Pixel Shader bng HLSL (High Level Shader
Language).
Dng lu tr cc technique, l h thng tch hp cc render pass li vi nhau.
Dng tch hp Vertex Shader, Pixel Shader vi cc technique.
3.5.5.2.
- 46 -
C php ca 1 pass:
pass [ id ] [< annotation(s) >]
{ state assignment(s) }
- 47 -
- 48 -
3.5.6.1.
Kiu
float4
float4x4
float4x4
float4x4
float4x4
float4
lightInfo
float4x3
Register
c2
c4 .. c7
c8 .. c11
c12 .. c15
c17 .. c20
c21 .. c26
c27 .. c36
c42 .. c77
cView
cProjection
cInvModel
float4x4
float4x4
float4x4
c78 .. c81
c82 . .c85
c86 .. c89
ngha
im t ca mt hay camera
Ma trn World (0) * View * Projection
Ma trn View * Projection
Ma trn World (0) * View
Ma trn World (0) * View nghch o
nh sng ambient theo 6 mt
Thng tin v 2 ngun nh sng [1]
12 ma trn World (0) -> World (12) (Dng
cho Indexed Skinning). Dng cho pht
trin Engine sau ny, hin nay Engine vn
cha h tr hardware skinning.
Ma trn View
Ma trn Projection
Ma trn World (0) nghch o
Ch thch:
[1] : Thng tin v ngun sng c b tr thnh cu trc.
struct LightInfo
{
float4 color;
float4 dir;
float4 pos;
float4 spotParams;
float4 atten;
};
LightInfo cLightInfo[2];
- 49 -
Trong :
color. Mu ca ngun sng.
dir. Hng chiu ti ca ngun sng (ch dng cho ngun sng song song
(directional light)).
pos. V tr t ngun sng (ch dng cho ngun sng im (point light) v
ngun sng hnh chp (spot light)).
spotParams. Thng tin v ngun sng hnh chp (spot light).
atten. suy gim cng nh sng theo khong cch.
Phn loi Vertex Shader trong Engine
Vertex Shader trong Engine c phn lm 2 loi ty vo c tnh s dng
Vertex Shader khng ph thuc (hay khng dng) ngun sng.
Vertex Shader ph thuc vo ngun sng
Vertex Shader khng ph thuc ngun sng
Vertex Shader thuc loi ny thng kh n gin do khng phi tnh ton
sng t cc ngun sng. S lng cc vi lnh (intructions) thng rt t do hu
ht ch cn dng Vertex Shader phin bn vs_1_1 l . Cc Vertex Shader c
ci t sn bi Engine trong s ny gm c (chi tit cc thut ton v m ngun s
c trnh by chng sau).
vertex_screenspace_11.vsh. Dng v cc i tng trc tip ln mn
hnh theo ta im trn mn hnh. Thng dng cho vic v cc i tng giao
din GUI, ngoi ra Shader ny cn c dng trong thut ton bng Shadow
Volume.
vertex_shadowvol_11.vsh. Ch dng cho thut ton bng Shadow
Volume m thi.
vertex_skybox_11.vsh. Dng v cc khung cnh bu tri bng cc khi
vung.
Ch s 11 ng sau tn ca cc Vertex Shader chnh l phin bn Vertex Shader
ang s dng. Trong 11 l phin bn vs_1_1, 20 l phin bn vs_2_0, 30 l
phin bn vs_3_0.
- 50 -
- 51 -
Ngun sng 0
NONE
NONE
SPOT
POINT
DIRECTIONAL
SPOT
SPOT
SPOT
POINT
POINT
DIRECTIONAL
Ngun sng 1
NONE
NONE
NONE
NONE
NONE
SPOT
POINT
DIRECTIONAL
POINT
DIRECTIONAL
DIRECTIONAL
- 52 -
Mi trng
NONE
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
- 53 -
3.5.6.2.
Pixel Shader
- 54 -
Chng 4
Li ni u
bng thi gian thc Shadow Volume
Khung cnh bu tri (sky box)
Chiu sng theo im nh (per-pixel lighting) s dng
normal map v specular map
Tm tt
- 55 -
4.1. Li ni u
Phn ny s trnh by ni dung chi tit ca thut ton Vertex Shader v Pixel
Shader dng trong Game demo. Cc kt qu th nghim u c chp li t Game
demo hay t Engine.
4.2. bng thi gian thc Shadow Volume
Trong lnh vc ha 3D ni chung cng nh Game 3D ni ring hin nay, cc
m hnh bng thi gian thc ang c s dng rt rng ri, ngoi vic gip
ngi quan st hnh dung c v tr tng i ca vt th trong khng gian 3
chiu, bng cn gp phn lm cho bi cnh tr nn gn gi vi thc t hn.
Nhn thc c tm quan trong ca vic bng thi gian thc, hng lot cc
thut ton v bng ang c pht trin. Hng lot cc thut ton ra i m i
i vi n l cht lng v tc , trong c 2 thut ton c s dng nhiu
trong vic dng hnh 3D thi gian thc l Shadow Volume v Shadow Map. Bo
co trong phn ny s cp ti c s l thuyt v p dng ca thut ton Shadow
Volume trong Nwfc Engine.
4.2.1. C s l thuyt
Vng bng ti (Shadow Volume)
Vng bng ti (shadow volume) ca mt vt th l 1 khi khu vc trong khng
gian b bao ph bi bng ti ca vt do mt ngun sng pht ra. Khi dng hnh,
tt c cc vt th khc nm trong vng bng ti u khng c chiu sng bi
ngun sng to ra vng ti .
Mi shadow volume ca vt th c cu to bi 3 phn, phn trc (front cap),
phn sau (back cap), v phn cnh (side). Phn trc v phn sau ca shadow
volume c to bi chnh vt th chn sng: phn trc c cu to bi tt c cc
mt hng v pha nh sng, cn phn sau th ngc li bao gm cc mt hng
ngc li vi hng nh sng nhng c di chuyn ra xa khi ngun sng theo
phng nh sng cu thnh vng bng ti, khong di chuyn ny phi ln
- 56 -
Thc t vic tm cnh bao c pht trin thnh 2 thut ton hon ton ring
bit.
- 57 -
u im:
n gin do s dng CPU thc hin.
Shadow volume to ra c s mt ti thiu, render nhanh.
Khuyt im:
Tc chm do phi tnh ton nhiu.
Skinning (dng cho din hot khung xng) phi thc hin trc trn CPU.
Thut ton 2: To ra mt vt th mi (shadow volume mesh) t vt th chn
sng nhng c thm cc mt c b sung cc cnh, ri dng Vertex Shader
to hnh khi ca shadow volume.
u im:
Tc nhanh do thc hin ngay trn GPU (Vertex Shader), gii phng CPU.
C th thc hin skinning trn phn cng.
Khuyt im:
Phc tp do thut ton to vt th mi, vic tnh ton chm.
Phi s dng thm Vertex Shader.
Shadow Volume c s mt to ra ln hn rt nhiu so vi vt th gc, render
s chm hn.
- 58 -
- 59 -
- 60 -
Sau khi v shadow volume bng thut ton trn tt c cc im trong bi cnh b
ph bi bng ti c gi tr trong stencil buffer khc 0 trong khi cc im khc th
bng 0. Sau y l hnh v minh ha cho thut ton dng bng ti (z-fail)
Trong hnh v trn vt mu cam biu din cho vt th nhn bng ti, vt mu
xanh l vt th chn sng. Cc khu vc A, B, C, D, E l 5 khu vc s c dng
hnh m c s nh hng ca shadow volume. Cc gi tr cc vng l gi tr trong
stencil buffer thay i khi mt trc (front face) hay mt sau (back face) ca
shadow volume c v vo frame hnh. Ti khu vc A v E, mt trc v sau khi
v u khin gi tr trong stencil buffer khng i do trong 2 khu vc ny vt nhn
bng ti (mu cam) v vt chn sng (mu xanh) gn mt hn nn lm cho vic
kim tra su tht bi khin gi tr trong stencil buffer trung ha v 0. Trong khu
vc B v D, mt trc s vt qua s kim tra su trong khi mt sau th tht bi,
v th gi tr stencil ti cc vng ny s mang gi tr 1 (do ch c mt sau lm stencil
buffer thay i m thi). khu vc C, c mt trc v sau u vt qua s kim tra
su, nn khng lm cho gi tr trong stencil thay i. Khi kt thc qu trnh v
shadow volume th stencil khu vc B, D khc 0, cho thy B v D nm trong vng
bng ti ca vt chn sng.
- 61 -
Khi thc hin Vertex Shader tt c cc vertex khng hng v ngun sng s b
y ra xa theo hng nh snh, hnh thnh vng bng ti (shadow volume).
- 62 -
4.2.3. Mt s kt qu t c
Vic s dng hiu ng ny trong Game demo t hiu qu rt cao do gn vi
thc t. Nu khng c bng, cc vt th c v l lng trong khng gian, nhng
nu c bng cht lng hnh nh tng ln r rt. Cc cnh sau y c chp
t Game demo.
- 63 -
- 64 -
Hnh 4-9 Texture lin nhau cc cnh dng cho sky sphere
- 65 -
POSITION;
float2 texcoord
TEXCOORD0;
float4 position
POSITION;
float4 color
COLOR0;
float2 texcoord
TEXCOORD0;
};
struct VS_OUTPUT {
};
- 66 -
{
VS_OUTPUT o;
// Skybox local transform
float3 worldPos = mul( float4( i.position.xyz, 0 ), cModel[0] );
// Vertex world position = eye position
worldPos += cEyePos;
// Transform vertex to projection space
float4 projPos = mul( float4( worldPos, 1 ), cViewProj );
// Sky is far away, so depth value = 1.0f
projPos.z = 0.9999f * projPos.w;
o.position = projPos;
// Final color
o.color = 1.0f;
o.texcoord = i.texcoord;
return o;
}
Trc tin ta phi bin i sky box bng ma trn th gii, vic ny c v nh l
khng cn thit v ta s s dng v tr ca mt (hay camera) lm v tr cho skybox.
Nhng thc t cng vic ny cho php ta trin khai 1 s thuc tnh ban u cho
skybox nh cao i vi tm mt, phng i
Sau khi cng thm ta ca mt vo, ta phi bin i vertex vo khng gian
chiu bng cch nhn vi ma trn View * Projection.
V skybox rt xa nn ta cho su = 1.0f ( cc im nh ca skybox khng
th vt qua gi tr su ca cc im nh khc khi kim tra su (depth test))
cng on ny phi nhn vi projPos.w v chun b cho giai on chun ha h
ta thun nht sau khi kt thc Vertex Shader.
4.3.3. Mt s kt qu t c
Khung cnh bu tri c v ra m bo ng cc c tnh ca bu tri trong
thc t, cho d ta c di chuyn camera th no i na, ta cng khng th i xuyn
qua bu tri c. Cc cnh sau y c chp t Game demo.
- 67 -
- 68 -
- 69 -
Normal map l g?
Normal map l mt texture nhng c c tnh kh c bit, thay v cha thng
tin v im mu nh texture thng thng, normal map lai cha thng tin v khng
gian tip tuyn (tangent space) hay khng gian texture (texture space) ca vt th,
hay ni cch khc nu cc im nh ca texture biu din mu sc ca vt th ti 1
im th normal map s biu din khng gian tip tuyn ca vt th ti im .
Mi im nh ca normal map c nh dng l RGBA trong 3 thnh phn
RGB c gi tr [0..1] c nh x t 3 trc U, V, W c gi tr trong khong [-1, 1].
Normal map c th to ra bng 2 cch, dng height map (texture dng graycale
cha thng tin su v b mt ca vt th trong mu sng hn biu th cao
ln hn). Cch th 2 phc tp hn do phi to thm 1 vt th khc c chi tit cao
hn, sau ta so snh s khc nhau gia 2 vt th to ra normal map (qu trnh
ny c th c thc hin bng tool Melody ca NVidia).
- 70 -
Hnh 4-16 To normal map t vt th c chi tit cao hn bng Melody (NVidia)
Trong
normal. Vector php tuyn (normal vector) ti im , normal vector c
c do ly mu t normal map.
light vector. Vector hng nh sng trong khng gian tip tuyn (tangent
space), vector ny c tnh trong Vertex Shader v c truyn vo Pixel Shader
s dng.
vertex color. Mu ca vertex sau khi thc hin chiu sng trn vertex (pervertex lighting) trong Vertex Shader.
texture color. Mu ca texture chnh, c c do ly mu texture.
- 71 -
Hnh 4-17 Chiu sng theo tng vertex trong Vertex Shader
Hnh 1. Chiu sng trn tng pixel (s dng tch v hng gia normal v
vector hng nh sng).
Hnh 2. Sau khi kt hp vi ly mu t texture chnh.
Tnh ton mu specular (s dng specular map)
Specular map l g ?
Specular map l texture dng grayscale, specular map c tc dng cho bit vng
no ca vt th phn chiu nhiu nh sng vng no phn chiu t nh sng (tng
ng vi mu trong specular map t sng ti ti).
Tnh phn chiu ca nh snh
phn chiu (phn x) ca nh sng trn vt th th ph thuc v tr ca mt
(hay camera). Khi mt nm ngay trn ng phn x ca nh sng th mt s nhn
- 72 -
thy mt vng nh sng chi do ton b nng lng ca nh sng c truyn thng
vo mt.
Trong :
L. Light vector
R. Reflection vector
N. Normal
Mc phn chiu ca nh sng ph thuc rt nhiu vo cht liu b mt ca
vt th, cc b mt nhn bng c phn chiu ln trong khi cc b mt g gh li
c phn chiu thp. trnh cng vic phi phn r vt th ra thnh nhiu thnh
phn dng hnh vi cc mc phn chiu khc nhau ngi ta dng specular map
nh mt lookup table xc nh mc phn chiu ca nh snh trn tng im
nh.
reflection vector = 2 * dotproduct (normal, light vector) * normal - light vector
specular factor = dotproduct (reflection vector, view vector)
specular color = (specular factor ^ specular constant) * specular lookup
Trong
normal. Vector php tuyn (normal vector) ti im , normal vector c
c do ly mu t normal map.
- 73 -
light vector. Vector hng nh sng trong khng gian tip tuyn (tangent
space), vector ny c tnh trong Vertex Shader v c truyn vo Pixel Shader
s dng.
view vector. Vector tnh t mt n im nhn (ta trong khng gian tip
tuyn), vector ny c tnh trong Vertex Shader v truyn vo Pixel Shader s
dng.
specular constant. Hng phn chiu, gi tr cng ln th vng phn chiu
cng nh.
specular lookup. Cho bit mc
phn chiu ca im , gi tr ny
c c do ly mu t specular map.
Sau khi thm phn chiu anh sng
vo xe trng nh l c cu to t kim
loi, do s phn chiu gp phn tng
ng k cht lng ha.
- 74 -
- 75 -
Pixel Shader
...
struct PS_INPUT {
float4 color
:
COLOR0;
float4 ambient
:
COLOR1;
float2 baseTexCoord :
TEXCOORD0;
float3 light_vector :
TEXCOORD1;
float3 view_vector
:
TEXCOORD2;
};
struct PS_OUTPUT {
float4 color
:
COLOR0;
};
PS_OUTPUT main( PS_INPUT i )
{
PS_OUTPUT o;
// Sampler normal value from normal map
float3 bump
= tex2D( bumpSampler, i.baseTexCoord );
float3 localNormal = normalize( (bump * 2.0f) - 1.0f );
// Normalize light vector and view vector
float3 normalize_light_vector
= normalize( i.light_vector );
float3 normalize_view_vector
= normalize( i.view_vector );
// Calculate light factor by dot normal with light vector
float4 n_dot_l = dot( localNormal, normalize_light_vector );
// Calculate the specular reflection vector from light and normal
float3 haft_angle=dot(normalize_light_vector,localNormal)*localNormal;
float3 reflection_vector = haft_angle* 2.0f - normalize_light_vector;
// Calculate the specular factor and specular color
float specularFactor =
pow( dot(normalize_view_vector, reflection_vector), 2.0f );
// Sampler specular lookup table value from specular map
float3 specular = tex2D(specularSampler,i.baseTexCoord) * 2.0f;
- 76 -
4.4.3. Mt s kt qu t c
Cc nh sau y c chp t Engine thi gian thc.
Xe khi c dng hnh bng Fixed Function, do texture khng c chiu sng
trc nn xe dng c rt ti, hu nh ta khng th thy c chi tit ca xe. Gii
thch cc giai on dng hnh (t tri qua phi, t trn xung di).
Cc nh (vertices) trong b nh c dng wire frame nh trn hnh.
Xe sau khi c chiu sng trn tng nh (per-vertex lighting).
- 77 -
Xe khi c dng hnh bng Vertex Shader v Pixel Shader bng cch chiu
sng trn im nh (per-pixel lighting) cht lng hnh nh cao hn hn. Texture
c chiu sng trn tng im nh nn ta c th thy c hu ht cc chi tit
ca xe. Gii thch cc giai on dng hnh (t tri qua phi, t trn xung di).
Cc nh (vertices) trong b nh c dng wire frame nh trn hnh.
Xe sau khi c chiu sng trn tng nh (per-vertex lighting) theo
ngun sng.
- 78 -
Xe sau khi x l pixel, thc hin chiu sng trn tng im nh dng normal
map.
Xe sau khi p texture b mt. Ta thy xe vn cn thiu mt s phn chiu
nh sng.
Xe sau khi thc hin nh sng phn chiu dng specular map.
Xe sau khi thc hin kt hp vi nh sng mi trng 6 mt (ambient light
cube).
4.5. Tm tt
Trong chng 4 chng ti trnh by chi tit cc thut ton Vertex Shader v
Pixel Shader dng dng hnh 3D trong Nwfc Engine. Cc thut ton ny m
bo cht lng dng hnh ca Nwfc Engine nh tht v thi gian thc hin nhanh.
Hai chng tip theo (5 v 6) s trnh by v vic tm hiu v xy dng 2 h
thng din hot v vt l. y l 2 h thng xy dng kt hp vi Nwfc Engine
to ra ng dng Game hon chnh.
- 79 -
Chng 5
- 80 -
- 81 -
Tp tin md5
- 82 -
- 83 -
Mc ch
Sau khi tm hiu cu trc ca tp tin md5 ta cn phi c v x l c d
liu trong tp tin c th s dng trong chng trnh.
Cch gii quyt
Trc ht ta phi xy dng nn cc cu trc d liu lu tr d liu tng qut
khi cn ta c th thay i c nh dng tp tin lu tr m khng nh hng
n logic chng trnh. Cc d liu 3D c trng cn phi np t tp tin md5 phi
t chc thnh cc d liu cu trc:
Cc d liu v khp: ch s, tn, ch s khp cha, tn khp cha, vector ch v
tr ban u, quaternion xc nh gc quay ban u.
- 84 -
- 85 -
- 86 -
5.2.2.2.
T chc d liu
- 87 -
- 88 -
Bn cnh vic xy dng din hot cho bn thn khung xng, trong nhiu tnh
hung ta cn p t nhn vt di chuyn theo mt l trnh no . c th thc
hin c ta s qui nh ra mt l trnh trong gm nhiu con ng kt ni vi
nhau. Vic s dng ng nh hng cho nhn vt l tu chn.
5.2.3.2.
- 89 -
i vi ng cong Bezier:
Mt ng cong Bezier c xc nh bng 4 im: im u, im cui v 2
im iu khin. V d ta c ng cong Bezier sau:
- 90 -
- 91 -
- 92 -
- 93 -
- 94 -
din hot c kch hot. Ti lp ny ta c th thc hin cc chc nng nng cao
nh kt hp cc din hot vo mt khung xng.
5.2.5. Kt hp cc din hot
5.2.5.1.
Gii thiu:
y l kh nng cho php ta kt hp nhiu chuyn ng ring bit li thnh 1
chuyn ng kt hp.
L do xy dng:
i vi mt m hnh v d nh mt nhn vt trong Game do nhiu yu t rng
buc nh thi gian thc hin v khng gian lu tr nn ta ch xy dng cho nhn
vt mt s cc din hot c bn m thi. V d nh ta c mt qui vt th ta ch
c th to cho chng cc din hot c bn nh ng, i, chy, tn cng, cht, lch
qua tri, lch qua phi. Nhng trong Game i khi ta c nhu cu nhn vt thc hin
cc din hot phc tp l s kt hp ca nhiu din hot ring r v d nh nhn vt
va i va bn sng c kt hp t hai din hot ring bit l i v bn sng. T
nhu cu nh vy Game Engine phi c chc nng cho php ngi lp trnh thc
hin vic kt hp cc bin i ny. Vi chc nng kt hp cc din hot th t mt
tp cc din hot nh ta c th to ta mt t hp nhiu din hot khc nhau.
Cch thc thc hin:
Mt chuyn ng ca khung xng n thun ch l cc ma trn bin i cho
cc khp ca khung xng. S bin i gm c s dch chuyn, s quay v bin i
t l. Mt xng th chuyn ng quay xung quanh mt khp, ch c khp gc l
chuyn ng tng i so vi th gii m thi.
to c s kt hp chuyn ng th ta s to se s kt hp gia cc ma trn
kho ca nhiu chuyn ng. Ch rng ma trn kt hp l khng th giao hon
c c ngha l th t kt hp l quan trng. Nu mun nhn 2 s bin i c s
- 95 -
quay v chuyn dch th bn phi kt thc bng mt bin i cui theo th t: quay,
chuyn dch, quay v cui cng l chuyn dch.
thc hin ng th chng ta phi cng cc s bin i thay v nhn. V d
nh c 2 bin i l quay v chuyn dch cn phi kt hp vo mt chuyn ng th
vic cng cc bin i l hp l.
Tm li, khi thc hin kt hp cc chuyn ng ta cn bit cc thng tin v t l
kt hp ca cc chuyn ng vo chuyn ng chung. Khi yu cu cp nht li din
hot ta s tnh ton ra cc ma trn ni suy cho tng din hot ti thi im . Sau
khi c cc ma trn ni suy ca tng din hot ta s thc hin cng tt c ma trn
ni suy ny li vi t l ng gp vo chuyn ng c bit.
5.2.5.2.
Gii thiu:
i khi trong mt h thng khung xng khng ch c mt chuyn ng duy
nht m c nhiu chuyn ng trong . V d nh phn khung xng ca mt thn
th, c th phn di (bng n chn) thc hin din hot chy, phn thn trn (t
bng ln c) li thc hin din hot bn sng. Nh vy gia 2 phn thn trn v
thn di thc hin 2 din hot khc nhau. Phn din hot phn thn di phi c
tc ng nht nh ln phn thn trn v ngc li. Nu nh chng ta khng thc
hin kt hp hay iu ha din hot ti bng (ni giao nhau gia 2 din hot) th
nhn vt s chuyn ng rt khng t nhin. Kt hp din hot trong cc phn
khung xng chnh l kt hp cc din hot khc nhau trong mt khung xng
to ra hiu ng t nhin.
L do xy dng:
Vic xy dng chc nng phi hp din hot gia cc thnh phn trong cng
khung xng s gii cho php ta thc hin nhiu din hot cho cc phn trong cng
khung xng m vn m bo tnh t nhin.
- 96 -
- 97 -
- 98 -
- 99 -
5.3.2.2.
Cc lp qun l ng dn
- 100 -
Lp CAnimation: Qun l thng tin v thc hin din hot cho mt khp ca
cu trc khung xng. Lp ny s chu trch nhim cp nht li v tr v gc quay
cho khp xng trong din hot.
Lp CAnimationSet: Qun l thng tin v thc hin din hot cho tt c cc
khp trong khung xng. Tht s lp ny s bao gm tp cc i tng thuc lp
CAnimation. Lp ny phi qun l c thng tin chung cho mt din hot.
Lp CAnimationController: y l lp bao bc qun l tt c thng tin din
hot cho mt i tng. Trong lp ny ta thc hin khi to d liu, chn din hot,
phn thnh cc knh din hot, thc hin v hiu chnh thng tin din hot, v phi
hp cc din hot khc nhau trn cng mt i tng.
5.4. Tm tt
H thng din hot l mt thnh phn ht sc quan trng trong vic xy dng
Game. Da trn c im v yu cu ca mt h thng din hot v vic tham kho
nhiu Game Engine nh Half-live, Cal3D v NeoEngine, chng ti phn tch,
thit k v xy dng ln mt h thng m bo c tc , tnh trong sng d s
dng, kh nng m rng cao, v cung cp ra cc chc nng nng cao cho php gii
quyt c nhng tnh hung din hot trong Game.
- 101 -
Chng 6
- 102 -
- 103 -
- 104 -
- 105 -
- 106 -
- 107 -
tng hp cng kch ca NovodeX bao bc n li. Vic x l va chm hay vic
m phng chuyn ng cho khi hp l do h thng NovodeX qun l thng qua
khi hp bao i tng. Sau khi h thng NovodeX x l ri th ta ly s bin i
ca khi hp bao bc cp nht li trng thi cho khi hp trong Game.
- 108 -
- 109 -
- 110 -
enum EGAME_GROUP
{
GROUP_NON_COLLIDABLE,
GROUP_COLLIDABLE_NON_PUSHABLE,
GROUP_COLLIDABLE_PUSHABLE,
};
- 111 -
cp
kh
nng
qun
nhn
vt.
Nh
vic
xy
dng
lp
- 112 -
- 113 -
6.5. Tm tt
Engine vt l ngy cng l mt thnh phn quan trong trong xy dng Game.
Vt l to ra b mt mi cho Game, lm cho Game thm sng ng v chn
thc. Vi vai tr quan trng ca vt l nh vy, chng ti tm hiu v s dng
Engine vt l NovodeX trong Game ca mnh. Nh c h thng vt l m qu trnh
xy dng Game gim bt nhiu cng sc v tng tnh hiu qu bi v cc vic kim
tra va chm c NovodeX xy dng v ti u trn phn cng.
Ngoi vic qun l vt l cho cc i tng tnh v ng trong Game, h thng
vt l xy dng da trn NovodeX 2.2 cho php iu khin nhn vt rt thun tin
v da vo xy dng c cc AI n gin cho nhn vt. Vi vic kt hp vi
tia chiu do NovodeX cung cp, chng ta iu khin tt nhn vt trong mi tng
tc vi cc i tng khc trong mi trng v c th nhm v bn n chnh xc.
- 114 -
Chng 7
- 115 -
- 116 -
- 117 -
- 118 -
"matlibs/gui/hud_lib.nmt"
ammo_panel
[ 0 , 0 , 256 , 64 ]
rb
[ 0.39 , 0.57 , 0.64 , 1.0 ]
[ 204 , 30 ]
ammo_filler
[ 0 , 0 , 128 , 64 ]
rb
[ 0.0 , 1.0 , 0.0 , 1.0 ]
[ 0 , 0 ]
smoke
blood_pray
4
point
0
0.1
20
5
200
c_size
c_speed
c_spin
c_life
c_dir
8.0
5.0
0.0
2.0
[ 0.0, 1.0, 0.0 ]
c_sizevar
c_speedvar
0.5
0.5
- 119 -
"matlibs/sfx/smoke_lib.nmt"
c_spinvar
c_lifevar
c_dirVar
0.0
0.5
0.5
c_start_color
c_end_color
item
{
23_1
object
pos
rot
sensor_range
open_time
delay_time
sound
{
}
. .
tbox1
[ -183 , 66 , 79 ]
[ 0 , 120.219 , 0 ]
deldoor1
[0, 15.993, -151.98] [-85.962, 15.993, -151.98]
[ 0 , -90 , 0 ]
60
1.0
1.0
open "sound/door/open3.wav"
close "sound/door/close4.wav"
medkit
object
medkit_large
- 120 -
pos
rot
affect_range
sleep_time
sound
{
}
. . .
affect
"sound/voice/voc_yeah_right.wav"
}
. . .
hellknight_b
gob_drop
rotate_speed
jump_height
2.0
35.0
extents
skinwidth
slopelimit
stepoffset
mass
tongue3
hellknight_a
// animation
idle_a
sight_a
move_a
attack1_a
attack2_a
pain_a
death_a
idle2
roar1
walk7
leftslash
turret_attack
headpain
pain1
// AI attribute
sight_range
attack_range
max_health
300
60
2400
// sounds
sound
{
revive
100
100
sound/hellknight/hk_chatter_01.wav
- 121 -
sight
attack1
attack2
pain
death
sound/hellknight/sight2_3.wav
sound/hellknight/chomp1.wav
sound/hellknight/chomp1.wav
sound/hellknight/hk_pain_01.wav
sound/hellknight/die2.wav
- 122 -
Chng 8
- 123 -
- 124 -
- 125 -
- 126 -
- 127 -
Trong :
hng nhn. Hng nhn hin thi ca qui vt.
vector khong cch ti ngi chi. Biu din sai bit gia v tr hin
hnh ca ngi chi v v tr ca qui vt.
gc cn quay hng v ngi chi. Gc biu din s sai bit gia vector
hng nhn hin hnh v vector khong cch ti ngi chi.
- 128 -
Cc trng thi
Tn trng thi
ngha
Di chuyn ( tn
cng) (Assault)
au n (Pain)
Tn cng (Attack)
Cht (Death)
Qui vt b cht
Bng 8-1 Cc trng thi ca qui vt
- 129 -
Cc hnh ng
Tn hnh ng
ngha
B thng
Mu = 0
Mu ca qui vt = 0
vt
phm vi tn cng
Ngi chi ra khi V tr ca ngi chi nm ngoi phm vi nhn thy ca qui
phm vi nhn thy
vt
(nhng trong
phm vi nhn thy)
Bng 8-2 Cc hnh ng ca qui vt
8.3. Tm tt
Trong chng ny chng ti trnh by 2 thnh phn c sc mang li nhng hiu
ng trong Game Dead Rising l h thng ht v AI. Bn cnh vic dng hnh cht
lng cao ca Nwfc Engine, s h tr t cc h thng, h thng vt l th 2 thnh
phn ny to ra nhng c trng ring bit cho tr chi. Chnh 2 thnh phn ny s
to sc thu ht mnh m ln ngi chi. Trong chng tip theo ta s c gii
thiu v ci t, s dng Game demo Dead Rising v mt s kt qu t c.
- 130 -
Chng 9
Ci t v hng dn s dng
- 131 -
- 132 -
Cc kt qu v ng dng
Game hon ton c th tng tc vi ngi chi do s dng Engine vt l h
tr.
Ch pht trin nhiu chi tit nh nht trong tr chi (nh ca t ng m,
v n vng ra ngoi, thay i hnh dng khi mu gim..) lm tng tnh hp dn cho
tr chi.
Game c cp tng dn theo thi gian.
AI tuy nh nhng linh hot, gp phn khng nh vo s hp dn ca Game.
9.3. Hng dn s dng
9.3.1. Cc phm iu khin
iu khin ton cc
No
0
1
2
Phm
Tab
Space
Esc
Tc dng
Chuyn i camera (i theo ngi chi hay t do)
Vo ch chi (trong mn hnh intro v credit)
+ Hin th mn hnh credit (trong mn hnh intro)
+ Thot khi tr chi (trong mn hnh credit)
Bng 9-1 Cc phm iu khin ton cc
iu khin nhn vt
No
0
1
2
Phm
W
S
A
5
6
7
R
F
Shift
Space
Tc dng
i thng v pha trc
i li v pha sau
Xoay v hng bn tri, c th kt hp vi phm W va
i va xoay
Xoay v hng bn phi, c th kt hp vi phm W va
i va xoay
Bt tt ch nhm, ch ny tc xoay ch bng
tc thc t, do khi mun xoay tr nhanh phi quay li
ch bnh thng
Np li n
Bn
Ko di tia lazer nhm (ch c tc dng khi trong ch
nhm phm Q), ch ny tc xoay ch bng tc
thc t
Nhy cao, c th kt hp vi cc phm W, S, A, D va
nhy, va xoay va di chuyn
Bng 9-2 Cc phm iu khin nhn vt
- 133 -
Phm
Page Up
Page Down
Home
RMB
Tc dng
Di chuyn camera ln cao
Phm
Tc dng
Di chuyn camera v pha trc
Up
Down
Left
Right
Home
Page Up
Page Down
RMB, LMB,
Xoay hng t do
MMB
Bng 9-4 Cc phm iu khin camera ch t do
- 134 -
9.3.2. Cc ch chi
Khi bt u chi ngi chi s vo mn hnh gii thiu (intro).
- 135 -
- 136 -
Khi chi ngi chi hon ton c th tng tc vi vt th xung quanh, Engine
vt l c s dng trong Game s m bo qu trnh va chm ny theo ng cc
nh lut vt l.
- 137 -
- 138 -
im nhn trong tr chi chnh l khu sng m ngi chi s dng. Khu sng
c thit k rt nhiu chi tit nhm tng cng tnh thc cho Game. Khi bn, khi
t khu sng s bc ln, ng thi v n vng ra bn ngoi (theo ng cc nh
lut vt l), cng lc nng sng s chp sng v n s bay ra ngoi (v n bay
rt nhanh nn phi ta mi thy c ng n). Khi n va chm vo cc vt
th rn cc tia la va chm s te ra, khi n bn trng cc vt th sng th mu s
phun ra.
- 139 -
- 140 -
Hnh 9-10 Hiu ng nh sng khi qui vt cht hay xut hin
- 141 -
Chng 10 Tng kt
Kt lun
Hng pht trin v m rng
- 142 -
10.1. Kt lun
Trn c s nhng g tm hiu v nm bt c t cng ngh Shaders trn
phn cng, chng em tm cch trin khai cng ngh ny pht trin mt 3D
Engine mi c lp, thch hp cho nhiu loi ng dng. tng cng tnh nng
ha cho Engine, chng em cng nghin cu rt nhiu thut ton Vertex Shader
v Pixel Shader nh Shadow Volume, per-pixel lighting v bc u c
nhng kt qu rt kh quan. 3D Engine c chng em pht trin trn c s tm
hiu v phn tch nhiu kha cnh ca Engine nh phn tch v mt cu trc, phn
tch cch pht trin th vin c lp theo module do Engine ny c th d
dng c nng cp v c th dng li cho nhiu ng dng u cui khc nhau.
Sau khi xy dng xong 3D Engine chng em cn tm hiu v xy dng nhiu h
thng khc nh h thng din hot, h thng vt l, h thng cc hiu ng nhm kt
hp vi 3D Engine to ra cc ng dng Game.
V mt chng trnh, chng em nghin cu v pht trin 1 Game demo minh
ha cho kh nng ca Engine. Game m bo ng cc tnh cht ca mt ng
dng tuy cn cha hon chnh lm. Bng cch pht trin mt h thng tp tin ring
cho Game, cc thnh phn trong Game gi y hon ton c lp vi m ngun
mang li cho Game tnh kh chuyn rt cao nhm gim bt gnh nng cho ngi
lp trnh. Chng em cng tch hp trong Game nhiu th vin nh vt l, m
thanh nhm tng cng tnh hp dn cho Game, gp phn tng cng cht lng
cho sn phm.
Trn c s nhng g t c, chng em hi vng trong thi gian ti s pht
trin Engine thm nhiu chc nng mi ng thi ci tin cc chc nng hin c
tng cng kh nng trin khai ng dng ca Engine sau ny.
- 143 -
- 144 -
PH LC
A. Hng dn s dng chng trnh MeshTools (i km theo Game
Dead Rising)
Chng trnh MeshTools l chng trnh a chc nng c pht trin km theo
Game nhm mc ch h tr x l mt s tc v trn d liu mesh (ch yu l tp
tin .X).
Cc tnh nng h tr:
To shadow volume mesh.
Cc tnh nng h tr to mesh va chm (collision mesh) cho Engine vt l
Novodex
To triangle, convex mesh hay to convex mesh t triangle mesh
To pmap hay height field cho triangle mesh
Giao din chng trnh MeshTools:
- 145 -
Hnh
Chc nng
Khung hin th hnh nh 3D
Thng tin xut ra ngoi cho ngi dng
iu khin hin th trong khung 3D
+ Draw shadow volume: V shadow volume mesh
+ Draw wireframe: V dng khung li
+ Open: M tp tin 3D .X x l
+ Exit: Thot khi chng trnh
Chc nng to shadow volume mesh cho thut ton
shadow volume
+ Shadow it!: Thc hin lu shadow volume mesh
vo tp tin .X.
Chc nng to mesh va chm (collision mesh) cho
Engine vt l Novodex
+ Save as triangles: Lu tp tin dng a gic
+ Save as convex: Lu tp tin dng convex
+ Generate convex: T to tp tin convex t cc a
gic u vo.
+ Cook it!: Lu vo tp tin
Thuc tnh b sung khi chn chc nng Save as
triangles
+ Generate PMap: To thm tp tin cha d liu
PMap
+ Use as height field: Dng i tng nh dng a
hnh
+ Height extent: su ca a hnh (nu dng Use
as height field)
- 146 -
- 147 -
C. Engine vt l NovodeX
S lc v NovodeX:
NovodeX l Engine vt l ca cng ty NVIDIA. NovodeX l mt h thng vt
l c xy dng thnh tng gi ring bit nhm to s d dng trong vic s dng
v tch hp vi cc Engine khc to nn mt Game hon chnh.
NovodeX x l hu ht cc vn c bn ca vt l c in nh v tr, vn tc,
gia tc, momen, lc, chuyn ng quay, nng lng, ng lng, ma st, ny, va
chm. NovodeX cho php chng ta m phng rt nhiu cc thit b, c cu, my
mc, m hnh khc nhau.
Qu trnh pht trin ca NovodeX:
Ngy 25/8/2002 phin bn u tin 1.4 ra i.
Ngy 3/10/2002 phin bn 1.41 vi cc chc nng qun l b nh, km mt
s ti liu v d n mu.
Ngy 8/10/2002 phin bn 1.42 c sa cc li v ci t.
Ngy 15/10/2002 phin bn 1.43 c thm nhiu ti liu hng dn, chnh sa
mt s demo.
Ngy 30/10/2002 phin bn 1.44 ra i, y l phin bn c nhiu i mi
nh thm kim tra va chm mesh-mesh, mesh-plane, V sa cc li trong
ti liu.
Ngy 2/12/2002 phin bn 1.45 thm cc hm trong s l i tng.
Ngy 9/1/2003 phin bn 1.51.
Ngy 21/2/2003 phin bn 1.6 sa v thm cc chc nng trong viewer,
Collision SDK, Rigid Body SDK.
Ngy 1/6/2003 phin bn 1.8 tip tc pht trin tip v cc thnh phn ang
pht trin d dang trong phin bn 1.6.
- 148 -
- 149 -
u xe, thn xa, cc bnh xe. Chng ta cn phi m bo rng cc hnh trong cng
mt actor khng xung t v chm ln nhau.
Thng thng cc actor tnh c nhim v pht hin va chm l chnh do ta
cn phi thm cc hnh vo cho n. Cn cc actor tnh ta th c th dng i din
cho mt im trong lng no do ta c th khng cn thm cc hnh vo
trong n. V mt loi actor na l actor ng hc (kindmatic), y l mt loi actor
c bit ca kiu actor ng c di chuyn trc tip bi ngi s dng.
Cc khp:
Nu khng c cc khp v cc hnh th actor lm c rt t vic. Cc khp
c cung cp ni cc actor li vi nhau. Cc khp lm cho cc actor kt ni vi
nhau cng di chuyn theo mt qui nh no . Trong NovodeX cung cp cho
chng ta nhiu loi khp cc nhau kt ni cc actor, mi khp s c dng kt
ni cc actor theo mc ch s dng ca ta. Cc loi khp ca NovodeX cung cp:
Khp cu (spherical joint):
y l loi khp n gin nht. N gn 2 im hay 2
thnh phn khp vi nhau. Mt v d ta s dng khp
cu l khp vai ca mt c th. Tt nhin chng ta c
th gii hn li gc quay cho khp cu ny.
- 150 -
- 151 -
- 152 -
- 153 -
[2]
[3]
[4]
[5]
[6]
[7]
[8]
William Ford, William Topp, Data Structures with C++ Using STL
Second Editor, Prentice Hall, 2002.
[9]
[10]
[11]
[12]
[13]
Website: http://www.obrazstudio.com/gaudio/.
[14]
Website: http://www.novodex.com.
[15]
Website: http://sourceforge.net/.
[16]
Website: http://www.Gamedev.net.
[17]
Website: www.flipcode.org.
[18]
Website: www.doom3world.org.
[19]
Website: www.ati.com.
[20]
Website: www.nvidia.com
- 154 -