You are on page 1of 166

TRNG I HC KHOA HC T NHIN

KHOA CNG NGH THNG TIN


B MN CNG NGH PHN MM

NG THI AN

0112085

NGUYN NH TON

0112287

NGHIN CU V XY DNG TH NGHIM


3D ENGINE

KHA LUN C NHN TIN HC

GIO VIN HNG DN


T.S DNG ANH C
Th.S TRN MINH TRIT

NIN KHA 2001-2005

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 -

Engine v ng dng Game demo Dead Rising; phn 4 l chng 10 tm tt kt qu


t c v ra hng pht trin trong tng lai. C th cc chng nh sau:
Chng 1 Tng quan: Tm hiu v Game Engine v 3D Engine.
Chng 2 Vertex Shader v Pixel Shader: y l cng ngh mi nht trong
vic dng hnh 3D hin nay v l cng ngh chnh xy dng nn Nwfc Engine.
Chng 3 Nwfc Engine: Chi tit v 3D Engine c xy dng.
Chng 4 Cc thut ton Vertex v Pixel Shader: cp chi tit n cc
thut ton chnh dng trong Vertex Shader v Pixel Shader ca Nwfc Engine.
Chng 5 H thng din hot (Animation System): Tm hiu v xy dng h
thng qun l cc din hot cho cc i tng trong Game.
Chng 6 H thng vt l (Physics System): Tm hiu v ng dng h thng
vt l NovodeX vo Game.
Chng 7 Gii thiu Game demo Dead Rising: Gii thiu v Game demo
Dead Rising v cc thnh phn xy dng nn Game ny.
Chng 8 H thng ht (Particle System) v AI: Xy dng h thng ht v
AI cho Game demo Dead Rising.
Chng 9 Ci t v hng dn s dng: Ci t, hng dn s dng v mt
s kt qu ni bc ca Game demo Dead Rising.
Chng 10 Tng kt: Cc kt qu t c v hng pht trin.

- 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

Tng quan ............................................................................................ 1

1.1. Game Engine v 3D Engine........................................................................2


1.2. Mi quan h gia Game Engine v Game ..................................................3
1.3. Phn loi Game Engine...............................................................................3
1.3.1. Isometric Engine ...................................................................................3
1.3.2. 3D FPS (First Person Shooter) Engine .................................................4
1.3.3. MMOG (Massive Multiplayer Online Game) Engine..........................4
1.4. Mt s Game Engine hin nay....................................................................5
1.5. Tm tt ........................................................................................................8
Chng 2

Vertex Shader v Pixel Shader .......................................................... 9

2.1. Tng quan..................................................................................................10


2.2. Qui trnh x l ha (Graphic Pipeline) ................................................10
2.3. Vertex Shader............................................................................................12
2.3.1. X l vertex bng Fixed Function Pipeline ........................................12
2.3.2. My o Vertex Shader ........................................................................13
2.3.3. Cu trc ca 1 chng trnh Vertex Shader bng hp ng.................15
2.4. Pixel Shader ..............................................................................................17
2.4.1. X l im nh bng Fixed Function Pipeline ...................................17
2.4.2. My o Pixel Shader ...........................................................................21
2.4.3. Cu trc ca 1 chng trnh Pixel Shader bng hp ng ...................23
2.5. S dng Vertex Shader v Pixel Shader trong chng trnh ....................24
2.6. Gii thiu HLSL........................................................................................27
2.7. Tm tt ......................................................................................................28
Chng 3

Nwfc Engine....................................................................................... 29

3.1. Tng quan..................................................................................................30


3.1.1. L do xy dng ...................................................................................30
3.1.2. Gii thiu ............................................................................................30
3.2. Cc tnh nng ca Nwfc Engine................................................................31
3.3. M hnh xy dng Nwfc Engine...............................................................32
3.4. Cu trc ca Nwfc Engine ........................................................................33

- iv -

3.4.1. Cc thnh phn trong Nwfc module ...................................................34


3.4.2. Cc thnh phn trong RendererDX9 module......................................36
3.5. H thng cht liu (material) ....................................................................37
3.5.1. Gii thiu ............................................................................................37
3.5.2. Cu trc ca h thng cht liu (material) ..........................................38
3.5.3. Material ...............................................................................................39
3.5.4. Textures...............................................................................................41
3.5.4.1. Phn loi texture dng trong Engine ...........................................41
3.5.4.2. Texture flags ................................................................................44
3.5.5. Shader..................................................................................................44
3.5.5.1. Gii thiu tp tin Effect ...............................................................46
3.5.5.2. nh dng tp tin Effect ..............................................................46
3.5.6. S dng Vertex Shader v Pixel Shader trong Engine .......................48
3.5.6.1. Vertex Shader trong Engine ........................................................49
3.5.6.2. Pixel Shader.................................................................................54
3.6. Tm tt ......................................................................................................54
Chng 4

Cc thut ton Vertex v Pixel Shader........................................... 55

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

H thng din hot (Animation System)......................................... 80

5.1. Gii thiu h thng din hot....................................................................81


5.2. Cc vn cn gii quyt .........................................................................81
5.2.1. Tp tin lu d liu din hot...............................................................82
5.2.1.1. Tp tin md5..................................................................................82
5.2.1.2. X l d liu tp tin md5.............................................................84
5.2.2. Vn v khung xng ......................................................................85
5.2.2.1. Gii thiu v khung xng..........................................................85
5.2.2.2. T chc d liu............................................................................87
5.2.2.3. Cp nht v di chuyn khung xng ...........................................88
5.2.3. ng dn nh hng cho din hot.................................................89

-v-

5.2.3.1. Gii thiu v ng nh hng .................................................89


5.2.3.2. Cp nht bin i trn cc ng c bn ....................................89
5.2.4. Vn v qun l din hot................................................................91
5.2.4.1. Cc vn c bn trong din hot ..............................................91
5.2.4.2. T chc qun l din hot ...........................................................93
5.2.5. Kt hp cc din hot..........................................................................95
5.2.5.1. Kt hp cc din hot khc nhau vo khung xng....................95
5.2.5.2. Kt hp cc din hot trong cc phn ca khung xng.............96
5.3. H thng din hot trong thc thi .............................................................99
5.3.1. S lp ca h thng din hot........................................................99
5.3.2. Chc nng cc thnh phn trong s ...............................................99
5.3.2.1. H thng x l d liu.................................................................99
5.3.2.2. Cc lp qun l ng dn........................................................100
5.3.2.3. Cc lp qun l din hot ..........................................................100
5.4. Tm tt ....................................................................................................101
Chng 6

H thng vt l (Physics System)................................................... 102

6.1. Gii thiu h thng vt l........................................................................103


6.2. Cc yu t cn x l trong h thng vt l .............................................103
6.3. Engine vt l NovodeX...........................................................................104
6.4. S dng NovodeX...................................................................................107
6.4.1. Kt hp NovodeX vo Game............................................................107
6.4.2. Ci t NovodeX trong ng dng.....................................................109
6.4.3. Cc thnh phn trong s ...............................................................110
6.5. Tm tt ....................................................................................................114
Chng 7

Gii thiu Game demo Dead Rising.............................................. 115

7.1. Gii thiu Game demo Dead Rising .......................................................116


7.2. Ni dung ct truyn.................................................................................116
7.3. Cc thnh phn chnh cn s dng..........................................................118
7.4. H thng cc tp tin nh ngha ..............................................................118
7.4.1. nh ngha giao din (GUI) ..............................................................119
7.4.2. nh ngha h thng ht (Particle System) .......................................119
7.4.3. nh ngha mn chi (Map level) .....................................................120
7.4.4. nh ngha i tng v AI ..............................................................121
7.4.5. Cc nh ngha khc..........................................................................122
7.5. Tm tt ....................................................................................................122
Chng 8

H thng ht (Particle System) v AI............................................ 123

8.1. H thng ht (Particle System) ...............................................................124


8.1.1. Smoke particle system ......................................................................124
8.1.2. Spark particle system ........................................................................125
8.1.3. Mt s h thng ht c s dng trong Game................................126
8.2. Tr tu nhn to (AI) ...............................................................................127

- vi -

8.2.1. C s l thuyt hnh vi .....................................................................127


8.2.2. S trng thi .................................................................................129
8.3. Tm tt ....................................................................................................130
Chng 9

Ci t v hng dn s dng....................................................... 131

9.1. Mi trng pht trin ng dng v cc cng c .....................................132


9.2. Kt qu t c .....................................................................................132
9.3. Hng dn s dng .................................................................................133
9.3.1. Cc phm iu khin .........................................................................133
9.3.2. Cc ch chi.................................................................................135
9.4. Tm tt ....................................................................................................141
Chng 10 Tng kt ........................................................................................... 142
10.1. Kt lun ...................................................................................................143
10.2. Hng pht trin v m rng ..................................................................144
PH LC

........................................................................................................... 145

TI LIU THAM KHO .................................................................................... 154

- vii -

DANH SCH CC HNH


Hnh 1-1 Vai tr ca Game Engine.............................................................................3
Hnh 2-1 S m t qui trnh x l d liu v hnh nh 3D trn Direct3D ...........11
Hnh 2-2 X l vertex bng Fixed Function Pipeline...............................................12
Hnh 2-3 S l thuyt my o Vertex Shader ......................................................14
Hnh 2-4 Cu trc 1 chng trnh Vertex Shader bng hp ng..............................16
Hnh 2-5 Qui trnh x l i tng c s .................................................................17
Hnh 2-6 Qui trnh x l im nh qua 2 giai on ..................................................18
Hnh 2-7 M hnh x l im nh ca Fixed Function trong giai on 1 ................19
Hnh 2-8 M hnh x l im nh ca Pixel Shader trong giai on 1 ....................20
Hnh 2-9 M hnh l thuyt ca my o Pixel Shader ..............................................21
Hnh 2-10 Cu trc chng trnh Pixel Shader bng hp ng..................................23
Hnh 2-11 Kt qu thc thi chng trnh v d v s dng Vertex shader...............26
Hnh 3-1 M hnh module ca Engine......................................................................32
Hnh 3-2 M hnh cc thnh phn ca Nwfc Engine................................................34
Hnh 3-3 m tr c v ch khung v ch bnh thng.........................38
Hnh 3-4 m tr c v vi cc cht liu khc nhau..............................................38
Hnh 3-5 Cu trc ca material .................................................................................38
Hnh 3-6 Cc mt ca Environment Cube Map........................................................42
Hnh 3-7 Cc loi texture khc nhau.........................................................................43
Hnh 3-8 Cu trc ca 1 Shader trong Engine ..........................................................45
Hnh 3-9 Dng hnh nhiu ln cho ra nh cui cng ...........................................45
Hnh 4-1 M t cc phn ca shadow volume ..........................................................57
Hnh 4-2 Cnh bao c mt mt k hng nh sng cn mt cn li th khng ........57
Hnh 4-3 Dng shadow volume mesh bng cc thm vo cc mt ph ...................59
Hnh 4-4 Chng trnh MeshTools to shadow volume mesh mt cch t ng ....60
Hnh 4-5 Thut ton shadow volume vi k thut z-fail ..........................................61
Hnh 4-6 Bi cnh khng c bng thi gian thc................................................63
Hnh 4-7 Bi cnh c bng thi gian thc ...........................................................63
Hnh 4-8 Shadow volume c v bao trm cc vng ti........................................64
Hnh 4-9 Texture lin nhau cc cnh dng cho sky sphere ...................................65
Hnh 4-10 Texture 6 mt dng cho sky box..............................................................65
Hnh 4-11 Ta ca skybox c cp nht theo ta camera ............................66
Hnh 4-12 Khung cnh bu tri chnh din...............................................................68
Hnh 4-13 Mt gc nhn khc ca bu tri ...............................................................68
Hnh 4-14 Khng gian tip tuyn..............................................................................70

- viii -

Hnh 4-15 To normal map t height map................................................................70


Hnh 4-16 To normal map t vt th c chi tit cao hn bng Melody(NVidia)....71
Hnh 4-17 Chiu sng theo tng vertex trong Vertex Shader...................................72
Hnh 4-18 Chiu sng trn tng im nh trong Pixel Shader .................................72
Hnh 4-19 S phn x ca tia sng trn b mt ........................................................73
Hnh 4-20 Tnh phn chiu trn tng im nh ...................................................74
Hnh 4-21 Tm tt qui trnh per-pixel lighting bng hnh v ...................................74
Hnh 4-22 Cc cng on s dng Fixed Function ..................................................77
Hnh 4-23 Cc cng on s dng Shaders per-pixel lighting .................................78
Hnh 4-24 Kt qu sau cng sau khi b sung mt s hiu ng.................................79
Hnh 5-1 V d cu trc khung xng ......................................................................86
Hnh 5-2 V d ng i thng .................................................................................89
Hnh 5-3 V d ng i Bezier................................................................................90
Hnh 5-4 V d din hot qua cc khung hnh kha..................................................92
Hnh 5-5 S quan h cc lp qun l din hot ...................................................93
Hnh 5-6 Minh ha kt hp chuyn ng cc phn trong khung xng ..................97
Hnh 5-7 S lp ca h thng in hot...............................................................99
Hnh 6-1 V d bao bc i tng Game bng i tng ca NovodeX ...............108
Hnh 6-2 Cc lp chnh trong h thng vt l.........................................................109
Hnh 6-3 iu khin nhn vt vi NovodeX ..........................................................113
Hnh 8-1 c im ca 1 particle dng smoke .......................................................124
Hnh 8-2 c im ca 1 particle dng spark.........................................................125
Hnh 8-3 Mt s h thng ht c s dng trong Game ......................................126
Hnh 8-4 Cc thuc tnh biu din cho hnh vi ca qui vt ..................................128
Hnh 8-5 S trng thi ca qui vt ...................................................................129
Hnh 9-1 Mn hnh gii thiu..................................................................................135
Hnh 9-2 Mn hnh tc gi ......................................................................................135
Hnh 9-3 Mn hnh chi Game ...............................................................................136
Hnh 9-4 Ngi chi s gp nhiu qui vt trong qu trnh chi ...........................137
Hnh 9-5 Cc vt th tng tc vi nhau theo ng cc nh lut vt l................138
Hnh 9-6 Ca t ng m khi ngi chi n gn .................................................138
Hnh 9-7 Nhiu chi tit c thit k cho khu sng .............................................139
Hnh 9-8 Khi bn trng qui vt, mu s phun ra ...................................................140
Hnh 9-9 La bc ln t ngi qui vt..................................................................140
Hnh 9-10 Hiu ng nh sng khi qui vt cht hay xut hin ...............................141

- ix -

DANH SCH CC BNG


Bng 1-1 So snh mt s Game Engine......................................................................7
Bng 3-1 Cc c ca texture .....................................................................................44
Bng 3-2 Cc hng mc nh c bn.........................................................................49
Bng 3-3 Cc t hp ngun sng ..............................................................................52
Bng 8-1 Cc trng thi ca qui vt ......................................................................129
Bng 8-2 Cc hnh ng ca qui vt.....................................................................130
Bng 9-1 Cc phm iu khin ton cc .................................................................133
Bng 9-2 Cc phm iu khin nhn vt .................................................................133
Bng 9-3 Cc phm iu khin camera ch i theo ngi chi ......................134
Bng 9-4 Cc phm iu khin camera ch t do ...........................................134

-x-

MT S T VIT TT

3D

3 Dimension

3 chiu

AI

Artificial Intelligence

Tr tu nhn to

ALU

Arithmetic Logic Unit

n v s hc v lun l

API

Application Program Interface H giao tip lp trnh ng dng

GPU

Graphic Processor Unit

n v x l ho

HLSL

High Level Shader Language

Ngn ng shader cp cao

PS

Pixel Shader

VS

Vertex Shader

- xi -

Chng 1. Tng quan

Chng 1

Tng quan

Game Engine v 3D Engine


Mi quan h gia Game Engine v Game
Phn loi Game Engine
Mt s Game Engine hin nay
Tm tt

-1-

Chng 1. Tng quan

1.1. Game Engine v 3D Engine


Game Engine gm mt tp hp cc thnh phn khc nhau lm nn tng to nn
mt Game (tr chi) trn my tnh. Cc thnh phn c bn bao gm:
H thng ton hc (Math system).
H thng x l tp tin d liu (File system).
H thng hin th ho (Render system).
H thng qun l din hot (Animation system).
H thng x l nhp v xut (Input and Output system).
H thng x l cc tng tc vt l (Physics system).
H thng x l tr tu nhn to (Artificial intelligence system).
H thng x l mng (Network system).
H thng to hiu ng khc nh khi la, m thanh, (Effect system).
Trong cc Game khc nhau th vai tr ca cc thnh phn trn s khc nhau.
Thng thng xy dng Game ta ch cn mt s trong cc thnh phn trn m thi.
Vic xy dng v qun l tt c cc thnh phn trn ca mt Game Engine i hi
mt lng ln thi gian cng nh cng sc v i khi i hi nhiu k thut v kin
thc ca nhiu lnh vc khc nhau.
3D Engine bao gm mt tp cc h thng trong Game Engine nhm gii quyt
cc vn chnh ca ho 3D l dng hnh 3D. Do ti tp trung nghin cu v
xy dng mt 3D Engine nn chng ti tp trung vo xy dng h thng hin th v
h thng qun l tp tin. Ngoi ra, do chng ti hng n s xy dng 3D Engine
Nwfc ca mnh tr thnh Game Engine tht s v hin ti cn cc h thng khc
xy dng Game demo hon chnh nn chng ti cng tm hiu v xy dng mt
s h thng khc ca Game Engine (hin ti cha tch hp vo Nwfc Engine).
Do 3D Engine l mt thnh phn c trng ca Game Engine nn chng ta s
tm hiu v 3D Engine thng qua vic tm hiu v Game Engine.

-2-

Chng 1. Tng quan

1.2. Mi quan h gia Game Engine v Game

Hnh 1-1 Vai tr ca Game Engine

Game Engine chnh l thnh phn ct li lm nn mng xy dng nn Game. S


khc bit gia Game Engine v bn thn Game tng t nh s khc bit gia ng
c v chic xe. Chng ta c th em ng c ra khi xe, chnh sa v dng li. Mt
Game Engine c th c xem nh l mt phn khng ph thuc vo Game, n
cng c th c thay i c lp vi Game m khng lm thay i cu trc logic
ca Game.
1.3. Phn loi Game Engine
1.3.1. Isometric Engine
y l Game Engine dng trong cc tr chi 2D. Cc Game Engine ny hin
nay c mt s phn l 2D nhng mt s phn l 3D v c th trong thi gian sp
n s chuyn hn sang 3D. L do chnh ca vic chuyn i sang 3D l tn
dng cc tnh nng v nh sng (light) v bng (shadow) ln cc i tng 2D.
Cc Game Engine ny thng c s dng trong cc Game chin lc
(strategy) v trong cc th loi Game nhp vai (RPG: Role Game Play Genre). Mt
s Game c xy dng trn Isometric Engine c th k n nh Baldurs Gate 2,
Diablo 2 v Warlords Battle Cry 2.

-3-

Chng 1. Tng quan

Isometric Engine khng phi l mt Game Engine tt cho vic xy dng cc


Game chuyn v ho 3D v cc ng dng thc ti o (Virtual Reality) v n
khng hon ton l mt 3D Engine m ch c mt s chc nng 3D.
1.3.2. 3D FPS (First Person Shooter) Engine
y l Game Engine dng nhiu nht trong cc 3D Game hin nay. Vi s pht
trin vc bt v cng ngh Game trong vi thp nin gn y th ngi dng mong
mun c nhng Game bt mt nht v loi Game Engine ny p ng c nhu
cu .
Mt s trong rt nhiu Game c xy dng trn cc 3D FPS Engine nh:
Doom, Quake, Half Life, Counter Strike, Unreal, Duke Nukem, DeusEx, Halo,
Wolfenstein, Medal of Honor, Serious Sam, Spec Ops, Dessert Storm v Hitman.
3D FPS Engine to ra nhng thay i ln lao trong cc Engine xy dng thc ti
o.
Cc Game Engine ny thng thng cn km theo cc cng c to ra cc sn
phm mang tnh ngh thut v tng tc cao. Cc ng dng to ra cc m hnh 3D
ni ting nh 3DSMax, Maya, v Softimage u c th kt xut (export) kt qu
vo cc Game Engine ny. Cc t trng c bn ca cc Game Engine ny l n h
tr nhiu chc nng nh t bng im (pixel shader), qun l din hot (animation),
m phng vt l, m phng chuyn ng ca cc ht nh (nh bi, la, khi), m
phng cht lng, o qun, v cc hiu ng khc m ta him khi c thy cc 2D
Engine.
1.3.3. MMOG (Massive Multiplayer Online Game) Engine
S khc bit chnh gia cc Game Engine cp v MMOG Engine l Game
Engine ny da trn vic lp trnh trn mng v qun l d liu thng qua mng.
Cc Game xy dng trn MMOG Engine thng cha mt c s d liu ln v
thc hin trn mt mng phn tn v x l cho mt s lng ln ngi chi trong
cng lc. Cng chnh v vy m s ti u trong vic s dng bng thng mng ht

-4-

Chng 1. Tng quan

sc quan trng v c th ni l yu t sng cn ca MMOG Engine. Vic nn d


liu v chn lc d liu truyn trn mng tt c th tit kim c rt nhiu chi ph.
Hu ht cc MMOG Engine hin ny u tng thch v c tch hp vi mt
FPS Engine. Nh vy ngoi cc yu t lin quan n mng th loi Engine ny c
cc chc nng p ng c cc ng dng thc ti o v cc yu t ngh thut c
m bo v y l mt yu t quan trng cc ngi chi hng th ngi hng gi
chi cc Game mng.
Mt s Game c xy dng trn MMOG Engine c th k n nh: Ultima
Online, Ever Quest, Asherons Call v Anarchy Online.
1.4. Mt s Game Engine hin nay
Ngy nay trn th gii c rt nhiu Game Engine. Mi Game Engine c to ra
vi nhng mc ch, c tnh v phc tp khc nhau v do s rt kh khn
cho ngi dng trong vic chn ra mt Game Engine cho chnh mnh s dng. Hu
ht cc Game Engine ngy nay cung cp tt cc tnh nng c bn ca mt Game
Engine v tu thuc vo nhu cu cng nh kh nng m chng ta chn ra mt Game
Engine ph hp cho ng dng ca mnh. Mt s Game Engine tiu biu c th k
n nh: Unreal - $10,000, Quake2 - $10,000, Quake3 - $250,000, Torque - $100,
3D Game Studio $80, Genesis - $10,000, Lithtech - $75,000, Crystal Space
Free, Power Render - 5,500, OpenSceneGraph, XEngine, NeoEngine, OpenApp

