Download presentation
Presentation is loading. Please wait.
1
1 3D Game Programming Using TheFly3D © 王銓彰kevin.cwang@msa.hinet.net
2
2 Introduction to Game Development (3hr) Introduction to Game Development (3hr) Game System Analysis (3hr) Game System Analysis (3hr) The Game Main Loop (3hr) The Game Main Loop (3hr) 3D Game Engine Training (TheFly3D) (6hr) 3D Game Engine Training (TheFly3D) (6hr) Game Mathematics (3hr) Game Mathematics (3hr) Geometry for Games (3hr) Geometry for Games (3hr) Advanced Scene Management System (3hr) Advanced Scene Management System (3hr) Terrain (3hr) Terrain (3hr) Game AI (9hr) Game AI (9hr) Game Physics (3hr) Game Physics (3hr) Game FX (3hr) Game FX (3hr) Characters (3hr) Characters (3hr) Network Gaming (3hr) Network Gaming (3hr) Introduction to MMOG Servers(3hr) Introduction to MMOG Servers(3hr) Audio (1hr) Audio (1hr) The 2D Sprites (2hr) The 2D Sprites (2hr)課程大綱
3
3 One Term Project One Term Project –The Students will divide into several teams –Use TheFly3D Game Engine to code a 3D Real-time Strategy Game –The Teacher will Provide Graphics Materials Two Examinations Two Examinations Homework will be closely coupled with the term project Homework will be closely coupled with the term project 課程要求
4
4 目前 目前 – 數位內容學院 專任講師 / 顧問 – 資策會多媒體研究所 專案顧問 學歷 學歷 – 台灣大學土木工程學系畢業 資歷 資歷 –97-03 昱泉國際股份有限公司 技術長 –96-96 虛擬實境電腦動畫股份有限公司 研發經理 –93-96 西基電腦動畫股份有限公司 研發經理 –90-93 國家高速電腦中心 助理研究員 –89-90 台灣大學土木工程學系 CAE Lab 研究助理 王銓彰
5
5 Game 作品 Game 作品 – 昱泉國際 »DragonFly 3D Game Engine M2 神甲奇兵, VRLobby, 天劍記 M2 神甲奇兵, VRLobby, 天劍記 »Lizard 3D Game Engine 幻影特攻、笑傲江湖 I & II 、神鵰俠侶 I & II 、風雲、小李飛刀、笑傲江 湖網路版、怪獸總動員、聖劍大陸、笑傲外傳 幻影特攻、笑傲江湖 I & II 、神鵰俠侶 I & II 、風雲、小李飛刀、笑傲江 湖網路版、怪獸總動員、聖劍大陸、笑傲外傳 – 西基電腦動畫 »Ultimate Fighter – 1 st Realtime 3D fighting game in Taiwan 王銓彰
6
6 專長 (Expertise) 專長 (Expertise) –3D Computer Graphics –Geometric Modeling –Numerical Methods –Character Animation –Photo-realistic Rendering –Real-time Shading –Volume Rendering 王銓彰
7
7 應用領域 (Applications) 應用領域 (Applications) – 即時 3D 遊戲開發 (Real-time 3D Game Development) – 電腦動畫 (Computer Animation) – 虛擬實境 (Virtual Reality) – 電腦輔助設計 (Computer-aided Design, CAD) – 科學視算 (Scientific Visualization) 王銓彰
8
8 IntroductionTo Game Development
9
9 Game Platform Game Platform Game Types Game Types Game Team Game Team Game Development Pipeline Game Development Pipeline Game Software System Game Software System Tools Tools Introduction to Game Dev
10
10 PC PC –Single player –Match Makings –MMOG (Massive Multi-player Online Game) –Web-based Games Console Console –Sony PS2 –MS Xbox –Nintedo GameCube Arcade Arcade Mobile Mobile –GBA –Hand-held Game Platform
11
11 Designed for Office Application Designed for Office Application Not for Entertainment Not for Entertainment A Virtual Memory System A Virtual Memory System –Unlimited memory using But Video Memory is Limited But Video Memory is Limited PCI/AGP might be a Challenge PCI/AGP might be a Challenge Open Architecture Open Architecture Compatibility Test is Important Compatibility Test is Important Development is Easy to Setup Development is Easy to Setup Game Development on PC
12
12 Specific Hardware Designed for Games Specific Hardware Designed for Games Single User / Single Process OS Single User / Single Process OS In General no Hard Disk Drive (??) In General no Hard Disk Drive (??) Closed System Closed System Very Native Coding Way Very Native Coding Way –Proprietary SDK –Hardware related features Limited Resources Limited Resources –Memory One Console runs, the others do! One Console runs, the others do! Game Development on Console
13
13 RPG (Role playing games) RPG (Role playing games) AVG (Adventure games) AVG (Adventure games) RTS (Real-time strategy games) RTS (Real-time strategy games) FPS (First-person shooting games) FPS (First-person shooting games) MMORPG MMORPG SLG (???, 戰棋 ) SLG (???, 戰棋 ) Simulation Simulation Sports Sports Puzzle games Puzzle games Table games Table games Game Types
14
14 開發團隊 開發團隊 – 製作人 – 執行製作人 – 企劃團隊 – 程式團隊 – 美術團隊 行銷業務團隊 行銷業務團隊 測試團隊 測試團隊 遊戲審議委員會 遊戲審議委員會 Game Team Members
15
15 Team Leader (always) Team Leader (always) 資源管理 (Resource Management) 資源管理 (Resource Management) 行政管理 (Administration) 行政管理 (Administration) 向上負責 (Upward Management) 向上負責 (Upward Management) 專案管理 (Project Management) 專案管理 (Project Management) Game Producer 遊戲製作人
16
16 專案管理執行 (Project Management) 專案管理執行 (Project Management) Daily 運作 Daily 運作 House Keeping House Keeping Not full-time job position Not full-time job position遊戲執行製作人
17
17 故事設計 (Story Telling) 故事設計 (Story Telling) 腳本設計 (Scripting) 腳本設計 (Scripting) 玩法設計 (Game Play Design) 玩法設計 (Game Play Design) 關卡設計 (Level Design) 關卡設計 (Level Design) 遊戲調適 (Game Tuning) 遊戲調適 (Game Tuning) 數值設定 (Numerical Setup) 數值設定 (Numerical Setup) AI 設計 (Game AI) AI 設計 (Game AI) 音效設定 (Sound FX Setup) 音效設定 (Sound FX Setup) 場景設定 (Scene Setup) 場景設定 (Scene Setup)遊戲企劃
18
18 場景 (Terrain) 場景 (Terrain) 人物 (Character) 人物 (Character) 建模 (Models) 建模 (Models) 材質 (Textures) 材質 (Textures) 動作 (Motion / Animation) 動作 (Motion / Animation) 特效 (FX) 特效 (FX) User Interface User Interface遊戲美術
19
19 遊戲程式 (Game Program) 遊戲程式 (Game Program) 遊戲開發工具 (Game Tools) 遊戲開發工具 (Game Tools) –Level Editor –Scene Editor –FX Editor –Script Editor 遊戲 Data Exporters from 3D Software 遊戲 Data Exporters from 3D Software –3dsMax / Maya / Softimage Game Engine Development Game Engine Development Online Game Server Development Online Game Server Development遊戲程式
20
20 Basic Procedures for Game Development IdeaProposalProductionIntegration Testing DebugTuning Concept Approval PrototypePre-alphaAlphaBetaFinal 發想 (Idea) 發想 (Idea) 提案 (Proposal) 提案 (Proposal) 製作 (Production) 製作 (Production) 整合 (Integration) 整合 (Integration) 測試 (Testing) 測試 (Testing) – 除錯 (Debug) – 調適 (Tuning) > Concept Approval > 雛形 (Prototype) > Pre-alpha > Alpha > Beta遊戲開發流程
21
21 遊戲類型 (Game Types) 遊戲類型 (Game Types) 遊戲世界觀 (Game World) 遊戲世界觀 (Game World) 故事 (Story) 故事 (Story) 遊戲特色 (Features) 遊戲特色 (Features) 遊戲玩法 (Game Play) 遊戲玩法 (Game Play) 遊戲定位 (Game Product Positioning) 遊戲定位 (Game Product Positioning) –Target player –Marketing segmentation / positioning 風險評估 (Risk) 風險評估 (Risk) –SWOT (Strength/Weakness/Opportunity/Threat) 遊戲發想 (Concept Design)
22
22 系統分析 (System Analysis) 系統分析 (System Analysis) GDD 撰寫 (Game Design Document) GDD 撰寫 (Game Design Document) MDD 撰寫 (Media Design Document) MDD 撰寫 (Media Design Document) TDD 撰寫 (Technical Design Document) TDD 撰寫 (Technical Design Document) 遊戲專案建立 (Game Project) 遊戲專案建立 (Game Project) –Schedule –Milestones / Check points –Risk management 測試計畫書 測試計畫書 團隊建立 (Team Building) 團隊建立 (Team Building) 遊戲提案 (Proposal)
23
23 美術量產製作 美術量產製作 –Modeling –Textures –Animation –Motion –FX 程式開發 (Coding) 程式開發 (Coding) 企劃數值設定 企劃數值設定 … 量產 ! 遊戲開發 (Production)
24
24 關卡串聯 (Level Integration) 關卡串聯 (Level Integration) 數值調整 (Number Tuning) 數值調整 (Number Tuning) 音效置入 (Audio) 音效置入 (Audio) 完成所有美術 完成所有美術 程式與美術結合 程式與美術結合 Focus Group (User Study) Focus Group (User Study) –Release some playable levels for focus group 遊戲整合 (Integration)
25
25 Alpha 測試 Alpha 測試 – 除錯 (Debug) Beta 測試 Beta 測試 – 數值微調 –Game play 微調 – 對線上遊戲而言 (MMOG) » 封閉測試 (Closed Beta) » 開放測試 (Open Beta) 極限測試 (Critical Testing) 極限測試 (Critical Testing) – 線上遊戲才有 遊戲測試 (Test)
26
26 Bug 分級 (Bug Classification) Bug 分級 (Bug Classification) –A Bug –B Bug –C Bug –S Bug Principles Principles –Bug 分級從嚴 –Tester vs Debugger Bug Classification Bug Dispatch Debug Verify Bug FAQ Y N ?Bugs
27
27 Hardware 3D Graphics API2D APIInput DeviceOS API3D Scene Mngmt2D SpriteGamepadNetworkAudioTerrainCollisionCharacterUIDynamicsSound FX Fighting SystemFX SystemGame AIScript System NPC SystemVirtual AgentTrading SystemStory Game Game Play Layer Engine Layer System Layer Game Software System
28
28 3D Graphics API 3D Graphics API –DirectX 9.0 SDK – Direct3D –OpenGL 2.0 2D API 2D API –DirectX 9.0 SDK - DirectMedia –Win32 GDI Input Device Input Device –DirectX 9.0 SDK – DirectInput Audio Audio –DirectX 9.0 SDK – DirectSound / Direct3DSound / DirectMedia –OpenAL System Layer – APIs (1/2)
29
29 OS API OS API –Win32 SDK –MFC Network Network –DirectX 9.0 SDK – DirectPlay –Socket library System Layer – APIs (2/2)
30
30 3D Scene Management System 3D Scene Management System –Scene Graph Shaders Shaders 2D Sprite System 2D Sprite System Audio System Audio System Gamepad Gamepad Hotkey Hotkey Mouse Mouse Timers Timers Network Network DDK Interface DDK Interface Engine Layer (1/2)
31
31 Terrain Terrain Advanced Scene Management – Space Partition Advanced Scene Management – Space Partition –BSP Tree –Octree Character System Character System Motion Blending Techniques Motion Blending Techniques Dynamics Dynamics Collision Detection Collision Detection SoundFX SoundFX User Interface User Interface Engine Layer (2/2)
32
32 NPC (Non-playable Characters) NPC (Non-playable Characters) Game AI Game AI –Path Finding –Finite State Machine –…–…–…–… Avatar Avatar Combat System Combat System FX System FX System Script System Script System Trading System Trading System Number System Number System … Game Play Modula
33
33 Visual C/C++ Visual C/C++ –.Net 2003 –Visual C/C++ 6.0+ SP5 DirectX DirectX –Current 9.0c NuMega BoundsChecker NuMega BoundsChecker Intel vTune Intel vTune 3D Tools 3D Tools –3dsMax/Maya/Softimage In-house Tools In-house Tools Game Development Tools
34
34 Game System Analysis
35
35 Idea about System Analysis (SA) Idea about System Analysis (SA) Mind mapping Mind mapping Case Study - Our Term Project Case Study - Our Term Project What Will We Talk Here
36
36 For 程式結構 Analysis For 程式結構 Analysis –Program modulus –Tools To Identify 工作量 To Identify 工作量 –Programs/tools under development For 資源 management For 資源 management –Man month –How many programmers ? –Development tools ? –Specific tools ? For Job Dependency Analysis For Job Dependency Analysis Why System Analysis (1/2)
37
37 To make 技術可行性 Analysis To make 技術可行性 Analysis –R&D ? Pre-processor for Pre-processor for –Technical design document –Project management Bridge from Game Design to Programming Bridge from Game Design to Programming Why System Analysis (2/2)
38
38 No Standard Procedures No Standard Procedures It’s Not a Theory, Just Something Must Be Done! It’s Not a Theory, Just Something Must Be Done! You Can Have Your Own Method You Can Have Your Own Method –UML –Mind mapping ( 心智圖法 ) »This is the one we will use for this course –…–…–…–… Something about System Analysis
39
39 Brainstorming Brainstorming Integration Integration Dependency Analysis Dependency Analysis Create the Project Create the Project Write the Technical Design Document (TDD) Write the Technical Design Document (TDD) My System Analysis Steps
40
40 Based on the Game Design to Put Everything As Many As You Could Based on the Game Design to Put Everything As Many As You Could Use Mind mapping Use Mind mapping Including Including –Game system »Combat / Village / Puzzle / … –Program modulus »Camera / PC control / NPC AI / UI / FX /… –Tools »Level editor / Scene editor / … –Entities in games »Characters / vehicle / terrain / audio / … Brainstorming
41
41 Confirm the Resource Limitation Confirm the Resource Limitation Technical Implement Possibility Technical Implement Possibility Put All Related Items Together Put All Related Items Together Man Month Analysis Man Month Analysis –How many ? –Who ? Jobs/System Identification Jobs/System IdentificationIntegration
42
42 Sort the Jobs Sort the Jobs –By dependency –By programmers Prototype for scheduling Prototype for scheduling Dependency Analysis
43
43 Scheduling Scheduling Job Assignment Job Assignment Resource Allocation Resource Allocation Check points Check points Milestones Milestones Risk Management Policy Risk Management Policy System Analysis – Create the Project
44
44 Specification Specification Resources Resources Design in details Design in details Implement Methods ( 工法 ) Implement Methods ( 工法 ) Algorithms Algorithms The Project The Project Output in Each Milestone Output in Each Milestone SOP (optional) SOP (optional) Write the Technical Design Document
45
45 心智圖法 心智圖法 A Radiant Thinking Tool A Radiant Thinking Tool Applications Applications – 讀書心得 –Proposal – 上課筆記 – 遊記 –System Analysis –…–…–…–… Reference Reference –Program »Visio »MindManager –Tony Buzan, Barry Buzan, “ The Mind Map Book: How to Use Radiant Thinking to Maximize Your Brain's Untapped Potential ” Mind Map
46
46
47
47
48
48 Use MindManager X5 pro Use MindManager X5 pro Developed By MindJet Developed By MindJet Mind Map Demo Using MindManager
49
49 Term Project System Analysis
50
50 Real-time Strategy War Game Real-time Strategy War Game Mission-based Levels Mission-based Levels Mouse-driven Controls Mouse-driven Controls Player vs Computer Player vs Computer State-based AI State-based AI Group Movement Group Movement Game Design (1/3)
51
51 PC – Controlled by Player PC – Controlled by Player –“Blue Team” »Move »Attack –AI »Standby »Anti-attack NPC – Controlled by Computer NPC – Controlled by Computer –“Red Team” - Enemy »Triggered by time table –AI »Move »Standby »Anti-attack »Attack Game Design (2/3)
52
52 Game AI Game AI –Finite state machine –Path finding »3D »A* –Steering behavior »Flocks / Schools / Herds Flocks / Schools / HerdsFlocks / Schools / Herds »http://www.red3d.com/cwr/boids/ http://www.red3d.com/cwr/boids/ –AI Game Programming Wisdom, Charles River Media (1 & 2) Game Design (3/3)
53
53 Run MindManager.exe Run MindManager.exe Use Mind Map Tool for SA
54
54 Game Main Loop
55
55 int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc;... // register window class ZeroMemory(&wc, sizeof(WNDCLASSEX)); wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wc.lpfnWndProc = KKMainProc;... RegisterClassEx(&wc);... // the main loop KKMainLoop(); // unregister the window class UnregisterClass(wc.lpszClassName, hInst); return id; } Win32 Application (1/3)
56
56 LRESULT CALLBACK KKMainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT l = FALSE;... // switch for all incoming messages from WindowsX switch (uMsg) { case WM_KEYDOWN:... l = TRUE; break;... } // echo the result if (l) { return l; } else { return DefWindowProc(hWnd, uMsg, wParam, lParam); } Win32 Application (2/3)
57
57 void KKMainLoop() { MSG msg; BOOL kkBeQuit = FALSE; // the main loop while (!kkBeQuit) { // check window's messages while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { kkBeQuit = TRUE; } // invoke the WindowsX to handle the incoming messages TranslateMessage(&msg); DispatchMessage(&msg); } // do your jobs here, for example, check the timing and do something in regular... } Win32 Application (3/3)
58
58 Win32 Programs Are Event-driven Win32 Programs Are Event-driven –Messages = events –So as all windows system (for example : X window) We Need a Loop to Check All Incoming Events We Need a Loop to Check All Incoming Events The Loop The Loop –Check all incoming events (messages) –Handle the events –Check timing and do something in regular Incoming Events Incoming Events –Interrupts –System requests Event-driven Programming (1/3)
59
59 Timers (do something in regular timing) Timers (do something in regular timing) –The sub-system to handle timing –Must be precise to at least 1 ms or less »30fps = 1/30 second = 33.333… ms –On win32 platform, you can use “performance counter” instead of the win32’s “WM_TIMER” message »For windows9x, WM_TIMER = 18.2 fps (maximum) Events Events –Input devices »Mouse »Keyboard –Something coming from network –System requests »Re-draw »Losing/getting the input focus »…»…»…»… Event-driven Programming (2/3)
60
60 Therefore, You Can Have Two Types of Jobs (Callbacks) to Do (Call) Therefore, You Can Have Two Types of Jobs (Callbacks) to Do (Call) –In regular »Timers callbacks –By requests »Input device callbacks Same As a Game Main Program Same As a Game Main Program –A game is an interactive application –A game is time-bound »Rendering in 30fps or 60fps »Motion data in 30fps »Game running in 30fps »…»…»…»… Event-driven Programming (3/3)
61
61 Use Performance Counter on PC Use Performance Counter on PC // timers data structure typedef struct { BOOL beAble; // is the timer is enabled/disabled ? BOOL be1st; // is this the 1st time for the timer to be checked // after last initialization ? BOOL beLockFps; // is locked on FPS ? double initTime; // initial time double timeInv; // system ticks for one frame double nxtTime; // next checking time void (*timer)(int); // timer's callback double resetTime; // reset time } TIMERs, *TIMERptr; Implement the Timer (1/6)
62
62 /*---------------------------------------------------------------------- initialize a timer and bind a user-defined timer callback ------------------------------------------------------------------------*/ void FyBindTimer(DWORD id, float fps, void (*fun)(int), BOOL beLock) { if (id = MAXTIMERS) return; /* assign the timer's callback */ fyTimer[id].timer = fun; /* set lock-to-fps flag */ fyTimer[id].beLockFps = beLock; /* calculate the ticks for one frame */ fyTimer[id].timeInv = (double) (fyFreq) / (double) fps; fyTimer[id].be1st = TRUE; fyTimer[id].beAble = TRUE; } Implement the Timer (2/6)
63
63 /*------------------------------------ get current system clock tick --------------------------------------*/ double FYGetCurrentSystemTick() { LARGE_INTEGER timeCount; /* get current tick */ QueryPerformanceCounter(&timeCount); return (double) timeCount.QuadPart; } /* // get the system ticks for one second QueryPerformanceFrequency(&timeFreq); fyFreq = timeFreq.LowPart; */ Implement the Timer (3/6)
64
64 /*--------------------- check all timers ----------------------*/ void FYInvokeTimer() { int i, skipS; double dTime; // get current time dTime = FYGetCurrentSystemTick(); for (i = 0; i < MAXTIMERS; i++) { if (fyTimer[i].beAble && fyTimer[i].timer != NULL) { // for the first time..... if (fyTimer[i].be1st) { // initialize the timer fyTimer[i].be1st = FALSE; fyTimer[i].initTime = dTime; fyTimer[i].nxtTime = dTime + fyTimer[i].timeInv; (*(fyTimer[i].timer))(1); } Implement the Timer (4/6)
65
65 else { if (fyTimer[i].beLockFps) { if (dTime >= fyTimer[i].nxtTime) { // calculate skip frames skipS = (int)((dTime - fyTimer[i].nxtTime) / (double)fyTimer[i].timeInv) + 1; // get next checking time fyTimer[i].nxtTime += (double) (skipS * fyTimer[i].timeInv); // check some abnormal conditions... // invoke the timer callback (*(fyTimer[i].timer))(skipS); } else { (*(fyTimer[i].timer))(1); } Implement the Timer (5/6)
66
66 /*------------------------------------------------------------ invoke the TheFly3D system to handle the timers --------------------------------------------------------------*/ void FyInvokeTheFly(BOOL beTimer) { MSG msg; if (fyBeQuit) return; while (!fyBeQuit) { // check window's messages while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) fyBeQuit = TRUE; TranslateMessage(&msg); DispatchMessage(&msg); } // check the timer if (beTimer && fyBeTimer) FYInvokeTimer(); } Implement the Timer (6/6)
67
67 Single Player Single Player Check game over Peek player input Implement timer callback Exit the loop Rendering Loop y n Game Loop (1/2)
68
68 Network Client Network Client Check game over Peek user input Receive messages Send messages Timer callbacks Rendering Exit y n From network To network Loop Game Loop (2/2)
69
69 Check Win/Loose Check Win/Loose Check Quit Check Quit Objects Moving … Objects Moving … Play Character’s Motion to Next Frame Play Character’s Motion to Next Frame Play Animation to Next Frame Play Animation to Next Frame –Models –Textures –…–…–…–… Perform Some Game Calculation Perform Some Game Calculation Perform Geometry Calculation Perform Geometry Calculation –LOD Perform AI “Thinking” Perform AI “Thinking” Perform Collision Detection Perform Collision Detection Perform the 3D Rendering Perform the 3D Rendering … Jobs in Regular (Typically)
70
70 Mouse Input Mouse Input –Press/release the mouse button –Drag –Double-click –Move Keyboard Input Keyboard Input –Hotkey –Typing Gamepad Gamepad –Same as the hotkey Network Network System System … Jobs By Request (Typically)
71
71 TheFly3D Game Engine - The Main Program
72
72 void main(int argc, char **argv) { // create the game world & 3D scene... // set Hotkeys FyDefineHotKey(FY_ESCAPE, QuitGame, FALSE);... // define some mouse functions FyBindMouseFunction(LEFT_MOUSE, InitPivot, PivotCam, EndPivot, NULL);... // bind a timer for rendering, frame rate = 60 fps FyBindTimer(0, 60.0f, RenderIt, TRUE); // bind a timer for game AI, frame rate = 30 fps FyBindTimer(1, 30.0f, GameAI, TRUE); // invoke the system FyInvokeTheFly(TRUE); } The Main Program
73
73 //------------------- // quit the game //------------------- void QuitGame(WORLDid gID, BYTE code, BOOL value) { if (code == FY_ESCAPE) { if (value) { FyWin32EndWorld(gID); } Hotkey Callback
74
74 /*----------------------------------------- initialize the pivot of the camera ------------------------------------------*/ void InitPivot(WORLDid g, int x, int y) { oldX = x; oldY = y; } /*------------------ pivot the camera -------------------*/ void PivotCam(WORLDid g, int x, int y) { FnModel model; if (x != oldX) { model.Object(cID); model.Rotate(Z_AXIS, (float) (x - oldX), GLOBAL); oldX = x; } if (y != oldY) { model.Object(cID); model.Rotate(X_AXIS, (float) (y - oldY), GLOBAL); oldY = y; } Mouse Callback
75
75 //---------------------------------------------------------------------------------------- // Render callback which will be invoked by TheFly3D every 1/60 second //---------------------------------------------------------------------------------------- void RenderIt(int skip) { FnViewport vp; FnWorld gw; // render the scene vp.Object(vID); vp.Render(cID, TRUE, TRUE); // perform double-buffering gw.Object(gID); gw.SwapBuffers(); } Timer Callback
76
76 What will be included in TheFly3D Hardware 3D Graphics API2D APIInput DeviceOS API 3D Scene Mngmt2D SpriteGamepadNetworkAudio TerrainCollisionCharacterUIDynamicsSound FX Combat SystemFX SystemGame AIScript System NPC SystemVirtual AgentTrading SystemStory Game Game Play Layer Engine Layer System Layer Under Development
77
77 Introduction to TheFly3D 3D Graphics/Game Programming Library 3D Graphics/Game Programming Library –Using C++ Based on DirectX9.0a Based on DirectX9.0a –Currently A Frame Work for 3D Graphics Developers A Frame Work for 3D Graphics Developers According to the Experiences of the Author Some Game Development Features are added According to the Experiences of the Author Some Game Development Features are added Scene Management System Scene Management System –Scene tree Built-in Visibility Culling Built-in Visibility Culling Characters Characters Current version 0.5a1 (1009, 2004) Current version 0.5a1 (1009, 2004) –Win32 version
78
78 Development Environment.net2003 Visual C++ 7.1.net2003 Visual C++ 7.1 DirectX9.0a SDK DirectX9.0a SDK Include files Include files –TheFly.h –TheFlyWin32.h (win32 version + D3D) Linked libraries Linked libraries –TheFlyLibD_05a1.lib –d3d9.lib d3dx9.lib
79
79 Create the Visual C++ Project for “TheFly3D” Create folders for TheFly3D API Create folders for TheFly3D API –…\include –…\lib New a Win32 Application Project New a Win32 Application Project Set the additional include/library directories to TheFly3D API Set the additional include/library directories to TheFly3D API Add DirectX 9.0 include/lib to additional search directories Add DirectX 9.0 include/lib to additional search directories Add d3d9.lib d3dx9.lib to additional dependencies Add d3d9.lib d3dx9.lib to additional dependencies Add TheFly.h, TheFlyWin32.h, TheFlyLibD_xxxx.lib into the project Add TheFly.h, TheFlyWin32.h, TheFlyLibD_xxxx.lib into the project
80
80 The 1 st TheFly3D Program – hello.cpp Create a 3D world Create a 3D world Create a viewport Create a viewport Create a scene Create a scene Create 3D entities Create 3D entities –A camera –A teapot model –A light source Translate the camera to show the model Translate the camera to show the model Bind callbacks to make the program interactive Bind callbacks to make the program interactive
81
81 Demo - Hello Do it!
82
82 The Basics to Write TheFly3D Program All Win32 code is transparent here All Win32 code is transparent here –void main(int argc, char *argv[]) ID & Function class ID & Function class –TheFly3D creates the objects for you »Return the ID –TheFly3D owns the objects –You have the right to handle the objects »Use function classes // create a viewport vID = gw.CreateViewport(ox, oy, ww, hh); FnViewport vp; vp.Object(vID); vp.SetBackgroundColor(0.3f, 0.3f, 0.0f);
83
83 Initialize TheFly3D The 1 st function to use TheFly3D is The 1 st function to use TheFly3D is –FyWin32CreateWorld() After the calling successfully, you can get the non-zero ID of a world object After the calling successfully, you can get the non-zero ID of a world object Assign the ID to a world function for manipulating the world object Assign the ID to a world function for manipulating the world object // create a new world WORLDid gID = FyWin32CreateWorld(Tester", 0, 0, 800, 600, 16, FALSE); FnWorld gw; gw.Object(gID); gw.SetEnvironmentLighting(0.5f, 0.5f, 0.8f); gw.SetTexturePath("Data\\textures");
84
84 3D Graphics Layers A World Frame Buffers (front + back) The World in TheFly3D A world is a set of layers where the 3D objects acts on A world is a set of layers where the 3D objects acts on
85
85 Camera 3D Models Lights Backdrop Board A 3D Scene The 3D Grpahics Layer A 3D graphics layer is a projection of the rendering of a 3D world A 3D graphics layer is a projection of the rendering of a 3D world The 3D world we call the “Scene” The 3D world we call the “Scene” The place for projection we call the “Viewport” The place for projection we call the “Viewport”
86
86 The Viewports & Scenes TheFly3D supports the multiple viewports TheFly3D supports the multiple viewports A scene can be rendered on different viewports A scene can be rendered on different viewports Viewports & scenes are created by the world object Viewports & scenes are created by the world object // create a new world WORLDid gID = FyWin32CreateWorld(Tester", 0, 0, 800, 600, 16, FALSE); FnWorld world; world.Object(gID); SCENEid sID = world.CreateScene(); VIEWPORTid vID = world.CreateViewport(0, 0, 400, 300); world.DeleteScene(sID); world.DeleteViewport(vID);
87
87 Something about the Scene A scene is not a “real” 3D object, just a “set” of 3D objects A scene is not a “real” 3D object, just a “set” of 3D objects A scene provides multiple rendering group concept to handle the 1 st priority sorting for the rendering of 3D objects A scene provides multiple rendering group concept to handle the 1 st priority sorting for the rendering of 3D objects
88
88 The 3D Entities – Objects A 3D scene is constructed by a set of “objects” which are the basic entities in a scene. A 3D scene is constructed by a set of “objects” which are the basic entities in a scene. An object is a carrier to carry real 3D data including cameras, lights, 3D models, audio sources, billboards, etc., An object is a carrier to carry real 3D data including cameras, lights, 3D models, audio sources, billboards, etc., Models Models Cameras Cameras Lights Lights Terrains Terrains Objects are created/deleted by his/her host scene Objects are created/deleted by his/her host scene Objects can be switched between scenes Objects can be switched between scenes
89
89 The Objects Can … Can have shapes (geometric data) Can have shapes (geometric data) Can be grouped (hierarchy) Can be grouped (hierarchy) Can move (transformation) Can move (transformation) Can look alike (clone or data sharing) Can look alike (clone or data sharing) Can perform (animation, deformation) Can perform (animation, deformation) Can be affected (lighted, listened) Can be affected (lighted, listened) Can be changed (modification) Can be changed (modification)
90
90 Etc Parameters Geometric Data Shape Transformation Move Parent Object Hierarchy Motion Data Animation Clone A Scene Object
91
91 A Model An object to carry a set of geometry data is a model object An object to carry a set of geometry data is a model object You can load the model data from files You can load the model data from files TheFly3D loads.cw3 &.lz3 TheFly3D loads.cw3 &.lz3 // create 3D entities nID = scene.CreateModel(ROOT); FnModel model; model.Object(nID); // load a teapot model.Load("Teapot.cw3");
92
92 A tree-based representation Simplified scene graph Root TheFly3D Scene Tree
93
93 A tree-based representation Simplified scene graph TheFly3D Scene Tree Is Simplified Scene Graph Root
94
94 nID = scene.CreateModel(ROOT); cID = scene.CreateCamera(ROOT); FnModel model; model.Object(nID); model.SetParent(cID); nID cID Object Hierarchy
95
95 MODELid nID = scene.CreateModel(ROOT); FnModel model; model.Object(nID); MODELid nID1 = model.Instance(); Clone a Model Object nIDnID1 Data instance
96
96 TheFly3D Model Functions (1/2) void model.SetParent(parent_object_ID); void model.SetParent(parent_object_ID); void model.Show(be_show); void model.Show(be_show); void model.SetOpacity(opacity); void model.SetOpacity(opacity); opacity = 0.0 – 1.0 opacity = 0.0 – 1.0 void model.SetRenderMode(mode); void model.SetRenderMode(mode); mode = WIREFRAME or TEXTURE mode = WIREFRAME or TEXTURE MODELid clonedID = Model.Instance(); MODELid clonedID = Model.Instance(); void model.ChangeScene(sID); void model.ChangeScene(sID); BOOL model.Load(char *file); BOOL model.Load(char *file); Load a.cw3 or.lz3 model file to a model object Load a.cw3 or.lz3 model file to a model object void model.ShowBoundingBox(beShow); void model.ShowBoundingBox(beShow);
97
97 TheFly3D Model Functions (2/2) Model.SetRenderOption(item, value); Model.SetRenderOption(item, value); (item, value) = (item, value) = (Z_BUFFER, TRUE/FALSE) (Z_BUFFER, TRUE/FALSE) (Z_BUFFER_WRITE, TRUE/FALSE) (Z_BUFFER_WRITE, TRUE/FALSE) (ALPHA, TRUE/FALSE) (ALPHA, TRUE/FALSE) Add/remove the model to/from alpha sorting list Add/remove the model to/from alpha sorting list (FOG, TRUE/FALSE) (FOG, TRUE/FALSE) (SPECULAR, TRUE/FALSE) (SPECULAR, TRUE/FALSE) (LIGHTING, TRUE/FALSE) (LIGHTING, TRUE/FALSE) (ANTIALIASING, TRUE, FALSE) (ANTIALIASING, TRUE, FALSE) (TEXTURE_ADDRESS_MODE, WRAP_TEXTURE / MIRROR_TEXTURE / CLAMP_TEXTURE / BORDER_TEXTURE / MIRROR_ONCE_TEXTURE) (TEXTURE_ADDRESS_MODE, WRAP_TEXTURE / MIRROR_TEXTURE / CLAMP_TEXTURE / BORDER_TEXTURE / MIRROR_ONCE_TEXTURE) (SOURCE_BLEND_MODE BLEND_ZERO / BLEND_ONE / BLEND_SRC_COLOR / BLEND_INV_SRC_COLOR / BLEND_SRC_ALPHA / BLEND_INV_SRC_ALPHA / BLEND_DEST_ALPHA / BLEND_INV_DEST_ALPHA / BLEND_DEST_COLOR / BLEND_INV_DEST_COLOR / BLEND_SRC_ALPHA_SAT / BLEND_BOTH_SRC_ALPHA / BLEND_BOTH_INV_SRC_ALPHA (SOURCE_BLEND_MODE BLEND_ZERO / BLEND_ONE / BLEND_SRC_COLOR / BLEND_INV_SRC_COLOR / BLEND_SRC_ALPHA / BLEND_INV_SRC_ALPHA / BLEND_DEST_ALPHA / BLEND_INV_DEST_ALPHA / BLEND_DEST_COLOR / BLEND_INV_DEST_COLOR / BLEND_SRC_ALPHA_SAT / BLEND_BOTH_SRC_ALPHA / BLEND_BOTH_INV_SRC_ALPHA (DESTINATION_BLEND_MODE values are same as the SOURCE_BLEND_MODE (DESTINATION_BLEND_MODE values are same as the SOURCE_BLEND_MODE
98
98 Coordinate System Every model should have its own local coordinate system (local space) Every model should have its own local coordinate system (local space) The space when it’s modeled The space when it’s modeled To its parent model, it is in the global space To its parent model, it is in the global space The space for reference The space for reference X Y Z x y z
99
99 Rotation matrixTransformation Three basic linear transformations Three basic linear transformations Translate Translate Rotate Rotate Scale Scale Principles Principles Right-handed rule Right-handed rule v’ = v M 0 M 1 v’ = v M 0 M 1 Matrix in 12-element (I call the M12) Matrix in 12-element (I call the M12) x y z a 0 a 1 a 2 0 a 3 a 4 a 5 0 a 6 a 7 a 8 0 a 9 a 10 a 11 1 Translation vector
100
100 x’ = x + dx y’ = y + dy z’ = z + dz model.Translate(dx, dy, dz, op); T = 1 0 0 0 1 0 0 0 1 dx dy dz (dx dy dz)Translation
101
101Rotation model.Rotate(Z_AXIS, 30.0f, op); i.e. rotate with z axis x’ = x cos – y sin y’ = x sin + y cos z’ = z Rz =Rz = cos sin 0 -sin cos 0 0 0 1 0 0 0 x y z
102
102Scaling model.Scale(sx, sy, sz, op); x’ = x * sx y’ = y * sy z’ = z * sz T = sx 0 0 0 sy 0 0 0 sz 0 0 0
103
103 Matrix Operations Matrix operation Matrix operation –REPLACE, LOCAL, GLOBAL x y z X Y Z [M][ML][ML][MG][MG] Object Transformation Matrix op = REPLACE op = GLOBAL op = LOCAL
104
104 TheFly3D Model Transformation Functions model.Translate(x, y, z, op); model.Translate(x, y, z, op); op = LOCAL, GLOBAL, or REPLACE op = LOCAL, GLOBAL, or REPLACE model.Rotate(axis, angle, op); model.Rotate(axis, angle, op); op = LOCAL, GLOBAL, or REPLACE op = LOCAL, GLOBAL, or REPLACE axis = X_AXIS, Y_AXIS, Z_AXIS axis = X_AXIS, Y_AXIS, Z_AXIS model.Scale(sx, sy, sz, op); model.Scale(sx, sy, sz, op); op = LOCAL, GLOBAL, or REPLACE op = LOCAL, GLOBAL, or REPLACE model.Quaternion(w, x, y, z, op); model.Quaternion(w, x, y, z, op); w : the scalar part of the quaternion w : the scalar part of the quaternion x, y, z : the vector part of the quaternion x, y, z : the vector part of the quaternion The quaternion should be a unit quaternion The quaternion should be a unit quaternion op = LOCAL, GLOBAL, or REPLACE op = LOCAL, GLOBAL, or REPLACE model.SetMatrix(M12, op); model.SetMatrix(M12, op); M12 : a M12 matrix M12 : a M12 matrix op = LOCAL, GLOBAL, or REPLACE op = LOCAL, GLOBAL, or REPLACE float *model.GetMatrix(); float *model.GetMatrix(); Get the pointer of the model object’s matrix Get the pointer of the model object’s matrix
105
105 Transformation is the term used in computer graphics but not friendly for games. We use movements to control the 3D objects moving around in the scene. Move forward Move right Move up Turn right / right … Move forward Move up Move right Turn right / leftMovements
106
106 x y z z up + facing to -y Facing Direction and Up Direction Each object is modeled with a facing direction and up direction visually In TheFly3D, we use –y axis as the default facing direction for a model, z axis as the default up direction But for a camera : -z axis is the facing direction y axis is the up direction
107
107 Transformation is the term used in computer graphics but not friendly for games. We use Movements to control the 3D objects moving around in the scene. Move forward Move up Move right Turn right / leftMovements
108
108 new position = old position + distance *(facing direction in unit) Move Forward
109
109 The object has a local coordinate system. Align a local axis of the object with the facing direction Make a translation matrix to move the object align the axis Apply the matrix first before to apply the existing transformations Then the object is moving forward! Move Forward (2) FnModel model; model.Object(nID); model.Translate(0.0f, -dist, 0.0f, LOCAL);
110
110 -1 -1 -1 M = T1 * R1 * R2 * Rx(angle) * R2 * R1 * T1 T1 = / 1 0 0 0 R1 = / cs2 -sn2 0 0 0 1 0 0 -z sn2 cs2 0 0 0 0 1 0 0 0 1 0 -x -y -z 1 / 0 0 0 1 / R2 = / cs1 0 -sn1 0 Rx = / 1 0 0 0 y 0 1 0 0 0 cs sn 0 sn1 0 cs1 0 0 -sn cs 0 0 0 0 1 / 0 0 0 1 / An example Turn Right/Left
111
111 The object has a local coordinate system. Align a local axis of the object with the up direction Make a rotation matrix to turn the object along the axis Apply the matrix first before to apply the existing transformations Then the object is turning! Turn Right/Left (2) FnModel model; model.Object(nID); model.Rotate(Z_AXIS, -angle, LOCAL); // turn right
112
112 new position = old position + distance *(facing direction in unit) Move Forward – Graphics Approach
113
113 The object model has a local coordinate system Align a local axis of the object with the facing direction Make a translation matrix to move the object align the axis Apply the matrix first before to apply the existing transformations Then the object is moving forward! Move Forward – Our Approach FnModel model; model.Object(nID); model.Translate(0.0f, -dist, 0.0f, LOCAL);
114
114 -1 -1 -1 M = T1 * R1 * R2 * Rx(angle) * R2 * R1 * T1 T1 = / 1 0 0 0 R1 = / cs2 -sn2 0 0 0 1 0 0 -z sn2 cs2 0 0 0 0 1 0 0 0 1 0 -x -y -z 1 / 0 0 0 1 / R2 = / cs1 0 -sn1 0 Rx = / 1 0 0 0 y 0 1 0 0 0 cs sn 0 sn1 0 cs1 0 0 -sn cs 0 0 0 0 1 / 0 0 0 1 / An example Turn Right/Left – Graphics Approach
115
115 The object has a local coordinate system. Align a local axis of the object with the up direction Make a rotation matrix to turn the object along the axis Apply the matrix first before to apply the existing transformations Then the object is turning! Turn Right/Left – Our Approach FnModel model; model.Object(nID); model.Rotate(Z_AXIS, -angle, LOCAL); // turn left
116
116 A terrain is a place for 3D objects to walk on A terrain is a place for 3D objects to walk on A terrain is generated from a model object A terrain is generated from a model object Neighboring triangles are the next searching target for current triangle for terrain following Neighboring triangles are the next searching target for current triangle for terrain following A terrain for terrain following is not the same as the terrain in visual A terrain for terrain following is not the same as the terrain in visualTerrain
117
117 Terrain in TheFly3D // create a terrain object tID = scene.CreateTerrain(); FnTerrain t; t.Object(tID); // load a terrain model (just like a regular model) // but a terrain is invisible in default t.Load("test_terrain_following.cw3"); // generate the neighboring data for terrain following t.GenerateTerrainData();
118
118 Terrain Following (3D) Terrain Following (2D) offset Terrain Following
119
119 TheFly3D Model Movement Functions (1/2) void model.GetPosition(pos); void model.GetPosition(pos); pos is a 3D vector to get the position of the model object pos is a 3D vector to get the position of the model object void model.GetDirection(faceDir, upDir); void model.GetDirection(faceDir, upDir); If you just want to get one of the directions, just send NULL pointer to the one that you do not want to query If you just want to get one of the directions, just send NULL pointer to the one that you do not want to query void model.SetPosition(pos); void model.SetPosition(pos); The position is related to its parent object The position is related to its parent object void model.SetDirection(faceDIr, upDir); void model.SetDirection(faceDIr, upDir); If you just want to set one of the directions, just send NULL pointer to the one that you do not want to set If you just want to set one of the directions, just send NULL pointer to the one that you do not want to set Void model.SetDirectionAlignment(fDAxis, uDAxis); Void model.SetDirectionAlignment(fDAxis, uDAxis); You can change the local axes for facing and up directions You can change the local axes for facing and up directions BOOL model.PutOnTerrain(tID, be3D, offset, probeFront, probeBack, probeAngle, hightLimit) BOOL model.PutOnTerrain(tID, be3D, offset, probeFront, probeBack, probeAngle, hightLimit) tID is a terrain object tID is a terrain object be3D = TRUE for 3D terrain following be3D = TRUE for 3D terrain following Offset is the height above the terrain Offset is the height above the terrain hightLimit is the terrain following height limit hightLimit is the terrain following height limit Return TURE if you successfully put the model on a terrain Return TURE if you successfully put the model on a terrain
120
120 Probe for a Model on Terrain probeFront probeBack : terrain following check point
121
121 TheFly3D Model Movement Functions (2/2) int model.MoveForward(dist, beTerrainFollow, be3D, offset); int model.MoveForward(dist, beTerrainFollow, be3D, offset); If you just want to move the model forward but not on terrain, set beTerrainFollow to FALSE If you just want to move the model forward but not on terrain, set beTerrainFollow to FALSE You should put a model on terrain first. Then you can move it forward on terrain. You should put a model on terrain first. Then you can move it forward on terrain. void model.TurnRight(float angle); void model.TurnRight(float angle); Angle is in degree Angle is in degree
122
122 Character Introduction
123
123
124
124 Keyframe System 3DS MAX Softimage Maya... Low Cost (Relatively) Easy to Combine Animations Hard to Make “Good” Motions Long Production Time Motion Production – by 3D Tools
125
125 Motion Capture Optical Magnetic... Costly Investment Every Frame is a Keyframe Very Live Motion Need Post-processing for Games Hard to Combine Motions Motion Production – by Motion Capture
126
126 A character is composed by a set of models with motion data to simulate a live creature in real world A character is composed by a set of models with motion data to simulate a live creature in real world A segmented character : A segmented character : head body up arm fore arm hand groin thigh shin foot A Segmented Character
127
127 groin body head thigh_r thigh_l shin_r shin_l foot_r foot_l up_arm_l up_arm_r fore_arm_l fore_arm_r hand_l hand_r Base The scene tree of a segmented character : The scene tree of a segmented character :
128
128 Use root-base structure to construct the character Use root-base structure to construct the character Base Root (groin) Base The Root-Base Concept (1/2)
129
129 A character has some models to be the geometry roots of the character system. A character has some models to be the geometry roots of the character system. The root plays as the gravity center of the character The root plays as the gravity center of the character The root can be translated and rotated The root can be translated and rotated The others are joints The others are joints The joints can rotate only The joints can rotate only A ghost object is added to be the parent of the root, which is the base of the character A ghost object is added to be the parent of the root, which is the base of the character The base is the center for the character’s movement. We move the base to perform character’s moves. The base is the center for the character’s movement. We move the base to perform character’s moves. The Root-Base Concept (2/2)
130
130 A set of frames to describe a character’s motion A set of frames to describe a character’s motion Walk, run, attack, … Walk, run, attack, … Keyframed or non-keyframed Keyframed or non-keyframed Motion data in Motion data in –Position (pivot) + quaternion –Position (pivot) + Euler angles –Position (pivot) + (q, n) –Matrix walkrunattackfall Motion Data - Pose
131
131 Load a Character FnScene scene; CHARACTERid actorID; Scene.Object(sceneID); actorID = scene.LoadCharacter("m012.lxx"); actorID = scene.LoadCharacter(“m60a3.lzc”);.lxx is a character description file which is a bone-skin character.lzc is a segmented character file
132
132 Play a Pose BLENDTREEid btID = actor.GetBlendTree(); FnBlendTree bt; bt.Object(btID); aaaID = bt.CreateAnimationNode(2); // 2 nd motion // start to play a pose (1 st time) actor.PlayBlendNode(aaaID, (float) 0, START, TRUE); // continue to play a pose actor.PlayBlendNode(CURRENT_ONE, (float) skip, LOOP, TRUE);
133
133 Make a Character to Move Forward FnCharacter actor; // play walking pose actor.Object(actorID); actor.PlayBlendNode(CURRENT_ONE, (float) skip, LOOP, TRUE); // move it forward actor.MoveForward(dist, beTF, be3D, offset);
134
134 TheFly3D Character Movement Functions (1/2) void actor.GetPosition(pos); void actor.GetPosition(pos); pos is a 3D vector to get the position of the character pos is a 3D vector to get the position of the character void actor.GetDirection(faceDir, upDir); void actor.GetDirection(faceDir, upDir); If you just want to get one of the directions, just send NULL pointer to the one that you do not want to query If you just want to get one of the directions, just send NULL pointer to the one that you do not want to query void actor.SetPosition(pos); void actor.SetPosition(pos); The position is related to its parent object The position is related to its parent object void actor.SetDirection(faceDIr, upDir); void actor.SetDirection(faceDIr, upDir); If you just want to set one of the directions, just send NULL pointer to the one that you do not want to set If you just want to set one of the directions, just send NULL pointer to the one that you do not want to set BOOL actor.PutOnTerrain(tID, be3D, offset, probeFront, probeBack, probeAngle, hightLimit) BOOL actor.PutOnTerrain(tID, be3D, offset, probeFront, probeBack, probeAngle, hightLimit) tID is a terrain object tID is a terrain object be3D = TRUE for 3D terrain following be3D = TRUE for 3D terrain following Offset is the height above the terrain Offset is the height above the terrain hightLimit is the terrain following height limit hightLimit is the terrain following height limit Return TURE if you successfully put the character on a terrain Return TURE if you successfully put the character on a terrain
135
135 TheFly3D Character Movement Functions (2/2) void actor.MoveForward(dist, beTerrainFollow, be3D, offset); void actor.MoveForward(dist, beTerrainFollow, be3D, offset); If you just want to move the character forward but not on terrain, set beTerrainFollow to FALSE If you just want to move the character forward but not on terrain, set beTerrainFollow to FALSE You should put a character on terrain first. Then you can move it forward on terrain. You should put a character on terrain first. Then you can move it forward on terrain. A character is always using his local -y-axis as facing direction A character is always using his local -y-axis as facing direction void actor.TurnRight(float angle); void actor.TurnRight(float angle); Angle is in degree Angle is in degree A character is always using his local z-axis as up direction A character is always using his local z-axis as up direction
136
136 TheFly3D Character Functions MODELid actor.GetBaseObject(); MODELid actor.GetBaseObject(); You can get the base object of the character You can get the base object of the character MODELid actor.GetObjectByName(name); MODELid actor.GetObjectByName(name); You can get the each model part of the character by its name in character file You can get the each model part of the character by its name in character file For a bone-skin character, this function can get the bones in the skeleton For a bone-skin character, this function can get the bones in the skeleton BOOL actor.PlayFrame(frame, beIncludeBase); BOOL actor.PlayFrame(frame, beIncludeBase); The function is to play the motion for a specific frame The function is to play the motion for a specific frame Set beIncludeBase = TRUE to play the base object’s motion Set beIncludeBase = TRUE to play the base object’s motion BLENDTREEid actor.GetBlendTree(); BLENDTREEid actor.GetBlendTree(); Get the character’s blend tree data Get the character’s blend tree data You can define all poses in a blend tree (blend nodes) You can define all poses in a blend tree (blend nodes) float actor.PlayBlendNode(btNodeID, skipFrame, mode, beIncludeBase); float actor.PlayBlendNode(btNodeID, skipFrame, mode, beIncludeBase); All poses for a character is defined as a blend node All poses for a character is defined as a blend node Skip frames can be floating-point Skip frames can be floating-point Mode can be ONCE or LOOP! Mode can be ONCE or LOOP!
137
137 Game Mathematics
138
138 Matrices Matrices Vectors Vectors Fixed-point Real Numbers Fixed-point Real Numbers Triangle Mathematics Triangle Mathematics Intersection Issues Intersection Issues Euler Angles Euler Angles Angular Displacement Angular Displacement Quaternion Quaternion Differential Equation Basics Differential Equation Basics Essential Mathematics for Game Development
139
139 Matrix basics Matrix basics –Definition –Transpose –Addition Matrices A = (a ij ) = a 11.. a 1n.. a m1.. a mn C = A T c ij = a ji C = A + B c ij = a ij + b ij
140
140 –Scalar-matrix multiplication –Matrix-matrix multiplication C = A c ij = a ij C = A B c ij = a ik b kj k = 1 r
141
141 Transformations in Matrix form Transformations in Matrix form –A point or a vector is a row matrix (de facto convention) V = [x y z] –Using matrix notation, a point V is transformed under translation, scaling and rotation as : V’ = V + D V’ = VS V’ = VR where D is a translation vector and S and R are scaling and rotation matrices
142
142 –To make translation be a linear transformation, we introduce the homogeneous coordinate system V (x, y, z, w) where w is always 1 –Translation Transformation x’ = x + T x y’ = y + T y z’ = z + T z V’ = VT [x ’ y ’ z ’ 1] = [x y z 1] = [x y z 1] T 1 0 0 0 0 1 0 0 0 0 1 0 T x T y T z 1
143
143 –Scaling Transformation x’ = xS x y’ = yS y z’ = zS z V’ = VS [x ’ y ’ z ’ 1] = [x y z 1] = [x y z 1] S S x 0 0 0 0 S y 0 0 0 0 S z 0 0 0 0 1 Here S x, S y and S z are scaling factors.
144
144 –Rotation Transformations 1 0 0 0 0 cos sin 0 0 -sin cos 0 0 0 0 1 R x = R y = R z = cos 0 -sin 0 0 1 0 0 sin 0 cos 0 0 0 0 1 cos sin 0 0 -sin cos 0 0 0 0 1 0 0 0 0 1
145
145 –Net Transformation matrix –Matrix multiplication are not commutative [x ’ y ’ z ’ 1] = [x y z 1] M 1 and [x” y” z” 1] = [x’ y’ z’ 1] M 2 then the transformation matrices can be concatenated M 3 = M 1 M 2 and [x” y” z” 1] = [x y z 1] M 3 M 1 M 2 = M 2 M 1
146
146 A vector is an entity that possesses magnitude and direction. A vector is an entity that possesses magnitude and direction. A 3D vector is a triple : A 3D vector is a triple : –V = (v 1, v 2, v 3 ), where each component v i is a scalar. A ray (directed line segment), that possesses position, magnitude and direction. A ray (directed line segment), that possesses position, magnitude and direction.Vectors (x 1,y 1,z 1 ) (x 2,y 2,z 2 ) V = (x 2 -x 1, y 2 -y 1, z 2 -z 1 )
147
147 Addition of vectors Addition of vectors Length of vectors Length of vectors X = V + W = (x 1, y 1, z 1 ) = (v 1 + w 1, v 2 + w 2, v 3 + w 3 ) V W V + W V W |V| = (v 1 2 + v 2 2 + v 3 2 ) 1/2 U = V / |V|
148
148 Cross product of vectors Cross product of vectors –Definition –Application »A normal vector to a polygon is calculated from 3 (non-collinear) vertices of the polygon. X = V X W = (v 2 w 3 -v 3 w 2 )i + (v 3 w 1 -v 1 w 3 )j + (v 1 w 2 -v 2 w 1 )k where i, j and k are standard unit vectors : i = (1, 0, 0), j = (0, 1, 0), k = (0, 0, 1) NpNp V2V2 V1V1 polygon defined by 4 points N p = V 1 X V 2
149
149 »Normal vector transformation N(X) = detJ J -1T N(x) where X = F(x) J the Jacobian matrix, J i (x) = F(x) xixi (take scaling as example) "Global and Local Deformations of Solid Primitives" Alan H. Barr Computer Graphics Volume 18, Number 3 July 1984
150
150 Dot product of vectors Dot product of vectors –Definition –Application |X| = V. W = v 1 w 1 + v 2 w 2 + v 3 w 3 V W cos = V. WV. W |V||W|
151
151 Fixed Point Arithmetics : N bits (signed) Integer Fixed Point Arithmetics : N bits (signed) Integer –Example : N = 16 gives range –32768 ă 32767 –We can use fixed scale to get the decimals Fixed Point Arithmetics (1/2) a = ă / 2 8 111 8 integer bits 8 fractional bits ă = 315, a = 1.2305
152
152 Multiplication then Requires Rescaling Multiplication then Requires Rescaling Addition just Like Normal Addition just Like Normal Fixed Point Arithmetics (2/2) e = a. c = ă / 2 8. ĉ / 2 8 ĕ = (ă. ĉ) / 2 8 e = a+c = ă / 2 8 + ĉ / 2 8 ĕ = ă + ĉ
153
153 Compression for Floating-point Real Numbers Compression for Floating-point Real Numbers –4 bytes reduced to 2 bytes –Lost some accuracy but affordable –Network data transfer Software 3D Rendering Software 3D Rendering Fixed Point Arithmetics - Application
154
154 h haha hbhb hchc AaAa AcAc AbAb h = h a + h b + h c where A = A a + A b + A c If (A a < 0 || A b < 0 || A c < 0) than the point is outside the triangle “Triangular Coordinate System” AaAa AbAb AcAc A A A p (x a,y a,z a ) (x b,y b,z b ) (x c,y c,z c ) Triangular Coordinate System
155
155 Area of a triangle in 2D x a y a A = ½ x b y b x c y c x a y a = ½ (x a *y b + x b *y c + x c *y a – x b *y a – x c *y b – x a *y c ) Triangle Area – 2D (x a,y a,z a ) (x b,y b,z b ) (x c,y c,z c )
156
156 Area of a triangle in 3D A = ½ (N. Sum(P i1 cross P i2 )) where (i1, i2) = (a,b), (b,c), (c,a) Triangle Area – 3D float GmArea3(float *x0, float *x1, float *x2, float *n) { float area, len, sum1, sum2, sum0; len = (float) sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]) * 2.0f; /* find sum of cross products */ sum0 = x1[1] * (-x0[2] + x2[2]) + x2[1] * (-x1[2] + x0[2]) + x0[1] * (-x2[2] + x1[2]); sum1 = x1[2] * (-x0[0] + x2[0]) + x2[2] * (-x1[0] + x0[0]) + x0[2] * (-x2[0] + x1[0]); sum2 = x1[0] * (-x0[1] + x2[1]) + x2[0] * (-x1[1] + x0[1]) + x0[0] * (-x2[1] + x1[1]); /* find the area */ return = (sum0 * n[0] + sum1 * n[1] + sum2 * n[2]) / len; }
157
157 Terrain Following Terrain Following Hit Test Hit Test Ray Cast Ray Cast Collision Detection Collision Detection Triangular Coordinate System - Application
158
158 Ray Cast Ray Cast Containment Test Containment TestIntersection
159
159 Ray Cast – The Ray x = x 0 + (x 1 – x 0 ) t y = y 0 + (y 1 – y 0 ) t, t = 0, z = z 0 + (z 1 – z 0 ) t { Shot a Ray to Calculate the Intersection of the Ray with Models Shot a Ray to Calculate the Intersection of the Ray with Models Use Parametric Equation for a Ray Use Parametric Equation for a Ray 8 When t = 0, the Ray is on the Start Point (x 0,y 0,z 0 ) When t = 0, the Ray is on the Start Point (x 0,y 0,z 0 ) Only the t 0 is the Answer Candidate Only the t 0 is the Answer Candidate The Smallest Positive t is the Answer The Smallest Positive t is the Answer
160
160 Ray Cast – The Plane Each Triangle in the Models has its Plane Equation Each Triangle in the Models has its Plane Equation Use ax + by + cz + d = 0 as the Plane Equation Use ax + by + cz + d = 0 as the Plane Equation (a, b, c) is the Plane Normal Vector (a, b, c) is the Plane Normal Vector |d| is the Distance of the Plane to Origin |d| is the Distance of the Plane to Origin Substitute the Ray Equation into the Plane Substitute the Ray Equation into the Plane Solve the t to Find the Intersect Solve the t to Find the Intersect Check the Intersect Point Within the Triangle or not by Using “Triangle Area Test” (p. 154) Check the Intersect Point Within the Triangle or not by Using “Triangle Area Test” (p. 154)
161
161 Intersection = 1, inside Intersection = 2, outside Intersection = 0, outside Trick : Parametric equation for a ray which is parallel to the x-axis x = x 0 + t y = y 0, t = 0, { 8 (x 0, y 0 ) 2D Containment Test “if the No. of intersection is odd, the point is inside, otherwise, is outside”
162
162 3D Containment Test “if the No. of intersection is odd, the point is inside, otherwise, is outside” Same as the 2D containment test Same as the 2D containment test
163
163 A rotation is described as a sequence of rotations about three mutually orthogonal coordinates axes fixed in space A rotation is described as a sequence of rotations about three mutually orthogonal coordinates axes fixed in space –X-roll, Y-roll, Z-roll There are 6 possible ways to define a rotation There are 6 possible ways to define a rotation –3! R( 1, 2, ) represents an x-roll, followed by y-roll, followed by z-roll R( 1, 2, c 2 c 3 c 2 s 3 -s 2 0 s 1 s 2 c 3 -c 1 s 3 s 1 s 2 s 3 +c 1 c 3 s 1 c 2 0 c 1 s 2 c 3 +s 1 s 3 c 1 s 2 s 3 -s 1 c 3 c 1 c 2 0 0 0 0 1 where s i = sin i and c i = cos i Euler Angles
164
164 Interpolation happening on each angle Interpolation happening on each angle Multiple routes for interpolation Multiple routes for interpolation More keys for constrains More keys for constrains z x y R z x y R Euler Angles & Interpolation
165
165 R( , n), n is the rotation axis R( , n), n is the rotation axis n rRr n r rvrv rhrh V rvrv V Rr v r h = (n. r)n r v = r - (n. r)n, rotate into position Rr v V = nxr v = nxr Rr v = (cos )r v + (sin )V -> Rr = Rr h + Rr v = r h + (cos )r v + (sin )V = (n. r)n + (cos ) r - (n. r)n) + (sin ) nxr = (cos )r + (1-cos ) n (n. r) + (sin ) nxr Angular Displacement
166
166 Sir William Hamilton (1843) Sir William Hamilton (1843) From Complex numbers (a + ib), i 2 = -1 From Complex numbers (a + ib), i 2 = -1 16,October, 1843, Broome Bridge in Dublin 16,October, 1843, Broome Bridge in Dublin 1 real + 3 imaginary = 1 quaternion 1 real + 3 imaginary = 1 quaternion q = a + bi + cj + dk q = a + bi + cj + dk i 2 = j 2 = k 2 = -1 i 2 = j 2 = k 2 = -1 ij = k & ji = -k, cyclic permutation i-j-k-i ij = k & ji = -k, cyclic permutation i-j-k-i q = (s, v), where (s, v) = s + v x i + v y j + v z k q = (s, v), where (s, v) = s + v x i + v y j + v z kQuaternion
167
167 q 1 = (s 1, v 1 ) and q 2 = (s 2, v 2 ) q 3 = q 1 q 2 = (s 1 s 2 - v 1. v 2, s 1 v 2 + s 2 v 1 + v 1 xv 2 ) Conjugate of q = (s, v), q = (s, -v) qq = s 2 + |v| 2 = |q| 2 A unit quaternion q = (s, v), where qq = 1 A pure quaternion p = (0, v) Noncommutative Quaternion Algebra
168
168 Take a pure quaternion p = (0, r) and a unit quaternion q = (s, v) where qq = 1 and define R q (p) = qpq -1 where q -1 = q for a unit quaternion R q (p) = (0, (s 2 - v. v)r + 2v(v. r) + 2svxr) Let q = (cos , sin n), |n| = 1 R q (p) = (0, (cos 2 - sin 2 )r + 2sin 2 n(n. r) + 2cos sin nxr) = (0, cos2 r + (1 - cos2 )n(n. r) + sin2 nxr) Conclusion : The act of rotating a vector r by an angular displacement ( , n) is the same as taking this displacement, ‘lifting’ it into quaternion space, by using a unit quaternion (cos( /2), sin( /2)n) Quaternion VS Angular Displacement
169
169 1-2y 2 -2z 2 2xy-2wz 2xz+2wy 0 2xy+2wz 1-2x 2 -2z 2 2yz-2wx 0 2xz-2wy 2yz+2wx 1-2x 2 -2y 2 0 0 0 0 1 q = (w,x,y,z) Quaternion VS Rotation Matrix
170
170 M 0 M 1 M 2 0 M 3 M 4 M 5 0 M 6 M 7 M 8 0 0 0 0 1 float tr, s; tr = m[0] + m[4] + m[8]; if (tr > 0.0f) { s = (float) sqrt(tr + 1.0f); q->w = s/2.0f; s = 0.5f/s; q->x = (m[7] - m[5])*s; q->y = (m[2] - m[6])*s; q->z = (m[3] - m[1])*s; } else { float qq[4]; int i, j, k; int nxt[3] = {1, 2, 0}; i = 0; if (m[4] > m[0]) i = 1; if (m[8] > m[i*3+i]) i = 2; j = nxt[i]; k = nxt[j]; s = (float) sqrt((m[i*3+i] - (m[j*3+j] + m[k*3+k])) + 1.0f); qq[i] = s*0.5f; if (s != 0.0f) s = 0.5f/s; qq[3] = (m[j+k*3] - m[k+j*3])*s; qq[j] = (m[i+j*3] + m[j+i*3])*s; qq[k] = (m[i+k*3] + m[k+i*3])*s; q->w = qq[3]; q->x = qq[0]; q->y = qq[1]; q->z = qq[2]; }
171
171 Spherical linear interpolation, slerp Spherical linear interpolation, slerp A B P t slerp(q 1, q 2, t) = q 1 + q 2 sin((1 - t) ) sin sin(t ) Quaternion Interpolation
172
172 Initial value problems Initial value problems ODE ODE –Ordinary differential equation Numerical solutions Numerical solutions –Euler’s method –The midpoint method Differential Equation Basics
173
173 An ODE An ODE Vector field Vector field Solutions Solutions –Symbolic solution –Numerical solution x = f (x, t) wheref is a known function x is the state of the system, x is the x’s time derivative x & x are vectors x(t 0 ) = x 0, initial condition. Start here Follow the vectors … Initial Value Problems..
174
174 A numerical solution A numerical solution –A simplification from Tayler series Discrete time steps starting with initial value Discrete time steps starting with initial value Simple but not accurate Simple but not accurate –Bigger steps, bigger errors –O( t 2 ) errors Can be unstable Can be unstable Not even efficient Not even efficient x(t + t) = x(t) + t f(x, t) Euler’s Method
175
175 Concept :x(t 0 + h) = x(t 0 ) + h x(t 0 ) + h 2 /2 x(t 0 ) + O(h 3 ) Result : x(t 0 +h) = x(t 0 ) + h(f(x 0 + h/2 f(x 0 )) Method :a. Compute an Euler step x = t f(x, t) b. Evaluate f at the midpoint f mid = f((x+ x)/2, (t+ t)/2) c. Take a step using the midpoint x(t+ t) = x(t) + t f mid... a b c Error term The Midpoint Method
176
176 Midpoint = Runge-Kutta method of order 2 Midpoint = Runge-Kutta method of order 2 Runge-Kutta method of order 4 Runge-Kutta method of order 4 –O(h 5 ) k 1 = h f(x 0, t 0 ) k 2 = h f(x 0 + k 1 /2, t 0 + h/2) k 3 = h f(x 0 + k 2 /2, t 0 + h/2) k 4 = h f(x 0 + k 3, t 0 + h) x(t 0 +h) = x 0 + 1/6 k 1 + 1/3 k 2 + 1/3 k 3 + 1/6 k 4 The Runge-Kutta Method
177
177 Dynamics Dynamics –Particle system Game FX System Game FX System Initial Value Problems - Application
178
178 Game Geometry
179
179 Geometry Geometry –Position / vertex normals / vertex colors / texture coordinates Topology Topology –Primitive »Lines / triangles / surfaces / … Property Property –Materials –Textures Motion Motion Hierarchy Hierarchy Level-of-detail Level-of-detail Game Models
180
180 Vertex position Vertex position –(x, y, z, w) –In model space or screen spane Vertex normal Vertex normal –(n x, n y, n z ) Vertex color Vertex color –(r, g, b) or (diffuse, specular) Texture coordinates on vertex Texture coordinates on vertex –(u 1, v 1 ), (u 2, v 2 ), … Skin weights Skin weights –(bone 1, w 1, bone 2, w 2, …) Geometry Data
181
181 Lines Lines –Line segments –Polyline »Open / closed Indexed triangles Indexed triangles Triangle Strips / Fans Triangle Strips / Fans Surfaces Surfaces –Non-uniform Rational B Spline (NURBS) Subdivision Subdivision Topology Data
182
182 Geometric data Vertex data v 0, v 1, v 2, v 3, … (x, y, z, n x, n y, n z, t u, t v ) or (x, y, z, c r, c g, c b, t u, t v, … ) Topology Face v 0 v 3 v 6 v 7 Edge table v0v0 v3v3 v6v6 v7v7 Right-hand rule for index polygon normal vertex normal Indexed Triangles
183
183 v0v0 v1v1 v2v2 v3v3 v4v4 v5v5 v6v6 v7v7 T0T0 T1T1 T2T2 T3T3 T4T4 T5T5 v 0, v 1, v 2, v 3, v 4, v 5, v 6, v 7 Triangle Strips “Get great performance to use triangle strips for rendering on current hardware
184
184 Material Material Textures Textures Shaders Shaders Property on Surface
185
185 Material Material –Ambient »Environment »Non-lighted area –Diffuse »Dynamic lighting –Emissive »Self-lighting –Specular with shineness »Hi-light »View-dependent »Not good for hardware rendering Local illumination Local illumination For fixed function rendering pipeline For fixed function rendering pipelineMaterials
186
186 Textures Textures –Single texture –Texture coordinate animation –Texture animation –Multiple textures –Alphamap Textures Material or vertex colors Base color texture Lightmap
187
187 Programmable Shading Language Programmable Shading Language –Vertex shader –Pixel shader Procedural way to implement some process of rendering Procedural way to implement some process of rendering –Transformation –Lighting –Texturing –BRDF –Rasterization –Pixel fill-in Shaders
188
188 Vertex DataTopology Data Classic Transform & Lighting Vertex Shader Clipping & Viewport Mapping TexturingPixel Shader Fog Alpha, Stencil, Depth Testing Geometry Stage Rasterizer Stage Shader Pipeline
189
189 Per-pixel lighting Per-pixel lighting Motion blur Motion blur Volume / Height fog Volume / Height fog Volume lines Volume lines Depth of field Depth of field Fur fighting Fur fighting Reflection / Refraction Reflection / Refraction NPR NPR Shadow Shadow Linear algebra operators Linear algebra operators Perlin noise Perlin noise Quaternion Quaternion Sparse matrix solvers Sparse matrix solvers Skin bone deformation Skin bone deformation Normal map Normal map Displacement map Displacement map Particle shader Particle shader Procedural Morphing Water Simulation Powered by Shader
190
190 Time-dependent data Time-dependent data Transformation data Transformation data –Position –Orientation Formats Formats –Pivot –Position vector –Quaternion –Eurler angles –Angular displacement Motion Data
191
191 Discrete LOD Discrete LOD –Switch multiple resolution models run-timely Continuous LOD Continuous LOD –Use progressive mesh to dynamically reduce the rendered polygons View-dependent LOD View-dependent LOD –Basically for terrain Level-of-detail
192
192 Render a Model in Different Level-of-Detail at Runtime Render a Model in Different Level-of-Detail at Runtime User-Controlledly or Automatically Change the Percentage of Rendered Vertices User-Controlledly or Automatically Change the Percentage of Rendered Vertices Use Collapse Map to Control the Simplification Process Use Collapse Map to Control the Simplification Process Progressive Mesh Collapse map Vertex list Triangle list Index012345678 Map011230456 012345678 025012358 00 6 4
193
193 Real-time Optimal Adapting Meshes (ROAM) Real-time Optimal Adapting Meshes (ROAM) Use height map Use height map Run-timely to re-construct the active (for rendering) geometric topology (re-mesh) to get an optimal mesh (polygon count) to improve the rendering performance Run-timely to re-construct the active (for rendering) geometric topology (re-mesh) to get an optimal mesh (polygon count) to improve the rendering performance Someone calls this technique as the view- dependent level-of-detail Someone calls this technique as the view- dependent level-of-detail Very good for fly-simulation-like application Very good for fly-simulation-like application View-dependent LOD for Terrain - ROAM
194
194 Apply progressive mesh for multi-resolution model generation Apply progressive mesh for multi-resolution model generation Use in-game discrete LOD for performance tuning Use in-game discrete LOD for performance tuning Why ? Why ? –For modern game API / platform, dynamic vertex update is costly on performance »Lock video memory stall CPU/GPU performance Level-of-detail Suggestion
195
195 With.cw3 extension With.cw3 extension A generic file form used in TheFly3D A generic file form used in TheFly3D ASCII format ASCII format Current Version 1.0 alpha Current Version 1.0 alpha A Model File Format, CW3 - Introduction
196
196 A Model File Format, CW3 - Example # CW3 model file, designed by Chuan-Chang Wang Model v 1 VertexType position color texture 2 2 2 UseVertexShader VertexColor_tex1.lvs Material 2 AnimTexture aaa 6 MultiTexture 2 a008 aaa00 Effect TextureMap 0 Lightmap 1 Vertex 1 6 -10.0 10.0 0.0 1.0 0.0 1.0 -1.0 1.0 -1.0 1.0 -10.0 -10.0 0.0 1.0 0.0 0.0 -1.0 0.0 -1.0 0.0 0.0 -10.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 10.0 -10.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 10.0 10.0 0.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 10.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 Polygon 2 4 0 0 1 2 5 both 4 1 2 3 4 5 both version vertex type vertex shader used materials vertices topology
197
197 Bounding sphere Bounding cylinder Axis-aligned bounding box (AABB) Oriented bounding box (OBB) Discrete oriented polytope (k-DOP) Bounding Sphere AABB OBB k-DOP Bounding Volume Bounding Cylinder
198
198 Collision Detection Collision Detection Visibility Culling Visibility Culling Hit Test Hit Test Bounding Volume - Application
199
199 Bounding sphere B 1 (c 1, r 1 ), B 2 (c 2, r 2 ) If the distance between two bounding spheres is larger than the sum of radius of the spheres, than these two objects have no chance to collide. D > Sum(r 1, r 2 ) D B1B1 B2B2 c1c1 c2c2 Application Example - Bounding Sphere
200
200 Axis-aligned bounding box (AABB) Axis-aligned bounding box (AABB) –Simplified calculation using axis-alignment feature –But need run-timely to track the bounding box AABB Application Example - AABB
201
201 Oriented bounding box (OBB) Oriented bounding box (OBB) –Need intersection calculation using the transformed OBB geometric data »3D containment test »Line intersection with plane For games, For games, OBB Application Example - OBB
202
202 Advanced Scene Management
203
203 This is a game-type-oriented issue Bounding Volume Hierarchies (BVHs) Binary space partition trees (BSP Trees) “Quake” Octree PVS Culling Skills Advanced Scene Graphs
204
204 Bounding spheres in hierarchy R B Bounding Volume Hierarchies (BVHs)
205
205 Two varients Axis-aligned Polygon-aligned The trees are created by using a plane to divide the space into two, and then sorting the geometry into two spaces. BSP Tree
206
206 plane1 plane0 plane2 plane3 0 1 2 3 Axis-aligned BSP Tree
207
207 A B C D E F G A B C D E FG Polygon-aligned BSP Tree
208
208 Quickly to identify where you are BSP = Sorting Need a pre-processor to generate the PVS Visibility culling + occlusion culling PVS : Possible Visible Set Optimized for in-door game environment [Fuch80] Fuchs, H., On Visible Surface Generation by a Priori Tree Structures, Computer Graphics, 14, 124-33, (Proc. SIGGRAPH’80) Why BSP Tree ?
209
209 Very similar to axis-aligned BSP tree Except that a box is split simultaneously along all three axes The split point must be the center of the box This creates eight new boxes Quadtree is the 2D version of octree Octree & Quadtree
210
210 Quadtree - Example
211
211 Data structure coherence Apply visibility culling from parents Split or not split ? Outdoor game scene ? Octree – Some Discussion
212
212 Culling means “remove from a flock” Visibility culling Remove the object not in view frustum A “must” for game engine Backface culling Remove the polygons facing away from camera Hardware standard Occlusion culling Remove the objects hidden by the others Culling (1/2)
213
213 eye View frustum Visibility culling Backface culling Occlusion culling Culling (2/2)
214
214 A Pre-processor A Pre-processor –Space partition the scene data from artist –Generate the BSP data structure –Generate the PVS BSP Walk Through BSP Walk Through –Identify the room where you are –Show/hide the rooms according to the PVS BSP Implementation
215
215 Input Input –A scene from artist –Cutting planes (optional) »Can be procedurally generated by algorithm –Cutting policy »Split or not split –Ray casting resolution for PVS Output Output –A BSP file »BSP Tree »PVS »Geometry Data BSP Preprocessor (1/2)
216
216 Process Process –Generate the BSP tree according to the cutting policy –Split or sort the geometry into BSP room (leaves) –For each “room”, ray cast all rooms to generate the possible visible room set –3D –Time consuming BSP Preprocessor (2/2)
217
217 Effectiveness of PVS Effectiveness of PVS –Data set Dynamic Objects Dynamic Objects Room size Room size BSP Challenges
218
218 Terrain
219
219 Game Type Oriented Game Type Oriented Terrain Terrain –For visual ( 廣義的場景 ) »Ground / Building / Static models / Dynamic models –For terrain following »Polygon mesh »Grids –For path finding »Polygon mesh »Grids Terrain Following Terrain Following –Make a 3D entity walking on terrain Path Finding Path Finding –Find a path before walking Introduction
220
220 Grid Grid –2D –Quadtree Height map Height map –Procedural height map ROAM ROAM –Real-time Optimally Adapting Meshes Triangular Mesh Triangular Mesh –Procedurally generated –Created by artists Terrain Formats Perlin Noise
221
221 2D Grid Map 2D Grid Map –Rectangular or Hexagonal grids –Attributes »Height »Walkable or not »Texture pattern ID Step Look Terrain Step Look Terrain Application Application –2D games –3D games with god view »2D tile-based game terrain Grid Map
222
222 Almost as Same as 2D Grid Map but Almost as Same as 2D Grid Map but –Height on grid vertex –Only height is saved –Regular grid –Irregular grid but structured Application Application –As the base data structure for ROAM terrain –Water simulation Height Map Top view
223
223 Real-time Optimally Adapting Mesh Real-time Optimally Adapting Mesh –http://www.llnl.gov/graphics/ROAM/ http://www.llnl.gov/graphics/ROAM/ Application Application –Fly-simulation ROAM
224
224 Use quad tree to construct the level-of-detail of terrain Use quad tree to construct the level-of-detail of terrain –A quad tree for LOD Chunked LOD Terrain
225
225 Possibly the Most Popular Way for Games Possibly the Most Popular Way for Games –General –Can be created by artists Multiple-layered Terrain Multiple-layered Terrain Triangular Mesh
226
226 Solve the Terrain Height for the Object to Stand on Solve the Terrain Height for the Object to Stand on –Use the triangular coordinate system (p. 154) Find the Next Neighboring Triangle Find the Next Neighboring Triangle –Half-edge data structure Terrain Following Using Triangular Mesh
227
227 Create cohesive relationship between triangles using “half edge” Create cohesive relationship between triangles using “half edge” Use half-edge table to search the neighboring triangles Use half-edge table to search the neighboring triangles Edge = two halves Half-edge (1/2)
228
228 struct HE_edge { HE_vert* vert; // vertex at the end of the half-edge HE_edge* pair; // oppositely oriented adjacent half-edge HE_face* face; // face the half-edge borders HE_edge* next; // next half-edge around the face }; struct HE_vert { float x; float y; float z; HE_edge* edge; // one of the half-edges // emantating from the vertex }; struct HE_face { HE_edge* edge; // one of the half-edges bordering the face }; http://www.flipcode.com/tutorials/tut_halfedge.shtml Half-edge (2/2)
229
229 Game AI Path Finding
230
230 A Common Situation of Game AI A Common Situation of Game AI Path Planning Path Planning –From start position to the goal Most Popular Technique Most Popular Technique –A* (A Star) »1968 »A search algorithm »Favorite teaching example : 15-pizzule »Algorithm that searches in a state space for the least costly path from start state to a goal state by examining the neighboring states Introduction to Path Finding
231
231 A* Algorithm (1/4) The A* Algorithm Open : priorityqueue of searchnode Closed : list of searchnode AStarSearch( location StartLoc, location GoalLoc, agenttype Agent) { clear Open & Closed // initialize a start node StartNode.Loc = StartLoc; StartNode.CostFromStart = 0; StartNode.CostToGoal = PathCostEstimate(StartLoc, GoalLoc, Agent); StartNode.TotalCost = StartNode.CostToGoal ; StartNode.Parent = NULL; push StartNode on Open; // process the list until success or failure while Open is not empty { pop Node from Open // node has the lowest TotalCost
232
232 A* Algorithm (2/4) // if at a goal, we’re done if (Node is a goal node) { construct a path backward from Node to StartLoc return SUCCESS; } else { for each successor NewNode of Node { NewCost = Node.CostFromStart + TraverseCost(Node, NewNode, Agent); // ignore this node if exists and no improvement if (NewNode is in Open or Closed) and (NewNode.CostFromStart <= NewCost) { continue; } else { // store the new or improved information NewNode.Parent = Node; NewNode.CostFromStart = NewCost; NewNode.CostToGoal = PathCostEstimate(NewNode.Loc, GoalLoc, Agent); NewNode.TotalCost = NewNode.CostFromStart + NewNode.CostToGoal; if (NewNode is in Closed) { remove NewNode from Closed }
233
233 A* Algorithm (3/4) if (NewNode is in Open) { adjust NewNode’s position in Open } else { Push NewNode onto Open } push Node onto Closed }
234
234 State State –Location –Neighboring states Search Space Search Space –Related to terrain format –Grids –Triangles –Points of visibility Cost Estimate Cost Estimate Path Path –Typical A* path –Straight path –Smooth path Hierarchical Path Finding Hierarchical Path Finding A* Algorithm (4/4)
235
235 Rectangular Grid Rectangular Grid –Use grid center Quadtree Quadtree –Use grid center Triangles or Convex Polygons Triangles or Convex Polygons –Use edge mid-point –Use triangle center Search Space & Neighboring States (1/2) Rectangular Grid QuadtreeTriangles
236
236 Points of Visibility Points of Visibility Generalized Cylinders Generalized Cylinders –Use intersections Search Space & Neighboring States (2/2) Points of VisibilityGeneralized Cylinders
237
237 Cost Function Cost Function –CostFromStart –CostToGoal Minimum Cost Minimum Cost –Distance traveled –Time of traveled –Movement points expended –Fuel consumed –Penalties for passing through undesired area –Bonuses for passing through desired area –…–…–…–… Estimate Estimate –To goal “distance” Cost Estimate
238
238 Result Path Typical A* Path Straight Path Smooth Path
239
239 Catmull-Rom Spline Output_point = p1*(-0.5u 3 +u 2 - 0.5u) + p2*(1.5u 3 – 2.5u 2 + 1) + p3*(-1.5u 3 + 2u 2 + 0.5u) + p4*(0.5u 3 – 0.5u 2 ) p1 p2 p3 p4 spline output_points
240
240 Break the Terrain for Path Finding to Several Ones Hierarchically Break the Terrain for Path Finding to Several Ones Hierarchically –Room-to-room –3D layered terrain –Terrain LOD Pros Pros –Speedup the search –Solve the problem of layered path finding Hierarchical Path Finding
241
241 Moving Goal Moving Goal –Do you need to find path each frame ? Moving Obstacles Moving Obstacles –Prediction Scheme Complexity of the Terrain Complexity of the Terrain –Hierarchical path finding “Good” Path “Good” Path Path Finding Challenges
242
242 Game AI Steering Behavior & Group Movement
243
243 Reference Reference –Craig W. Reynolds –1987 “Flocks, Herds, and Schools: A Distributed Behavioral Model”, Siggraph’87 Proceedings –1999 “Steering Behaviors for Autonomous Characters”, GDC Proceedings* –www.red3d.com/cwr/steer Autonomous Characters Autonomous Characters –Autonomous agents –NPCs in Games Related Work Related Work –Robotics –Artificial Intelligence (AI) –Artificial Life Introduction
244
244 Action Selection Action Selection Steering Steering Locomotion Locomotion Motion Behavior A Hierarchy of Motion Behavior
245
245 Game AI engine Game AI engine –State machine »Discussed in next chapter –Goals –Planning –Strategy Scripting Scripting Assigned by player Assigned by player Action Selection
246
246 Discussed in This Chapter Discussed in This Chapter Path Determination Path Determination –Path finding or path planning –Discussed in the last chapter Behaviors Behaviors –Seek & flee –Pursuit & evasion –Obstacle Avoidance –Wander –Path following –Unaligned collision avoidance Group Steering Group SteeringSteering
247
247 Character Physically-based Models Character Physically-based Models Movement Movement –Turn Right, Move forward, … Animation Animation –Quaternion Implemented / Managed by Game Engine Implemented / Managed by Game EngineLocomotion
248
248 A Point Mass A Point Mass –Linear momentum –No rotational momentum Parameters Parameters –Mass –Position –Velocity »Modified by applied forces »Max speed Top speed of a vehicle Top speed of a vehicle –Max steering force »Self-applied –Orientation »Car »Aircraft A Simple Vehicle Model (1/2)
249
249 Local Space Local Space –Origin –Forward –Up –Side Steering Forces Steering Forces –Asymmetrical »Thrust »Braking »Steering Velocity Alignment Velocity Alignment –No slide, spin, … –Turn A Simple Vehicle Model (2/2)
250
250 Steer_force = Truncate(streer_direction, Max_force) Steer_force = Truncate(streer_direction, Max_force) Acceleration = Steer_force / mass Acceleration = Steer_force / mass Velocity = Truncate(Velocity + Acceleration, Max_speed) Velocity = Truncate(Velocity + Acceleration, Max_speed) Position = Position + Velocity Position = Position + Velocity Euler Integration
251
251 Pursuit to a Static Target Pursuit to a Static Target –Steer a character toward to a target position Seek Steering force Seek Steering force –desired_velocity = normalize(target - position)*max_speed –steering = desired_velocity – velocity “A moth buzzing a light bulb” “A moth buzzing a light bulb” Flee Flee –Inverse of Seek Variants Variants –Arrival –Pursuit to a moving target Seek & Flee Behaviors
252
252 A Stopping Radius A Stopping Radius –Outside the radius, arrival is identical to seek –Inside the radius, the speed is ramped down to zero »target_offset = target – position »distance = length(target_offset) »ramped_speed = max_speed*(distance/slowing_distance) »clipped_speed = minimum(ramped_speed, max_speed) »desired_velocity = (clipped_speed/distance)*target_offset »steering = desired_velocity – Velocity Arrival Behavior
253
253 Target Character is Moving Target Character is Moving Apply Seek or Flee to the Target’s Predict Position Apply Seek or Flee to the Target’s Predict Position Estimate the Prediction Interval T Estimate the Prediction Interval T –T = Dc –D = distance(Pursur, Quarry) –c = turning parameter Variants Variants –Offset pursuit »“Fly by” Pursuit & Evasion Behaviors
254
254 Use Bounding Sphere Use Bounding Sphere Not Collision Detection Not Collision Detection Probe Probe –A cylinder lying along forward axis –Diameter = character’s bounding sphere –Length = speed (means Alert range) Find the most Threaten Obstacle Find the most Threaten Obstacle –Nearest intersected obstacle Steering Steering Obstacle Avoidance Behavior
255
255 Random Steering Random Steering One Solution : One Solution : –Retain steering direction state »Constrain steering force to the sphere surface located slightly ahead of the character –Make small random displacements to it each frame »A small sphere on sphere surface to indicate and constrain the displacement Another one : Another one : –Perlin noise Variants Variants –Explore –Forage Wander Behavior
256
256 A Path A Path –Spine »A spline or poly-line to define the path –Pipe »The tube or generated cylinder by a defined “radius” Following Following –A velocity-based prediction position »Inside the tube Do nothing about steering Do nothing about steering »Outside the tube “Seek” to the on-path projection “Seek” to the on-path projection Path Following Behavior Variants Variants –Wall following –Containment
257
257 A Flow Field Environment is Defined A Flow Field Environment is Defined Virtual Reality Virtual Reality –Not common in games Flow Field Following Behavior
258
258 Turn Away from Possible Collision Turn Away from Possible Collision Predict the Potential Collision Predict the Potential Collision –Use bounding spheres If possibly collide, If possibly collide, –Apply the steering on both characters –Steering direction is possible collision result »Use “future” possible position »The connected line between two sphere centers Unaligned Collision Avoidance Behavior
259
259 Steering Behaviors Determining How the Character Reacts to the Other Characters within His Local Neighborhood Steering Behaviors Determining How the Character Reacts to the Other Characters within His Local Neighborhood The Behaviors include The Behaviors include –Separation –Cohesion –Alignment Steering Behaviors for Groups of Characters
260
260 The Local Neighborhood is Defined The Local Neighborhood is Defined –A distance –The field-of-view »Angle The Local Neighborhood of a Character The Neighborhood
261
261 Make a Character to Maintain a Distance from Others Nearby Make a Character to Maintain a Distance from Others Nearby –Compute the repulsive forces within local neighborhood »Calculate the position vector for each nearby »Normalize it »Weight the magnitude with distance 1/distance 1/distance »Sum the result forces »Negate it Separation Behavior
262
262 Make a Character to Cohere with the others Nearby Make a Character to Cohere with the others Nearby –Compute the cohesive forces within local neighborhood »Compute the average position of the other nearbys Gravity center Gravity center »Apply “Seek” to the position Cohesion Behavior
263
263 Make a Character to Align with the Others Nearby Make a Character to Align with the Others Nearby –Compute the steering force »Average the together velocity of all other characters nearby »The result is the desired velocity »Correct the current velocity to the desired one with the steering force Alignment Behavior
264
264 Boids Model of Flocks Boids Model of Flocks –[Reynolds 87] Combination of Combination of –Separation steering –Cohesion steering –Alignment steering For Each Combination For Each Combination –A weight for combing –A distance –An Angle Flocking Behavior
265
265 Follow a Leader Follow a Leader –Stay with the leader »“Pursuit” behavior (Arrival style) –Stay out of the leader’s way »Defined as “next position” with an extension »“Evasion” behavior when inside the above area –“Separation” behavior for the followers Leader Following behavior
266
266 A Simple Vehicle Model with Local Neighborhood A Simple Vehicle Model with Local Neighborhood Common Steering Behaviors Common Steering Behaviors –Seek –Flee –Pursuit –Evasion –Offset pursuit –Arrival –Obstacle avoidance –Wander –Path following Behavior Conclusion –Wall following –Containment –Flow field following –Unaligned collision avoidance –Separation –Cohesion –Alignment –Flocking –Leader following Combining Behaviors Combining Behaviors
267
267 Game AI Finite State Machine
268
268 Finite State Machine (FSM) is the Most Commonly used Game AI Technology Today Finite State Machine (FSM) is the Most Commonly used Game AI Technology Today –Simple –Efficient –Easily extensible –Powerful enough to handle a wide variety of situations Theory (Simplified) Theory (Simplified) –A set states, S –An input vocabulary, I –Transition function, T(s, i) »Map a state and an input to another state Introduction (1/2)
269
269 Practical Use Practical Use –State »Behavior –Transition »Across states »Conditions –It’s all about driving behavior Flow-chart Diagram Flow-chart Diagram –UML State Chart »Arrow Transition Transition »Rectangle State State Introduction (2/2)
270
270 An Example of FSM As a Diagram Gather Treasure Flee Fight Monster in sight No monster Monster dead Cornered
271
271 Character AI Character AI “Decision-Action” Model “Decision-Action” Model Behavior Behavior –Mental State Transition Transition –Players’ action –The other characters’ actions –Some features in the game world FSM for Games
272
272 Code-based FSM Code-based FSM –Simple Code One Up »Straightforward »Most common –Macro-assisted FSM Language Data-Driven FSM Data-Driven FSM –FSM Script Language Implement FSM
273
273 Coding an FSM – Code Example 1 void RunLogic(int *state) { switch(*state) switch(*state) { case 0: // Wander case 0: // Wander Wander(); Wander(); if (SeeEnemy()) *state = 1; if (SeeEnemy()) *state = 1; if (Dead()) *state = 2; if (Dead()) *state = 2; break; break; case 1: // Attack case 1: // Attack Attack(); Attack(); *state = 0; *state = 0; if (Dead()) *state = 2; if (Dead()) *state = 2; break; break; case 2: // Dead case 2: // Dead SlowlyRot(); SlowlyRot(); break; break; }}
274
274 Coding an FSM – Code Example 2 void RunLogic(FSM *fsm) { // Do action based on the state and determine next input // Do action based on the state and determine next input input = 0; input = 0; switch(fsm->GetStateID()) switch(fsm->GetStateID()) { case 0: // Wander case 0: // Wander Wander(); Wander(); if (SeeEnemy()) input = SEE_ENEMY; if (SeeEnemy()) input = SEE_ENEMY; if (Dead()) input = DEAD; if (Dead()) input = DEAD; break; break; case 1: // Attack case 1: // Attack Attack(); Attack(); input = WANDER; input = WANDER; if (Dead()) input = DEAD; if (Dead()) input = DEAD; break; break; case 2: // Dead case 2: // Dead SlowlyRot(); SlowlyRot(); break; break; } // DO state transition based on computed input // DO state transition based on computed input fsm->StateTransition(input); fsm->StateTransition(input);}
275
275 Mealy & Moore Machines Mealy Machine Mealy Machine –A Mealy machine is an FSM whose actions are performed on transitions Moore Machine Moore Machine –A Moore machine’s actions reside in states –More intuitive for game developers
276
276 FSM Language Use Macros Coding a State Machine Directly Causes Lack of Structure Coding a State Machine Directly Causes Lack of Structure –Going complex when FSM at their largest Use Macro Use Macro Beneficial Properties Beneficial Properties –Structure –Readability –Debugging Simplicity Simplicity
277
277 FSM Language Use Macros – An Example #define BeginStateMachine … #define State(a) … … bool MyStateMachine::States(StateMachineEvent event, int state) int state){ BeginStateMachine BeginStateMachine State(0) State(0) OnUpdate OnUpdate Wander(); Wander(); if (SeeEnemy()) SetState(1); if (SeeEnemy()) SetState(1); if (Dead()) SetState(2); if (Dead()) SetState(2); State(1) State(1) OnUpdate OnUpdate Attack(); Attack(); SetState(0); SetState(0); if (Dead()) SetState(2); if (Dead()) SetState(2); State(2); State(2); OnUpdate OnUpdate RotSlowly(); RotSlowly(); EndStateMachine EndStateMachine}
278
278 Data-Driven FSM Scripting Language Scripting Language –Text-based script file –Transformed into »C++ Integrated into source code Integrated into source code »Bytecode Interpreted by the game Interpreted by the game Authoring Authoring –Compiler –AI editing tool Game Game –FSM script engine –FSM interface
279
279 Data-Driven FSM Diagram Authoring FSMs bytecode Compiler AI Editing Tool Condition & Action Vocabulary Games FSM Script Engine FSM Interface Condition & Action Code Game Engine Artist, Designers, & Developers
280
280 AI Editing Tool for FSM Pure Text Pure Text –Syntax ? Visual Graph with Text Visual Graph with Text Used by Designers, Artists, or Developers Used by Designers, Artists, or Developers –Non-programmers Conditions & Action Vocabulary Conditions & Action Vocabulary –SeeEnemy –CloseToEnemy –Attack –…–…–…–…
281
281 FSM Interface Facilitating the Binding between Vocabulary and Game World Facilitating the Binding between Vocabulary and Game World Glue Layer that Implements the Condition & Action Vocabulary in the Game World Glue Layer that Implements the Condition & Action Vocabulary in the Game World Native Conditions Native Conditions –SeeEnemy(), CloseToEnemy() Action Library Action Library –Attack(…)
282
282 FSM Script Language Benefits Accelerated Productivity Accelerated Productivity Contributions from Artists & Designers Contributions from Artists & Designers Ease of Use Ease of Use Extensibility Extensibility
283
283 Processing Models for FSMs Processing the FSMs Processing the FSMs –Evaluate the transition conditions for current state –Perform any associated actions When and How ? When and How ? – Depend on the exact need of games Three Common FSM Processing Models Three Common FSM Processing Models –Polling –Event-driven –Multithread
284
284 Polling Processing Model Processing Each FSM at Regular Time Intervals Processing Each FSM at Regular Time Intervals –Tied to game frame rate –Or some desired FSM update frequency –Limit one state transition in a cycle –Give a FSM a time-bound Pros Pros –Straightforward –Easy to implement –Easy to debug Cons Cons –Inefficiency »Some transition are not necessary to check every frame Careful Design to Your FSM Careful Design to Your FSM
285
285 Event-driven Processing Model Designed to Prevent from Wasted FSM Processing Designed to Prevent from Wasted FSM Processing An FSM is Only Processed When It’s relevant An FSM is Only Processed When It’s relevant Implementation Implementation –A Publish-subscribe messaging system (Observer pattern) –Allows the engine to send events to individual FSMs –An FSM subscribes only to the events that have the potential to change the current state –When an event is generated, the FSMs subscribed to that events are all processed “As-needed” Approach “As-needed” Approach –Should be much more efficient than polling ? Tricky Balance for Fine-grained or Coarse-grained Events Tricky Balance for Fine-grained or Coarse-grained Events
286
286 Multithread Processing Model Both Polling & Event-Driven are Serially Processed Both Polling & Event-Driven are Serially Processed Multithread Processing Model Multithread Processing Model –Each FSM is assigned to its own thread for processing –Game engine is running in another separate thread –All FSM processing is effectively concurrent and continuous –Communication between threads must be thread-safe »Using standard locking & synchronization mechanisms Pros Pros –FSM as an autonomous agent who can constantly and independently examine and react to his environment Cons Cons –Overhead when many simultaneous characters active –Multithreaded programming is difficult
287
287 Interfacing with Game Engine (1/2) FSMs Encapsulate Complex Behavior Logic FSMs Encapsulate Complex Behavior Logic –Decision, condition, action, … Game Engine Does Corresponding Game Engine Does Corresponding –Character animation, movements, sounds, … The Interface : The Interface : –Code each action as a function »Need recompile if any code is changed »ie., FleeWolf() –Callbacks »Function pointers »ie., actionFunction[fleeWolf]() –Container method »actionFunctions->FleeWolf(); »DLL
288
288 Interfacing with Game Engine (2/2) Take TheFly3D as Example: Take TheFly3D as Example: class AArmyUnit : public FnCharacter { … void DoAttack(…); } AArmyUnit *army; army->Object(…); army->MoveForward(dist, …); … army->DoAttack(…);
289
289 FSM Efficiency & Optimization Two Categories : Two Categories : –Time spent –Computational cost Scheduled Processing Scheduled Processing –Priority for each FSM –Different update frequency Load Balancing Scheme Load Balancing Scheme –Collecting statistics of past performance & extrapolating Time-bound for Each FSM Time-bound for Each FSM Do careful design Do careful design –At the design level Level-of-detail FSMs Level-of-detail FSMs
290
290 Level-Of-Detail FSMs Simplify the FSM When the Player Won’t Notice the Differences Simplify the FSM When the Player Won’t Notice the Differences –Outside the player’s perceptual range –Just like the LOD technique used in 3D game engine Three design Keys : Three design Keys : –Decide how many LOD levels »How much development time available ? »The approximation extent –LOD selection policy »The distance between the NPC with the player ? »If the NPC can “see” the player ? »Be careful the problem of “visible discontinuous behavior” –What kind of approximations »Cheaper and less accurate solution
291
291 Extending the Basic FSM Extending States Extending States –Begin-end block Stacks & FSMs Stacks & FSMs –Stack-based “history” of FSMs »“Remember” the sequence of states passed through »“Retrace” its steps at will –Hierarchical FSM Polymorphic FSMs Polymorphic FSMs Fuzzy State Machine Fuzzy State Machine –Combined with fuzzy logic BeginDoAction(); DoActions(); EndDoAction();
292
292 A Hierarchical FSM Example Gather Treasure Flee Fight Monster in sight No monster Monster dead Cornered Find Treasure Go To Treasure Take Treasure Find Treasure Gather Treasure Live Active FSM Stack
293
293 Another Hierarchical FSM Example Patrol Investigate Attack Done Noise Saw Enemy Done Go to A Look for Intruders Go to B Look for Intruders Patrol Report Noise Go Over To Noise Look for Intruders False Alarm! Investigate noise
294
294 More Topics in Game AI Scripting Scripting Goal-based Planning Goal-based Planning Rule-based Inference Engine Rule-based Inference Engine Neural Network Neural Network References References –Game Gems –AI Game Programming Wisdom
295
295 Game Physics
296
296 Introduction to Game Physics Traditional Game Physics Traditional Game Physics –Particle system –Rigid body dynamics –Flexible body dynamics Some State-of-art Topics Some State-of-art Topics –Car physics –Fluid dynamics –Rag-doll physics Physics Physics –Rigid body kinematics –Newton’s Laws –Forces –Momenta –Energy
297
297 Basic Concepts from Physics (1/2) Newton’s Laws Newton’s Laws –1 st Law »“ 靜者恆靜,動者恆成等速度運動 ” –2 nd Law »F = ma = m v/ t –3 rd Law » 作用力與反作用力 Forces Forces –Gravity / Spring forces / Friction / Viscosity –Torque » = r X F –Equilibrium
298
298 Basic Concepts from Physics (2/2) Momenta Momenta –Linear momentum –Angular momentum –Moment of inertia
299
299 Particles are objects with Particles are objects with –Mass –Position –Velocity –Respond to forces But no spatial extent (no size!) But no spatial extent (no size!) –Point mass Based on Newton Laws Based on Newton Laws –f = ma –x = f / m –v = f / m, x = v Particle Dynamics....
300
300 typedef struct { float m; /* mass */ float *x; /* position */ float *v; /* velocity */ float *f; /* force accumulator */ } *Particle; typedef struct { Particle *p /* array of pointers to particles */ int n; /* number of particles */ float t; /* simulation clock */ } *ParticleSystem; xvfmxvfm states xvfmxvfm xvfmxvfm xvfmxvfm xvfmxvfm xvfmxvfm … Particle n time Basic Particle System
301
301 /* gather states from the particles */ void ParticleGetState(ParticleSystem p, float *dst) { int i; for (i = 0; i n; i++) { *(dst++) = p->p[I]->x[0]; *(dst++) = p->p[I]->x[1]; *(dst++) = p->p[I]->x[2]; *(dst++) = p->p[I]->v[0]; *(dst++) = p->p[I]->v[1]; *(dst++) = p->p[I]->v[2]; } }
302
302 /* scatter states into the particles */ void ParticleSetState(ParticleSystem p, float *src) { int i; for (i = 0; i n; i++) { p->p[i]->x[0] = *(src++); p->p[i]->x[1] = *(src++); p->p[i]->x[2] = *(src++); p->p[i]->v[0] = *(src++); p->p[i]->v[1] = *(src++); p->p[i]->v[2] = *(src++); } }
303
303 /* calculate derivative, place in dst */ void ParticleDerivative(ParticleSystem p, float *dst) { int i; ClearForce(p); ComputeForce(p); for (i = 0; i n; i++) { *(dst++) = p->p[i]->v[0]; *(dst++) = p->p[i]->v[1]; *(dst++) = p->p[i]->v[2]; *(dst++) = p->p[i]->f[0]/p->p[i]->m; *(dst++) = p->p[i]->f[1]/p->p[i]->m; *(dst++) = p->p[i]->f[2]/p->p[i]->m; } }
304
304 /* Euler Solver */ void EulerStep(ParticleSystem p, float DeltaT) { ParticleDeriv(p, temp1); ScaleVector(temp1, DeltaT); ParticleGetState(p, temp2); AddVector(temp1, temp2, temp2); ParticleSetState(p, temp2); p->t += DeltaT; }
305
305 Rigid Body Dynamics Mass of a Body Mass of a Body –Mass center Force Force –Linear momentum –P(t) = M v(t) –Velocity (v) Torque Torque –Angular momentum –L(t) = I (t) –Local rotation ( ) Inertia Tensor Inertia Tensor Reference Reference –www-2.cs.cmu.edu/afs/cs/user/baraff/www/pbm
306
306 Flexible Body Dynamics (1/2) Particle-Spring Model Particle-Spring Model –F = k x –Not a stress-strain model –Lack of Elasticity, Plasticity, & Viscous-Elasticity –Can be unstable
307
307 Flexible Body Dynamics (2/2) Finite Element Method Finite Element Method 有限元素法 有限元素法 –Solver for ODE/PDE –Boundary conditions –Energy equation –Stress-strain model –Very complicated computing process Conservation of Energy Conservation of Energy
308
308 Advanced Topics in Game Physics Fracture Mechanics ( 破壞力學模擬 ) Fracture Mechanics ( 破壞力學模擬 ) Fluid Dynamics ( 流體力學 ) Fluid Dynamics ( 流體力學 ) Car Dynamics ( 車輛動力學 ) Car Dynamics ( 車輛動力學 ) Rag-doll Physics ( 人體物理模擬 ) Rag-doll Physics ( 人體物理模擬 )
309
309 Game FX
310
310 Introduction to Game FX Improve the Visual & Sound Game Effects Improve the Visual & Sound Game Effects Includes Includes –Combat FX –Environment FX –Character FX –Scene FX –Sound FX FX Editor Needed FX Editor Needed –General 3D animation tools can not do it »Key-frame system is not working »FX animation is always Procedurally Procedurally Related to the previous frame Related to the previous frame Small Work But Large Effect Small Work But Large Effect
311
311 FX Editing Tool
312
312 Combat FX During the Combat During the Combat –Weapon motion blur –Weapon effect –Skill effect After the Combat After the Combat –Damage effect FX Editor FX Editor
313
313 Combat FX Example
314
314 Motion Blur – Image Solution Computer Animation : Computer Animation : –Image solution –Blending rendered image sequence »Render too many frames »Divide the frames »Average »Done!
315
315 Motion Blur – Geometry Solution In Games, Use Transparent Objects to Simulate the Motion Blur In Games, Use Transparent Objects to Simulate the Motion Blur “False” Motion Blur “False” Motion Blur –Tracking the motion path of the object –Connecting them as a triangular mesh –Use time-dependent semi-transparency to simulate the “blur” –The path can be smoothed using Catmull-Rom spline »Local stability of the curve
316
316 FX Uses Texture Animation Almost All Game FXs Use this Trick Almost All Game FXs Use this Trick Geometry Object on which the Texture Animation Playing Geometry Object on which the Texture Animation Playing –Billboard –3D Plate –Cylinder –Sphere –Revolving a cross section curve Texture Sequence with Color-key Texture Sequence with Color-key Semi-transparent Textures Semi-transparent Textures –Alpha blending »Source color added to background Demo!!!! Demo!!!!
317
317 Particle System for FXs in Combat The FXs The FXs –Fire / exposure / smoke / dust Initial Value + Time dependency Initial Value + Time dependency Combined with Billboard FX Combined with Billboard FX –Billboard to play the texture animation –Particle system to calculate the motion path Gravity is the major force used Gravity is the major force used Emitter pattern Emitter pattern –Single emitter –Area emitter –Emitter on vertices Demo !!! Demo !!!
318
318 Environment FX Weather Weather –Use particle system »Rain »Snow »Wind Fog Fog –Traditional fog »From near to far »Hardware standard feature –Volume fog »Layered fog »Use vertex shader Day & Night Day & Night
319
319 Character FX Fatality Fatality –Case by case and need creative solutions Rendering Effects on Skins Rendering Effects on Skins –Environment mapping –Bump map –Normal map –Multiple texture map Flexible body Flexible body –Flexible body dynamics Fur Fur –Real-time fur rendering …
320
320 Scene FX – Sky Box Use a very large box or dome-like model to surround the whole game scene Use a very large box or dome-like model to surround the whole game scene Use textures on the box or dome as the backdrop Use textures on the box or dome as the backdrop Use multiple textures and texture coordinates animation to simulate the moving of the clouds Use multiple textures and texture coordinates animation to simulate the moving of the clouds
321
321 Scene FX – Len’s Flare Runtime calculate the position and orientation of the camera with the sun Runtime calculate the position and orientation of the camera with the sun Put textures to simulate the len’s flare Put textures to simulate the len’s flare
322
322 Scene FX – Light Scattering Atmospheric Light Scattering Atmospheric Light Scattering Caused by dust, molecules, or water vapor Caused by dust, molecules, or water vapor –These can cause light to be: »Scattered into the line of sight (in-scattering) »Scattered out of the line of sight (out-scattering) »Absorbed altogether (absorption) Skylight and sun light Skylight and sun light Can be Implemented by Vertex Shader Can be Implemented by Vertex Shader
323
323 Scene FX – Light Scattering Examples With scatteringWithout scattering
324
324 Characters
325
325Introduction The Characters are the Actors of the Games. The Characters are the Actors of the Games. Three Types of Characters : Three Types of Characters : –Segmented –Mesh –Bone-skin Root-base Concept (P.128-129) Root-base Concept (P.128-129) Production : Production : –3D animation tools »3dsMax »Maya »Softimage »…»…»…»… –Motion capture (Mocap) »For motion data Base
326
326 A character is composed by a set of models with motion data to simulate a live creature in real world A character is composed by a set of models with motion data to simulate a live creature in real world P. 126-127 P. 126-127 Benefits Benefits –Hierarchical structure –Easy to implement in a scene tree Drawbacks Drawbacks –Segment-like A Segmented Character
327
327 Vertex animation on skins Vertex animation on skins –Animated positional data on skins –3D warping Benefits Benefits –Easy to implement –Flexible mesh in animation Drawbacks Drawbacks –No hierarchy –No keyframes –Massive dataset A Mesh Character
328
328 Bone-Skin Skeleton Bone-Skin Skeleton –Hierarchical bones –Skin deformation run-timely Benefits Benefits –Hierarchical structure –Not segmented look Drawbacks Drawbacks –More complicated than the other solutions –Skin deformation need more CPU cost than transformation only Bone A Skin Bone B A Bone-skin Character
329
329 Motion Data Euler Angles Euler Angles Angular Displacement Angular Displacement Quaternion Quaternion –Slerp But Finally They Will Be Converted into “Matrix” But Finally They Will Be Converted into “Matrix”
330
330 Optical Motion Capture Data Acquired Data Acquired –From skin to joint (Mocap) –From joint to skeleton (Post-processing) –From skeleton to skin (In-game) Device Device The Shooting Plan The Shooting Plan
331
331 Raw Data (Positional Data) Joint End Point Bio-Data Data Acquirement During the Mocap
332
332 Skeletons Skin Skeletons Bone-Skin Bone-skin Implementation In Game
333
333 Mocap Devices
334
334 Starting Out – Reviewing the Animation List and Flowchart Planning a Mocap Shoot
335
335
336
336 Creating a Shot List Create a Database File Names Preliminary Shot List A Data Record of Shot List
337
337 A Shoot List
338
338 Getting Ready for the Shoot When to Shoot ? Find a Studio Make Sure No Technical Blocks Casting Preparing a Shooting Schedule Organize the Shot List Daily Schedule Do You Need a Rehearsal Day ? Take Care of Your Performer
339
339 A Daily Schedule
340
340
341
341
342
342
343
343 Apply motion data on bones Apply motion data on bones Joint = pivot(p x,p y,p z ) in A A B (x,y,z, ,axis) ( ,axis) = [R B ][T B ][R A ][T A ] From pivot From position Motion for Characters
344
344 To Create More Animation from Limited Ones To Create More Animation from Limited Ones Run-time or Pre-processing Run-time or Pre-processing Issues : Issues : –Motion re-targeting »Run-time –Re-key-framing »Pre-processing –Interpolation »Run-time –Motion blending »Run-time Motion Editing
345
345 A Set of Frame Data to Describe the Character’s Motion A Set of Frame Data to Describe the Character’s Motion Walk, Run, Attack, … Walk, Run, Attack, … Keyframed or Non-keyframed Keyframed or Non-keyframed walkrunattackfallPoses
346
346 walk raw_start_frameraw_end_frame cut_frame Parameter { raw_start_frame raw_end_frame start_frame end_frame cut_frame play_speed length transition_mode } start_frameend_frame A Pose Definition Example
347
347 walk 048 Frame 5.3 1.If the motion data is in quaternion form 2.Get the motion data on frame 5 & 6 3.Convert the data into quaternion format 4.Apply slerp(5, 6, 0.3) to get the interpolation on frame 5.3 5.Convert the result of step 3 into a rotation matrix 6.Apply the matrix to the object for its transformation Play a Pose
348
348 Pose 1 Pose 2 cut_frame start_frame length Pose Connection
349
349 Motion blending in run-time Motion blending in run-time Quaternion is used Quaternion is used “Blend Tree” “Blend Tree” –Cross fade –Countinuous blending –Feather blending Pose Blending
350
350 Reference Reference –Game Developers Conference 2003 –Proceedings CD, Programming Track –“Animation Blending : Achieving Inverse Kinematics and More” –Jerry Edsall –Mech Warrior blend tree Fall Transition Forward Motion Fall Down Walk Run Blend Tree
351
351 Pose 1 Pose2 0 1 0 1 Cross Fade
352
352 Pose 1 Pose 2 0 1 0 1 Continuous Blending
353
353 左右搏擊 左右搏擊 Pose 1Pose 2 Pose 3 Feather Blending
354
354 Weights to Assign the Influences of the Deformation by Bones on Skin Vertices Weights to Assign the Influences of the Deformation by Bones on Skin Vertices –1-weight –2-weight –N-weight CPU cost CPU cost It’s Very Good for GPU to Perform the Calculation Using Vertex Shader on DirectX It’s Very Good for GPU to Perform the Calculation Using Vertex Shader on DirectX Skin Deformation
355
355 Bone A (root object) Bone B (Bone A’s child) base 1.Apply motion data to bones 2.Convert the vertex from “base” space to its associated bone’s space using the natural pose’s inverse transformation 3.Multiple the influence weight 4.Accumulate all influences 5.Then the vertex is deformed by the bone in “base” space
356
356 M b = R b T pivot M a = R a T position M vb = M nb -1 M b M a M va = M na -1 M a v in_base = v s *w a M va + v s *w b M vb A two-weight skin vertex example
357
357 Network Gaming
358
358 History of Network Gaming MUD MUD –Multi-user Dungeons Modem Games Modem Games Match Makings Match Makings –Real-time strategy –FPS MMORPG MMORPG –MMOG –Massive Multiplayer Online Role-playing Games
359
359MUD A large scale game with fantasy-type A large scale game with fantasy-type Create your own character Create your own character –Strength/Intelligence/Endurance/Wisdom Most of the MUDs are text-based Most of the MUDs are text-based –MUD commands Players play them simultaneously Players play them simultaneously Persistent worlds Persistent worlds –The amount of time invested –Never ending Competition Competition –Skill & Attributes –Experience points Ownership Ownership –Acquire better items Society Society
360
360 Modem Games BBS Games BBS Games –Turn based –Strategy Modem-to-modem Games Modem-to-modem Games Player 1Player 2 Modem Phone
361
361 Match Makings Puzzle/Table Games on the Net Puzzle/Table Games on the Net – 休閒遊戲 RTS RTS –Real-time strategy games –IPX –TCP/IP FPS FPS –First-personal-view shooting games AI AI Game Lobby Game Lobby –Match making –Ranking –Chatting –A special case »Xbox Live
362
362MMORPGs Graphical MUD Graphical MUD –With much more functionality Persistent Persistent Real-time Online ( 即時在線 ) Real-time Online ( 即時在線 ) Pay-for-play Pay-for-play New Game Style New Game Style –RPG –Adventure –Action –Society –Messaging –Avatar
363
363 Network Gaming Architecture Peer-to-peer Peer-to-peer Client server Client server
364
364Peer-to-peer Client Broadcasts Messages to Each Other Client Broadcasts Messages to Each Other Simple Pattern Simple Pattern Easy to Code Easy to Code But Need More Bandwidth for Each Client But Need More Bandwidth for Each Client Limited Players Limited Players Fault Tolerance Fault Tolerance High Security Risk High Security Risk Client 1 Client 2 Client 3 Client 4 Host
365
365 Client Server One Server Serves Every Clients One Server Serves Every Clients More Complex in Coding More Complex in Coding Many Players Many Players The Server Needs More Bandwidth The Server Needs More Bandwidth –This means “Expensive” Improved security Improved security No fault tolerance No fault tolerance Dedicated Server Dedicated Server Server Client 2 Client 3 Client 1
366
366 Internet Consideration Limit Network Bandwidth Limit Network Bandwidth Unstable Network Environment Unstable Network Environment Update Frame Rate Update Frame Rate –For match making : 5-8 fps »Position updates »Inventory updates »Kill or killed »…»…»…»… –For MMOG : 1-2 fps »Position updates »Inventory updates »Kill or killed »Friend list updates »Chatting »Messaging »…»…»…»…
367
367 Poor Networking Problems Limited bandwidth Limited bandwidth –Data packet size is important –Solutions »Data compression »Lower update frame rate Low update frame rate Low update frame rate –Synchronization is the key –Solutions »Extrapolation »Prediction »Chasing Network LOD Network LOD Network Visibility Network Visibility
368
368 Data Packet Data Compression Data Compression Encode / Decode Encode / Decode CPU time vs data size CPU time vs data size Socket Socket TCP/IP & UDP TCP/IP & UDP
369
369 Network Data Compression Must be Lossless Compression ? Must be Lossless Compression ? Zip ? Zip ? Bit, Byte, Short or Long ? Bit, Byte, Short or Long ? Fixed-point or Floating-point Fixed-point or Floating-point Run-length Compression Run-length Compression Use Index/ID Instead of Data Use Index/ID Instead of Data 1 Boolean = 4 bytes 1 Boolean = 4 bytes
370
370 Position Extrapolation i-1 i+1 Use Position(i-1) & Position(i) to Get the Next Possible Position (i+1) Use Position(i-1) & Position(i) to Get the Next Possible Position (i+1) No Velocity Data is Needed No Velocity Data is Needed i real path i+1 i+2
371
371 Position Prediction i-1 i+1 i real path i+1 i+2 Use Current Facing Direction to Predict Next Position Use Current Facing Direction to Predict Next Position Update : (position, facing direction) Update : (position, facing direction)
372
372 Position Chasing Always being Late One Step to the Master Always being Late One Step to the Master Not Good for Moving Fast Objects Not Good for Moving Fast Objects i-1 i real path i+1
373
373 Network Visibility Server Will Not Update the Position of the Clients that are Out of a Specific Range of One Client Server Will Not Update the Position of the Clients that are Out of a Specific Range of One Client Only When the Outside Clients Move into the Range of the Client Only When the Outside Clients Move into the Range of the Client That Means the Client Can Not “See” the Clients Outside its Range on the Net That Means the Client Can Not “See” the Clients Outside its Range on the Net
374
374 Network Level-of-details Besides the Network Visibility, Apply the Network LOD to the Client Between Clients Besides the Network Visibility, Apply the Network LOD to the Client Between Clients For Each Client, the Server Should Adaptively Adjust the Update Frame Rate for the Other Clients to the Target Client According to Their Physical Distance For Each Client, the Server Should Adaptively Adjust the Update Frame Rate for the Other Clients to the Target Client According to Their Physical Distance 5fps 3fps 1fps invisible Me
375
375 TCP/IP or UDP Some Game Data Can Be Lost Some Game Data Can Be Lost –Position for the object in each frame –UDP is fast but not reliable Some must be Not Some must be Not –Kill or not kill, killed or nor killed –TCP/IP Hybrid Data Transmission Ways Hybrid Data Transmission Ways –Data-can-not-lost going through TCP –Data-can-lost going through UDP –Or implement you reliable UDP solution
376
376 Network Security Anti-hacking Anti-hacking –System administration issues –Very important in MMORPG Cheat prevention Cheat prevention –Technical example: »A “fake” client instead of the game client to send cheating data packets. –Game-playing example: »Using the game bugs to get the improper fortune Be-killed -> Dead -> Get free money -> Be-killed ->… Be-killed -> Dead -> Get free money -> Be-killed ->…
377
377 Develop Tools & Solutions Match-makings Match-makings –DirectPlay in DirectX SDK –Socket programming –Middleware »ie., Quazal NetZ Internet Causal Games Internet Causal Games –Web programming –SQL programming MMORPG MMORPG –Socket programming –Middleware »Terezona from Zona »Eterna from Quazal »Butterfly.net
378
378 MMORPG Servers
379
379 MMORPGs Features Avatar Avatar Levels Levels RPG Elements RPG Elements Mission Mission Chatting Chatting Society & Community Society & Community Friends Friends Combat Combat NPCs / Monsters NPCs / Monsters Experience Points Experience Points Extended Game Contents Extended Game Contents Online Customer Services (GM) Online Customer Services (GM)
380
380 MMORPGs Technical Elements Client-server Architecture Client-server Architecture Servers Servers Network Bandwidth Network Bandwidth Network Data Packet Network Data Packet Network Security Network Security Graphics Graphics Database Database
381
381 MMORPG Servers Stand Alone Servers Stand Alone Servers Distributed System Distributed System
382
382 Standalone Server Using a Set of Large Servers as the Game Servers Using a Set of Large Servers as the Game Servers Each Server Plays as a Single Function Each Server Plays as a Single Function Login server internet Game playCommunity Database
383
383 Distributed System - Concept Distributed PC Clusters Distributed PC Clusters servers internet Game play servers servers Database servers servers Login servers
384
384 Distributed PC Clusters 1-U Web Server Based on PC Architecture 1-U Web Server Based on PC Architecture Two CPUs Two CPUs Two Network IPs Two Network IPs 1U server Net IP 1Net IP 2 Internal LAN Internet
385
385 Distributed System - Features Distributed PC Clusters Distributed PC Clusters –Two IPs Scalability Scalability Fault Tolerance Fault Tolerance Load Balance Load Balance Dynamic Zoning Dynamic Zoning “Blade Servers” “Blade Servers”
386
386 Distributed System - Scalability Serve concurrent 500 users Serve concurrent 1000 users Regional Operation Consideration Regional Operation Consideration Cost Effective Cost Effective Flexible Capacity Flexible Capacity
387
387 Distributed System – Fault Tolerance All Servers Can Not Be Down in Anytime All Servers Can Not Be Down in Anytime For Distributed Servers, Every Job Must Be Transferred Between Servers For Distributed Servers, Every Job Must Be Transferred Between Servers For Standalone Server, Use Redundant Policy For Standalone Server, Use Redundant Policy
388
388 Master server Slave server A Slave server B ! ! Internal LAN Internet
389
389 Master server Slave server A Slave server B X Internal LAN Internet
390
390 Server on duty Server off duty ZZZZZZ ! ! Redundant Policy
391
391 Server off duty Server on duty X Redundant policy
392
392 Master servers Slave server A Slave server B Internal LAN Internet....
393
393 Distributed System – Load Balance Distributed MMOGs Always Do the Load Balance by In-house Approach Distributed MMOGs Always Do the Load Balance by In-house Approach Load ? Load ? –CPU bound –Memory bound –Network bandwidth 1 server = 500 concurrent players 10 servers = 5000 concurrent players X ! It’s very important to move the jobs on a crowded server to another ones on a crowded server to another ones
394
394 Master server Slave server A Slave server B Internal LAN Internet Load balance – case 1
395
395 Master server Slave server A Slave server B ! ! Internal LAN Internet Load balance case 2
396
396 Master server Slave server A Slave server B Internal LAN Internet Load balance case 2
397
397 Zone Concept A “Zone” is Logically a Region of Game Happening on Servers A “Zone” is Logically a Region of Game Happening on Servers We Always Map the “Zone” to a Physical 3D Scene We Always Map the “Zone” to a Physical 3D Scene A Zone is Not Really a Physical Hardware Server A Zone is Not Really a Physical Hardware Server But a Software Region that the Players Communicating Directly (in the same memory block) But a Software Region that the Players Communicating Directly (in the same memory block)
398
398 Master server Slave server A Slave server B Internal LAN Internet
399
399 messaging Server A Server B combating transaction Zone X Zone Y Zone Z NPC messaging Server C
400
400 Interaction within/between Zones (Game Play) Within Zone Within Zone –Combating –Chatting –Transaction Between Zones Between Zones –Messaging –Transaction (remote) –Banking
401
401 Server A Server B Zone X Zone Y Zone Z NPC Server C If server B is over-loaded, move the “Zone Y” or “Zone Z” to an available server C Zone Z
402
402 Load Balance Using Zone Moving Under the Concept of “Zone Moving”, We Can Move the Zones Between Hardware Server to Achieve the Load Balance Under the Concept of “Zone Moving”, We Can Move the Zones Between Hardware Server to Achieve the Load Balance But is This a Total Solution to Solve the Load Balance ? But is This a Total Solution to Solve the Load Balance ? Condition : Condition : Server A Server B Server C If server A is over-loaded, the whole server is over-loaded due that server A is occupied only one zone. Thinking : “Can we divide the zone into two or more ? “ Zone X Zone Y Zone Z
403
403 Dynamic Zoning Dynamically Adjust the Zones to Meet the Loading Requirement Dynamically Adjust the Zones to Meet the Loading Requirement Moving Zones between Hardware Moving Zones between Hardware Divide the Zone into Small Ones According to the Load and Move the Small Ones to Different Hardware Divide the Zone into Small Ones According to the Load and Move the Small Ones to Different Hardware
404
404 My Suggestion about Dynamic Zoning (1) A “Zone” is Mapping to a Physical Scene or Map (geometry) A “Zone” is Mapping to a Physical Scene or Map (geometry) A Zone is Composed by Several Groups A Zone is Composed by Several Groups A “Group” is a Collection of Players (Population) A “Group” is a Collection of Players (Population) All Players in the Same Group Running in One Same Process All Players in the Same Group Running in One Same Process Players in Different Group Communicate between Processes Players in Different Group Communicate between Processes –Inter-process communication (IPC) ?
405
405 My Suggestion about Dynamic Zoning (2) Group is More Dynamically Due to Based on the Concept of Population Group is More Dynamically Due to Based on the Concept of Population –Create –Delete –Move
406
406 Zone = A 3D Scene A 3D Scene A 3D Scene –3D models –Moving objects –NPCs –…–…–…–… Zones are Physically Neighboring Together Zones are Physically Neighboring Together Using Portals to Connect the Relationship Using Portals to Connect the Relationship Player Travels between Zones Player Travels between Zones –Logout current scene and login to another neighboring zone when stepping on the zone portal –Player in client will feel a little hanging during the moving
407
407 Zone Portals Zone X Zone Y Portal
408
408 Zone Portals Zone X Zone Y Portal
409
409 Population Group A Data Structure to Contain the Players A Data Structure to Contain the Players When a Player Logins into one Zone, He Should Be Assigned into One Available Population Group and Got the ID When a Player Logins into one Zone, He Should Be Assigned into One Available Population Group and Got the ID Players Should Not Be Moved Between Population Groups When He Is Staying in this Zone Players Should Not Be Moved Between Population Groups When He Is Staying in this Zone A Zone Can Be Divided into Several Groups A Zone Can Be Divided into Several Groups Group can be Created/Deleted/Moved by the Servers for Load Balance Group can be Created/Deleted/Moved by the Servers for Load Balance
410
410 Players in a Zone Zone X P1G1 P5G1 P2G2 P7G2 P12G2 P6G3 P5G3
411
411 Server A Server B Zone X Group 1Group 2 When a new player logins into Zone X, insert the player into group 2 which has space for new comer
412
412 Server A Server B Zone X Group 1Group 2 But if there are no groups with available space, create a new group for new comers Group 3
413
413 Server A Server B Zone X Group 1Group 2Group 3Group 4Group 5Group 6 If the Zone X on Server A is full for new comer, duplicate Zone X on Server B and create a new group for new players Zone X (2) Group 7
414
414 Server A Server B Zone X Group 1Group 2Group 3Group 4Group 5Group 6 Zone X (2) Group 7Group 8 IPC Network communication
415
415 The Challenge of Dynamic Zoning Physical Terrain and Models Are not Easy to Divide Dynamically Physical Terrain and Models Are not Easy to Divide Dynamically –If your zones are coupling with the physical scenes, to divide the geometric data in runtime needs some specific algorithms for 3D scenes –From my suggestion, don’t do it –Find a mechanism that makes the zone dividable –And that is the “Population Group” One Server Can Have Multiple Zones Running One Server Can Have Multiple Zones Running One Zone Can Run on Several Servers One Zone Can Run on Several Servers –Hard to code –Duplicated memory on servers –Synchronization between servers –Data communication overhead
416
416 The Challenge of Dynamic Zoning (2) Game Play Sensitive Game Play Sensitive Running Players in the Same Zone by Multiple Processes Running Players in the Same Zone by Multiple Processes –Duplicated memory on the same server –Synchronization between processes –Data communication between processes Players’ Attribute Data Should Be Classified as : Players’ Attribute Data Should Be Classified as : –Frequently used between players »Must be duplicated between processes –Seldom used between players »Send between players when necessary –Locally used by player himself Cross-platform Server API Design* Cross-platform Server API Design* * Hand drawing on white board
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.