-5-

Chng 1. Tng quan

Ta c th c mt s so snh s b gia cc Game Engine v cc chc nng m


chng cung cp cng vi gi tin c chng qua bng tm tt sau:
Game
Engine

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

Chng 1. Tng quan

(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

Bng 1-1 So snh mt s Game Engine

-7-

Chng 1. Tng quan

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. Vertex Shader v Pixel Shader

Chng 2

Vertex Shader v Pixel Shader

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-

Chng 2. Vertex Shader v Pixel Shader

2.1. Tng quan


Cha c khi no m phn cng dnh cho ha 3D pht trin nh hin nay.
Phn cng hin nay pht trin da theo tiu ch nhanh hn, mnh hn, p hn.
Di s tr gip ca cc card ha 3D tin tin, ranh gii gia o v thc ngy
cng tr nn v cng mong manh. Vi s ra i ca cng ngh Vertex Shader v
Pixel Shader trn phn cng, cng nghip lm Game c bc tin nhy vt cha
tng c, cho ra i hng lot Game c cht lng ha y nh tht. Vy u l
iu lm nn th mnh ca cng ngh ny, lm cch no m ta c th ng dng
c n, cu hi s c gii p trong chng ny. Khng i su vo cc kha
cnh khc, ni dung ca chng ny ch yu cp ti kha cnh k thut v l
thuyt ca cng ngh ny.
V cng ngh Vertex Shader v Pixel Shader khng phi l cng ngh c lp
vi mi trng do c s ph thuc vo 3D API c s dng nn trong ton b bo
co ny mi vn lin quan n Shaders u c cp trn mi trng 3D API
Direct3D ca Microsoft (phin bn 9.0c).
2.2. Qui trnh x l ha (Graphic Pipeline)
Cng ngh Shaders gm 2 thnh phn c bn l Vertex Shader (cn c gi l
Vertex Program) v Pixel Shader (hay Fragment Program) l cng ngh c tch
hp sn trn phn cng cho php ngi lp trnh 3D hon ton lm ch qui trnh x
l d liu v hnh nh trn phn cng (Graphic Pipeline). Trong Direct3D, Vertex
Shader v Pixel Shader c gi chung l Programmable Pipeline c th phn
bit vi Fixed function Pipeline. Cn phi ni thm Fixed function Pipeline l qui
trnh x l d liu v hnh nh 3D c cung cp sn ca Direct3D, qui trnh ny
theo mt thut ton dng hnh c nh i vi mi loi d liu 3D u vo. Hnh v
sau y minh ha cho qui trnh x l ha (Graphic Pipeline) ca Direct3D.

- 10 -

Chng 2. Vertex Shader v Pixel Shader

Hnh 2-1 S m t qui trnh x l d liu v hnh nh 3D trn Direct3D

S trn gi gn ton b qui trnh x l 3D trn phn cng ca Direct3D, ton


b qui trnh ny c chia lm nhiu tng x l hon ton ring bit. Nh chng ta
thy trn s ton b qui x l 3D bao gm:
X l d liu nh (Vertex processing). Bin i vertex t khng gian vt
th (model space) sang khng gian chiu (projection space).
X l i tng c s (Primitive processing). Chuyn i d liu vertex
trong khng gian chiu thnh cc d liu c s.
Qu trnh x l im nh (Pixel processing). Chuyn i d liu c s
thnh cc im nh trn mn hnh (Rendered Pixels).
Trc khi i xa hn ta cn nm bt 1 s khi nim hay thut ng chun mn
dng trong phn ny:
Fixed Function Pipeline. Qui trnh x l ha c nh c a ra bi
Direct3D. Qui trnh ny s dng nhiu thut ton 3D x l c nh trn cc d liu
vo (cc thut ton ny l khng th thay i).
Programmable Pipeline. Qui trnh x l ha c s dng Vertex Shader
hay Pixel Shader.
Graphic Pipeline. Qui trnh x l ha 3D ni chung (bao gm lun c
Fixed Function Pipeline v Programmable Pipeline).
Vertex. D liu nh 3D. D liu trong 1 nh gm nhiu thnh phn nh ta
v tr (position), php tuyn (normal), ta texture (texture coordinate), mu
diffuse (diffuse color), mu phn chiu (specular color)

- 11 -

Chng 2. Vertex Shader v Pixel Shader

Pixel. im nh trn mn hnh


Primitive. i tng ha c s nh tam gic, ng thng, hnh trn,
hnh vung
HLSL - High Level Shader Language. Ngn ng Shaders cp cao do
Microsoft pht trin tch hp trong phin bn Direct3D 9.0.
2.3. Vertex Shader
Vertex Shader l chng trnh c vai tr x l d liu vertex khi c thi hnh.
Vertex Shader trn Direct3D ch yu vit bng hp ng v HLSL (c pht trin
k t phin bn Direct3D 9.0). Vertex Shader l cng ngh pht trin theo cc th
h phn cng do n c rt nhiu phin bn khc nhau, cc phin bn cao hn
khng th chy trn cc th h phn cng c nhng ngc li th c. Cc phin
bn Vertex Shader hin ny gm c vs_1_1, vs_2_0, vs_2_x v vs_3_0.
Vertex Shader v Fixed Function s loi tr ln nhau trong khi thi hnh, do ta
phi nm c qui trnh x l vertex ca Fixed Function trc thi c th t vit cho
mnh 1 Vertex Shader nh mun.
2.3.1. X l vertex bng Fixed Function Pipeline
Trc khi tm hiu v Vertex Shader, ta hy xem qua qui trnh x l vertex m
Direct3D cung cp sn thng qua Fixed Function Pipeline.

Hnh 2-2 X l vertex bng Fixed Function Pipeline

- 12 -

Chng 2. Vertex Shader v Pixel Shader

D liu u vo ca qui trnh l d liu nh 3D (vertex) trong khng gian vt


th (model space), trong khng gian ny mi vertex u c ta tnh t gc ta
ca vt th.
Bin i th gii (World transform). Bin i vertex t khng gian vt th
(model space) sang khng gian th gii (world space), cc vertex s c ta tng
i vi nhau trong khng gian th gii
Vertex blending. Bin i ta ca 1 vertex trn nhiu ma trn bin i
th gii khc nhau. Mc tham gia ca mi ma trn c xc nh thng qua gi
tr trng lng (weight) ng vi mi ma trn.
Bin i quan st (View transform). Bin i vertex t khng gian th gii
vo khng gian quan st. V tr ca camera nm gc ta ca khng gian quan
st, sau bin i ny vertex s c ta l ta tng i i vi camera.
Tnh gi tr sng m trn tng vertex (Vertex fog). Tnh ton gi tr mu
sc ca vertex khi p dng hiu ng sng m.
Chiu sng (Lighting and material). Tnh ton nh sng trn tng vertex
da trn mc phn x nh sng ca vertex.
Bin i chiu (Projection transform). Bin i vertex t khng gian quan
st sang khng gian chiu. y l cng on cui cng ca qui trnh bin i.
D liu u ra ca qui trnh ny s l u vo qui trnh x l i tng c s
(Primitive processing).
Ton b qui trnh x l vertex trn ca Fixed Function c th c thay th bng
chng trnh Vertex Shader, khi Direct3D hon ton chuyn giao quyn x l
vertex cho Vertex Shader, Vertex Shader sau khi kt thc s tr quyn iu khin
cng vi d liu x l c li cho Fixed Function Pipeline x l tip.
2.3.2. My o Vertex Shader
bit c cch thit k 1 Vertex Shader trc tin ta cn phi nm c m
hnh my o Vertex Shader (Vertex Shader Virtual Machine). My o Vertex

- 13 -

Chng 2. Vertex Shader v Pixel Shader

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:

Hnh 2-3 S l thuyt my o Vertex Shader

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 -

Chng 2. Vertex Shader v Pixel Shader

Cc thanh ghi c s dng trong Shader u l cc thanh ghi 4 chiu (c th


lu c 4 s thc trong 1 thanh ghi). C 4 kiu thanh ghi, mi kiu c cch s
dng rt khc nhau.
Thanh ghi d liu vo (input registers) cha d liu u vo.
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 Vertex
Shader.
Vi cc thanh ghi ng vai tr lu tr, ALU ng vai tr thi hnh cc lnh, phn
quan trng nht ca Shader chnh l cc vi lnh (instrutions). Vi lnh trong Vertex
Shader ch yu l cc vi lnh ton hc thc hin 1 tc v c th nh tnh tch v
hng (dot product), tch hu hng (cross product), nhn ma trn, tm minmax
Danh sch cc loi thanh ghi cng nh cc vi lnh c th kham tho trong Direct3D
SDK.
2.3.3. Cu trc ca 1 chng trnh Vertex Shader bng hp ng
Vertex Shader nguyn thy c xy dng bng hp ng. Cc ngn ng cp cao
hn dnh cho Vertex Shader ch xut hin sau ny nh HLSL (ch c trong
Direct3D 9.0 tr ln) hay GLSL (c pht trin trong phin bn OpenGL 2.0).
Phn ny s cp ti cu trc 1 chng trnh Vertex Shader vit bng hp ng,
cc ngn ng cp cao s c trnh by cui chng ny.
Mt chng trnh Vertex Shader vit bng hp ng cn bn c chia thnh cc
phn sau y:

- 15 -

Chng 2. Vertex Shader v Pixel Shader

Hnh 2-4 Cu trc 1 chng trnh Vertex Shader bng hp ng

Ch th phin bn (Version Instruction). L thnh phn u tin trong


chng trnh, n cho bit phin bn Vertex Shader c bin dch thnh. Trong v
d trn chng trnh s chy c trn phn cng h tr vs_1_1 tr ln.
Ghi ch (Comments). c dng ghi cc ghi ch trong chng trnh nh
ngha ca d liu cha trong thanh ghi Ghi ch c bt u bng ( // ) hay ( ; )
cho ghi ch 1 dng v ( /* */ ) cho ghi ch nhiu dng.
Cc hng thanh ghi (Constants). Cc hng c nh ngha sau t kho
def. Cc hng thanh ghi c th cha ti 4 gi tr cho mi thanh ghi. Nh v d trn
thanh ghi c8 c gn gi tr l (0, 1, 2, 3). Cc hng thanh ghi cn c th c gn
gi

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 -

Chng 2. Vertex Shader v Pixel Shader

Cc vi lnh (Instructions). Phn cui cng ca 1 chng trnh Vertex


Shader l cc vi lnh hp ng. Mi chng trnh Vertex Shader u phi xut gi tr
ra t nht l vo thanh ghi v tr oPos. Trong v d trn chng trnh xut vo 2
thanh ghi l thanh ghi v tr oPos v thanh ghi ta texture oT0.
2.4. Pixel Shader
Pixel Shader l chng trnh tnh ton v x l mu trn 1 hay nhiu im nh.
Pixel Shader s c thc thi 1 ln cho mi im nh c dng ln mn hnh t
d liu vertex v th Pixel Shader khi chy s tn nhiu thi gian hn Vertex Shader
(ch x l 1 ln cho mi vertex). Pixel Shader c th c vit bng hp ng hay
HLSL. Cc phin bn hin nay ca Pixel Shader gm c ps_1_1, ps_1_2, ps_1_3,
ps_1_4, ps_2_0, ps_2_x v cui cng l ps_3_0.
Cng ging nh Vertex Shader, Pixel Shader khi thi hnh s loi tr vi Fixed
Function, do tm hiu qui trnh x l pixel ca Fixed Function l iu cn thit.
2.4.1. X l im nh bng Fixed Function Pipeline
Sau khi d liu vertex c x l (thnh ta trong khng gian chiu) s c
chuyn qua x l i tng c s (Primitive Processing).

Hnh 2-5 Qui trnh x l i tng c s

Clipping. Loi b cc cc i tng hnh hc khng nhn thy c trong


khi quan st (viewing frustum) tng hiu sut dng hnh.

- 17 -

Chng 2. Vertex Shader v Pixel Shader

Chun ha h ta thun nht (Homogeneous Divide). Chia cc thnh


phn ca d liu cho phn t cui.
nh x Viewport (Viewport Scaling). nh x d liu vo ta trong
Viewport.
X l tam gic (Triangle Setup). Chun b cho vic ni suy tam gic v
bin i cc thuc tnh vertex thnh thuc tnh im nh.
Sau khi qui trnh x l i tng c s hon tt, d liu vertex c ni suy
thnh d liu im nh sn sng c chuyn sang qui trnh x l im nh (im
nh lc ny cha phi l gi tr mu m ch mang cc thuc tnh do tnh ton c
t vic ni suy tam gic m thi). im nh sau s tnh ton kt hp cc thuc
tnh mu sc v ly mu texture to thnh im mu cui cng. Qui trnh x l im
nh bao gm 2 cng on chnh.

Hnh 2-6 Qui trnh x l im nh qua 2 giai on

Giai on 1 bin i d liu ni suy trong vertex (bao gm mu diffuse, mu


specular v ta texture) thnh cc thuc tnh mu ca im nh. Gm c cc
bc sau y:
Ly mu texture (Sample texture). Ly mu 1 hay nhiu texture
Ha mu (Blend colors). Kt hp cc mu trong thuc tnh ca im nh
ch yu l mu c bn (diffuse), mu phn chiu (specular) vi cc mu ly mu t
texture.

- 18 -

Chng 2. Vertex Shader v Pixel Shader

Giai on 2 s chuyn im mu cui giai on 1 thnh im mu cui cng


c dng ln trn mn hnh. Qu trnh ny bao gm cc cng on sau y:
So snh alpha (Alpha test). Tin hnh so snh gi tr alpha xem mu sc
ca im nh c tham gia vo gi tr mu cui cng hay khng.
So snh cp nht vng m su (Depth test). Cp nht vng m
su (Depth buffer) bng su ca im nh nu im nh c v.
So sch stencil (Stencil test). Tin hnh kim tra stencil nu im nh i
v.
Tnh ton sng m (Per-pixel fog). Kt hp gi tr sng m vi mu ca
im nh.
Ha mu da trn alpha (Alpha blend). Tin hnh kt hp mu ca
im nh ang v vi mu ca im nh tng ng trn mn hnh.
Dither. Thc hin chun ha mu.
Hiu chnh Gamma. Thc hin hiu chnh gamma trn im nh cui cng.
Trong qui trnh x l im nh trn, ch c giai on 1 l c th thay th x l
bng Pixel Shader. Pixel Shader sau khi kt thc s tr gi tr mu tnh c cho
Fixed Function Pipeline. Ta hy xem qua chi tit x l trong giai on 1 ca Fixed
Function Pipeline. M hnh l thuyt ca Fixed Function Pipeline nh sau:

Hnh 2-7 M hnh x l im nh ca Fixed Function trong giai on 1

- 19 -

Chng 2. Vertex Shader v Pixel Shader

D liu texture (Texture Data). L d liu ca texture ly t tp tin hay


khung hnh (Render Target).
Sampler. Dng ly mu texture. C ngha l dng ta texture tm
gi tr mu tng ng ti ta . Cc b lc texture (texture filtering) c th lm
nh hng n cht lng mu nhn c (tr ch lc theo im (point
filtering)). Fixed Function Pipeline c tt c 8 samplers.
C ch kt hp a texture (Multitexture Blender) bao gm 8 tng kt hp
(Blending Stage). Cc tng kt hp c sp chng ln nhau sao cho u ra ca u
ra ca tng 0 tr thnh u vo cho tng 1, u ra ca tng 1 tr thnh u vo cho
tng 2 v c th. Mi tng nh vy gi l tng texture (texture stage).
C giai on 1 ny ta c th s dng Pixel Shader x l thay cho Fixed
Function. M hnh l thuyt ca Pixel Shader thay th tng ng vi Fixed
Function nh sau.

Hnh 2-8 M hnh x l im nh ca Pixel Shader trong giai on 1

Theo m hnh trn Pixel Shader cng dng cc samplers ly mu texture,


nhng gi y c ch kt hp a texture (Multitexture Blender) c thc hin

- 20 -

Chng 2. Vertex Shader v Pixel Shader

ngay trong bn thn ca Pixel Shader, bng cch ny cc tc v kt hp (blending)


hon ton c th c lp trnh li. Mt khi s dng Pixel Shader, ta khng cn
phi hiu chnh cc trng thi ca cc tng texture (Texture Stage States) iu
khin c ch kt hp a texture na v mi th c lm trong Pixel Shader.
y chnh l sc mnh ca Pixel Shader: ngi lp trnh khng cn phi tn
nhiu cng sc thit lp cc trng thi cho cc tng texture na, h gi y hon
ton c th t lp trnh ra cc thut ton mi s dng, thm ch hon ton c th
trung chuyn cc lung d liu t vertex shader vo pixel shader (nu dng kt hp
c 2 shader). Tuy nhin vn cn nhng hn ch do ngi lp trnh vn cha can
thip c vo giai on 2 ca qui trnh x l pixel, giai on ny vn cn b s
kim sot ca Fixed function Pipeline. Phn sau ta s xem qua kin trc ca my o
Pixel Shader
2.4.2. My o Pixel Shader
Pixel Shader dng cc ton t ton hc x l d liu bn trong tng im nh
tnh ra gi tr mu sc cui cng ca im nh.

Hnh 2-9 M hnh l thuyt ca my o Pixel Shader

- 21 -

Chng 2. Vertex Shader v Pixel Shader

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 -

Chng 2. Vertex Shader v Pixel Shader

2.4.3. Cu trc ca 1 chng trnh Pixel Shader bng hp ng


Mt chng trnh Pixel Shader c cu to t nhiu dng vi lnh v ghi ch.
Cc vi lnh trong Pixel Shader c b tr nh sau:

Hnh 2-10 Cu trc chng trnh Pixel Shader bng hp ng

Cu trc chng trnh Pixel Shader chia lm 3 phn chnh:


Ch th phin bn (Version Instruction). Cho bit phin bn Pixel Shader
c bin dch thnh
Cc ch th nh ngha (Setup Instructions). nh ngha cc lung d liu
trong cc thanh ghi, cc phin bn sau i hi phi nh ngha c d liu u vo v
u ra.
Cc vi lnh thi hnh. Phn cui cng ca chng trnh l cc vi lnh thi
hnh.
V d 1 chng trnh Pixel Shader
ps_1_1
def c0,
def c1,
def c2,
def c3,
tex t0
mov r0,

// 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 -

Chng 2. Vertex Shader v Pixel Shader

2.5. S dng Vertex Shader v Pixel Shader trong chng trnh


cc phn trc chng ta ch mi tm hiu cch thc hot ng v cu trc ca
1 chng trnh Vertex Shader v Pixel Shader. Nhng Vertex Shader v Pixel
Shader khng phi l 1 chng trnh c lp c th chy 1 cch ring l nh cc
chng trnh Window khc. Vertex Shader v Pixel Shader ch l cc on m my
chy trn GPU c Direct3D iu khin trong chng trnh chnh. Trong phn ny
chng ta s xem qua 1 v d c th c th ng dng Vertex Shader vo trong
chng trnh.
Mun dng Vertex Shader trc tin ta cn to mt d n mi c s dng
Direct3D. Sau tin hnh cc bc sau y:
Cng on khi to bao gm:
Khi to mi trng 3D v khi to cc trng thi dng hnh mc nh
(Render State), to mi giao din IDirect3DDevice9.
Tht k v lp trnh Vertex Shader, bin dch Vertex Shader thnh m my.
// Design a vertex shader
const char* strAsmVertexShader =
"vs_1_1
// version instruction\n"
"dcl_position v0
// define position data in register v0\n"
"m4x4 oPos, v0, c0
// transform vertices by view/proj matrix\n"
";\n"
"";
// Assemble shader
LPD3DXBUFFER pShader = NULL;
D3DXAssembleShader(
strAsmVertexShader,
(UINT)strlen(strAsmVertexShader),
NULL,
// A NULL terminated array of D3DXMACROs
NULL,
// #include handler
D3DXSHADER_DEBUG,
&pShader,
NULL
// error messages
);

- 24 -

Chng 2. Vertex Shader v Pixel Shader

To mi giao din IDirect3DVertexShader9


IDirect3DDevice9::CreateVertexShader.

bng

phng

thc

LPDIRECT3DVERTEXSHADER9 m_pAsm_VS;
// Create the vertex shader
g_pd3dDevice->CreateVertexShader(
(DWORD*)pShader->GetBufferPointer(), &m_pAsm_VS );

To mi giao din IDirect3DVertexDeclaration9 bng phng thc


IDirect3DDevice9::CreateVertexDeclaration.
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_POSITION, 0 },D3DDECL_END()
};
// Create the vertex declaration
g_pd3dDevice->CreateVertexDeclaration( decl, &m_pVertexDeclaration );

To mi giao din IDirect3DVertexBuffer9 bng phng thc


IDirect3DDevice9::CreateVertexBuffer v d liu vertex vo trong buffer, d
liu ny sau s c v ra mn hnh bng Vertex Shader.
// A structure for our custom vertex type
struct CUSTOMVERTEX
{
FLOAT x, y, z; // The transformed position for the vertex
};
// Initialize three vertices for rendering a triangle
CUSTOMVERTEX vertices[] =
{
{-1, -1, 0}, // lower left
{ 0, 1, 0}, // top
{ 1, -1, 0}, // lower right
};
LPDIRECT3DVERTEXBUFFER9 m_pVB = 0;
// Create the vertex buffer. Here we are allocating enough memory
// (from the default pool) to hold three custom vertices
g_pd3dDevice->CreateVertexBuffer(
3*sizeof(CUSTOMVERTEX), 0, 0, D3DPOOL_DEFAULT, &m_pVB, NULL );
// Now we fill the vertex buffer. To do this, we need to Lock() the
// vertex buffer to gain access to the vertices
VOID* pVertices;
m_pVB->Lock( 0, sizeof(vertices), (VOID**)&pVertices, 0 );
memcpy( pVertices, vertices, sizeof(vertices) );
m_pVB->Unlock();

- 25 -

Chng 2. Vertex Shader v Pixel Shader

Sau cng on khi to ta c cc giao din s dng cn thit. Trong hm


render ta cn tin hnh cc bc sau:
Thit lp cc hng cn thit dng trong Vertex Shader vo trong cc thanh
ghi hng (constant registers) bng cc phng thc:
IDirect3DDevice9::SetVertexShaderConstantF,
IDirect3DDevice9::SetVertexShaderConstantI,
IDirect3DDevice9::SetVertexShaderConstantB
// Calculate World * View * Projection matrix
D3DXMATRIX compMat;
D3DXMatrixMultiply(&compMat, &m_matWorld, &m_matView);
D3DXMatrixMultiply(&compMat, &compMat, &m_matProj);
// Transpose the matrix
D3DXMatrixTranspose( &compMat, &compMat );
// Set constant
g_pd3dDevice->SetVertexShaderConstantF( 0, (float*)&compMat, 4 );

S dng IDirect3DVertexDeclaration9 ( to trc ) bng phng thc


IDirect3DDevice9::SetVertexDeclaration
g_pd3dDevice->SetVertexDeclaration( m_pVertexDeclaration);

S dng IDirect3DVertexShader9 ( to trc ) bng phng thc


IDirect3DDevice9::SetVertexShader
g_pd3dDevice->SetVertexShader(m_pAsm_VS);

V d liu vertex trong IDirect3DVertexBuffer9 ra mn hnh


g_pd3dDevice->SetStreamSource(0, m_pVB, 0, sizeof(CUSTOMVERTEX));
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

Tr quyn iu khin v cho Fixed Function thc hin v cc i tng


khc bng phng thc IDirect3DDevice9::SetVertexShader.
g_pd3dDevice->SetVertexShader(NULL);

Kt qu ca chng trnh

Hnh 2-11 Kt qu thc thi chng trnh v d v s dng Vertex shader

- 26 -

Chng 2. Vertex Shader v Pixel Shader

ngha cng nh tham s ca cc phng thc minh ha trn c th xem


trong Direct3D SDK. V d trn y ch minh ha 1 chng trnh Vertex Shader rt
n gin, nhng thc t chng trnh Vertex Shader phc tp hn rt nhiu, lc
vic lp trnh bng hp ng tr nn cc k kh khn nhng mi vic c gii
quyt t khi HLSL (High-Level Shader Language) ra i.
2.6. Gii thiu HLSL
Trc khi DirectX 9 ra i vic vit cc Shader l mt cng vic tht s nng
nhc. Ngi lp trnh phi t qun l mi th t thanh ghi cho n cc vi lnh, h
phi t ti u ha cc cng vic (Vertex Shader v Pixel Shader c gii hn 1 s
lng vi lnh ti a trong 1 chng trnh), l cha k n chng trnh hp ng
rt kh c v kim li. S ra i cc ngn ng cp cao chnh l bc tin ln ca
cng ngh ny gip ngi lp trnh d dng hn trong vic vit cc Shaders.
HLSL c cu trc gn ging ngn ng C nhng c nhiu khc bit do c th
ca cc chng trnh Shaders. u th ca chng trnh vit bng HLSL so vi hp
ng l rt ln v nhng l do sau:
Chng trnh d c v debug hn.
Lp trnh d dng hn do c cu trc gn ging ngn ng C.
Trnh bin dch HLSL s t ng ti u cc lnh, ng thi t qun l cc
thanh ghi c s dng gip gii phng kh nhiu cng sc ca ngi pht trin.
Cc c php v ngn ng ny l kh nhiu v c th xem trong Direct3D SDK.
By gi ta hy xem qua 1 chng trnh Vertex Shader n gin vit bng HLSL.
float4x4 WorldViewProj;
float4 VertexShader_Tutorial(float4 inPos : POSITION) : POSITION
{
return mul(inPos, WorldViewProj);
}

Trong chng trnh ny ta thy c 1 khai bo bin v 1 hm. Bin


WorldViewProj c kiu l 1 ma trn s thc 4x4. y ta khng thy c s khi
to bin do bin ny s c cung cp gi tr t chng trnh chnh, l ma trn
tng hp World * View * Projection. Ma trn ny s c dng bin i vertex
ging nh trong Fixed Function Pipeline m phn trc cp. Hm
VertexShader_Tutorial c 1 gi tr tr v v 1 tham s u c kiu l float4 v u

- 27 -

Chng 2. Vertex Shader v Pixel Shader

c gn ng ngha (semantic) l POSITION. on m ngun trn hon ton


ging ngn ng C ngoi tr kiu d liu v cc ng ngha (semantic). Cc kiu d
liu mi c h tr ch yu l vector v ma trn. Ng ngha (semantic) l thnh
phn mi trong HLSL, ng ngha ca cc bin trong HLSL gip nh ngha loi d
liu s c t ng truyn vo trong cc bin ny khi Shader c thc thi. Trong
v d trn d liu ta v tr (POSITION) ca vertex s c t ng truyn vo
bin inPos chng trnh x l, sau kt qu tr v s c li thanh ghi
cha ta tng ng trong tp cc thanh ghi u ra.
Shaders vit bng HLSL c s dng ging nh cc Shader vit bng hp ng
ngoi tr vic thay v dng hm D3DXAssembleShader bin dch nh chng
trnh hp ng, Shaders vit bng HLSL s c bin dch bng hm
D3DXCompileShader.
2.7. Tm tt
Cc ni dung trong chng ny ch yu gii thiu mt cch s lc v cng
ngh ha Vertex Shader v Pixel Shader ngi c c ci nhn 1 cch tng
qut nht v cng ngh ny. Cc chng sau s cp ti mt s thut ton Shaders
cng nh vic tch hp cng ngh ny trong 3D Engine.

- 28 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

3.1. Tng quan


3.1.1. L do xy dng
Hin hay yu t sng cn i vi cng vic pht trin phn mm chnh l thi
gian. Thi gian cng cao th cng tn nhiu chi ph pht trin, nguy c tht bi
hay hy b l rt ln, ngc li pht trin trong thi gian ngn s mang li li nhun
cho ngi pht trin v c khch hng tn nhim. Cng ging nh cc phn mm
khc, Game cng l 1 phn mm nhng c phc tp rt ln i hi thi gian pht
trin lu di, nu pht li t u th s tn thi gian v chi ph, l cha k n vi
tc pht trin phn cng nh v bo hin nay nu Game pht trin qu lu s tr
nn lc hu v c th dn ti tht bi. Do hu ht cc nh pht trin Game u c
gng dng li ti a nhng g c th dng c, nu h khng c ci dng, h s
mua li ca cc nh pht trin khc chnh v vy cc Game Engine ln ngi.
Game Engine chng t c sc mnh ca n trong cng vic pht trin Game,
rt ngn thi gian pht trin Game, tit kim chi ph ng thi lun h tr cc th
h phn cng mi nht. Hu ht cc Game ln khi ra i u gn mnh vi mt
Game Engine no v d nh Game Haftlife2, Doom3
Mt Game Engine tt khng ch c th m rng v pht trin thm m cn phi
theo kp vi s tin b ca cng ngh nu khng mun sn phm ca mnh tr nn
lc hu. Cng ngh phn cng pht trin ngy nay lm nn cho s bng n ca
cng ngh Shaders (Vertex Shader v Pixel Shader) trn phn cng. Nu m qua
cc Engine mi nht ta u thy chng u h tr cng ngh Shaders, do cng
ngh ny cng l ch hng ti ca cc nh pht trin Engine hin nay.
Nhm pht trin th nghim mt Engine c lp c th dng li cho nhiu ng
dng mc khc h tr cc th h phn cng mi nht cng nh tch hp cng ngh
ha Shaders, Nwfc Engine c pht trin p ng nhu cu
3.1.2. Gii thiu
Nwfc Engine c pht trin nh mt th vin c lp c th dng cho pht
trin Game hay cc ng dng 3D (nh 3D Editor, Level Editor, 3D Viewer).

- 30 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

Th vin qun l v truy xut tp tin.


Th vin debug v qun l li (th vin m ngun m).
H thng giao din lp trnh d s dng v thn thin.
3.3. M hnh xy dng Nwfc Engine
Nwfc Engine c trin khai di dng module (mi module c bao bc
trong 1 DLL), gm nhiu module lin kt li vi nhau. Tng qut ton b h thng
Engine gm 1 module chnh v nhiu module v tinh. Ton b Engine c thit k
theo m hnh plug-in nn hon ton c th c pht trin m rng v nng cp.

Hnh 3-1 M hnh module ca Engine

Module chnh (nwfc.dll). m nhn trch nhim chnh ca ton b Engine.


Cc trch nhim chnh:
y l module chnh v cng l module duy nht giao tip vi ng dng u
cui. ng dng u cui truy xut cc hm trong module thng qua giao din hm
(interface) m module ny cung cp ra ngoi.
Cung cp cc khai bo giao din hm (interface) thng nht cho cc module
v tinh, cc module v tinh s cn c vo cc giao din ny m trin khai ci t
cho ph hp.
m bo s kt dnh ca cc module v tinh vi module chnh hay gia cc
module v tinh vi nhau (gm kt dnh d liu v kt dnh hm).
Trong Nwfc h thng truy xut tp tin l duy nht, do h thng ny s c
chia x cho ton b cc module v tinh s dng. l mt trong cc v d v vai
tr m bo tnh kt dnh ca module chnh.
Cc module v tinh. Gm nhiu module m nhn cc chc nng khc nhau
c th hon ton c lp vi nhau hay ph thuc ln nhau. Cc module ny c

- 32 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

Hnh 3-2 M hnh cc thnh phn ca Nwfc Engine

3.4.1. Cc thnh phn trong Nwfc module


Mesh. Thnh phn m nhn chc nng lu tr d liu 3 chiu m ch yu
l nh (vertex) v ch s (index).
MeshBuilder. C vai tr h tr lp trnh vin, gip h c th sa i hay
thao tc trn d liu 3D c cha trong Mesh mt cch nhanh v thun tin nht.
Texture. L thnh phn x l cc nh b mt texture. Cc texture l cc ti
nguyn chia x (shared resource) v c qun l ni b trong Engine bi s m
tham chiu (reference count).

- 34 -

Chng 3. Nwfc Engine

TextureManager. H thng cc texture c qun l ni b trong Engine


bi TextureManager, thnh phn ny s m bo cc texture c cng tn v ng
dn s tham chiu n cng 1 i tng trong b nh gip tit kim rt nhiu b
nh i vi cc ng dng ln. Cc h thng manager v c ch chia x ti nguyn
bng s m tham chiu c s dng rt ph bin trong Engine.
Material. y l tri tim ha ca ton b Engine. Thnh phn ny m
nhn mi chc nng v cht liu hin th trn b mt 3D nh bng, vn b mt,
phn chiu, khc x Ni chung mi vt th u c cht liu ca n, g th
c cht liu g, st th c cht liu kim loi. Mi tnh cht v cht liu nh th s
c qun l bi thnh phn ny. Cng ging nh texture, material cng l s dng
reference count qun l chia x ti nguyn.
RenderSystem. y khng phi l 1 thnh phn m l 1 h thng. H thng
ny s m nhn qun l ton b chc nng ha ca ton b Engine. Mi hnh
ng m ng dng u cui mun trin khai v mt ha u phi thng qua h
thng ny. H thng ny cn m nhn lun chc nng qun l cho cc material.
RenderAPI. y l thnh phn ng vai tr giao tip vi phn cng v vi
cc th vin ha cp thp gip thc hin cc chc nng trn phn cng. Thnh
phn ny s c hin thc ha trn cc 3D API c th (nh Direct3D hay
OpenGL).
Shader. Gip qun l v tch hp cc thng tin cn thit khi dng hnh nh
cc trng thi ca phn cng, Vertex Shader, Pixel Shader Shader c s dng
trong material v hon ton c th c chia x gia cc material khc nhau.
FileSystem. H thng qun l truy xut v tm kim tp tin. Mi thnh phn
khc mun thao tc trn tp tin u phi thng qua thnh phn ny. Ta phi s dng
1 h thng tp tin duy nht cho mi thnh phn v s ph thuc vo cc th vin tp
tin c s dng nh (StandardFileIO hay Win32FileIO). Ngoi ra s qun l tp

- 35 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

HWShaderManager. Qun l cc HardwareShaderDX9, thnh phn ny


m bo cc HardwareShaderDX9 c cng tn tp tin s tham chiu n cng mt
i tng.
MeshManager. Qun l cc MeshDX9.
ShaderManager. Qun l cc Shader.
RdrDX9_Linker. y l thnh phn gip trao i thng tin gia module
nwfc.dll v module renderer_DX9.dll. Module chnh thng qua thnh phn ny s
truyn cc thng tin cn thit ca mnh vo module renderer_DX9 module ny
c th s dng nh h thng tp tin (file system), cc tham s cu hnh (graphic
config)
Trong cc thnh phn ca Engine 2 thnh phn l h thng cht liu (material)
v h thng tp tin parameter l 2 thnh phn c tnh u vit nht s c trnh by
r hn phn sau.
3.5. H thng cht liu (material)
3.5.1. Gii thiu
Cc vt th trong th gii thc u c cu thnh bi rt nhiu cc cht liu
khc nhau. C cht liu th trn lng phn chiu nh sng nh b mt kim loi, cng
c cht liu th trong sut m c nh cc vt lm bng plastic. H thng cht liu
(material) ca Nwfc Engine cng m nhn vai tr gn ging nh cht liu trong
th gii thc. Material s qun l tt c cc thuc tnh lm nn b mt ca vt th
gip cho vt th c hin th sao cho cng ging vi th gii thc cng tt.
Nu khng c cht liu th i tng 3D khi c v ra s trng nh th no ?

- 37 -

Chng 3. Nwfc Engine

Hnh 3-3 m tr c v ch khung v ch bnh thng

Hnh 3-4 m tr c v vi cc cht liu khc nhau

R rng khi mt i tng 3D c v vi cc cht liu khc nhau th s cho ra


c hnh nh rt khc nhau.
3.5.2. Cu trc ca h thng cht liu (material)

Hnh 3-5 Cu trc ca material

- 38 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

texture[id]. Texture tng ng vi th t trong id = [ 0..4 ]. Ch s id trong


cc texture phi lin tc v khng c khuyt.
texturefile. Tn tp tin texture. Tn texture file phi bao gm c ng dn
tnh t th mc cha tp tin thc thi n th mc cha texture .
texture flag(s). 0 hay nhiu texture flag cho bit cc thng tin v texture. Chi
tit cc c ny s c trnh by chi tit phn sau. Nu texture flags nhiu hn 1
th cc flag phi cch nhau khong trng v ton b c t trong ngoc [].
shaderfile. tn tp tin shader cn s dng bao gm c ng dn tnh t th
mc thc thi n th mc cha tp tin . V d:
textures
{
texture0
texture1
texture2
}
shader

"textures/chair1.tga"
"textures/chair1_local.tga"
-normalmap
"textures/chair1_s.tga" [ -specularmap -pointsample ]
"shaders/bump"

Trong trng hp s lng material s dng l rt ln th vic s dng 1 tp tin /


1 material s tr nn v cng kh khn v s lng tp tin c th ln ti hng trm
tp tin. gii quyt vn Engine cung cp kh nng tch hp nhiu
material vo trong 1 tp tin ln gi l material collection hay materal library
(matlib). Mt matlib c cu to nh sau:
[material name]
{
textures
{
...
}
shader
}
[material name]
{
...
}

Matlib l tp hp rt nhiu material, mi material trong matlib c nh danh


bng tn, cn ni dung ca tng material th hon ton ging nh 1 material n
thng thng.

- 40 -

Chng 3. Nwfc Engine

Chc nng chnh ca mateial collection (matlib) l n gin ha chc nng


qun l 1 s lng ln material bng cch tch hp rt nhiu material vo chung 1
tp tin (s lng c tch hp l khng gii hn), ng thi matlib cn gip phn
loi cc material thnh cc tp hp gip cho vic tm kim qun l tr nn d dng.
3.5.4. Textures
Texture chnh l cc d liu tp tin nh c lu trong b nh, c s dng
p vo b mt ca vt th trong khi render. Texture trong 3D rt a dng v chng
loi cng nh nh dng. Nwfc Engine h tr load cc nh dng nh sau y lm
texture { .BMP, .DDS, .DIB, .HDR, .JPG, .PFM, .PNG, .PPM, .TGA }.
3.5.4.1.

Phn loi texture dng trong Engine

Texture trong Nwfc c th c dng vi cc mc ch sau y.


Texture thng. Dng nh tp tin nh thng thng, texture c s dng
nhiu nht trong Engine.
Normal map. y l loi texture c bit, thay v cha thng tin v mu sc
nh texture thng, normal texture cha cc thng tin v khng gian php tuyn
(tangent space) ca vt th trong tng im nh. Normap map ch php huy tc
dng khi c dng km vi Vertex Shader v Pixel Shader, nu khng th n s
ng vai tr nh mt texture thng.
Specular map. y cng l 1 loi texture c bit, texture ny ch cha
thng tin dng grayscale. Texture khi p vo mt vt th s cho bit thng tin v
mc phn chiu ca nh sng ln b mt vt th (specular lighting). Cng ging
nh normal map, specular map phi c dng km vi Vertex Shader v Pixel
Shader.
Normal map v specular map thng c dng thc hin thut ton chiu
sng trn tng im nh (per pixel lighting), per pixel lighting ch mi c s
dng nhiu trong nhng nm gn y, trc ngi ta vn s dng chiu sng

- 41 -

Chng 3. Nwfc Engine

trn tng nh (per vertex lighting) ch yu l do thiu s h tr t phn cng v


cng on to ra cc texture ny thng tn kh nhiu thi gian.
Environment Cube Map. Texture ny rt khc vi cc loi trn do cha ti
6 nh ring bit trong 1 texture. Cubemap cha 6 nh m m khung cnh mi
trng 6 mt xung quanh vt th l cc mt Face 0, 1, 2, 3, 4, 5 tng ng vi {
+X, -X, +Y, -Y, +Z, -Z } ca khi hp.

Hnh 3-6 Cc mt ca Environment Cube Map

Cubemap dng ch yu th hin s phn chiu ca mi trng xung quanh ln


vt th i vi cc b mt phn chiu nh sng nh kim loi, thy tinh
Render Target Texture. Texture ny khng ly d liu t tp tin nh m d
liu nh c c l do render cc vt th vo texture. y l loi texture x l phc
tp nht trong cc loi texture nhng ng dng to hiu ng cng nhiu nht.
Texture ny c dng to cc hiu ng cc k c bit nh mt nc, khc x
nh sng, motion blur.. v thng c dng chung vi Vertex Shader v Pixel
Shader.

- 42 -

Chng 3. Nwfc Engine

Hnh 3-7 Cc loi texture khc nhau

- 43 -

Chng 3. Nwfc Engine

3.5.4.2.

Texture flags

Nh phn trc cp, texture trong material file c i km vi cc c ch


th. Cc c ny s gip Engine nhn dng loi texture s dng cho ph hp,
ngoi ra cc c ny cn ch th cho Engine bit 1 s thuc tnh ca texture.
Tn c
-pointsample

ngha
Ch filter texture l ly mu gn nht (nearest point
sample)

-nocompress

Khng dng texture nn

-clampu

Nhn bn pixel cui khi ta texture u vt qu khong [


0.0 .. 1.0 ]

-clampv

Nhn bn pixel cui khi ta texture v vt qu khong [


0.0 .. 1.0 ]

-nomipmap

Khng dng filter mipmap

-minmip

Dng filter mipmap nhng gii hn mc thp nht l (4x4).

-onebitalpha

Cho bit texture ny c 1 bit alpha

-eightbitalpha

Cho bit texture ny c 8 bit alpha

-normalmap

Texture ny c dng nh loi normal map

-specularmap

Texture ny c dng nh loi specular map

-envcubemap

Texture ny phi c load 6 mt dng nh Environment


Cube Map

-alphaspecularmap

Texture ny c thnh phn alpha l specular map


Bng 3-1 Cc c ca texture

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 -

Chng 3. Nwfc Engine

3 thnh phn ny khng phi lc no cng c mt, ta ch s dng n khi cn m


thi. Sau y l hnh nh minh ha cc render pass phi hp vi nhau.

Hnh 3-8 Cu trc ca 1 Shader trong Engine

Hnh 3-9 Dng hnh nhiu ln cho ra nh cui cng

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 -

Chng 3. Nwfc Engine

3.5.5.1.

Gii thiu tp tin Effect

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.

nh dng tp tin Effect

Mt Effect file c cu trc bao gm nhiu tham s (parameters), cc technique,


v cc hm c vit bng ngn ng HLSL. V Effect file rt ln v trong Engine
Effect ch s dng vi mc ch nh l cc technique nn trong phn ny ch cp
ti Effect file di dng cc technique m thi.
Effect file (ch dng technique) gm nhiu technique. Mi technique c dng
cho mt ln v, n cung cp 1 kiu hay cch thc dng hnh. Mt technique c
cu to t nhiu render pass.
C php ca 1 technique
technique [ id ] [< annotation(s) >]
{ pass(es) }

id. Tn ca technique (c th c hay khng).


annotation (s). Gm 0 hay nhiu nhn ca technique, nhn trong technique
c dng lu tr cc thng tin ring ca ngi dng.
pass (es). Gm 0 hay nhiu pass. Mi pass cha ng nhiu trng thi v gi
tr ca chng.

- 46 -

Chng 3. Nwfc Engine

C php ca 1 pass:
pass [ id ] [< annotation(s) >]
{ state assignment(s) }

id. L tn ca pass (c th c hay khng)


annotation (s). Gm 0 hay nhiu nhn ca pass, nhn trong pass c dng
lu tr cc thng tin ring ca ngi dng.
assignment (s). Gm nhiu trng thi c gn gi tr (hay cc biu thc)
(danh sch cc trng thi hp l c th xem trong DirectX SDK).
V d: 1 Effect file v dng cho thut ton shadow volume
technique RenderShadowVolume
{
pass P0 <
string vsh = "vertex_shadowvol_11";
string psh = null;
>
{
CullMode = Ccw;
// Disable writing to the frame buffer
AlphaBlendEnable = true;
SrcBlend = Zero;
DestBlend = One;
// Disable writing to depth buffer
ZWriteEnable = false;
ZFunc = Less;
// Setup stencil states
StencilEnable = true;
StencilRef = 1;
StencilMask = 0xFFFFFFFF;
StencilWriteMask = 0xFFFFFFFF;
StencilFunc = Always;
StencilZFail = Decr;
StencilPass = Keep;
}
pass P1 <
string vsh = "vertex_shadowvol_11";
string psh = null;
>
{
CullMode = Cw;
StencilZFail = Incr;
}
}

- 47 -

Chng 3. Nwfc Engine

Trong Effect file trn ch c 1 technique tn l RenderShadowVolume, trong


technique ny s dng 2 pass render l P0, v P1. Trong P0 v P1 l nhiu cc trng
thi c gn gi tr, cc trng thi ny sau s c Direct3D chuyn giao cho
phn cng thit lp. u mi pass c gn nhn l cc bin kiu string (nhn
ny s c x l ni b bi h thng shader ca Engine).
Lu l cc trng thi trong pass P1 s c k tha li cc trng thi trong
pass P0 tr 2 trng thi l CullMode v StencilZFail.
3.5.6. S dng Vertex Shader v Pixel Shader trong Engine
Trong Effect file v d trn thy trong mi Pass u c gn nhn c bit
pass P0 <
string vsh = "vertex_shadowvol_11";
string psh = null;
>

Nhn ny chnh l tn ca Vertex Shader v Pixel Shader c s dng trong


pass . Vertex Shader c s dng trong khi dng hnh render pass P0 l tp tin
vertex_shadowvol_11.vsh, v khng s dng Pixel Shader.
Vertex Shader v Pixel Shader trong Engine c vit bng ngn ng cp cao
HLSL c bin dch trc thnh tp tin m lnh trong lc xy dng (build-time)
v s dng trong Effect file di dng tn tp tin nh trong v d trn.
Chng trnh bin dch c s dng l fxc.exe, c trong b DirectX SDK 9.0c.
Tham s dng lnh ca chng trnh c th xem trong SDK.
Mc d Effect hon ton cho php ta bin dch Vertex Shader v Pixel Shader
trong lc thi hnh (run time) thng qua 2 trng thi l VertexShader v PixelShader
(t trong mi pass) nhng cch bin dch trc v s dng di dng tp tin c
nhiu u im:
Ta c th qun l cc tp tin ny v np vo b nh ch khi cn thit.
Thi gian np s nhanh hn do c bin dch trc.

- 48 -

Chng 3. Nwfc Engine

3.5.6.1.

Vertex Shader trong Engine

Cc hng mc nh c bn (constant register)


Nh ta bit d liu u vo ca Vertex Shader gm d liu vertex v cc gi
tr hng (const) c cung cp t chng trnh thng qua cc constant register. Ty
vo mc ch ca thut ton m Vertex Shader cn cc hng khc nhau. lm nh
bt s qun l, Engine cung cp cho Vertex Shader mt s lng hng c nh
thng qua mt s cc constant register c nh ngha sn. Cc Vertex Shader
khi c vit mi hon ton c th s dng cc hng ny trong thut ton ca mnh
v c ch ca Engine s m bo cho cc hng c nh ny lun c gi tr ph hp.
Tn bin hng
cEyePos
cModelViewProj
cViewProj
cModelView
cViewModel
cAmbientCube[6]
cLightInfo[2]
cModel[12]

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

Bng 3-2 Cc hng mc nh c bn

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 -

Chng 3. Nwfc Engine

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 -

Chng 3. Nwfc Engine

Vertex Shader ph thuc ngun sng


Cc Vertex Shader trong s ny gm c:
vertex_bump_11.vsh. L shader chnh dng cc i tng c h tr nh
sng v bump b mt bng normal map.
Vertex Shader ph thuc ngun sng c phc tp hn hn do phi tnh ton
nh sng t cc ngun sng. Engine h tr ti a 2 ngun sng cng vi nh
sng mi trng 6 mt (ambient light cube) v cung cp thng tin cc nh sng ny
thng qua cc bin hng cAmbientCube[6] v cLightInfo[2], mi ngun sng c th
l 1 trong 3 loi sau y, ngun sng cng v sau th tnh ton cng phc tp.
Ngun sng song song (Directional Light)
Ngun sng im (Point Light)
Ngun sng hnh chp (Spot Light)
Vertex Shader ph thuc ngun sng khi c vit mi phi m bo s dng
ht cc thng tin v ngun sng m Engine cung cp vic dng hnh c chnh
xc.
S phc tp ca Vertex Shader ph thuc ngun sng
Nu khng tnh nh sng mi trng th mi ngun sng c 4 trng thi (khng
dng, song song, im v hnh chp) nn t hp trng thi ca 2 ngun sng c th
xy ra trong Engine l 2 * 4 = 8 (trng thi), mun kim tra 8 trng thi ny Vertex
Shader phi s dng lnh r nhnh if. Ta hy xem qua 1 Vertex Shader n gin ch
tnh ton mu sc vertex theo cc ngun sng sau y:
VS_OUTPUT main( const VS_INPUT i )
{
...
// Calculate lighting for light 1
o.color = 0;
if( cLightInfo[0].type == LIGHTTYPE_DIRECTIONAL )
o.color += ( do directional lighting );
else if ( cLightInfo[0].type == LIGHTTYPE_POINT )
o.color += ( do point lighting );

- 51 -

Chng 3. Nwfc Engine

else if ( cLightInfo[0].type == LIGHTTYPE_SPOT )


o.color += ( do spot lighting );
// Calculate lighting for light 2
if( cLightInfo[1].type == LIGHTTYPE_DIRECTIONAL )
o.color += ( do directional lighting );
else if ( cLightInfo[1].type == LIGHTTYPE_POINT )
o.color += ( do point lighting );
else if ( cLightInfo[1].type == LIGHTTYPE_SPOT )
o.color += ( do spot lighting );
...
return o;
}

Kt qu l chng trnh ny qu nng n v ch bin dch c trn phin bn


Vertex Shader 3.0 m thi (do s vi lnh pht sinh do cc lnh r nhnh l rt ln
vt qu gii hn s vi lnh ti a ca cc phin bn Vertex Shader thp hn, nh
phin bn 1.1 ch h tr ti a 128 vi lnh cn 2.0 chi h tr 256 vi lnh trong 1
chng trnh Vertex Shader) iu c ngha l Shader ny ch chy c trn cc
card mn hnh siu cao cp m thi.
Cch gii quyt ca Engine:
Engine chia t hp cc trng thi ca ngun sng thnh 11 t hp ngun sng
(gi l light combo) ng vi 8 trng thi trn + 3 trng thi mi do c s tham gia
ca nh sng mi trng. Mi t hp c gn bng 1 ch s nhn dng (t 1..11).
Ch s light combo
1
2
3
4
5
6
7
8
9
10
11

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

Bng 3-3 Cc t hp ngun sng

- 52 -

Mi trng
NONE
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT
AMBIENT

Chng 3. Nwfc Engine

Ti 1 thi im dng hnh (render) ch c 1 v ch 1 light combo tn ti m thi


v thng tin v cc ngun sng ca light combo ny l hon ton c nh. Do khi
thit k Vertex Shader thay v lm 1 Shader ln nh trn ta s phn ra lm 11 cc
Shader nh (mi Shader c nh dng bng ch s ng vi light combo m n s
dng, ch s ny c gn thm vo tn tp tin Engine c th nhn dng c
Vetex Shader c dng cho light combo no).
V d: tp tin vertex_bump_11_5.vsh trong vertex_bump_11 l tn
Shader + phin bn ca Shader v _5 l ch s ca light combo c s dng
(ng vi t hp ngun sng DIRECTIONAL, NONE, AMBIENT).
Vi cc gii quyt trn chng trnh Vertex Shader khng phi cn s dng cc
lnh r nhnh (if) na, lm cho s vi lnh gim xung ng k khin cho phin bn
Vertex Shader c bin dch thnh cng gim theo, iu ny s gip chng trnh
c th chy trn nhiu th h phn cng hn.
i vi loi Vertex Shader ph thuc ngun sng th cch s dng trong Effect
file cng c 1 s thay i nh Engine c th nhn bit c loi Vertex Shader
ny.
pass p0 <
string vsh = "vertex_bump_11?";
string psh = "pixel_bump_20";
>

Du ? pha sau "vertex_bump_11 s gip Engine nhn din y l Vertex


Shader c s dng ngun sng, Engine s t ng tm kim v np tt c cc Vertex
Shader c tn vertex_bump_11_x (x = 1..11) vo b nh c th s dng sau
ny.

- 53 -

Chng 3. Nwfc Engine

3.5.6.2.

Pixel Shader

Hu ht Pixel Shader trong Engine i lin vi 1 Vertex Shader tng ng do


Pixel Shader cn d liu input l cc output t Vertex Shader. Pixel Shader trong
Engine khng s dng cc thanh ghi hng mc nh nh Vertex Shader. Danh sch
cc Pixel Shader c ci t trong Engine.
pixel_bump_20.psh. L shader chnh dng cc i tng c h tr nh
sng v bump b mt bng normal map (dng chung vi vertex_bump_11.vsh).
pixel_glowscreen_11.psh. Dng v cc vt th pht sng nh bng n,
mn hnh my tnh
3.6. Tm tt
Trong chng ny chng ti trnh by v mt s thnh phn chnh trong Nwfc
Engine. Chi tit cc thut ton ca Vertex Shader v Pixel Shader c ci t trong
Nwfc Engine s c trnh by chng sau.

- 54 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Chng 4

Cc thut ton Vertex v Pixel Shader

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

vng bng ti c th bao ph ton b cc vt th khc trong bi cnh. Phn cnh


ca shadow volume c to ra bng cch ko di (extrude) cc cnh bao
(silhouette edges) theo phng chiu ca nh sng to thnh 1 vng kn. Sau y
l hnh m t cc phn ca 1 vng bng ti.

Hnh 4-1 M t cc phn ca shadow volume

Cnh bao (silhouette edge)


iu kin tin quyt ca thut ton bng l ta phi tnh c hnh khi ca
shadow volume m ni dung chnh l ta phi tm c cc cnh bao. Mt cnh (bt
k) c cu to bi hai im v c t 1 n 2 mt k lin vi n, cnh c gi
l cnh bao khi n ch c 1 mt k hay c 2 mt k nhng mt mt hng v pha
nh sng trong khi mt cn li th khng.

Hnh 4-2 Cnh bao l cnh c mt mt k hng nh sng cn mt cn li th khng

Thc t vic tm cnh bao c pht trin thnh 2 thut ton hon ton ring
bit.

- 57 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Thut ton 1: Kim tra tt c cc tam gic ca vt th tm cc cnh c tnh


cht ca cnh bao. Thut ton 1 tm cnh bao nh sau:
Bc 1: Lp cho tt c cc tam gic ca vt th.
Bc 2: Nu tam gic hng v pha ngun sng ( tch v hng ca vector hng nh
sng v vector php tuyn ca tam gic >= 0):
Bc 2-a: Chn 3 cnh (l 3 cp vertices) ca tam gic vo edge stack.
Bc 2-b: Kim tra trong stack xem 3 cnh va chn xut hin ri hay cha
(tnh lun th t o ca cnh, v d AB = BA).
Bc 2-c: Nu cnh tn ti trc trong stack, g b c hai cnh khi stack.
Bc 3: Cui cng, cc cnh cn li trong stack l cc cnh bao.

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

S dng thut ton 2 cho ra tc nhanh hn hn thut ton 1 d khi render c


chm hn do c nhiu mt hn. V u im v tc nn thut ton 2 cng l thut
ton m Engine chn s dng nn s c trnh by k phn sau.
Cch to Shadow Volume Mesh
Nh ta bit ni dung ch yu ca thut ton 2 l phi tnh c shadow
volume mesh v dng Vertex Shader to hnh khi shadow volume t mesh ny.
Hnh v sau y minh ha cch to ra shadow volume mesh.

Hnh 4-3 Dng shadow volume mesh bng cc thm vo cc mt ph

Thut ton to shadow volume mesh:


Bc 1: Lp cho tt c cc mt trong vt th
Bc 2: Tnh vector php tuyn cho mi mt.
Bc 3: Lp cho 3 cnh ca mi mt.
Bc 3-a: Thm cnh vo 1 list kim tra.
Bc 3-b: Nu cnh xut hin trong list ( ta tm thy cnh c dng chung
cho 2 mt):
+ Nu php tuyn ca cc mt k cnh khng song song vi nhau, thm 1 t
gic (degenerate quad) vo list kt qu.
+ Ngc li, ch thm cnh vo list kt qu.
Bc 3-c: G b cnh ang x l v cc cnh tng t ra khi list kim tra.
Bc 4: To mng d liu cha d liu ca shadow volume mesh, mi vertex ca
shadow volume mesh ch gm v tr v php tuyn m thi.
Bc 5: Nu cn cnh no trong list kim tra th vt th ang x l khng phi l khi c
v trong khi c tt c cc cnh u c 2 mt k vi n.

Trong chng trnh Game demo vic to shadow volume mesh c t ng


ha bng chng trnh MeshTools c pht trin km theo Game (cch s dng
chng trnh ny xem thm phn ph lc). MeshTools nhn u vo l vt th gc
sau to shadow volume mesh v lu vo .X file load vo Game sau ny.

- 59 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-4 Chng trnh MeshTools to shadow volume mesh mt cch t ng

Dng hnh bng ti (render shadow)


Sau khi tnh c hnh khi shadow volume ta phi v hnh khi ny to
thnh cc vng bng ti trong bi cnh. tng ch o ca thut ton ny ging
nh cch tm 1 im trong hnh khi. Ta k 1 on thng t mt ti im cn xt,
nu on thng ch i vo hnh khi shadow volume m khng c i ra (tc l
ct shadow volume 1 s l ln) th im cn xt nm trong vng ti.
m s ln ct cho mi im nh c xt ngi s vng m stencil buffer
lu s ln ct qua cc shadow volume. Stencil buffer l vng m b nh b
sung (thng c chia x chung vi vng m su (depth buffer)), vai tr ch
yu ca vng m ny ny l lm mt n (mask) cho cc pixel c v.
Qua qu trnh pht trin c 2 thut ton c s dng cho bi ton dng hnh
bng ti l z-pass v z-fail. Mi thut ton c u khuyt im ring nhng trong
khun kh bi bo co ny ch yu s trnh by v thut ton z-fail. Chi tit ca
thut ton ny nh sau:
+ V cc mt sau (back face) ca shadow volume. Nu su ca im nh so snh
tht bi (thng l gi tr ln hn gi tr trong depth buffer), gi tr ca stencil buffer ti
im s tng ln 1.
+ V cc mt trc (front face) ca shadow volume. Nu su ca im nh so snh
tht bi, gi tr ca stencil buffer gim i 1.

- 60 -

Chng 4. Cc thut ton Vertex v Pixel Shader

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)

Hnh 4-5 Thut ton shadow volume vi k thut 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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Cui cng ta ch cn ph ti vng B, D bng cch v mt t gic ln bao ph


ton b bi cnh l kt thc thut ton.
4.2.2. Vertex Shader cho Shadow Volume
cc phn trn ta nm c c s l thuyt ca thut ton ny. Phn ny s
trnh by Vertex Shader c dng v shadow volume.
static const int g_lightIndex = 0;
static const float
g_extrudeDistance = 200.0f;
static const float
g_depthEsilon = 1e-5f;
static const float3
g_shadowColor = { 1.0f, 1.0f, 0.0f };
struct VS_INPUT {
float4 position
:
POSITION;
float3 normal
:
NORMAL;
};
struct VS_OUTPUT {
float4 position
:
POSITION;
float4 color
:
COLOR0;
};
VS_OUTPUT main( VS_INPUT i )
{
VS_OUTPUT o;
// Calculate vertex world position
float3 worldPos
= mul( i.position, cModel[0] );
// Calculate vertex world normal
float3 worldNormal = mul( i.normal, cModel[0] );
// Calculate light-to-vertex vector in world space
float3 lightVector = normalize( worldPos
cLightInfo[g_lightIndex].pos);
// Extrude if the vertex not facing the light
if( dot(worldNormal,-lightVector)<0.0 )
worldPos += lightVector * g_extrudeDistance;
// Calculate projection space position
float4 projPos = mul( float4(worldPos, 1), cViewProj );
// Offset an amount to avoid z-fighting
projPos.z += g_depthEsilon * projPos.w;
o.position = projPos;
// Final color
o.color = float4( g_shadowColor, 0.1f );
return o;
}

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

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.

Hnh 4-6 Bi cnh khng c bng thi gian thc

Hnh 4-7 Bi cnh c bng thi gian thc

- 63 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-8 Shadow volume c v bao trm cc vng ti

4.3. Khung cnh bu tri (skybox)


Trong cc Game hin nay cc hu cnh l iu khng th thiu v chng mang
li cht lng rt ha rc r, to tnh thc cho bi cnh. Ci lm nn cho cc hu
cnh li chnh l khung cnh bu tri, nu khng c chng ta s kh phn bit c,
u l ngy, u l m
Nhm gp phn lm cho hu cnh gn hn vi thc t, Nwfc Engine c h tr
thm Vertex Shader thc hin v cc khung cnh bu tri.
4.3.1. C s l thuyt
Cch biu din bu tri bng hnh khi v texture.
V bu tri l khung cnh ng nn cc hnh khi ng c s dng kh nhiu
th hin bu tri. Cc hnh khi thng c s dng l hnh khi vung (box),
hnh cu hay bn cu (sphere). Cc texture c s to khung cnh bu tri
thng l cc texture biu hin 6 mt ca khng gian xung quanh (dng cho box)
hay cc texture lin nhau cc cnh (dng cho sphere).

- 64 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-9 Texture lin nhau cc cnh dng cho sky sphere

Hnh 4-10 Texture 6 mt dng cho sky box

Cc c tnh ca bu tri trong thc t


Khung cnh bu tri trong thc t c cc c tnh y m ta cn quan tm khi
mun thit k Vertex Shader.
Rt xa so vi tm nhn, khi ta nhn tp trung vo 1 hung th d ta c di
chuyn n u di na th theo hng nhn (vi iu kin khong cch khng qu
ln) th hnh nh m ta nhn c t bu tri l khng i.
Tuy nhin hnh nh t bu tri m ta nhn c s thay i khi ta nhn cc
hng khc nhau.
T cc c tnh trn ca bu tri ta xc nh c cch thc biu din bu tri
trong 3D nh sau:
S dng mt hnh khi lm vt cha v s dng 1 texture c hnh khung
cnh bu tri.

- 65 -

Chng 4. Cc thut ton Vertex v Pixel Shader

V ta khng th no i xuyn qua bu tri, nn ta phi lun cp nht v tr ca


hnh khi bu tri = v tr hin thi ca camera (hay v tr ca mt) (tha mn tnh
cht 1).
Ch cp nht v tr m khng thay i gc xoay ca hnh khi bu tri nhm
khin cho hnh khi bu tri khng thay i theo hng xoay ca camera (tha mn
tnh cht 2).
Sau y l hnh v minh ha cho tng.

Hnh 4-11 Ta ca skybox c cp nht theo ta camera

4.3.2. Vertex Shader cho skybox


Vertex Shader cho skybox kh n gin nh sau:
struct VS_INPUT {
float4 position

POSITION;

float2 texcoord

TEXCOORD0;

float4 position

POSITION;

float4 color

COLOR0;

float2 texcoord

TEXCOORD0;

};

struct VS_OUTPUT {

};

VS_OUTPUT main( VS_INPUT i )

- 66 -

Chng 4. Cc thut ton Vertex v Pixel Shader

{
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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-12 Khung cnh bu tri chnh din

Hnh 4-13 Mt gc nhn khc ca bu tri

- 68 -

Chng 4. Cc thut ton Vertex v Pixel Shader

4.4. Chiu sng theo im nh (per-pixel lighting) s dng normal


map v specular map
Hin nay hiu ng chiu sng trn tng im nh c s dng kh ph bin
trong cc Game nhm tng cng cht lng ha cho Game. Thay v chiu sng
theo tng nh vertex, per-pixel lighting cho cht lng ha cao hn hn do c
th p dng nhiu thut ton mi trong ha 3 chiu nh bump b mt bng
normal map, phn chiu b mt bng specular map
ng dng khi t thc hin chiu sng trn im nh bng Shaders phi gii
quyt cc tt c cc vn v chiu sng nh diffuse lighting, specular lighting
Diffuse lighting trong Engine ch yu s dng bump bng normal map v
specular lighting ch yu s dng specular map, 2 thut ton chiu sng ny s
c trnh by k phn ny.
4.4.1. C s l thuyt
phn ny s cp chi tit vo qui trnh chiu sng trn im nh c
Engine h tr. Qui trnh chiu sng trn im nh ch yu phn ra lm 2 cng on
ring bit: thc hin tnh ton mu chnh (diffuse color) v tnh ton mu phn
chiu (specular color).
Tnh ton mu diffuse (c bump b mt bng normal map)
Trc khi i chi tit vo thut ton ta cn xem qua 1 s khi nim mi dng
trong phn ny
Khng gian tip tuyn ca vt th (tangent space).
Ta texture ti mi nh (vertex) hnh thnh mt h trc ta 3 chiu vi
trc U (tip tuyn), trc W (php tuyn) v trc V (binormal = U x W). H trc ta
ny gi l khng gian tip tuyn hay khng gian texture ca vt th ti cc nh
(vertex).

- 69 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-14 Khng gian tip tuyn

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).

Hnh 4-15 To normal map t height map

- 70 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-16 To normal map t vt th c chi tit cao hn bng Melody (NVidia)

Bump b mt s dng normal map


Bump b mt ch yu c thc hin trn Pixel Shader cho tng im nh.
Thut ton ny s dng gi tr normal trong normal map xc nh mc ca
nh sng tc ng vo im nh bng cch nhn tch v hng gi tr normal
trn vi vector hng nh sng trong khng gian tip tuyn. Sau gi tr ny c
nhn vi mu sc ca vertex v mu ly mu t texture tnh ra mu diffuse (mu
ca vertex c tnh trong Vertex Shader)
light factor = dot product (normal, light vector )
diffuse color = light factor * vertex color * texture color;

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Hnh 4-17 Chiu sng theo tng vertex trong Vertex Shader

Hnh 1. D liu vertex trong b nh (c v di dng wireframe)


Hnh 2. Chiu sng trn tng nh (per-vertex lighting) bng Vertex Shader

Hnh 4-18 Chiu sng trn tng im nh trong Pixel 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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

thy mt vng nh sng chi do ton b nng lng ca nh sng c truyn thng
vo mt.

Hnh 4-19 S phn x ca tia sng trn b mt

Mun tnh mu specular ca im nh ta phi xc nh c mc nh sng


phn chiu ti im . Cng thc tnh vector phn chiu (phn x) nh sau:
R = 2(L dot N)N - L

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

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.

Hnh 4-20 Tnh phn chiu trn tng im nh

Tm tt thut ton bng hnh v

Hnh 4-21 Tm tt qui trnh per-pixel lighting bng hnh v

- 74 -

Chng 4. Cc thut ton Vertex v Pixel Shader

4.4.2. Vertex Shader v Pixel Shader cho per-pixel lighting


Thut ton chiu sng trn im nh (per-pixel lighting) cn c Vertex Shader v
Pixel Shader i lin vi nhau thc hin.
Vertex Shader
Vertex Shader dng y l Vertex Shader ph thuc ngun sng nn cn c
bin dch thnh 11 Vertex Shader tng ng vi 11 light combo.
...
struct VS_INPUT {
float4 position
:
POSITION;
float3 normal
:
NORMAL;
float2 texcoord0
:
TEXCOORD0;
float3 tangent
:
TANGENT;
float3 binormal
:
BINORMAL;
};
struct VS_OUTPUT {
float4 position
:
POSITION;
float4 color
:
COLOR0;
float4 ambient
:
COLOR1;
float2 baseTexCoord :
TEXCOORD0;
float3 light_vector :
TEXCOORD1;
float3 view_vector
:
TEXCOORD2;
};
VS_OUTPUT main( const VS_INPUT i )
{
VS_OUTPUT o = ( VS_OUTPUT )0;
// Calculate world vertex's elements and lighting
float3 worldPos = . . .
float3 worldNormal = . . .
o.ambient = . . .
o.color = . . .
// Calculate project space position
o.position = mul( float4( worldPos, 1 ), cViewProj );
// Calculate the light vector in object space,
// and then transform it into texture space.
float3 temp_light_vector;
if( g_LocalLightType0 == LIGHTTYPE_DIRECTIONAL )
temp_light_vector = mul( -cLightInfo[0].dir, cInvModel );
else
temp_light_vector = mul( cLightInfo[0].pos, cInvModel )-i.position;

- 75 -

Chng 4. Cc thut ton Vertex v Pixel Shader

o.light_vector.x = dot( temp_light_vector, i.tangent );


o.light_vector.y = dot( temp_light_vector, i.binormal );
o.light_vector.z = dot( temp_light_vector, i.normal );
// Calculate the view vector in object space,
// and then transform it into texture space.
float3 temp_view_vector = mul(cEyePos, cInvModel) - i.position;
o.view_vector.x = dot( temp_view_vector, i.tangent );
o.view_vector.y = dot( temp_view_vector, i.binormal );
o.view_vector.z = dot( temp_view_vector, i.normal );
// Pass texture coord 0 to output
o.baseTexCoord = i.texcoord0;
return o;
}

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

// Sampler base texture


float4 base = tex2D( baseSampler, i.baseTexCoord );
base.rgb *= 1.2;
// Calculate final color
o.color.rgb=(( specularFactor * specular) + base) *
saturate(n_dot_l) * i.color;
o.color.rgb += saturate( dot(localNormal, bump_ambient) ) *
base * i.ambient * saturate(1.0 - n_dot_l);
// Set the alpha component by base map for alpha supporting
o.color.a = base.a;
return o; // Return the resulting output struct
}

4.4.3. Mt s kt qu t c
Cc nh sau y c chp t Engine thi gian thc.

Hnh 4-22 Cc cng on s dng Fixed Function

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

Xe sau khi x l pixel v p texture (bng Fixed Function Pipeline).

Hnh 4-23 Cc cng on s dng Shaders per-pixel lighting

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 -

Chng 4. Cc thut ton Vertex v Pixel Shader

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).

Hnh 4-24 Kt qu sau cng sau khi b sung mt s hiu ng

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. H thng din hot (Animation System)

Chng 5

H thng din hot (Animation System)

Gii thiu h thng din hot


Cc vn cn gii quyt
Hin thc h thng din hot
Tm tt

- 80 -

Chng 5. H thng din hot (Animation System)

5.1. Gii thiu h thng din hot


H thng din hot l h thng gip qun l v thc hin tt c cc din hot cho
cc i tng trong Game. Mt h thng din hot tt phi m bo cho php qun
l chnh xc, d dng n cc din hot ca tng i tng, v m bo x l c
cc tnh hung din hot c trong Game nh kt hp din hot, nhy, xoay H
thng phi cho php cc h thng khc truy cp d liu d dng v h thng ny lin
quan cht ch n cc h thng khc. H thng din hot cn phi c cht lng
cao, x l nhanh v khng chim nhiu b nh s dng.
Da trn nhng c im v yu cu ca mt h thng din hot chng ti
xy dng mt h thng din hot cung cp cc tnh nng sau:
c v x l d liu khung xng v din hot cho cc nhn vt t mt tp
tin d liu c nh dng md5.
Qun l cu trc khung xng hiu qu cho cc nhn vt m bo c tnh
m rng. Cu trc khung xng c t chc theo mt cy vi mi nt trong cy
lu cc thng tin bin i cho cc khp xng ca khung xng.
Qun l thng tin din hot cho tng i tng.
Thc hin kt hp nhiu din hot li vo trn cng mt i tng v kt
hp cc din hot trong cc phn khc nhau ca i tng.
Thc hin xy dng nn cc ng iu khin nhm c th iu khin nhn
vt i theo nhng l trnh nh trc.
5.2. Cc vn cn gii quyt
Trc khi i vo ci t h thng chng ta cng xem xt cc vn cn gii
quyt v cch gii quyt chng. Vic ci t cc lp c th s da trn vic phn
tch v cc hng gii quyt ny.

- 81 -

Chng 5. H thng din hot (Animation System)

5.2.1. Tp tin lu d liu din hot


Phn u tin v quan trng ca mt h thng din hot l xy dng hoc chn
mt nh dng tp tin lu tr d liu din hot cho cc i tng. Sau khi tm hiu
v chn lc, chng ti chn inh dng md5 lu tr d liu din hot cho h
thng ca mnh.
5.2.1.1.

Tp tin md5

Tng quan v tp tin nh dng md5:


Md5 l mt nh dng tp tin c dng lu thng tin din hot cho cc nhn
vt trong Game DOOM3. y l mt nh dng mi c xy dng v ang c
phin bn th 10. Cc thng tin lu trong tp tin md5 dng vn bn v c t
chc r rng, d hiu vi ngi s dng. Vi nh dng tp tin ny, thng thng
cc tp tin lin quan n mt nhn vt c trong cng th mc. Trong th mc
ny c mt tp tin <tn nhn vt>.md5mesh lu thng tin v cu trc khung
xng v cc mesh cn mi tp tin <tn din hot>.md5anim lu thng tin v mt
din hot. V d ta c nhn vt monster th ta c th mc monster c mt s tp tin
nh monster.md5mesh, idle.md5anim, walk.md5anim,
C th thng tin trong c lu trong cc tp tin md5 nh sau:
Tp tin .md5mesh:
Tp tin ny lu thng tin v cc khp (joint) v cc mesh. Tp tin s cha danh
sch cc khp hnh thnh nn cu trc khung xng. Mi khp c cc thng tin v
nhn, khp cha ca n, v tr, hng quay.
V d: "origin" -1 ( 0 0 0 ) ( -0.7071067095 0 0 ) y l khp c
Nhn l origin.
Khp cha m n lin kt n l -1 (c ngha n khng c cha).
V tr X, Y, Z ln lc l 0, 0, 0.

- 82 -

Chng 5. H thng din hot (Animation System)

Hng s dng 3 gi tr thc l cc thnh phn x, y, z ca mt quaternion.


Mt quaternion c 4 thnh phn x, y, z, w, do quaternion c di n v nn ta c
th tnh w nh sau:
float tmp = 1.0f - ( (x*x) + (y*y) + (z*z));
if(tmp >= 0)
w = - (float) sqrt( tmp );
else
w = 0;

Ngoi thng tin v khung xng th tp tin cn lu thng tin v cc mesh. Mi


mesh bao gm cc nh, cc tam gic, v cc trng s (weight).
V d: vert 0 ( 0.0306090005 0.6130819917 ) 0 2) cha cc thng tin v
mesh nh sau: thng tin v ta texture gm 2 s thc u = 0.0306090005 v v =
0.6130819917 v gii hn ca trng s (s dng ch mc vo gi tr trong danh sch
cc trng s v mt s m).
Cc tam gic (v d: tri 0 2 1 0) c hnh thnh bng cch ch ra 3 nh
trong danh sch nh.
Cc trng s (v d: weight 0 5 0.7900747061 ( 1.9485528469
7.4760251045 23.7117900848 ) ) ch ra khp lin quan cng vi trng s ca n.
Ch rng tng s ca tt c cc trng s cho mt nh bng 1. tm ra v tr ca
mt nh trong 3D ta tnh trng s trung bnh ca v tr lin quan ca cc nh bao
ly n.
Tp tin .md5anim:
Mi tp tin .md5anim xc nh mt chuyn ng cho mt i tng nh i,
chy, nhy, cht, ... V c bn, ta c th s dng li din hot cho cc m hnh khc
vi khung xng tng xng.
Tp tin .md5anim xc nh ra mt cu trc cy k tha ca cc khp, hp bao
quanh nhn vt ch ra ranh gii kim tra va chm, mt khung hnh c s (base
frame) v cc khung hnh din hot chnh (animation frame). Cu trc k tha ca
cc khp ging vi cu trc khung xng c xc nh trong tp tin .md5mesh

- 83 -

Chng 5. H thng din hot (Animation System)

ca i tng. Mi khp c xc nh bng mt c nh phn cho bit bin s ca


khp c thay i trong din hot hay khng. C 6 bin s lin quan n s chuyn
dch (translation) X/Y/Z, v s nh hng (orientation) X/Y/Z. Nh vy c s c
gi tr s nm trong khong t 0 n 63 (= 26 1).
Trong tp tin cn c cc gi tr v cc hp bao xung quanh gip ta c th kim
tra nhanh s va chm gia i tng ny vi cc vt th v i tng khc. Nh
vic s dng cc hp bao bc m ta c th nhn bit c ngay cc m hnh khng
xy ra va chm. V tt nhin cc gi tr ny khng lin quan n vic hin th.
Khung hnh c bn (base frame) c dng lm khung bt u cho din hot.
Mi khung hnh din hot c xc nh bng vic thay th gi tr ca cc bin ca
cc khp lin quan da theo khung hnh c s. Nu gi tr ca cc khp khng thay
i th s ly gi tr t khung hnh c s. Chnh v vy m khung c s chnh l mt
im mc cho quan trng trong din hot.
Thng tin v din hot c lu tr trong danh sch cc gi tr thc trong mi
khung chuyn ng. l cc gi tr phi c thay th da vo khung c s cho
ph hp vi gi tr cc c.
5.2.1.2.

X l d liu tp tin md5

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 -

Chng 5. H thng din hot (Animation System)

D liu v cc nh: u, v (ta texture), ch s trng s v s trong s kt


ni vi nh.
D liu v cc mt: gm ch s ca 3 nh hnh thnh nn mt mt.
D liu v trng s: ch s ca khp v trng s tng ng.
D liu mesh: tn, danh sch nh, danh sch mt, danh sch cc trong s.
D liu cho cc khung hnh: bao gm vector v quaternion cho mi khung
hnh.
D liu din hot: khp hin ti, khp cha, danh sch khung hnh din hot,
khung hnh c s, thuc tnh md5 ca khp (nhm xc nh s thay i d liu cc
cc khung hnh so vi khung hnh c s).
Vic lu li thng tin np t tp tin mt cch tinh t, hiu qu cn gip cho ta
tit kim b nh rt ln. Gi s nh ta c 2 con qui vt ging ht nhau cng xut
hin trong mn Game th 2 con qui vt ny phi cng truy xut n mt d liu
np. C ngha l nu d liu cho con qui vt np t trc th ta khng cn np
na m ch truy xut n d liu dng chung np m thi. Nu ta khng ch
n vn n ny th s gy lng ph rt ln v b nh v thi gian np d liu.
gii quyt th ta ch thc hin np d liu mt ln (vo ln u tin yu cu d
liu), khi cn dng ta dng cc con tr ch n d liu v x l. Ta khng c
thay i cc d liu gc np t tp tin m bo khng nh hng n cc i
tng ang s dng chung d liu.
Vic c d liu s c c theo trnh t b tr d liu trong tp tin md5 vi s
h tr ca mt cng c cho php ta phn tch tp tin tm thng tin chnh xc v
nhanh.
5.2.2. Vn v khung xng
5.2.2.1.

Gii thiu v khung xng

Cc i tng m h thng din hot iu khin thng thng c cu trc l mt


khung xng. Khung xng l mt cu trc cy trong mi nt tng ng vi

- 85 -

Chng 5. H thng din hot (Animation System)

mt khp xng. Mi nt trong khung xng s c mt nt cha (tr nt u tin) v


c th c nhiu nt con. Hnh di l mt v d v khung xng:

Hnh 5-1 V d cu trc khung xng

Khi i tng chuyn ng th cc xng ca n chuyn ng. Trong cu trc


khung xng th chuyn ng ch yu l chuyn ng quay v d nh ta a tay ln
tht cht l ta quay xng cnh tay quanh khu tay mt gc. Trong cu trc khung
xng c mt tnh cht bin i quan trng l s chuyn ng ca mt khp s
c k tha chuyn ng t khp cha ca n. Nh vy khi cn cp nht li khung
xng th ta phi cp nht t nt gc tr i. Nu ta thc hin bin i trn nt gc
th bin i nh hng ton khung xng, v d nh ta dch chuyn nt gc i v
tr khc th ton b khung xng s b dch theo.

- 86 -

Chng 5. H thng din hot (Animation System)

5.2.2.2.

T chc d liu

Vn u tin l ta phi t chc d liu cho khung xng lm sao ta c th


tch ri cc phn ca c th v d nh phn thn, phn u ra thnh cc phn c
lp nhau? Vic phn tch gip ta c th iu khin tng thnh phn ring bit v
c bit ta c th thay i hnh dng cho nhn vt. Chng ta c th gn cc u khc
nhau vo trong cng mt thn hnh to ra cc nhn vt khc nhau. V lm sao ta
c th gn thm cc phn khc vo trong cu trc khung xng? V d nh khi nhn
vt cm mt khu sng th lm sao ta c th gn khu sng ny vo tay nhn vt v
chuyn ng ca khu sng khp vi chuyn ng ca tay.
gii quyt c vn ny ta s cho cc nt trong cu trc cy ca khung
xng k tha t mt cu trc d liu c bit ch cha cc d liu bin i. Vic t
chc d liu ny tng t nh khi nim Scene Graph c dng rt nhiu trong
vic qun l Game. Mt nt bin i (transform node) s lu cc thng tin sau:
Tn.
Nt cha ca n.
V tr v gc quay ban u.
V tr v gc quay trong mi quan h vi nt cha.
V tr, gc quay v ma trn bin i so vi th gii (v tr v gc quay tht s
trong cnh 3D).
Vic bin i ca cc khp xng chnh l s bin i ca cc nt bin i. By
gi ta c th to ra cc cu trc khung xng ring cho phn thn, phn u. Sau
ta s gn u vo thn bng cch ta thc hin vin gn nt u tin ca u l nt
con ca t xng c ca phn thn.
Tng t nh vy, nu ta mun cho nhn vt cm mt cy sng th ta cng to
ra mt cu trc khung xng cho cy sng. Sau ta thc thc vic thit lp nt
cha ca cy sng l mt khp xng tay, by gi bin i ca cy sng s ph
thuc vo bin i ca khp xng tay.

- 87 -

Chng 5. H thng din hot (Animation System)

R rng vic t chc d liu nh vy gip ta gii quyt c nhiu vn v


gip ta qun l cc i tng d dng v thng nht. Mt cch tng qut, ta c th
to mt cy k tha kt ni tt c cc i tng c cu trc khung xng. Vic tm
kim, cp nht v hin th s u thc hin trn cy chung ny. y cng chnh l
tng v cch thc thc hin ca mt Scene Graph.
Vn tip theo l lm sao ta c th thc hin vic cp nht v truy xut cc
khp trong khung xng nhanh chng v ph hp vi vic t cha d liu trn tp
tin md5?
Da vo c im tp tin md5 lu cc khp trong mt khung xng theo mt
trnh t tng dn ca cc khp xng ta c th c cch t chc d liu tng ng.
Nu ta t chc cc khp trong khung xng l cc cu trc trong c cc con tr
ch n cc nt con th y l cch t chc st vi khi nim ca cu trc xng.
Tuy nhin vic t chc nh vy th c mi ln cp nht hoc tm kim mt khp
xng theo tn hoc theo ch s nh danh ta cn phi duyt cy theo quy. Do
thao tc tm kim v duyt nh vy dng vi tn sut rt ln s lm cho chi ph tng
nhanh. khc phc vn ny, ta n gin s t chc cc khp ca khung xng
thnh mt mng. Khi vic tm kim mt khp xng theo ch s ta s thc hin
truy xut thng n phn t c th s tng ng trong mng. Nh vy, vi mt ci
tin nh ta gim i c rt nhiu chi ph trong vic tm kim.
5.2.2.3.

Cp nht v di chuyn khung xng

Mi mt nhn vt l mt cu trc khung xng. Trong cu trc khung xng


ny ta c mt nt l nt gc (nt ny khng c nt cha). Mi thao tc x l trn
khung xng phi c bt u t nt gc ny.
Vic cp nht li khung xng phi c thc hin thng xuyn ph hp
vi din hot. Vic cp nht n gin ta s thc hin vic cp nht li v tr v gc
quay hay l ma trn bin i cho tng khp trong khung xng bt u t nt gc.
Bin i ca mt nt s bng bin i ca nt cha nhn vi bin i ca n vi nt
cha.

- 88 -

Chng 5. H thng din hot (Animation System)

Bn cnh vic bin i trong cu trc khung xng th ta cn ton b khung


xng bin i nh di chuyn v tr, thay i gc quay so vi li th gii trong
Game. thc hin vic ta phi c cc bin lu v tr v gc quay hin thi
ca nt gc. Ta s thc hin vic cp nht ton b khung xng vi t nt gc vi
v tr v gc quay l v tr v gc quay hin thi ang lu.
5.2.3. ng dn nh hng cho din hot
5.2.3.1.

Gii thiu v ng nh hng

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.

Cp nht bin i trn cc ng c bn

Nh ni, mt l trnh cho nhn vt i theo s bao gm trong nhiu ng


c bn. Trong h thng din hot ca mnh, chng ti xy dng cc 2 loi ng
c bn l ng thng v ng cong Bezier.
nhn vt di chuyn theo ng th ta s tnh v tr v vector php tuyn cho
nhn vt vo tng thi im da theo thi gian tri qua k t khi nhn vt di
chuyn. Sau khi bit v tr v gc quay hin ti ca nhn vt ta s thit lp vo
gi tr v tr v gc quay ca nt gc ca cu trc cy ca khung xng.
i vi ng thng:

Hnh 5-2 V d ng i thng

Da vo qung ng i c ca i tng t im u tin ta tnh c


s = khong cch / di qung ng
v tr hin ti = v tr u + s*(v tr cui - v tr u)
Cn hng l l hng ca ng thng (vector cui vector u)

- 89 -

Chng 5. H thng din hot (Animation System)

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:

Hnh 5-3 V d ng i Bezier

y chng ti khng i su vo ng cong Bezier v mt ton hc m ch


cp n cc cng thc dng trong lp trnh. Phng trnh ton ca ng cong
Bezier nh sau:
C(s) = P1*(1-s)3 + P2*3*s*(1-s)2 + P3*3*s2*(1-s) + P4*s3 vi s l h s
t l:
s = khong cch n im u tin / khong cch c ng cong.
Khong cch c ng cong c xc nh gn ng nh sau:
Gi length1 = Khong cch t im P1 n P2.
length2 = Khong cch t im P2 n P3.
length3 = Khong cch t im P3 n P4.
length4 = Khong cch t im P1 n P4.
Khong cch qung ng = (length1 + length2 + length3)*0.5 + length4*0.5

Gi s ta c 4 vector cho bit v tr ca cc im l P1, P2, P3, P4 l vec1,


vec2, vec3, vec 4 v ta cn tnh vector hin ti ca mt im cch im u mt
khong no , ta thc hin nh sau:
Ta tnh s da trn cng thc trn.
Gi vecOut l vector v tr ca im hin ti ta c:
vecOut = vec1*(1-s)3 + vec2*s*(1-s)2 + vec3*s2*(1-s) + vec4*s3.

V tip tuyn c tnh bng cch ly o hm ca phng trnh ng cong.

- 90 -

Chng 5. H thng din hot (Animation System)

5.2.4. Vn v qun l din hot


5.2.4.1.

Cc vn c bn trong din hot

Cc loi din hot:


C hai loi din hot chnh ca cc i tng l din hot khung xng v din
hot ni suy. Din hot khung xng tc l cc s chuyn ng da trn cu trc
khung xng v thc hin din hot da vo cc khung hnh lm kho. Din hot
ni suy l vic thc hin din hot bng php ni suy gia chuyn ng ngay trc
v ngay sau n. Trong cc Game ngy nay hu ht lu cc m hnh bng cu trc
khung xng v kt hp c hai loi din hot to ra mt chuyn ng p mt.
Vn thi gian trong din hot:
Cc Game thc hin trong mt h thng thi gian thc. Thi gian l yu t quan
trng cn ch khi xy dng Game. Nh ta bit trong mt chng trnh Game thc
cht ta c mt vng lp v tn, ti mi vng lp ta thc hin qu trnh hin th tng
ng vi thi gian . Trong h thng din hot th kt qu cui cng l phi c mt
chuyn ng mt m v khng b git do phi m bo c s khung hnh
trong mt giy cao hay l thi gian gia cc vng lp chnh phi ngn.
Mt iu quan trng trong yu t thi gian l ta phi lm sao cho h thng din
hot ca ta hot ng ging nhau trn nhng my tnh c tc x l khc nhau. V
d trn mt my tc 2GHz v trn mt my tc 500MHz th trn my 2GHz
chuyn ng s mn hn trn my 500MHz nhng phi m bo c chuyn ng
ging nhau v chng thc hin trong thi gian nh nhau. gii quyt ta s thc
hin bng cch tnh khung hnh hin ti bng ni suy gia cc khung hnh trc v
sau n.
Cc khung hnh trong chuyn ng:
Mt chuyn ng ca m hnh l mt dy cc bin i ca m hnh theo thi
gian. Ta khng th lu ton b cc bin i bi v lm nh vy s rt lng ph b
nh m thay vo ta lu s bin i ca m hnh ti mt s mc no . V d

- 91 -

Chng 5. H thng din hot (Animation System)

nh ta lu s bin i ca i tng c sau vi mili giy chng hn. Cc khung


hnh chnh ny c th lu cch nhau nhng khong thi gian khc nhau hoc u
nhau u c. Di y l mt v d v chuyn ng ca vt th theo key frame
vi khong cch gia cc key frame l 40 mili giy.

Hnh 5-4 V d din hot qua cc khung hnh kha

Nh vy thc hin din hot th khi chng trnh yu cu cp nht th da


vo thi gian tri qua truyn vo ta s tnh c frame no cn hin th v s hin
th key frame ln. Nhng r rng ch da vo cc key frame hin th th hnh
nh s khng mt m do s bin i gia cc khung hnh l kh ln. khc phc
vic ny ta cn kt hp thm bin i ni suy vo.
Kt hp bin i ni suy gia cc khung hnh:
thc hin c chuyn ng ni suy gia cc key frame ta phi xc nh
c thi gian tri qua trong chuyn ng. C mi ln chng trnh yu cu ta
cp nht v truyn vo i s l thi gian tri qua th ta tnh ton c thi im
trong chuyn ng v ta c thi gian tng cng ca chuyn ng v tnh c thi
gian t khi chuyn ng. Tip ta s xc nh c key frame ngay trc v ngay
sau n. Gi s ta c c t1 l thi gian thc hin key frame n v t2 l thi gian ca
key frame n+1. Ta tnh c hng s t l:

- 92 -

Chng 5. H thng din hot (Animation System)

s = (t-t1)/(t2-t1) vi t l thi gian hin thi. Nh h s ny ta d dng ni suy ra


bin i hin ti da vo key frame n v n +1:
Khung hnh lc t = khung hnh lc t1 + s* (khung hnh lc t2 khung hnh lc t1)
S bin i nh vy c 2 u im:
Chuyn ng s mt m, p v thc hn.
Chuyn ng s din ra ging nhau trn nhng my c tc CPU khc
nhau.
5.2.4.2.

T chc qun l din hot

Nh ta bit, mt nhn vt c mt khung xng v km theo l mt s cc


din hot ring bit nh ng, i, nhy, tn cng, Chng ta cn h thng din
hot cho php qun l c tt c cc din hot cho mt nhn vt.
thc hin c yu cu ta phi t chc qun l t thp n cao, t chi tit
n tng qut. C th ta xy dng lp qun l mt din hot cho mt khp xng,
da vo lp ny ta xy dng lp qun l mt din hot cho ton b khung xng,
v cui cng da vo lp va xy dng ta xy dng tip lp qun l tt c cc din
hot cho mt khung xng. Ti lp tng qut nht (qun l ton b din hot) ta c
th thc hin cc kt hp cc din hot li vi nhau. Qu trnh tch hp minh ha
theo s lp sau:

Hnh 5-5 S quan h cc lp qun l din hot

- 93 -

Chng 5. H thng din hot (Animation System)

Qun l din hot cho mt khp xng:


Trong lp qun l din hot cho mt khp xng ta cn c cc thng tin nh
sau:
Con tr ch n khp xng trong khung xng m ta cn qun l. Tt c
nhng thng tin v khp xng s c ta truy cp da vo con tr ny.
Phi lu cc thng tin din hot ca mt khp xng. Thng tin ny l mt
cu trc lu thng tin din hot c np t tp tin v chnh khp xng, v khp
xng cha, v danh sch cc khung hnh ca din hot.
Trong lp qun l ny ta cn phi cung cp cc phng thc cho php truy xut
n vector v tr v quaternion quay ca cc khung hnh trong chui cc khung hnh
bin i. Chng ta cn c th thc hin cp nht li trng thi cho khp xng khi
bit khp xng ang vo thii im no ca din hot.
Qun l din hot cho ton b khung xng:
Vic qun l cho ton b khung xng cn c mt danh sch cc lp qun l
cho mt khp xng. Trong lp qun l ny ta cn qun l cc thng tin lin quan
n din hot chung cho khung xng nh: khong thi gian tri qua t khi din
hot t khung hnh th nht, din hot c lp i lp li khng, khong cch di
chuyn ca khung xng k t ln cp nht trc v tng khong cch di chuyn
ca khung xng trong ton b din hot.
Khi cn cp nht din hot cho ton b khung xng ta s thc hin cp nht
din hot cho tng khp xng trong khung xng. Trong lp ny ta cn phi
cung cp cc phng thc cho php hiu chnh thay i din hot nh v thi gian
din hot, khong cch trong din hot.
Qun l tt c din hot cho khung xng:
Mt khung xng c nhiu din hot, ta cn danh sch cc i tng vi mi
i tng qun l cho mt din hot. Thng thng ti mt thi im ta c mt

- 94 -

Chng 5. H thng din hot (Animation System)

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.

Kt hp cc din hot khc nhau vo khung xng

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 -

Chng 5. H thng din hot (Animation System)

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.

Kt hp cc din hot trong cc phn ca khung xng

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 -

Chng 5. H thng din hot (Animation System)

Vic xy dng ny cn gip ta tic kim rt nhiu din hot v ta c th thc


hin kt hp cc din hot ngay trong khung xng. V d nh trong phn thn
nhn vt ta c th to ra chuyn ng bn kt hp vi i, chy, nhy cn 4 din
hot. Nu ta khng thc hin kt hp ta cn xy dng thm cc din hot i bn,
chy bn, nhy bn. R rng vic phi hp cc chuyn ng gip ta gim nh cng
vic i rt nhiu v tng hiu qu thc hin ln rt cao.
Cch thc thc hin:
tin minh ha cch thc hin ta xt v d c th sau:
Ta c mt khung xng l thn ngi vi khp u tin (ch s l 0) l khp 1b,
2 din hot l i v bn sng. Ta cn thc hin kt hp 2 chuyn ng ny vo 2
phn khc nhau trong cu trc khung xng. Phn t hng tr xung ta thc hin
din hot i, cn phn t hng tr ln ta thc hin din hot bn. Hnh khung xng
nh sau:

Hnh 5-6 Minh ha kt hp chuyn ng cc phn trong khung xng

Trc ht ta s chia phn khung xng thn ny ra lm 2 knh. Knh th nht t


khp 2a tr i n ht. Knh th 2 t khp 1b n khp 1a. y mt knh l mt

- 97 -

Chng 5. H thng din hot (Animation System)

khi nim ta a ra qun l vic kt hp cc din hot. Mt knh s gm 4 thng


s sau:
Khp bt u ca knh.
Khp kt thc ca knh. Ch s ca khp kt thc phi ln hn hay bng ch
s ca khp bt u.
Ch s fade-in: ch ra s khp xng bn trong knh chu nh hng bi din
hot. V d nu knh th nht c ch s fade-in = 2 th c ngha rng 2 khp 2a v
khp 3a s b nh hng khi ta thc hin kt hp din hot. C th 2 khp 2a v
khp tip theo 2a b tc ng ca chuyn ng bn sng. T l nh hng ca din
hot bn sng ln khp s tng dn theo ch s. Cng thc tnh t l nh hng
nh sau:
fadeInWeight = 1 / (fadeIn + 1)
T l cho khp c ch s i = fadeInWeight*(i-ch s khp u ca knh+ 1)

Ch s fade-out: ch s ny ch ra s khp xng bn ngoi knh k t knh


cui chu nh hng bi din hot. V d nh ta thit lp ch s fade-out ca knh
th 2 l 2 th 2 khp xng 2a v 3a s b tc ng. T l tc ng ca din hot (c
th l i) s gim dn theo chiu tng ca ch s. Cng thc tnh t l nh hng
nh sau:
fadeOutWeight = 1 / (fadeOut + 1)
T l cho khp c ch s i = 1-(fadeOutWeight*(i-ch s khp cui))

chuyn ng c chnh xc ta phi m bo tng t l tc ng ln khp


xng phi bng 1. V d vi khp xng 2a b tc ng ca knh mt t l l
1/(fade-in+1) = 1/3 th t l ca knh 2 tc ng ln khp 2a phi l 2/3. c th
t c s cn bng nh vy th ch s fade-in ca knh mt phi bng ch s fadeout ca knh 2 v ngc li.

- 98 -

Chng 5. H thng din hot (Animation System)

5.3. H thng din hot trong thc thi


5.3.1. S lp ca h thng din hot

Hnh 5-7 S lp ca h thng in hot

5.3.2. Chc nng cc thnh phn trong s


Mt i tng thuc lp Model s cn thng tin lin quan n din hot v
ng dn. Cc chc nng h thng c chia ra 3 nhm:
5.3.2.1. H thng x l d liu
y chnh l thnh phn x l d liu v din hot c lu trn tp tin nh
dng md5. C th cc lp nh sau:
Lp CMd5Data: Cung cp cc hm c d liu t cc tp tin vo trong cc
cu trc d liu nh sn.
Lp CMd5DataManager: Thc hin qun l vic c d liu t tp tin md5.
Nu c yu cu truy xut n d liu v d liu cha c c th ta s thc hin
c d liu ln, cn ngc li ta ch cn tr n v x dng d liu trong i tng
CMd5Data c.
Mi d liu v din hot cn thit th cc i tng khc phi truy xut thng
qua h thng x l ny.

- 99 -

Chng 5. H thng din hot (Animation System)

5.3.2.2.

Cc lp qun l ng dn

y l cc lp thc hin qun l ng nh hng di chuyn cho nhn vt. C


th c cc lp sau:
Lp CAnimPath: l lp qun l thng tin cho mt ng trong l trnh. Cc
thng tin n qun l bao gm im u, im cui, v di ca l trnh.
Lp CAnimStraightPath: c k tha t lp CAnimPath ci t c th
cch tnh ta v vector php tuyn cho nhn vt trn ng thng khi bit nhn
vt cch im xut pht mt khong cch no .
Lp CAnimCurvedPath: c k tha t lp CAnimPath ci t c th
cch tnh ta v vector php tuyn cho nhn vt trn ng cng Bezier khi bit
nhn vt cch im xut pht mt khong cch no .
Lp CAnimRoute: lp ny qun l thng tin cho mt l trnh. Mt l trnh l
s kt hp nhiu ng li vi nhau. Lp ny s tnh ton v tr v vector php
tuyn cho i tng khi bit khong cch t i tng n im xut pht trn l
trnh.
Lp CAnimRouteController: Qun l thng tin tt c l trnh cho nhn vt.
Trong mt thi im ch c nhiu nht mt l trnh c s dng.
5.3.2.3. Cc lp qun l din hot
Cc lp ny l ci t c th ca cc lp qun l din hot trnh by trong
phn trc.
Lp CTransformNode: Lp ny nh ngha mt i tng lu cc thng tin
bin i. Cc thng tin ca lp qun l bao gm v tr v gc quay ca mt i
tng trong mi tng quan vi i tng cha v vi th gii.
Lp CHierarchy: Qun l cu trc khung xng ca nhn vt. Mi mt khp
trong khung xng l mt i tng thuc lp c k tha t lp
CTransformNode.

- 100 -

Chng 5. H thng din hot (Animation System)

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. H thng vt l (Physics System)

Chng 6

H thng vt l (Physics System)

Gii thiu h thng vt l


Cc yu t cn x l trong h thng vt l
Engine vt l NovodeX
S dng NovodeX
Tm tt

- 102 -

Chng 6. H thng vt l (Physics System)

6.1. Gii thiu h thng vt l


Hin nay i hi ca ngi chi v cht lng Game rt cao. Bn cnh Game
phi c hnh nh p, ni dung hay cn yu cu phi chn thc, gn vi thc t bn
ngoi. cho Game m phng c cc tnh hung xy ra trong thc t th phi
xy dng mt h thng qun l cc tng tc vt l.
C th ni rng tng lai ca Game chnh l vt l. Game s tr nn rt tht khi
x l tt c nhng hiu ng theo quy lut vt l nh va chm, n, chuyn ng
ca cc vt trong cnh Game, nhn vt di chuyn v tng tc vi cc yu t trong
mi trng, v cc hiu ng c bit nh m phng qun o, tc bay trong gi.
Tm li, h thng vt l gip chng ta c th x l cch cc i tng di
chuyn, cch chng ng x trong mi trng vi tng tnh hung c th, v cch
chng tng tc vi nhau. Nh h thng vt l m Game ca chng ta s sinh ng,
t nhin.
6.2. Cc yu t cn x l trong h thng vt l
Cc thuc tnh ca vt liu
Cc thuc tnh ca vt liu chnh l cc c trng vt l v vt cht nh trng
lng, ma st, n hi. Chng ta c th to ra cc mt phng trn khin cho nhn
vt c kh di chuyn c, cc vt c lm bng cht liu g vi cc ch ni c
th gy c khi c lc va chm ln, cc b mt n hi nh cao su, cc b mt
bng kim loi c th un cong c khi tc ng lc, v c th to c cc tng
c th v vn khi b tc ng lc mnh.
Cc i tng bao bc ng v pht hin va chm
Cc i tng bao bc gip chng ta bao cc i tng trong Game thc hin
cc hiu ng vt l ln i tng v pht sinh ra cc s kin tng ng khi cc
va chm xy ra gip chng ta c th a ra cc cch thc x l tng ng. thc
hin c s m phng vt l nh vy chng ta phi da vo cc nh lut vt l c
in trong quan nht l cc nh lut Newton. Cc nh lut vt l ny gip

- 103 -

Chng 6. H thng vt l (Physics System)

chng ta c th to c cc va chm t nhin v nhiu hiu ng p mt v d nh


s rung khi mt ng tin ri xung sn nh, chic xe trt theo qun tnh khi
phanh, Hu ht cc Engine vt l xy dng nn cc hnh bao bc ng nh l
nhng yu t ct li v xy dng cc yu t khc thng qua chng.
Cc khp v s co gin
Cc khp v cc c tnh co gin dng m hnh ho cho cc c cu phc tp
nh cc my mc, xe c, s di chuyn ca cc nhn vt, ca, n by, v cung cp
kh nng cho cc nhn vt cm v thao tc cc i tng trong Game.
Cc cht lng v v nh hnh
Bn cnh vic m phng cc hiu ng nh gn sng trn mt h th chng ta
cn c th tng thm hiu ng cht lng trong nhiu cnh vt nh du, cc ct nc
bn ln, la, cc v kh bn ra cc cht v nh hnh. Cc cht lng ny c th tng
tc vi cc vt ng trong cnh nh bao quanh chng chng hn.
o qun v hiu ng khc
H thng vt l c th gip m phng chnh xc, trung thc v o qun nh o
chong cho nhn vt. Hay h thng c th cung cp cho ta chc nng m phng v
la, khi, sng m. Tuy nhin y ch l mt kha cnh ph c th b qua trong h
thng vt l, ta c th xy dng h thng Particle ring thc hin cho cc hiu
ng ny.
6.3. Engine vt l NovodeX
Hin nay c rt nhiu Engine vt l c to ra kt hp vo cc 3D Engine
to ra cc Game. Mt s Engine vt l tt c th k n l Navok c dng
trong Game Haff Life v NovodeX.
NovodeX l Engine vt l ca hng AGEIA. Hin nay (thng 6 nm 2005)
NovodeX ang c phin bn 2.2 v cha c hon thin. NovodeX l mt Engine
vt l rt mnh v cung cp min ph cho cc hot ng phi thng mi. Engine vt
l ny cn c km nhiu v d v ti liu hng dn cng chnh v vy chng ti

- 104 -

Chng 6. H thng vt l (Physics System)

chn nghin cu v ng dng kt hp vi Nwfc 3D Engine xy dng Game


ng dng.
Engine vt l NovedeX cung cp cho chng ta mt gii pht rt mnh v hiu
qu kt hp mt h thng x l vt l thi gian thc vo trong h thng Game
ca chng ta. NovodeX c thit k d dng kt hp vi cc thnh phn khc
trong mt Game Engine. NovodeX c th lm vic tt trn nhiu API khc nhau
nh Direct3D, OpenLG, NDL Gamebryo, Quake v OGRE. NovedeX cn th th
uc bao bc bi Unreal 3 ca Engine Epic Game v Reality Engine ca Artificial
Studio. Nhng kt qu u ra ca NovodeX cn c th cung cp cho Discreet 3D
Studio Max, SoftImage XSI v cc cng c khc cho php cc nh pht trin c th
xem cng vic ca mnh thc hin trong nhng mi trng tng t.
dng kt hp vi nhng cng ngh km theo, bn thn NovodeX cung cp
mt lot cc cng c to ra cc hiu ng v mi trng ng da trn vt l.
Nhng cng c bao gm:
Rocket viewer ci t v m phng cho cc cnh vt l.
Debug render cho php chng ta phn tch v chnh li Game.
B x l d liu cho php ta np d liu vo nhanh chng.
NovodeX c thit k hot ng ti u trn trn chip AGEIA PhysX.
NovodeX l API duy nht cho php cc nh pht trin Game dng phn cng gia
tng cc hiu ng vt l trong Game da trn AGEIS PhysX chip, y l n v x
l vt l (PPU Physics Processing Unit) u tin trn th gii. NovodeX cn l
API a tiu trnh u tin v duy nht hin nay cho php cc nh pht trin Game s
dng tng thm kh nng x l trong Game ca mnh.
NovodeX cung cp h thng hon ho cc i tng bao bc ng v h thng
pht hin, x l va chm tt. NovodeX c th thc thi trn nhiu mi trng khc
nhau nh Microsoft Window XP, Mac OS X, PhysX PPU. Mt im mnh na ca
NovodeX l n cung cp sn cho chng ta cc lp dng iu khin di chuyn cc
nhn vt.

- 105 -

Chng 6. H thng vt l (Physics System)

Cc chc nng ca NovodeX trong lc thc thi chng trnh gm:


H thng kim sot ng cho mt phng, hp, khi cu, nh cc vt th,
mesh ca mi trng, cc im lm ca i tng.
Cho php to ra cc nhm va chm. Tc l chng ta c th nhm 1 s i
tng thnh mt nhm tin cho vic kim tra v x l va chm gia cc i
tng ny.
Cung cp cc loi khp nh Fixed (c nh), Revolute(bc bn ngoi theo
mt trc), Sperical (cu), Prismatic (lng tr), v Six Degree of Freedom (6 bc t
do) (tham kho thm phn ph lc) cng vi cc php chiu, n hi, qui nh
gii hn cho cc khp quay.
Cc vt liu cho cc b mt vi cc h s ma st ng, ma st tnh v n
hi.
Cung cp nhng hnh trigger cho php chng ta c th x l cc s kin khi
c mt vt bt u va chm, i vo hay ra khi mt vt th no .
Cung cp tia chiu t mt vt th vo mi trng xung quanh. Nh tia chiu
ny chng ta c th xc nh c khong cch cng nh tnh cht ca i tng c
ct vi tia chiu v c th c nhng ng x tng ng. y cng l cch chng ta
c th xy dng nhng ng x thng minh n gin cho cc i tng, v d khi
con qui vt n gn nhn vt mt khong no th ta cho con qui vt tn cng.
Cung cp cc lp do ngi dng nh ngha vi cc hm x l cc s kin tr
v. y l nhng hm rt quan trng cho php chng ta c th x l khi c va chm
xy ra. V d khi nhn vt di chuyn trong mi trng v va chm mt hp th s c
s kin va chm tr v, trong hm x l va chm ta c th thit lp lc tc ng vo
ci hp chng hn.
Cung cp mt b iu khin nhn vt da trn mt chic hp tm. Khi di
chuyn nhn vt, chic hp tm ny thc hin di chuyn trc xc nh xem

- 106 -

Chng 6. H thng vt l (Physics System)

nhn vt s phi di chuyn tip theo nh th no c th p dng ln nhn vt cho


chnh xc.
Thc hin ng b ho h thng vt l vi mt b x l a tiu trnh.
Cho php hin th ch Debug cho h thng to , cc i tng c trong
cnh, cc im va chm, cc vector php tuyn,
Cc cng c pht trin km theo gm c:
Xut ra nh dng tp tin PML c th s dng trong cc phn mm 3DS
Max, SoftImage, v Maya.
Cung cp sn m ngun cho vic a cc i tng trong nh dng tp tin
PML vo trong cnh ca NovodeX.
NovodeX Rocket, mt ng dng ring bit cho php ta np v m phng mt
cnh vi nh dng PML.
NovodeX FX, mt mi trng kt hp m phng cc hiu ng nng cao
trong cc h thng qun l Game hin c.
6.4. S dng NovodeX
6.4.1. Kt hp NovodeX vo Game
NovodeX l mt phn hon ton c lp, chc nng chnh l ch qun l v vt
l v n c xy dng trn mt th vin ton hc ring. Do c th s dng
c cc tnh nng ca NovodeX th cn phi bao bc n li c th s dng kt
hp vi cc thnh phn khc nh h thng hin th, h thng din hot. Vic bao
bc h thng vt l cn gip chng ta c th s dng n mt cch thng nht vi
cc phn khc thng qua cng mt th vin ton.
T tng chnh s dng h thng vt l NovodeX l ta dng cc vt th v
mesh do NovedeX cung cp bao bc hay cha cc vt th v nhn vt ca Game.
Vic qun l vt l ta cho h thng NovodeX thc hin. Sau khi h thng
NovodeX thc hin xong ta ly v tr v gc quay mi ca cc vt th bao bc ca
NovodeX cp nht li v tr v gc quay tng ng cho cc vt th v nhn vt
trong Game. V d nh ta c mt khi hp trong mn Game, ta s dng mt i

- 107 -

Chng 6. H thng vt l (Physics System)

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.

Hnh 6-1 V d bao bc i tng Game bng i tng ca NovodeX

Trong v d hnh v trn, ta c hai i tng mt l mt khi hnh ch nht,


mt l mt khi capsule (hnh tr vi hai u l hai bn cu). Ta s dng hai hnh
hp v capsule tng tng bao bc li vi cng kch thc v khp vi vt th ca
Game. Bng cch thc hin nh vy ta tn dng c tt c cc tnh nng vt l do
NovodeX cung cp v tt nhin ta khng hin th cc hnh bao bc trong Game m
ch dng chng nh vt trung gian x l vt l.
thc hin vic bao bc cc thnh phn trong Game bng cc i tng vt l
th bc u tin v quan trng nht l ta phi khi to cc i tng bao bc.
lm c vic khi to th sau khi xy dng mn, ta xc nh c v tr,
kch thc, gc xoay ca cc i tng trong mn Game th ta to ra cc vt th bao
bc tng ng da trn cc thuc tnh .
NovodeX cung cp cho ta rt nhiu chc nng ta c th hon ton xy dng
mt Game ch da vo n m thi. Tuy nhin trong Game ta ch cn s dng mt s
tnh nng chnh x l vt l. Cc chc nng v vt l chnh cn dng l qun l
vt l cho cc i tng, qun l cc va chm gia cc vt th trong Game, iu
khin nhn vt di chuyn trong mn Game, xc nh im va chm da vo tia

- 108 -

Chng 6. H thng vt l (Physics System)

chiu trong vic x l bn n, kt ni cc i tng thng qua cc khp to nn


nh vt th c c cu phc tp nh xe, h thng truyn lc, Nh vy ta c th
chia h thng vt l ra thnh ba thnh phn chnh sau:
Thnh phn qun l chung: y l thnh phn gip thc hin vic khi to,
hu h thng cng nh thc hin thit lp cc thng s c trung cho h thng vt
l nh gia tc trng trng, cc loi vt liu b mt, x l cc s kin tr v khi c
va chm xy ra, thc hin vic gi lp vt l, v hin th ch debug kim tra.
Trong Game ch tn ti mt i tng h thng vt l ny m thi hay i tng vt
l l i tng ton cc.
Qun l cc i tng: Thnh phn ny thc hin qun l cho cc i tng
tnh, ng trong mn Game. Thnh phn ny gip ta cho khi to cc hnh bao bc
cc i tng, thc hin gi lp vt l, tr v li v tr v gc xoay ta thit lp li
thuc tnh cho cc i tng trong Game.
Qun l nhn vt: Thnh phn ny gip ta qun l s di chuyn hay x l
cc tnh hung xy ra cho nhn vt nh va chm, tin n gn mt i tng khc.
6.4.2. Ci t NovodeX trong ng dng
Tng ng vi ba thnh phn trn, trong h thng vt l c cc lp sau:

Hnh 6-2 Cc lp chnh trong h thng vt l

- 109 -

Chng 6. H thng vt l (Physics System)

6.4.3. Cc thnh phn trong s


Lp MyContactReport:
Lp MyContactReport c k tha t lp NxUserContactReport y l lp ca
NovodeX cung cp ngi dng c th bt v x l cc s kin khi c va chm
gia cc actor trong h thng vt l. Trong lp MyContactReport ta s ci hm
o onContactNotify x l va chm cho cc i tng (tr cc nhn vt).
Lp ControllerHitReport:
Lp ControllerHitReport c k tha t lp NxUserControllerHitReport y l
mt lp cng do NovodeX cung cp x l cc s kin va chm khi nhn vt ca
chng ta va chm phi mt vt cn trong mi trng. Chng ta s x l cho tng
nhn vt ring bit nh thit lp lc tc ng ln vt b va chm, x l AI n gin.
Lp CPhysicsSystem:
y l lp qun l ton b h thng vt l. Trong Game s c duy nht mt i
tng thuc lp CPhysicsSystem cho php ta khi to h thng, hy h thng, khi
to cc thuc tnh chung cho cc i tng vt l, x l va chm.
Cc loi va chm m i h thng vt l xy dng c th x l:
enum ECOLLISION_TYPE
{
COLLISION_NONE,
COLLISION_BOX,
COLLISION_SPHERE,
COLLISION_CAPSULE,
COLLISION_CONVEX,
COLLISION_MESH,
};

Ta s x l va chm cho cc hp, hnh cu, hnh capsule (hnh tr c 2 u l 2


bn cu), cc mt li c dng cho cc mesh tnh v ng c s lng tam gic
cu thnh < 256, v cho cc mesh tnh ln. H thng vt l cng ng thi qun l
3 nhm va chm:

- 110 -

Chng 6. H thng vt l (Physics System)

enum EGAME_GROUP
{
GROUP_NON_COLLIDABLE,
GROUP_COLLIDABLE_NON_PUSHABLE,
GROUP_COLLIDABLE_PUSHABLE,
};

Vi GROUP_NON_COLLIDABLE l nhm cc actor hon ton khng thc


hin va chm vi cc i tng khc hoc khng cn x l va chm cho chng.
GROUP_COLLIDABLE_NON_PUSHABLE l n c va chm nhng ta khng th
di chuyn chng c, v loi cui cng l GROUP_COLLIDABLE_PUSHABLE
cho php ta x l va chm v tc ng lc di chuyn chng.
Mt chc nng quan trng ca lp CPhysicsSystem l cho php ta to ra cc vt
liu tng ng vi cc b mt ca cc vt c trong Game. H thng cn cho php
to lp tt cc hnh bao bc da trn thuc tnh ca cc i tng trong Game.
Lp CObjectPhysicController:
Nh trong s ta thy mi mt i tng thuc lp CMapObject s cha mt
i tng thuc lp CObjectPhysicController. i tng ny s qun l vt l cho
i tng trong Game. Sau khi khi to i tng trong Game ta s thng qua
i tng ny to nn mt i tng bao bc tng ng x l vt l. Sau khi
h thng vt l x l xong ta cng da vo i tng ny thit lp bin i cho
i tng trong Game.
Nh vy, lp CObjectPhysicController phi c c kh nng khi to tt c cc
i tng bao bc tnh v ng cho c mn Game (tr nhn vt) v truy cp vo cc
thuc tnh v v tr, gc quay, trng lng cho cc i tng vt l. Ta c th xem
lp ny l mt giao tip bao bc x l vt l cho cc i tng trong Game.
Lp CCharacterPhysicController:
Lp CCharacterPhysicController cng c chc nng tng t nh lp
CObjectPhysicController nhng c p dng cho mt i tng c bit cho php
ngi lp trnh c th iu khin trc tip l nhn vt. Mi i tng thuc l p

- 111 -

Chng 6. H thng vt l (Physics System)

CActor cng s cha duy nht mt i tng thuc lp CCharacterPhysicController


iu khin nhn vt. Qun l nhn vt l mt tnh nng ni bc ca NovodeX
c cung cp t phin bn 2.2. Trc NovodeX ch c Navok l Engine vt l
cung

cp

kh

nng

qun

nhn

vt.

Nh

vic

xy

dng

lp

CCharacterPhysicController ta s s dng c chc nng ny n gin hn v


hiu qu hn.
Vi s tr gip ca h thng vt l chng ta s to c nhng nhn vt di
chuyn v tng tc tt vi mi trng. Cc tnh nng quan trng iu khin nhn
vt m NovodeX cung cp gm:
Cung cp chc nng cho php kim tra v di chuyn nhn vt theo yu cu
trong mn Game m vn cho php nhn vt tng tc vi mi trng xung quanh.
Cho php thc hin cc chc nng tr tu nhn to (AI) n gin cho nhn
vt.
Di chuyn nhn vt trt trn nn, dc theo cc bc tng hoc vt cn, v
c bit cho php nhn vt leo ln nhng bc thang vi cao ca cc bc thang c th
thit lp trc.
Thng bo v cho php x l tng tc ca i tng vi mi trng nh
lc tc ng ln i tng nh th no khi c va chm xy ra thng qua hm x l
s kin khi c va chm.
Kt hp lp tia chiu nhn vt c th nhm bn n.
x dng chc nng qun l nhn vt trc ht ta phi khi to cc khi iu
khin ca NovodeX bao quanh cc nhn vt ngay sau khi xc nh v tr v kch
thc ban u ca nhn vt. Hnh sau minh ho cc bao bc nhn vt bng khi
hnh hp:

- 112 -

Chng 6. H thng vt l (Physics System)

Hnh 6-3 iu khin nhn vt vi NovodeX

Nh hnh v, ta s dng mt hnh hp bao quanh i tng. Khi cn thc


hin di chuyn nhn vt ta s thc hin di chuyn hnh hp bao quanh bng hm
move do NovodeX cung cp. Thc cht khi ta gi hm move di chuyn hnh hp
iu khin th NovodeX s thc hin kim tra xem nhn vt c th di chuyn n
im mong mun khng bng cch s dng mt hnh hp th v di chuyn hnh
hp th ny n v tr cn n. Sau qu trnh kim tra nh vy, NovodeX s xc
nh c v tr cng nh vn tc di chuyn tip theo ca khi hp v s thc hin
di chuyn tht s.
Sau khi iu khin hnh hp iu khin di chuyn ta s ly v v tr v gc quay
mi thit lp cho i tng.

- 113 -

Chng 6. H thng vt l (Physics System)

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. Gii thiu Game demo Dead Rising

Chng 7

Gii thiu Game demo Dead Rising

Gii thiu Game demo Dead Rising


Ni dung ct truyn
Cc thnh phn chnh cn s dng
H thng cc tp tin nh ngha
Tm tt

- 115 -

Chng 7. Gii thiu Game demo Dead Rising

7.1. Gii thiu Game demo Dead Rising


Game demo Dead Rising l ng dng Game c php trin vi mc ch minh
ha cho cc tnh nng ca Nwfc Engine ngoi ra Game ny cn tch mt s tnh
nng mi gip tng cng cht lng ha v Gameplay.
7.2. Ni dung ct truyn
Nm 2175, khoa hc k thut trn tri t v cng pht trin c bit l ngnh
khoa hc v tr. Tri t hin ti b con ngi tn ph nng n v mc
nhim v cng khng khip. Nhn bit rng tri t s b hy dit trong thi gian
ti, con ngi tin hnh nghin cu mt d n v cng khng l: a ton b
loi ngi ln sao Ha. D n ny mau chng c hi ng Lin minh cc
hnh tinh (tin thn l t chc Lin Hip Quc) chp nhn. Cc k hoch nhanh
chng c trin khai, u tin con ngi cho xy dng mt cn c tin trm ti
sao Ha nghin cu tnh hnh mi trng v khng kh ti y, mc tiu chnh
ca cn c ny l phi nghin cu cc cu trc a tng ca sao Ha tm ra
sng bng, loi vt cht duy nht c th sn xut ra nc trn sao Ha. Trong qu
trnh khai thc v tm kim trn cc cu trc a tng hng triu nm tui ca sao
Ha con ngi pht hin mt s cu trc kin trc v cng k l, cc nh khoa hc
xc nh y l vt tch ca nn vn minh v cng c xa, tn ti trc khi loi
ngi xut hin hng triu nm. Cng nghin cu con ngi khm ph ra nn
vn minh y c nn khoa hc k thut pht trin gp nhiu ln tri t by gi v
c thi k dn s v cng ng c. Nhng cc nh nghin cu cng pht hin
ra mt im v cng k l: ch trong mt thi gian ngn, ton b c dn ca nn
vn minh y hon ton bin mt m khng li vt tch g, ngay c mt b xng
ha thch cng khng. iu g xy ra vi h? vn l iu b n khng c li
gii p ch bit rng vo lc h pht minh c cch m cnh cng vo th
gii song song. iu ny t ra mt lot cu hi, liu c phi h di chuyn
ton b dn c ca mnh vo th gii song song y nh tri t ang lm by gi

- 116 -

Chng 7. Gii thiu Game demo Dead Rising

hay khng, cc nh khoa hc vn mi loay hoay tm li gii p, cho ti mt


ngy
Trung tm ch huy ti tri t lin tc nhn c cc tn hiu khng r rng t
trm nghin cu trn sao Ha, t lu sau th ngi ta khng th nhn c bt k
thng tin phn hi g ti sao Ha na, thng ip cui cng m trung tm tri t
nhn c l li ku cu khn cp ca mt ngi no no..oh.el..p..m.e.
xc minh iu g xy ra cho cn c sao Ha, i c nhim Bravo Team c
thnh lp. Cc thnh vin ca i c nhim c tuyn chn v cng gt gao t
lc lng lnh marine (lu lng tinh nhu nht ca tri t). Nhim v ca Bravo
Team l tip cn trung tm iu khin chnh trn cn c sao Ha, thit lp thng tin
lin lc li vi tri t v tm hiu iu g xy ra ti . c h tr bi tu
chuyn ch qun s Dropship, Bravo Team nhanh chng tip cn trm nghin
cu trn sao Ha. Ci m h nhn ra u tin l ch l khng kh yn lng n gh
ngi, hu nh khng thy mt cht g chng t l s sng tng hin din ni
y. n c trung tm iu khin chnh, Bravo Team cn trng i vo, bn ch l
thnh vin trong lc lng h tr (Backup Team) nn c giao nhim v canh gi
cng chnh ca trung tm iu khin. Bit bao nhiu v kh ti tn hng nng i
cng vi lc lng thm nhp (Assault Team) ch li cho bn mt khu machine
gun c k vi mt vi bng n. Nhim v ca bn l phi lun duy tr lin lc vi
Assault Team kim sot tnh hnh. iu g n phi n, bn nghe thy ting
sng n, ting v, ting la ht, rn r trong b m pht chc mi th u im
bt, im nh lc ban u bn n y vy. Bn khng thch chuyn ny, iu g
xy ra ? trong u bn c lun quanh qun cu hi y. Quyt tm tm cho ra s
tht bn quyt nh tin vo bn trong cn c. Vi khu machine gun nm cht trn
tay bn a tay n nt m cng chnh
Cn c mng bt u v c th n s khng bao gi kt thc

- 117 -

Chng 7. Gii thiu Game demo Dead Rising

7.3. Cc thnh phn chnh cn s dng


Nhim v chnh ca Game demo Dead Rising l dng minh ho cc chc
nng ca Nwfc Engine. Nhng nu ch s dng Nwfc Engine th ta ch c th dng
hnh 3D ch khng th to thnh ng dng Game hon chnh c. Chnh v l
ta s s dng thm cc h thng khc b sung.
H thng din hot: S dng h thng din hot c gii thiu v xy
dng chng 5.
H thng vt l: S dng h thng vt l c gii thiu v xy dng
chng 6.
H thng ht (Particle System), tr tu nhn to (AI): S c trnh by
chng sau.
Ngoi ra ta cn thm cc h thng ph nh h thng qun l tp tin, h thng
qun l m thanh.
Trong cc h thng trn, h thng din hot v h thng vt l c xy dng
mang tnh c lp v tng qut cao nn c dng nhiu ng dng khc nhau.
Chnh v vy chng ti trnh by nh mt phn ring khng lin quan n ng
dng c th.
7.4. H thng cc tp tin nh ngha
Cc tp tin nh ngha (defination files) l h thng tp tin c pht trin t
nh dng tp tin Parameter ca Engine. H thng tp tin ny c vai tr rt ln trong
Game v h thng ny gip lu tr tt c cc thuc tnh v thng s ca tt c cc
i tng trong Game, t ngi chi (player), cc con qui vt (monsters) cho n
h thng ht (particle system), tr tu nhn to (AI) Vic lu tr cc thng s
trong tr chi trong cc tp tin c ngha rt ln trong vic chnh sa v thay i
sau ny m khng cn phi bin dch li m ngun ca ton b chng trnh.
H thng tp tin nh ngha trong Game Dead Rising c phn chia nhiu
thnh phn ty theo chc nng s dng.

- 118 -

Chng 7. Gii thiu Game demo Dead Rising

7.4.1. nh ngha giao din (GUI)


Tp tin nh ngha giao din cho php ngi thit k ha thit k v trnh by
cc i tng giao din trn mn hnh.
mgun_hud
{
matlib
panel ammo
{
material
rect
align
color
text_org
}
panel ammo_filler
{
material
rect
align
color
text_org
}
. . .
}

"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 ]

7.4.2. nh ngha h thng ht (Particle System)


Tp tin nh ngha cho h thng ht lu tr cc thuc tnh hnh thnh nn 1 h
thng ht c trng. Tp tin nh ngha gip phn r cng vic ca ngi thit k v
ngi lp trnh.
blood_pray
{
material
sprites
e_type
e_size
e_cycletime
e_numpars
e_maxcycle
max_particles

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"

Chng 7. Gii thiu Game demo Dead Rising

c_spinvar
c_lifevar
c_dirVar

0.0
0.5
0.5

c_start_color
c_end_color

[ 1.0, 1.0, 1.0, 1.0 ]


[ 1.0, 1.0, 1.0, 0.5 ]

// smoke unique info


scale_speed
0.5
wind_force
[ 0.0, -5.0, 0.0 ]
wind_distort
0.0

7.4.3. nh ngha mn chi (Map level)


Tp tin ny c nhim v nh ngha cc thc th tnh (static entity) cho 1 mn
chi (ci hp, ca, items) C 3 loi thc th c th c nh ngha:
entity. nh ngha thc th tnh
door. nh ngha cc ca t ng
item. nh ngha cc vt dng c th tng tc vi ngi chi nh bnh
mu, hp n
entity
1
{
object
pos
rot
}
. . .
door
{

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 -

Chng 7. Gii thiu Game demo Dead Rising

pos
rot
affect_range
sleep_time
sound
{
}
. . .

affect

[ -76.728 , 16.0 , -255.275 ]


[ 0 , 90 , 0 ]
10.0f
60.0f

"sound/voice/voc_yeah_right.wav"

7.4.4. nh ngha i tng v AI


Gip nh ngha cc tnh cht ca cc thc th ng (npcs, monster, player ..)
hellknight_a
{
body
particle

}
. . .

hellknight_b
gob_drop

rotate_speed
jump_height

2.0
35.0

extents
skinwidth
slopelimit
stepoffset
mass

[24, 55, 24]


0.1
45.0
10.0
500

tongue3

nh ngha cc thuc tnh AI, m thanh v hnh ng ca NPCs


hellknight
{
actor

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 -

Chng 7. Gii thiu Game demo Dead Rising

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

7.4.5. Cc nh ngha khc


Ngoi ra Game cn s dng tp tin nh ngha cho rt nhiu mc nh khc nhau
nh nh ngha cc vt th dng hnh (render model), nh ngha cc thuc tnh vt
l cho vt th, nh ngha v kh, nh ngha ngi chi
Vic trin khai h thng tp tin nh ngha c ngha rt ln trong vic m rng
Game sau ny nh ta hon ton c th to 1 mn chi (level) mi hay thm vo cc
vt th mi m khng phi sa li ton b code ca chng trnh rt thun li
pht trin cc level editor sau ny.
7.5. Tm tt
Trong chng ny, chng ta c gii thiu v Game demo Dead Rising
cng cc thnh phn lin quan. Chng ti cng trnh by v h thng cc tp tin
nh ngha gip qun l mi thng tin ca Game mt cch thng nht v cho php
thay i, m rng sau ny. Trong chng tip ta s xem xt n 2 thnh phn lm
nn nt c trng v li cun ca Game demo Dead Rising l h thng ht (Particle
System) v AI.

- 122 -

Chng 8. H thng ht (Particle System) v AI

Chng 8

H thng ht (Particle System) v AI

H thng ht (Particle System)


Tr tu nhn to (AI)
Tm tt

- 123 -

Chng 8. H thng ht (Particle System) v AI

8.1. H thng ht (Particle System)


Hin nay h thng ht tr thnh khng th thiu trong cc ng dng Game.
H thng ht c cng dng rt to ln trong vic thit k cc hiu ng cho bi cnh.
H thng ht trong Game thng c dng to cc hiu ng nh khi la, chy
n thi tit v cc hiu ng phc tp khc nh sm st, nng lng, nh sng
H thng ht l mt tp hp cc ht (particles) c cc thuc tnh v hnh ng
hon ton c lp vi nhau. Ngun pht ra cc ht c gi l ngun pht (emitter),
ngun pht c chc nng cung cp cho cc ht cc thuc tnh khi to ban u. Sau
khi c khi to mi ht s t mnh hnh ng c lp theo cc thuc tnh ca
mnh cho n khi cht i.
Mi ht trong h thng khi dng hnh s c biu din bng 1 a gic (thng
l t gic). c im ca a gic ny l lun hng v pha camera cho d l
camera v tr hay hng no i chng na.
Cn c vo mc ph thuc ca mi ht vo camera (khi dng hnh), h thng
ht trong Game chia ra lm 2 loi: hon ton hng v pha camera (smoke particle
system), hng v camera nhng b rng buc trn phng ca vn tc (spark
particle system).
8.1.1. Smoke particle system

Hnh 8-1 c im ca 1 particle dng smoke

- 124 -

Chng 8. H thng ht (Particle System) v AI

c im ch yu ca h thng ny l cc a gic biu din cho mi ht khi


dng hnh s hng hon ton v hng ca camera (tc l vector php tuyn ca
a gic song song vi hng camera). Do khi camera bt c u th ta cng
thy ht l mt hnh vung.
Trong smoke particle cc vector V song song vi T, v vector U song song vi S
(vi S, T l h trc ta ca camera).
H thng ht ny c dng gi lp cc hiu ng ging khi nh khi, mu,
la, nng lng
8.1.2. Spark particle system
h thng ny a gic ca cc ht ch hng v pha camera mt phn (do cc
ht b rng buc trn 1 phng c nh, thng l phng ca vn tc), vi c tnh
nh vy khi camera c v tr v hng nm trn phng ca ht th ta thy ht ch
cn l mt ng thng.

Hnh 8-2 c im ca 1 particle dng spark

Trong spark particle cc vector U, V, W hp thnh h trc ta vung gc


tng i mt, do din tch ca ht hng v pha camera lun l ln nht.
H thng ht ny c dng gi lp cc hiu ng ging nh dng tia la nh
tia la pht ra khi va chm, tia la pht ra khi n thot ra t nng sng, git nc,
ui tn la (hu ht cc h thng trn u c tnh cht l cc ht dp v di trn
phng ca vn tc).

- 125 -

Chng 8. H thng ht (Particle System) v AI

8.1.3. Mt s h thng ht c s dng trong Game

Hnh 8-3 Mt s h thng ht c s dng trong Game

Trong (t tri qua phi, t trn xung di)


Hnh 1. Khi bc ln khi bn sng
Hnh 2. Tia la chp khi n ra khi nng sng
Hnh 3. Tia la xut hin khi n va chm vi tng
Hnh 4. La bc ln t ngi qui vt
Hnh 5. Nc bt chy ra t ming qui vt, to cm gic rng rn
Hnh 6. Khi bc ln t chic ca my
Hnh 7. Mu vng ra t ngi qui vt khi b bn trng
Hnh 8. Hiu ng nh sng khi qui vt cht hay xut hin
Hnh 9. nh sng pht ra t ngn n

- 126 -

Chng 8. H thng ht (Particle System) v AI

8.2. Tr tu nhn to (AI)


Trong Game Dead Rising c trin khai mt h thng tr tu nhn to n gin
iu khin cc nhn vt ph (NPCs Non Playable Characters) trong Game m ch
yu l nhng con qui vt (monsters).
8.2.1. C s l thuyt hnh vi
Mi con qui vt trong Game l mt b c bit suy ngh v hnh ng theo bn
nng. Bn nng ca qui vt hnh thnh h thng AI c nh trong Game. Ton b
h thng AI ca qui vt c th tm tt nh sau.
Cc hnh vi ca qui vt u phu thuc vo v tr ca n i vi ngi chi.
Mi qui vt u c 2 thuc tnh quan trng l phm vi nhn thy (hay nghe
thy), v phm vi tn cng.
Phm vi nhn thy. L tm nhn hay bn knh ti a m qui vt c th nhn
thy ngi chi. Gi tr ny ph thuc vo cao v thuc tnh ca mt.
Phm vi tn cng. L bn knh ti a m qui vt c th tn cng ngi chi.
Gi tr ny ph thuc vo v kh s dng v c tnh ca hnh ng tn cng c
s dng (tm xa, cao)
Qu trnh ngi chi t bn ngoi i trong phm vi nhn thy ca qui vt s
kch hot hnh lot cc hnh vi ca qui vt.
Qui vt s tm mi cch xoay hng nhn ca mnh v pha ngi chi,
theo AI qui vt s tm cho mnh gc xoay nh nht c th quay v pha ngi
chi 1 cch nhanh nht. Thi gian thc hin qu trnh ny ph thuc rt ln vo tc
xoay ca qui vt.
Sau khi hng v pha ngi chi, qui vt s de da hay lm khip s
ngi chi (c th bng nhiu phng php nh rng to, hay khi ng v kh
chng hn).
K tip qui vt s tin v pha ngi chi tn cng. Hnh ng ny c
th c thi gian thc hin di (ty vo khong cch ca ngi chi v tc ca

- 127 -

Chng 8. H thng ht (Particle System) v AI

qui vt) do trong qu trnh ny qui vt s lun t cp nht hng nhn ca n


ti ngi chi m bo qung ng phi i lun ngn nht.
Sau khi ngi chi nm trong phm vi tn cng ca qui vt, qui vt s
chuyn sang hnh ng tn cng ngi chi (mi qui vt c th s dng nhiu
hnh ng tn cng khc nhau vi mc st thng khc nhau). Nu trong qu
trnh tn cng m ngi chi ra khi phm vi tn cng th qui vt quay li bc 3
(tin v pha ngi chi).
Chui hnh vi ca qui vt kt thc khi ngi chi ra khi phm vi nhn thy
ca qui vt hay qui vt b cht.

Hnh 8-4 Cc thuc tnh biu din cho hnh vi ca qui vt

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 -

Chng 8. H thng ht (Particle System) v AI

8.2.2. S trng thi


Mi qui vt trong Game c biu din bng 6 trng thi.

Hnh 8-5 S trng thi ca qui vt

Cc trng thi
Tn trng thi

ngha

Bnh thng (Idle)

Trng thi bnh thng, qui vt ng yn khng di chuyn

Nhn thy (Sight)

Nhn thy ngi chi, qui vt thc hin hnh vi e da ngi


chi

Di chuyn ( tn

Di chuyn hng v pha ngi chi tn cng

cng) (Assault)
au n (Pain)

Qui vt au n khi b thng v mt mu

Tn cng (Attack)

Qui vt tn cng ngi chi bng v kh hay tay khng

Cht (Death)

Qui vt b cht
Bng 8-1 Cc trng thi ca qui vt

- 129 -

Chng 8. H thng ht (Particle System) v AI

Cc hnh ng
Tn hnh ng

ngha

B thng

Qui vt b thng do b ngi chi bn trng

Mu = 0

Mu ca qui vt = 0

Ngi chi trong

V tr ca ngi chi nm trong phm vi nhn thy ca qui

phm vi nhn thy

vt

Ngi chi trong

V tr ca ngi chi nm trong phm vi tn cng ca qui 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

Ngi chi ra khi V tr ca ngi chi nm ngoi phm vi tn cng nhng nm


phm vi tn cng

trong phm vi nhn thy ca qui 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

Chng 9

Ci t v hng dn s dng

Mi trng pht trin ng dng v cc cng c


Kt qu t c
Hng dn s dng
Tm tt

- 131 -

Chng 9. Ci t v hng dn s dng

9.1. Mi trng pht trin ng dng v cc cng c


Nwfc 3D Engine c pht trin trn cc mi trng v cng c sau:
Mi trng pht trin: Microsoft Visual C++ .NET 2002, DirectX 9.0c SDK
Update Summer 2004
Mi trng trin khai: Microsoft Windows 2000 / XP (SP1,2)
Cc th vin:
o Th vin debug v qun l li Debugger (www.triplebuffer.devmaster.net)
ng dng Game Dead Rising c pht trin trn cc mi trng v
cng c sau:
Mi trng pht trin: Microsoft Visual C++ .NET 2002
Mi trng thit k ha 3D:3DS Max 7.0,Maya 5.0, Deep Exploration 3.5
Mi trng trin khai: Microsoft Windows 2000 / XP (SP1,2)
Cc th vin:
o Engine ha 3D Nwfc (t pht trin)
o Engine vt l NovodeX SDK 2.2 (www.novodex.com)
o Th vin debug v qun l li Debugger
(www.triplebuffer.devmaster.net)
o Th vin m thanh GAudio (www.obrazstudio.com/gaudio/)
9.2. Kt qu t c
Cc kt qu v ha
Cht lng ha v chi tit m Game t c t c l rt cao do c s
dng hiu ng bump b mt bng normal map (xem chng 4).
Rt nhiu hiu ng c trin khai (h thng ht, nh sng) lm cho Game
v cng chn tht gp phn lm tng tnh kinh d cho Game.
Bi cnh c dng ln rt s gm bu tri, trm nghin cu (trong v
ngoi), a hnh sao Ha
Nwfc Engine hon thnh xut sc vai tr ca mnh khi gip Game pht
trin trong thi gian cc k ngn (gn 2 thng).

- 132 -

Chng 9. Ci t v hng dn s dng

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 -

Chng 9. Ci t v hng dn s dng

iu khin camera (ch i theo ngi chi)


No

Phm

Page Up

Page Down

Di chuyn camera xung thp

Home

Reset camera v v tr ban u

RMB

Xoay hng t do (xung quanh ngi chi)

Tc dng
Di chuyn camera ln cao

Mouse Scroll Phng to thu nh


Bng 9-3 Cc phm iu khin camera ch i theo ngi chi

iu khin camera (ch t do)


No

Phm

Tc dng
Di chuyn camera v pha trc

Up

Down

Left

Lch camera v pha tri (hng khng i)

Right

Lch camera v pha phi (hng khng i)

Home

Reset camera v v tr ban u

Page Up

Page Down

Di chuyn camera xung thp

RMB, LMB,

Xoay hng t do

Di chuyn camera v pha sau

Di chuyn camera ln cao

MMB
Bng 9-4 Cc phm iu khin camera ch t do

- 134 -

Chng 9. Ci t v hng dn s dng

9.3.2. Cc ch chi
Khi bt u chi ngi chi s vo mn hnh gii thiu (intro).

Hnh 9-1 Mn hnh gii thiu

Trong mn hnh gii thiu m nhn ESC th s vo mn hnh tc gi (credit)

Hnh 9-2 Mn hnh tc gi

- 135 -

Chng 9. Ci t v hng dn s dng

Nu ang trong mn hnh gii thiu hay tc gi m nhn Space Bar th s vo


mn hnh chi Game.

Hnh 9-3 Mn hnh chi Game

pha gc di mn hnh chi Game c mt s thng tin v trng thi ca


ngi chi.
Gc di tri l thng tin v mu hin ti ca ngi chi. Khi mt mu,
hnh nh b ngoi ca ngi chi s b thay i. Khi ht mu ngi chi c th tm
bnh cu thng trong khu vc h tr (Backup Storage) bm li cho y.
Gc di phi l thng tin v n ca ngi chi. Bao gm s n hin thi
c np trong sng v tng s n hin c. Khi ht n trong sng, ngi chi
phi np li n mi c bn tip. Nu ht n d tr ngi chi khng th bn
c na, phi ly thng n trong khu vc h tr (Backup Storage) np li.
Trong qu trnh chi, ngi chi s gp nhiu loi qui vt khc nhau (mi ln
ch xut hin 1 con m thi), qui vt sau s mnh hn qui vt trc nhiu ln lm
tng kh cho Game theo thi gian.

- 136 -

Chng 9. Ci t v hng dn s dng

Hnh 9-4 Ngi chi s gp nhiu qui vt trong qu trnh chi

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 -

Chng 9. Ci t v hng dn s dng

Hnh 9-5 Cc vt th tng tc vi nhau theo ng cc nh lut vt l

Khi ngi chi n gn cc cnh ca, ca s t ng m

Hnh 9-6 Ca t ng m khi ngi chi n gn

- 138 -

Chng 9. Ci t v hng dn s dng

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.

Hnh 9-7 Nhiu chi tit c thit k cho khu sng

[1] V n vng ra ngoi


[2] Khi xt ra b phn nh khi
[3] Chp sng nng sng
[4] Tia n phng ra tc rt ln
[5] Tia lazer (mu ) gip nhm bn chnh xc

- 139 -

Chng 9. Ci t v hng dn s dng

Hnh 9-8 Khi bn trng qui vt, mu s phun ra

Ngoi ra, trong Game cn s dng rt nhiu hiu ng khi la v nh sng.

Hnh 9-9 La bc ln t ngi qui vt

- 140 -

Chng 9. Ci t v hng dn s dng

Hnh 9-10 Hiu ng nh sng khi qui vt cht hay xut hin

V nhiu hiu ng khc. Ngoi ra Game cn h tr rt nhiu ting ng m


thanh gip tng cng tnh thc cho Game.
9.4. Tm tt
Chng ny trnh by v cc cng ngh, th vin c s dng, mi trng ci
t v trin khai ca Game demo Dead Rising. Thng qua vic hng dn s dng
chng ti cp n nhng tnh nng ni bc ca tr chi thng qua mt s hnh
nh c chp t Game. Mc d c pht trin trong thi gian rt ngn nhng
Nwfc Engine v Game Dead Rising c cht lng rt tt vi nhiu hiu ng phong
ph.

- 141 -

Chng 10. Tng kt

Chng 10 Tng kt

Kt lun
Hng pht trin v m rng

- 142 -

Chng 10. Tng kt

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 -

Chng 10. Tng kt

10.2. Hng pht trin v m rng


Hng pht trin v m rng ca Nwfc Engine
Cc chc nng hin ti ca Nwfc Engine ch mi dng li mc dng v
cha c hon thin. Trong tng lai, Nwfc Engine c th c pht trin h
tr cc tnh nng ha cao cp nh High Dynamic Range Lighting (HDR),
Render Target Texture, Light mapping, Soft shadow Thm vo c ch tch
hp Vertex Shader v Pixel Shader trong Engine cha c linh hot (do khng th
b sung cc hng gi tr mi t bn ngoi m phi ph thuc vo cc hng gi tr do
Engine cung cp), do c ch ny cng cn c ci tin v nng cp. Bn cnh
Engine cn c th ci tin v mt tc nh ti u ha cc thut ton gip tng
tc dng hnh cng nh b sung thm nhiu thut ton dng hnh ti u khc
nh Occlusion Geometry, Culling
Hng pht trin v m rng ca Game Dead Rising
Game Dead Rising hin ti ch mang mc ch chnh l demo cho kh nng pht
trin ng dng trn nn ca Nwfc Engine do Game s thiu rt nhiu chi tit ca
1 ng dng hon chnh.
Hng m rng ca Game trong tng lai l pht trin Game thnh ng dng
c lp ng thi ci tin cc thut ton Vertex Shader cng nh Pixel Shader
Game c th chy c trn nhiu cu hnh my tnh khc nhau hn.

- 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 -

Hng dn s dng cc chc nng ca chng trnh MeshTools


No
0
1
2
3
4

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)

B. Cc chng trnh h tr thit k Vertex Shader v Pixel Shader

ATI RenderMonkey IDE (www.ati.com)


ATI RenderMonkey l ng dng IDE gip ngi lp trnh v ngi thit k c
th thit k cc phng php dng hnh (dng Vertex v Pixel Shader) hon ton
c lp vi ng dng. Giao din chng trnh ATI RenderMonkey IDE

- 146 -

NVIDIA FX Composer (www.nvidia.com)


NVIDIA FX Composer gip ngi lp trnh thit k Vertex Shader v Pixel
Shader trn nn ca nh dng tp tin Effect (FX file). Giao din ca NVIDIA FX
Composer:

- 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 -

Ngy 7/7/2003 phin bn 1.91 vi hng lot chnh sa v thay i trong


Foundation SDK, cng c h tr v thm cc demo v bnh xe rng ca.
Ngy 19/2/2004 phin bn 2.02 vit li hu ht ti liu k thut.
Ngy 8/4/2004 phin bn 2.03
Ngy 15/5/2004 phin bn 2.1.
Ngy 15/7/2004 phin bn 2.1.1.
Ngy 8/11/2004 phin bn 2.1.2
Ngy 21/3/2005 phin bn 2.2 ra i vi nhiu s thay i v cu trc nh
gp Foundation.dll vo trong physicSDK. Thm cc chc nng v iu khin
nhn vt cng vi cc demo.
n v s dng trong NovodeX:
NovodeX khng s dng mt n v c bit no trong th gii thc. Do iu
quan trng l chng ta xc nh c s chuyn i t n v thc vo trong ng
dng. NovodeX SDK s dng cc s o khng c n v o 3 i lng c bn
l khi lng, chiu di v thi gian do ta c th nh ngha 3 i lng ny theo
bt k n v no ta mun. Thng thng ta dng s dng cc n v nh kilogam
cho khi lng, met cho chiu di, v giy cho thi gian. Cc n v ca cc i
lng khc s c xc nh da trn n v ca 3 i lng trn v d nh n v
vn tc s l n v theo chiu di/n v theo thi gian.
Cng nh bt c phn mm s dng cc s hc no, NovodeX mc nh s dng
cc s du chm ng n (single) nn chng ta phi ch lun gi cc s trong
mt khong gi tr thch hp NovodeX lm vic ng n.
Cc actor:
Trong NovodeX cc actor l yu t chnh trong mt mn. Mt actor c th ng
mt trong 2 vai tr l actor tnh hoc actor ng. Mi actor c th mang nhiu hnh
(shape) khc nhau trong n. V d mt actor l chic xe c th c nhiu hnh nh

- 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.

Khp bao ngoi theo 1 trc (revolute joint):


y l khp m ta ch c th xoay theo mt hng duy
nht. Do ta cn phi xc nh im kt ni v vector
quay cho khp ny. Cc im nm trn chiu di dc theo
vector hng s khng c xt n trong loi khp ni
ny. Mt v d ca khp ni ny l ta dng nh bn l kt
ni cnh ca vi tng nh.

- 150 -

Khp tr (cylindrical joint):


Khp ni tr cho php 2 i tng cng xoay vi nhau theo
mt trc nht nh m thi. V 2 i tng kt ni ny s cng
quay mt gc nhau nhau.
Mt v d s dng loi trc ny l cy anten ca tivi hoc my
thu m.
Khp lng tr (prismatic joint):
Khp ny ging nh khp tr ch n cng cho 2 i tng
cng xoay theo mt trc nht nh ch c im khc bit l n
khng m bo 2 gc quay ca 2 vt l nh nhau.
V d v khp trc l ta dng trong pht nhn lm gim xc cho
xe.
Khp vi im ni trn ng:
im ni trn khp ng m bo im kt ni ca mt vt
chi di chuyn trn mt ng nh trc trn vt kia. Ta cn
cc nh im bt u v vector hng khi khi to kt ni.
Mt v d c th dng loi khp ny l ci giy treo v
treo.
Khp vi im ni trn mt phng:
Loi khp ny cho php ta kt ni 2 vt th vi
im tip xc ca vt th ny s di chuyn
trong mt mt phng ca vt th khc. Khi
khi to cn xc nh im u tin v vector
php tuyn ca mt phng.
V d nh mt bt v trn mt phng.

- 151 -

Khp c nh (fixed joint):


Loi khp ny kt dnh hai vt th vi nhau v gii hn khon bin thin thay
i gia 2 vt th.Khp ny rt hu ch khi m phng nhng cho nt, gy.
Khp khong cch (distance joint):
Loi khp ny s c gng gi gia 2 vt lun cch nhau mt di vi gii gii
hn cho trc no . Chng ta c th dng m phng pht nhn ca xe hay mt
si dy cao su.
Khp rng rc:
Khp ny c th dng m phng cc mc dy xch ni vi nhau.
Khp 6 bc t do:
y l loi khp kh tng hp cho php ta c th kt ni 2 vt theo bt k mt
loi khp no ta c th tng tng ra. Ti mi bc t do ta u c th gi hn gc
quay v vn tc cho n.
Khp c th gy c:
y l loi khp kt ni c bit m ta c th thit lp ln lc ti a cho n.
Khi lc tng tc vt qua ngng ny th 2 vt kt ni nhau s b gy ri ra. Khp
ny ta c th dng kt ni mt bn vi cc chn bn.
Tm li, NovodeX cung cp ta rt nhiu loi khp v cc cch thit lp thuc
tnh v n hi, nhn nhy cho php ta m phng rt nhiu c cu phc tp c
trong thc t.

- 152 -

Cc loi hnh bao bc v pht hin va chm:


x dng NovodeX ta phi da trn cc i tng c bn ca NovodeX
bao bc i tng Game v qun l cc yu t vt l thng qua cc i tng ny
ny di chuyn, pht hin v x l va chm. Cc loi hnh c bn:
Hnh cu (lp NxSphereShape):
y l loi hnh hc c bn v n gin nht. Ta ch cn xc nh tm v bn
knh cho hnh cu ny.
Khi hp (lp NxBoxShape):
Ta cn xc nh kch thc khi hp gm chiu di, chiu rng v chiu cao.
y l hnh bao c dng rt nhiu bao bc cc i tng.
Hnh capsule (lp NxCapsuleShape):
Hnh ny ging hnh tr trn nhng bao trn 2 u. Chng ta c th dng
bao bc thn ngi (bng cch ni nhiu hnh capsule vi nhau).

- 153 -

TI LIU THAM KHO


[1]

DirectX 9.0 SDK Update Summer 2004, Microsoft, 2004.

[2]

Jake Simpson, Game Engine Anatomy 101, April 12, 2002.

[3]

Bendik Stang, Game Engines, IMM DTU, 2003.

[4]

David H. Eberly, 3D Game Engine Design, Morgan Kaufmann Publishers,


2003.

[5]

Wolfgang F. Engel, Shader X2 : Introductions & Tutorials with DirectX


9, Wordware Publishing, Inc, 2004.

[6]

Wolfgang F. Engel, ShaderX2 : Shader programming tips and tricks


with DirectX 9, Wordware Publishing, Inc, 2004.

[7]

Kris Gray, DirectX 9 Programmable Graphics Pipeline, Microsoft Press,


2003.

[8]

William Ford, William Topp, Data Structures with C++ Using STL
Second Editor, Prentice Hall, 2002.

[9]

Jim Adams, Advanced Animation with DirectX, Premier Press Game


Development, 2003.

[10]

Evan Phipho, Focus on 3D Models, Premier Press Game Development,


2003.

[11]

Jim Adams, Programming Role Playing Game With DirextX, Premier


Press Game Development, 2002.

[12]

Maco Monster, Doom3 Models, September, 2004.

[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 -

You might also like