Ctrl+Paint

Ctrl+Paint: How to Draw

A few days ago I received my Wacom Intuos5 Small Touch. My happiness since has reached exponential levels. Drawing with it is wonderful, better than on dead trees most of the time. The only annoying part is that I can’t draw with it while I’m on the bus.

A friend of mine, Alexandra, showed me this wonderful site with great videos to improve your drawing skills, both analog and digital.

Currently I’m on lesson 2 and have improved a lot in a few hours. This is great!

Artemis - an Entity Component Framework

Artemis

Since a while back I have been reading about entity-component architectures (or, how to utilize data-oriented design) in game development. What are they? What problems do they solve? These questions are easily answered by watching this:

They have more great videos at the Game Engine Architects channel on YouTube.

Basically the features are:

  • Use compact data structures which utilizes the computer’s caches to decrease stalls in the CPU pipeline.
  • Higher flexibility for entity management; create different systems that act isolated on a set of entities based on patterns. [This is incredibly powerful and reminds a lot about the functional paradigm]
  • Data-oriented; data exist in the form of content and markup files that the game’s factories parse to create the in-game entities. Can basically have hot-swap features in-game to allow art users to get instant visual feedback while rendering. If some data file changes, you update the content in-game at the same time. No need for recompilation.

Here are some more links worth checking out:

Nature of Code

Nature of Code

I recently started reading a new book I had found by accident on HN; Nature of Code. A book about creative coding if you only glance at it. However, look deeper and you have a book that covers, with the help of Processing.js, areas that are useful not only to creative coders but also to game developers; basic mathematical constructs, physics and artificial intelligence.

It begins by explaining coordinate systems, positions and how to create visual animation but stepping through time. Daniel, the author, then continues to build upon this basic foundation by creating abstractions; like two-dimensional vectors and how you can utilize them for your benefit.

The chapter on forces is incredibly valuable to any game developer or creative coder alike!

Setting Up Jekyll on Windows 7

How I installed Jekyll on Windows 7

Step 1: Install Ruby with the RubyInstaller

Download and install Ruby (I chose rubyinstaller-1.9.3-p125.exe). Then download and unzip the DevKit version of Ruby from the same page.

How to install the DevKit

While installation is (in general) simple, please ensure you carefully follow each step below.

1. Preparation

If you previously installed the legacy DevKit devkit-3.4.5r3-20091110.7z, its artifacts were extracted into each Ruby installation and need to be manually removed. Remove the gcc.bat, make.bat, and sh.bat stub batch files in <RUBY_INSTALL_DIR>\bin and the <RUBY_INSTALL_DIR>\devkit subdirectory for each Ruby installation using the legacy DevKit. If you previously installed one of the legacy self-extracting DevKit’s, follow the SFX DevKit upgrade instructions.

2. Download Files

The current DevKit is available at the RubyInstaller download page with older versions available at the archives page. As backup, check our GitHub downloads page.

3. Extract Files

Left double-click the self-extracting executable (SFX) downloaded from Step 2 and choose a directory (without spaces) to install the DevKit artifacts into. For example, C:\DevKit. NOTE: the SFX is really a 7-Zip archive with a bit of embedded magic. If you already have 7-Zip installed, you can simply right-click it and extract it’s contents as you would a normal 7z archive. In the instructions that follow, the directory that you selected is identified as <DEVKIT_INSTALL_DIR>.

4. Run Installation Scripts

cd <DEVKIT_INSTALL_DIR> from Step 3 above. ruby dk.rb init to generate the config.yml file to be used later in this Step. Your installed Rubies will be listed there (only those installed by a RubyInstaller package are detected at present). edit the generated config.yml file to include installed Rubies not automagically discovered or remove Rubies you do not want to use the DevKit with.

[optional] ruby dk.rb review to review the list of Rubies to be enhanced to use the DevKit and verify the changes you made to it are correct. finally, ruby dk.rb install to DevKit enhance your installed Rubies. This step installs (or updates) an operating_system.rb file into the relevant directory needed to implement a RubyGems pre_install hook and a devkit.rb helper library file into <RUBY_INSTALL_DIR>\lib\ruby\site_ruby. NOTE: you may need to use the --force option to update (with backup of the originals) the above mentioned files as discussed at the SFX DevKit upgrade FAQ entry.

5. Test Installation

Confirm your Ruby environment is correctly using the DevKit by running gem install rdiscount —platform=ruby. RDiscount should install correctly and you should see Temporarily enhancing PATH to include DevKit… in the screen messages.

Next run ruby -rubygems -e "require 'rdiscount'; puts RDiscount.new('**Hello RubyInstaller**').to_html" to confirm that the rdiscount gem is working.

Installing Jekyll

Install Jekyll using gem install jekyll in your command prompt.

Clone Jekyll Bootstrap!

Go to the Jekyll Bootstrap website and follow the instructions there, then you’re done!

Music Genres I Had Never Even Heard Of

Wikipedia, I Love You

Today while procrastinating from my calculus studies, I found this short list of electronic music genres.

A list of all the music genres I had always dreamed of. Now I have it, and now I have a lot of new material to consume! Yay!

Thank you Wikipedia, this is why I donated 100 SEK to you last year. I will most likely do it again, just for the sake of this list.

Learning From Ludum Dare

You have probably not heard about the indie game developer competition called Ludum Dare. It’s a rapid game creation community where you compete against each other to complete a game within 48 hours and then rate the games produced during the weekend. After two weeks a winner will be named based on who got the most votes.

The difference, on the 21st occurrence of Ludum Dare, was that the creator of MineCraft, @notch (Markus Persson), decided to join the tournament as he’s done a few times before. Enter Publicity.

Here is a timelapse of @notch programming Metagun for a previous competition:

A list of games by @notch for Ludum Dare:

The source code for these games are available on the website, such is the requirement of Ludum Dare - and there is much to learn from each one of them!

Game Programming Gems, Table of Contents

Game Programming Gems 1

SECTION 1 PROGRAMMING TECHNIQUES

1.0The Magic of Data-Driven Design
1.1Object-Oriented Programming and Design Techniques
1.2Fast Math Using Template Metaprogramming
1.3An Automatic Singleton Utility
1.4Using the STL in Game Programming
1.5A Generic Function-Binding Interface
1.6A Generic Handle-Based Resource Manager
1.7Resource and Memory Management
1.8Fast Data Load Trick
1.9Frame-Based Memory Allocation
1.10Simple, Fast Bit Arrays
1.11A Network Protocol for Online Games
1.12Squeezing More Out of Assert
1.13Stats: Real-Time Statistics and In-Game Debugging
1.14Real-Time In-Game Profiling

SECTION 2 MATHEMATICS

2.0Predictable Random Numbers
2.1Interpolation Methods
2.2Integrating the Equations of Rigid Body Motion
2.3Polynomial Approximations to Trigonometric Functions
2.4Using Implicit Euler Integration for Numerical Stability
2.5Wavelets: Theory and Compression
2.6Interactive Simulation of Water Surfaces
2.7Quaternions for Game Programming
2.8Matrix-Quaternion Conversions
2.9Interpolating Quaternions
2.10The Shortest Arc Quaternion

SECTION 3 ARTIFICIAL INTELLIGENCE

3.0Designing a General Robust AI Engine
3.1A Finite-State Machine Class
3.2Game Trees
3.3The Basics of A* for Path Planning
3.4A* Aesthetic Optimizations
3.5A* Speed Optimizations
3.6Simplified 3D Movement and Pathfinding Using Navigation Meshes
3.7Flocking: A Simple Technique for Simulating Group Behavior
3.8Fuzzy Logic for Video Games
3.9A Neural-Net Primer

SECTION 4 POLYGONOL TECHNIQUES

4.0Optimizing Vertex Submissions for OpenGL
4.1Tweaking A Vertex’s Projected Depth Value
4.2The Vector Camera
4.3Camera Control Techniques
4.4A Fast Cylinder-Frustum Intersection Test
4.53D Collision Detection
4.6Multi-Resolution Maps for Interaction Detection
4.7Computing the Distance into a Sector
4.8Object Occlusion Culling
4.9Never Let ‘Em See You Pop - Issues in Geometric Level of Detail Selection
4.10Octree Construction
4.11Loose Octrees
4.12View-Independent Progressive Meshing
4.13Interpolated 3D Keyframe Animation
4.14A Fast and Simple Skinning Techniques
4.15Filling the Gaps - Advanced Animation Using Stitching and Skinning
4.16Real-Time Realistic Terrain Generation
4.17Fractal Terrain Generation - Fault Formation
4.18Fractal Terrain Generation - Midpoint Displacement
4.19Fractal Terrain Generation - Particle Deposition

SECTION 5 PIXEL EFFECTS

5.02D Lens Flare
5.1Using 3D Hardware for 2D Sprite Effects
5.2Motif-Based Static Lighting
5.3Simulated Real-Time Lighting Using Vertex Color Interpolation
5.4Attenuation Maps
5.5Advanced Texturing Using Texture Coordinate Generation
5.6Hardware Bump Mapping
5.7Ground-Plane Shadows
5.8Real-Time Shadows on Complex Objects
5.9Improving Environment-Mapped Reflection Using Glossy Prefiltering and the Fresnel Term
5.10Convincing-Looking Glass for Games
5.11Refraction Mapping for Liquids in Containers

SECTION 6 APPENDIX

6.0The Matrix Utility Library
6.1The Text Utility Library
6.2About the CD-ROM
Index

Game Programming Gems 2

Preface (xxi)
About the Cover Image (xxv)
Author Bios (xxvii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction: General Programming(3)
1.1Optimization for C++ Games(5)
1.2Inline Functions Versus Macros(16)
1.3Programming with Abstract Interfaces(5)
1.4Exporting C++ Classes from DLLs(28)
1.5Protect Yourself from DLL Hell and Missing OS Functions(33)
1.6Dynamic Type Information(38)
1.7A Property Class for Generic C++ Member Access(46)
1.8A Game Entity Factory(51)
1.9Adding Deprecation Facilities to C++ (62)
1.10A Drop-in Debug Memory Manager(66)
1.11A Built-in Game Profiling Module(74)
1.12Linear Programming Model for Windows-based Games(80)
1.13Stack Winding(85)
1.14Self-Modifying Code(91)
1.15File Management Using Resource Files(100)
1.16Game input Recording and Playback(105)
1.17A Flexible Text Parsing System(112)
1.18A Generic Tweaker(118)
1.19Genuine Random Number Generation(127)
1.20Using Bloom Filters to improve Computational Performance(133)
1.213ds max Skin Exporter and Animation Toolkit(141)
1.22Using Web Cameras in Video Games(153)

SECTION 2 MATHEMATICS (163)

Introduction: Mathematics (165)
2.1Floating-Point Tricks: Improving Performance with IEEE Floating Point(167)
2.2Vector and Plane Tricks(182)
2.3Fast, Robust Intersection of 3D Line Segments(191)
2.4Inverse Trajectory Determination(205)
2.5The Parallel Transport Frame(215)
2.6Smooth C2 Quaternion-based Flythrough Paths(220)
2.7Recursive Dimensional CLustering: A Fast Algorithm for Collision Detection(228)
2.8Programming Fractals(239)

SECTION 3 ARTIFICIAL INTELLIGENCE (247)

Introduction: Artificial Intelligence(249)
3.1Strategies for Optimizing AI(251)
3.2Micro-Threads for Game Object AI(258)
3.3Managing AI with Micro-Threads(265)
3.4An Architecture for RTS Command Queuing(273)
3.5A High-Performance Tile-Based Line-of-Sight and Search System(279)
3.6Influence Mapping(287)
3.7Strategic Assessment Techniques(298)
3.8Terrain Reasoning for 3D Action Games(307)
3.9Expanded Geometry for Points-of-Visibility Pathfinding(317)
3.10Optimizing Points-of-Visibility Pathfinding(324)
3.11Flocking with Teeth: Predators and Prey(330)
3.12A Generic Fuzzy State Machine in C++ (337)
3.13Imploding Combinatorial Explosion in a Fuzzy System(342)
3.14Using a Neutral Network in a Game: A Concrete Example(351)

SECTION 4 GEOMETRY MANAGEMENT (359)

Introduction: Geometry Management(361)
4.1Comparison of VIPM Methods(363)
4.2Simplified Terrain Using Interlocking Tiles(377)
4.3Sphere Trees for Fast Visibility Culling, Ray Tracing and Range Searching(384)
4.4Compressed Axis-Aligned Bounding Box Trees(388)
4.5Direct Access Quadtree Lookup(394)
4.6Approximating Fish Tank Refractions(402)
4.7Rendering Print Resolution Screenshots(406)
4.8Applying Decals to Arbitrary Surfaces(411)
4.9Rendering Distans Scenery with Skyboxes(416)
4.10Self-Shadowing Characters(421)
4.11Classic Super Mario 64 Third-Person Control and Animation(425)

SECTION 5 GRAPHICS DISPLAY (433)

Introduction: Graphics Display(435)
5.1Cartoon Rendering: Real-Time Silhouette Edge Detection and Rendering(436)
5.2Cartoon Rendering Using Texture Mapping and Programmable Vertex Shaders(444)
5.3Dynamix Per-Pixel Lighting Technique(452)
5.4Generating Procedural Clouds using 3D Hardware(463)
5.5Texture Masking for Faster Lens Flare(474)
5.6Practical Priority Buffer Shadows(481)
5.7Impostors: Adding Clutter(488)
5.8Operations for Hardware-Accelerated Procedural Texture Animation(497)

Game Programming Gems 3

Foreword(xi)
Preface (xv)
Acknowledgments (xix)
About the Cover Image (xxi)
Contributor Bios (xxiii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction (3)
1.1Scheduling Game Events(5)
1.2An Object-Composition Game Framework(15)
1.3Finding Redeeming Value in C-Style Macros(26)
1.4Platform-Independent, Function-Binding Code Generator(38)
1.5Handle-Based Smart Pointers(44)
1.6Custom STL Allocators(49)
1.7Save Me Now (59)
1.8Autolists Design Pattern(64)
1.9Floating-Point Exception Handling(69)
1.10Programming a Game Design-Compliant Engine Using UML(73)
1.11Using Lex and Yacc To Parse Custom Data Files(83)
1.12Developing Games for a World Market(92)
1.13Real-Time Input and UI in 3D Games(109)
1.14Natural Selection: The Evolution of Pie Menus(117)
1.15Lightweight, Policy-Based Logging(129)
1.16Journaling Services(136)
1.17Real-Time Hierarchical Profiling(146)

SECTION 2 MATHEMATICS (153)

Introduction (155)
2.1Fast Base-2 Functions for Logarithms and Random Number Generation(157)
2.2Using Vector Fractions for Exact Geometry(160)
2.3More Approximations to Trigonometric Functions(170)
2.4Quaternion Compression(187)
2.5Constrained Inverse Kinematics(192)
2.6Cellular Automata for Physical Modeling(200)
2.7Coping with Friction in Dynamic Simulations(215)

SECTION 3 ARTIFICIAL INTELLIGENCE (227)

Introduction(229)
3.1Optimized Machine Learning with GoCap(231)
3.2Area Navigation: Expanding the Path-Finding Paradigm(240)
3.3Function Pointer-Based, Embedded Finite-State Machines(256)
3.4Terrain Analysis in an RTS-The Hidden Giant(268)
3.5An Extensible Trigger System for AI Agents, Objects, and Quests(285)
3.6Tactical Path-Finding with A (294)
3.7A Fast Approach to Navigation Meshes(307)
3.8Choosing a Relationship Between Path-Finding and Collision(321)

SECTION 4 GRAPHICS (333)

Introduction(335)
4.1T-Junction Elimination and Retriangulation(338)
4.2Fast Heightfield Normal Calculation(344)
4.3Fast Patch Normals(349)
4.4Fast and Simple Occlusion Culling(353)
4.5Triangle Strip Creation, Optimizations, and Rendering(359)
4.6Computing Optimized Shadow Volumes for Complex Data Sets(367)
4.7Subdivision Surfaces for Character Animation(372)
4.8Improved Deformation of Bones(384)
4.9A Framework for Realistic Character Locomotion(394)
4.10A Programmable Vertex Shader Compiler(404)
4.11Billboard Beams(413)
4.123D Tricks for Isometric Engines(417)
4.13Curvature Simulation Using Normal Maps(424)
4.14Methods for Dynamic, Photorealistic Terrain Lighting(433)
4.15Cube Map Lighting Techniques(444)
4.16Procedural Texturing(452)
4.17Unique Textures(459)
4.18Textures as Lookup Tables for Per-Pixel Lighting Computations(467)
4.19Rendering with Handcrafted Shading Models(477)

SECTION 5 NETWORK AND MULTIPLAYER (485)

Introduction(487)
5.1Minimizing Latency in Real-Time Strategy Games(488)
5.2Real-Time Strategy Network Protocol(496)
5.3A Flexible Simulation Architecture for Massively Multiplayer Games(506)
5.4Scaling Multiplayer Servers(520)
5.5Template-Based Object Serialization(534)
5.6Secure Sockets(546)
5.7A Network Monitoring and Simulation Tool(557)
5.8Creating Multiplayer Games with DirectPlay 8.1(561)
5.9Wireless Gaming Using the Java Micro Edition(573)

SECTION 6 AUDIO (583)

Introduction(585)
6.1Audio Compression with Ogg Vorbis(587)
6.2Creating a Compelling 3D Audio Environment(595)
6.3Obstruction Using Axis-Aligned Bounding Boxes(600)
6.4Using the Biquad Resonant Filter(606)
6.5Linear Predictive Coding for Voice Compression and Effects(613)
6.6The Stochastic Synthesis of Complex Sounds(622)
6.7Real-Time Modular Audio Processing for Games(630)
Appendix: About the CD-ROM(639)
Contents

Game Programming Gems 4

Foreword(xi)
Preface(xv)
Acknowledgments(xvii)
About the Cover Image(xix)
Contributor Bios(xxi)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1The Science of Debugging Games(5)
1.2An HTML-Based Logging and Debugging System(19)
1.3The Clock: Keeping Your Finger on the Pulse of the Game(27)
1.4Designing and Maintaining Large Cross-Platform Libraries(35)
1.5Fight Memory Fragmentation with Templated Freelists(43)
1.6A Generic Tree Container in C++(51)
1.7The Beauty of Weak References and Null Objects(61)
1.8A System for Managing Game Entities(69)
1.9Address-Space Managed Dynamic Arrays for Windows and the Xbox(85)
1.10Critically Damped Ease-In/Ease-Out Smoothing(95)
1.11A Flexible, On-the-Fly Object Manager(103)
1.12Using Custom RTTI Properties to Stream and Edit Objects(111)
1.13Using XML without Sacrificing Speed(125)

SECTION 2 MATHEMATICS (137)

Introduction(139)
2.1Zobrist Hash Using the Mersenne Twister(141)
2.2Extracting Frustum and Camera Information(147)
2.3Solving Accuracy Problems in Large World Coordinates(157)
2.4Nonuniform Splines(171)
2.5Using the Covariance Matrix for Better-Fitting Bounding Objects(183)
2.6The Jacobian Transpose Method for Inverse Kinematics(193)

SECTION 3 PHYSICS (205)

Introduction(207)
3.1Ten Fingers of Death: Algorithms for Combat Killing(209)
3.2Vehicle Physics Simulation for CPU-Limited Systems(221)
3.3Writing a Verlet-Based Physics Engine(231)
3.4Constraints in Rigid Body Dynamics(241)
3.5Fast Contact Reduction for Dynamics Simulation(253)
3.6Interactive Water Surfaces(265)
3.7Fast Deformations with Multilayered Physics(275)
3.8Modal Analysis for Fast, Stable Deformation(287)

SECTION 4 ARTIFICIAL INTELLIGENCE (299)

Introduction(301)
4.1Third-Person Camera Navigation(303)
4.2Narrative Combat: Using AI to Enhance Tension in an Action Game315
4.3NPC Decision Making: Dealing with Randomness(325)
4.4An Object-Oriented Utility-Based Decision Architecture(337)
4.5A Distributed-Reasoning Voting Architecture(345)
4.6Attractors and Repulsors(355)
4.7Advanced Wall Building for RTS Games(365)
4.8Artificial Neural Networks on Programmable Graphics Hardware(373)

SECTION 5 GRAPHICS (379)

Introduction(381)
5.1Poster Quality Screenshots(383)
5.2GPU Shadow Volume Construction for Nonclosed Meshes(393)
5.3Perspective Shadow Maps(399)
5.4Combined Depth and ID-Based Shadow Buffers(411)
5.5Carving Static Shadows into Geometry(427)
5.8Techniques to Apply Team Colors to 3D Models(451)
5.9Fast Sepia Tone Conversion(461)
5.10Dynamic Gamma Using Sampled Scene Luminance(465)
5.11Heat and Haze Post-Processing Effects(477)
5.13Motion Capture Data Compression(497)
5.14Fast Collision Detection for 3D Bones-Based Articulated Characters(503)
5.15Terrain Occlusion Culling with Horizons(515)

SECTION 6 NETWORK AND MULTIPLAYER (529)

Introduction(531)
6.1General Lobby Design and Development(533)
6.2Thousands of Clients per Server(541)
6.3Efficient MMP Game State Storage(555)
6.4Practical Application of Parallel-State Machines in a Client-Server Environment(563)
6.5Bit Packing: A Network Compression Technique(571)
6.6Time and Consistency Management for Multiserver-Based MMORPGs(579)

SECTION 7 AUDIO (591)

Introduction(593)
7.1A Brief Introduction to OpenAL(595)
7.2A Simple Real-Time Lip-Synching System(607)
7.3Dynamic Variables and Audio Programming(613)
7.4Creating an Audio Scripting System(621)
7.5Implementing an Environmental Audio Solution Using EAX and ZoomFX(633)
7.6Controlling Real-Time Sound Synthesis from Game Physics(649)
APPENDIX: ABOUT THE CD-ROM(657)
INDEX (659)

Game Programming Gems 5

Foreword(xi)
Preface(xv)
About the Cover Image(xix)
Contributor Bios(xxi)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1Context-Sensitive HUDs for Editors(5)
1.2Parsing Text Data in Games(17)
1.3Component Based Object Management(25)
1.4Using Templates for Reflection in C++(39)
1.5Sphere Trees for Speedy BSPs(55)
1.6Improved Frustum Culling(65)
1.7Generic Pager(79)
1.8Large-Scale Stack-Based State Machines(93)
1.9CSG Construction Using BSP Trees(103)
1.10Building Lua into Games(115)
1.11Improving Freelists with Policy Based Design(129)
1.12A Real-Time Remote Debug Message Logger(143)
1.13A Transparent Class Saving and Loading Trick(149)
1.14An Effective Cache-Oblivious Implementation of the ABT Tree(159)
1.15Visual Design of State Machines(169)
1.16A Generic Component Library(177)
1.17Choose Your Path-A Menu System(189)

SECTION 2 MATHEMATICS (197)

Introduction(199)
2.1Using Geometric Algebra for Computer Graphics(201)
2.2Minimal Acceleration Hermite Curves(225)
2.3Spline-Based Time Control for Animation(233)
2.4Faster Quaternion Interpolation Using Approximations(247)
2.5Minimax Numerical Approximation(269)
2.6Oblique View Frustums for Mirrors and Portals(281)

SECTION 3 ARTIFICIAL INTELLIGENCE (295)

Introduction(297)
3.1Automatic Cover Finding with Navigation Meshes(299)
3.2Fast Target Ranking Using an Artificial Potential Field(307)
3.3Using Lanchester Attrition Models to Predict the Results of Combat(317)
3.4Implementing Practical Planning for Game AI(329)
3.5Optimizing a Decision Tree Query Algorithm for Multithreaded Architectures(345)
3.6Parallel AI Development with PVM(353)
3.7Beyond A (367)
3.8Advanced Pathfinding with Minimal Replanning Cost: Dynamic A Star (D*)(383)

SECTION 4 PHYSICS (391)

Introduction(393)
4.1Back of the Envelope Aerodynamics for Game Physics(395)
4.2Dynamic Grass Simulation and Other Natural Effects(411)
4.3Realistic Cloth Animation Using the Mass-Spring Model(421)
4.4Practical Animation of Soft Bodies for Game Development: The Pressurized Soft-Body Model(435)
4.5Adding Life to Ragdoll Simulation Using Feedback Control Systems(449)
4.6Designing a Prescripted Physics System(457)
4.7Prescripted Physics: Techniques and Applications(473)
4.8Realistic Camera Movement in a 3D Car Simulator(483)

SECTION 5 GRAPHICS (495)

Introduction(497)
5.1Realistic Cloud Rendering on Modern GPUs(499)
5.2Let It Snow, Let It Snow, Let It Snow (and Rain (507)
5.3Widgets: Rendering Fast and Persistent Foliage(515)
5.42.5 Dimensional Impostors for Realistic Trees and Forests(527)
5.5Gridless Controllable Fire(539)
5.6Powerful Explosion Effects Using Billboard Particles(551)
5.7A Simple Method for Rendering Gemstones(561)
5.8Volumetric Post-Processing(571)
5.9Procedural Level Generation(579)
5.10Recombinant Shaders(589)

SECTION 6 NETWORK AND MULTIPLAYER (599)

Introduction(601)
6.1Keeping a Massively Multiplayer Online Game Massive, Online, and Persistent(603)
6.2Implementing a Seamless World Server(611)
6.3Designing a Vulgarity Filtering System(621)
6.4Fast and Efficient Implementation of a Remote Procedure Call System(627)
6.5Overcoming Network Address Translation in Peer-to-Peer Communications(643)
6.6A Reliable Messaging Protocol(665)
6.7Safe Random Number Systems(673)
6.8Secure by Design(681)

SECTION 7 AUDIO (693)

Introduction(695)
7.1Multithreaded Audio Programming Techniques(697)
7.2Sound Management by Group(713)
7.3Using 3D Surfaces as Audio Emitters(721)
7.4Fast Environmental Reverb Based on Feedback Delay Networks(729)
7.5Introduction to Single-Speaker Speech Recognition(741)
About the CD-ROM(751)
Index(753)

Game Programming Gems 6

Foreword(xi)
Preface(xv)
About the Cover Image(xxi)
Contributor Bios(xxiii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1Lock-Free Algorithms(5)
1.2Utilizing Multicore Processors with OpenMP(17)
1.3Computer Vision in Games Using the OpenCV Library(25)
1.4Geographic Grid Registration of Game Objects(39)
1.5BSP Techniques(49)
1.6Closest-String Matching Algorithm(69)
1.7Using CppUnit To Implement Unit Testing(79)
1.8Fingerprinting Pre-Release Builds To Deter and Detect Piracy(97)
1.9Faster File Loading with Access-Based File Reordering(103)
1.10Stay in the Game: Asset Hotloading for Fast Iteration(109)

SECTION 2 MATHEMATICS AND PHYSICS (117)

Introduction(119)
2.1Floating-Point Tricks(121)
2.2GPU Computation in Projective Space Using Homogeneous Coordinates(137)
2.3Solving Systems of Linear Equations Using the Cross Product(149)
2.4Sequence Indexing for Game Development(161)
2.5Exact Buoyancy for Polyhedra(175)
2.6Real-Time Particle-Based Fluid Simulation with Rigid Body Interaction(189)

SECTION 3 ARTIFICIAL INTELLIGENCE (207)

Introduction(209)
3.1Applying Model-Based Decision-Making Methods to Games: Applying the Locust AI Engine to QuakeŽ III(211)
3.2Achieving Coordination with Autonomous NPCs(223)
3.3Behavior-Based Robotic Architectures for Games(235)
3.4Constructing a Goal-Oriented Robot for Unreal Tournament Using Fuzzy Sensors, Finite-State Machines, and Extended Behavior Networks(245)
3.5A Goal-Oriented Unreal Bot: Building a Game Agent with Goal-Oriented Behavior and Simple Personality Using Extended Behavior Networks(259)
3.6Short-Term Memory Modeling Using a Support Vector Machine(273)
3.7Using the Quantified Judgment Model for Engagement Analysis(283)
3.8Designing a Multilayer, Pluggable AI Engine(291)
3.9A Fuzzy-Control Approach to Managing Scene Complexity(307)

SECTION 4 SCRIPTING AND DATA-DRIVEN SYSTEMS (317)

Introduction(319)
4.1Scripting Language Survey(323)
4.2Binding C/C++ Objects to Lua(341)
4.3Programming Advanced Control Mechanisms with Lua Coroutines(357)
4.4Managing High-Level Script Execution Within Multithreaded Environments(371)
4.5Exposing Actor Properties Using Nonintrusive Proxies(383)
4.6Game Object Component System(393)

SECTION 5 GRAPHICS (405)

Introduction(407)
5.1Synthesis of Realistic Idle Motion for Interactive Characters(409)
5.2Spatial Partitioning Using an Adaptive Binary Tree(423)
5.3Enhanced Object Culling with (Almost) Oriented Bounding Boxes(437)
5.4Skin Splitting for Optimal Rendering(449)
5.5GPU Terrain Rendering(461)
5.6Interactive Fluid Dynamics and Rendering on the GPU(473)
5.7Fast Per-Pixel Lighting with Many Lights(489)
5.8Rendering Road Signs Sharply(501)
5.9Practical Sky Rendering for Games(517)
5.10High Dynamic Range Rendering Using OpenGL Frame Buffer Objects(529)

SECTION 6 AUDIO (537)

Introduction(539)
6.1Real-Time Sound Generation from Deformable Meshes(541)
6.2A Lightweight Generator for Real-Time Sound Effects(549)
6.3Real-Time Mixing Busses(555)
6.4Potentially Audible Sets(561)
6.5A Cheap Doppler Effect(573)
6.6Faking Real-Time DSP Effects(583)

SECTION 7 NETWORK AND MULTIPLAYER (589)

Introduction(591)
7.1Dynamically Adaptive Streaming of 3D Data for Animated Characters(593)
7.2Complex Systems-Based High-Level Architecture for Massively Multiplayer Games(607)
7.3Generating Globally Unique Identifiers for Game Objects(623)
7.4Massively Multiplayer Online Prototype Utilizing Second Life for Game Concept Prototyping(629)
7.5Reliable Peer-to-Peer Gaming Connections Penetrating NAT(641)
About the CD-ROM(651)
Index(653)

Game Programming Gems 7

Preface(ix)
About the Cover Image(xiii)
Acknowledgements(xv)
Contributor Bios(xvii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1Efficient Cache Replacement Using the Age and Cost Metrics(5)
1.2High Performance Heap Allocator(15)
1.3Optical Flow for Video Games Played with Webcams(25)
1.4Design and Implementation of a Multi-Platform Threading Engine(35)
1.5For Bees and Gamers: How to Handle Hexagonal Tiles(47)
1.6A Sketch-Based Interface to Real-Time Strategy Games Based on a Cellular Automaton(59)
1.7Foot Navigation Technique for First-Person Shooting Games(69)
1.8Deferred Function Call Invocation System(81)
1.9Multithread Job and Dependancy System(87)
1.10Advanced Debugging Techniques(97)

SECTION 2 MATH AND PHYSICS (107)

Introduction(10
2.1Random Number Generation(113)
2.2Fast Generic Ray Queries for Games(127)
2.3Fast Rigid-Body Collision Detection using Farthest Feature Maps(143)
2.4Using Projective Space to Improve Precision of Geometric Computations(153)
2.5XenoCollide: Complex Collision Made Simple(165)
2.6Efficient COllision Detection Using Transformation Semantics(179)
2.7Trigonemtric Splines(191)
2.8Using Gaussian Randomness to Realistically Vary Projectile Paths(199)

SECTION 3 AI (205)

Introduction(20
3.1Creating Interesting Agents with Behavior Cloning(209)
3.2Designing a Realistic and Unified Agent-Sesning Model(217)
3.3Managing AI Algorithmic Complexity: Generic Programming Apprach(229)
3.4All About Attitude: Building Blocks for Opinion, Reputation, and NPC Personalities(249)
3.5Understanding Intelligence in Games using Player Traces and Interactive Player Graphs(265)
3.6Goal-Oriented Plan Merging(281)
3.7Beyond A*: IDA* and Fringe Search(289)

SECTION 4 AUDIO (295)

Introduction(297)
4.1Audio Signal Processing Using Programmable Graphics Hardware(299)
4.2MultiStream - The Art of Writing a Next-Gen Audio Engine(305)
4.3Listen Carefully, You Probably Won’t Hear This Again(321)
4.4Real-Time Audio Effects Applied(331)
4.5Context-Driven, Layered Mixing(341)

SECTION 5 GRAPHICS (349)

Introduction(351)
5.1Advanced Particle Deposition(353)
5.2Reducing Cumulative Errors in Skeletal Animations(365)
5.3An Alternative Model for Shading of Diffuse Light for Rough Materials(373)
5.4High-Performance Subdivision Surfaces(381)
5.5Animating Relief Impostors Using Radial Basis Functions Textures(401)
5.6Clipmapping on SM1.1 and Higher(413)
5.7An Advanced Decal System(423)
5.8Mapping Large Textures for Outdoor Terrain Rendering(435)
5.9Art-Based Rendering with Graftal Impostors(447)
5.10Cheap Talk: Dynamic Real-Time Lipsync(455)

SECTION 6 NETWORKING AND MULTIPLAYER (463)

Introduction(465)
6.1High-Level Abstraction of Game World Synchronization(467)
6.2Authentication for Online Games(481)
6.3Game Network Debugging with Smart Packet Sniffers(491)

SECTION 7 SCRIPTING AND DATA-DRIVEN SYSTEMS (499)

Introduction(50)
7.1Automatic Lua Binding System(503)
7.2Serializing C++ Objects into a Database Using Introspection(517)
7.3Dataports(535)
7.4Support Your Local Artist: Adding Shaders to Your Engine(541)
7.5Dance with Python’s AST(555)
About the CD-ROM(561)
Index(563)

Game Programming Gems 8

Section 1 Graphics (1)

Introduction(1)
1.1Fast Font Rendering with Instancing(3)
1.2Principles and Practice of Screen Space Ambient Occlusion(12)
1.3Multi-Resolution Deferred Shading(32)
1.4View Frustum Culling of Catmull-Clark Patches in DirectX 11(39)
1.5Ambient Occlusion Using DirectX Compute Shader(50)
1.6Eye-View Pixel Anti-Aliasing for Irregular Shadow Mapping(74)
1.7Overlapped Execution on Programmable Graphics Hardware(90)
1.8Techniques for Effective Vertex and Fragment Shading on the SPUs(101)

Section 2 Physics and Animation (119)

Introduction(119)
2.1A Versatile and Interactive Anatomical Human Face Model(121)
2.2Curved Paths for Seamless Character Animation(132)
2.3Non-Iterative, Closed-Form, Inverse Kinematic Chain Solver (NCF IK) (141)
2.4Particle Swam Optimization for Game Programming(152)
2.5Improved Numerical Integration with Analytical Techniques(168)
2.6What a Drag: Modelling Realistic Three-Dimensional Air and Fluid Resistance(183)
2.7Application of Quasi-Fluid Dynamics for Arbitrary Closed Meshes(194)
2.8Approximate Convex Decomposition for Real-Time Collision Detection(202)

Section 3 AI (211)

Introduction(211)
3.1AI Level of Detail for Really Large Worlds(213)
3.2A Pattern-Based Approach to Modular AI for Games(232)
3.3Automated Navigation Mesh Generation Using Advanced Growth-Based Techniques(244)
3.4A Practical Spatial Architecture for Animal and Agent Navigation(256)
3.5Applying Control Theory to Game AI and Physics(264)
3.6Adaptive Tactic Selection in First-Person Shooter (FPS) Games(279)
3.7Embracing Chaos Theory: Generating Apparent Unpredictability through Deterministic Systems(288)
3.8Needs-Based AI(302)
3.9A Framework for Emotional Digital Actors(312)
3.10Scalable Dialog Authoring(323)
3.11Graph-Based Data Mining for Player Trace Analysis in MMORPGs(335)

Section 4 General Programming (353)

Introduction(353)
4.1Fast-IsA(355)
4.2Registered Variables(363)
4.3Efficient and Scalable Multi-Core Programming(373)
4.4Game Optimization through the Lens of Memory and Data Access(385)
4.5Stack Allocation(393)
4.6Design and Implementation of an In-Game Memory Profiler(402)
4.7A More Informative Error Log Generator(409)
4.8Code Coverage for QA(416)
4.9Domain-Specific Languages in Game Engines(428)
4.10A Flexible User Interface Layout system for Divergent Environments(442)
4.11Road Creation for Projectable Terrain Meshes(453)
4.12Developing for Digital Drawing Tables(462)
4.13Creating a Multi-Threaded Actor-Based Architecture using Intel® Threading Building Blocks(473)

Section 5 Networking and Multiplayer (485)

Introduction(485)
5.1Secure Channel Communication(487)
5.2Social Networks in Games: Playing with Your Facebook Friends(498)
5.3Asynchronous I/O for Scalable Game Servers(506)
5.4Introduction to 3D Streaming Technology in Massively Multiplayer Online Games(514)

Section 6 Audio (539)

Introduction(539)
6.1A Practical DSP Radio Effect(542)
6.2Empowering Your Audio Teams with a Great Engine(553)
6.3Real-Time Sound Synthesis for Rigid Bodies(563)

Section 7 General Purpose Computing on GPUs (573)

Introduction(573)
7.1Using Heterogenous Parallel Architecture with OpenCL(575)
7.2PhysX CPU Rigid Bodies in Batman: Arkham Asylum(590)
7.3Fast GPU Fluid Simulation in PhysX(602)
Index(616)

Best of Game Programming Gems

Acknowledgments(ix)
About the Authors(xi)
Introduction(xxv)

SECTION 1 GENERAL INFORMATION (1)

1.1The Science of Debugging Games(3)
1.2Finding Redeeming Value in C-Style Macros(17)
1.3Inline Functions vs Macros(29)
1.4Squeezing More Out of Assaert(35)
1.5Programming with Abstract Interfaces(41)
1.6The Beauty of Weak References and Null Objects(49)
1.7Using the STL in Game Programming(57)
1.8Custom STL Allocators(73)
1.9Optimizations for C++ Games(83)
1.10Real-Time Hierarchical Profiling(95)
1.11A Generic Tree Container in C++(103)
1.12Lock-Free Algorithms(113)
1.13Utilizing Multicore Processors with OpenMP(125)

SECTION 2 MATH AND PHYSICS (133)

2.1More Approximations to Trigonometric Functions(135)
2.2Faster Quaternion Interpolation Using Approximations(153)
2.3Quaternion Compression(175)
2.4Zobrist Hash Using the Mersenne Twister(181)
2.5Solving Accuracy Problems in Large World Coordinates(187)
2.6Writing a Verlet-Based Physics Engine(201)
2.7Constraints in Rigid Body Dynamics(211)
2.8The Jacobian Transpose Method for Inverse Kinematics(223)

SECTION 3 ARTIFICIAL INTELLIGENCE (235)

3.1The Basics of A* for Path Planning(237)
3.2A* Aesthetic Optimizations(247)
3.3A* Speed Optimizations(255)
3.4Tactical Path-Finding with A (271)
3.5A Fast Approach to Navigation Meshes(285)
3.6Flocking: A Simple Technique for Simulating Group Behavior(297)
3.7A Finite-State Machine Class(311)
3.8Implementing Practical Planning for Game AI(323)

SECTION 4 GRAPHICS (339)

4.1T-Junction Elimination and Retriangulation(341)
4.2Filling the Gaps: Advanced Animation Using Stitching and Skinning(347)
4.3Improved Skin Deformation Using Kinematic Skeletons(355)
4.4Motion Capture Data Compression(363)
4.5Compressed Axis-Aligned Bounding Box Trees(371)
4.6Textures as Lookup Tables for Per-Pixel Lighting Computations(377)
4.7Methods for Dynamic, Photorealistic Terrain Lightning(387)
4.8Practical Sky Rendering for Games(399)
4.9Powerful Explosion Effects using Billboard Particles(411)
4.10Rendering Handcrafted Shading Models(421)

SECTION 5 NETWORKING (427)

5.1Overcoming Network Address Translation in Peer-to-Peer Communications(429)
5.2Minimizing Latency in Real-Time Strategy Games(451)
5.3Real-Time Strategy Network Protocol(459)
5.4Secure Sockets(469)
5.5Bit Packing: A Network Compression Technique(481)

SECTION 6 AUDIO (489)

6.1A Basic Music Sequencer for Games(491)
6.2Audio Compression with Ogg Vorbis(503)
6.3Using 3D Surfaces as Audio Emitters(511)
6.4Introduction to Single-Speaker Speech Recognition(521)
6.5A Technique to instantaneously Reuse Voices in a Sample-Based Synthesizer(531)
Index(535)

Game Programming Gems 8, Table of Contents

Section 1 Graphics (1)

Introduction(1)
1.1Fast Font Rendering with Instancing(3)
1.2Principles and Practice of Screen Space Ambient Occlusion(12)
1.3Multi-Resolution Deferred Shading(32)
1.4View Frustum Culling of Catmull-Clark Patches in DirectX 11(39)
1.5Ambient Occlusion Using DirectX Compute Shader(50)
1.6Eye-View Pixel Anti-Aliasing for Irregular Shadow Mapping(74)
1.7Overlapped Execution on Programmable Graphics Hardware(90)
1.8Techniques for Effective Vertex and Fragment Shading on the SPUs(101)

Section 2 Physics and Animation (119)

Introduction(119)
2.1A Versatile and Interactive Anatomical Human Face Model(121)
2.2Curved Paths for Seamless Character Animation(132)
2.3Non-Iterative, Closed-Form, Inverse Kinematic Chain Solver (NCF IK) (141)
2.4Particle Swam Optimization for Game Programming(152)
2.5Improved Numerical Integration with Analytical Techniques(168)
2.6What a Drag: Modelling Realistic Three-Dimensional Air and Fluid Resistance(183)
2.7Application of Quasi-Fluid Dynamics for Arbitrary Closed Meshes(194)
2.8Approximate Convex Decomposition for Real-Time Collision Detection(202)

Section 3 AI (211)

Introduction(211)
3.1AI Level of Detail for Really Large Worlds(213)
3.2A Pattern-Based Approach to Modular AI for Games(232)
3.3Automated Navigation Mesh Generation Using Advanced Growth-Based Techniques(244)
3.4A Practical Spatial Architecture for Animal and Agent Navigation(256)
3.5Applying Control Theory to Game AI and Physics(264)
3.6Adaptive Tactic Selection in First-Person Shooter (FPS) Games(279)
3.7Embracing Chaos Theory: Generating Apparent Unpredictability through Deterministic Systems(288)
3.8Needs-Based AI(302)
3.9A Framework for Emotional Digital Actors(312)
3.10Scalable Dialog Authoring(323)
3.11Graph-Based Data Mining for Player Trace Analysis in MMORPGs(335)

Section 4 General Programming (353)

Introduction(353)
4.1Fast-IsA(355)
4.2Registered Variables(363)
4.3Efficient and Scalable Multi-Core Programming(373)
4.4Game Optimization through the Lens of Memory and Data Access(385)
4.5Stack Allocation(393)
4.6Design and Implementation of an In-Game Memory Profiler(402)
4.7A More Informative Error Log Generator(409)
4.8Code Coverage for QA(416)
4.9Domain-Specific Languages in Game Engines(428)
4.10A Flexible User Interface Layout system for Divergent Environments(442)
4.11Road Creation for Projectable Terrain Meshes(453)
4.12Developing for Digital Drawing Tables(462)
4.13Creating a Multi-Threaded Actor-Based Architecture using Intel® Threading Building Blocks(473)

Section 5 Networking and Multiplayer (485)

Introduction(485)
5.1Secure Channel Communication(487)
5.2Social Networks in Games: Playing with Your Facebook Friends(498)
5.3Asynchronous I/O for Scalable Game Servers(506)
5.4Introduction to 3D Streaming Technology in Massively Multiplayer Online Games(514)

Section 6 Audio (539)

Introduction(539)
6.1A Practical DSP Radio Effect(542)
6.2Empowering Your Audio Teams with a Great Engine(553)
6.3Real-Time Sound Synthesis for Rigid Bodies(563)

Section 7 General Purpose Computing on GPUs (573)

Introduction(573)
7.1Using Heterogenous Parallel Architecture with OpenCL(575)
7.2PhysX CPU Rigid Bodies in Batman: Arkham Asylum(590)
7.3Fast GPU Fluid Simulation in PhysX(602)
Index(616)

Game Programming Gems 7, Table of Contents

Preface(ix)
About the Cover Image(xiii)
Acknowledgements(xv)
Contributor Bios(xvii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1Efficient Cache Replacement Using the Age and Cost Metrics(5)
1.2High Performance Heap Allocator(15)
1.3Optical Flow for Video Games Played with Webcams(25)
1.4Design and Implementation of a Multi-Platform Threading Engine(35)
1.5For Bees and Gamers: How to Handle Hexagonal Tiles(47)
1.6A Sketch-Based Interface to Real-Time Strategy Games Based on a Cellular Automaton(59)
1.7Foot Navigation Technique for First-Person Shooting Games(69)
1.8Deferred Function Call Invocation System(81)
1.9Multithread Job and Dependancy System(87)
1.10Advanced Debugging Techniques(97)

SECTION 2 MATH AND PHYSICS (107)

Introduction(10
2.1Random Number Generation(113)
2.2Fast Generic Ray Queries for Games(127)
2.3Fast Rigid-Body Collision Detection using Farthest Feature Maps(143)
2.4Using Projective Space to Improve Precision of Geometric Computations(153)
2.5XenoCollide: Complex Collision Made Simple(165)
2.6Efficient COllision Detection Using Transformation Semantics(179)
2.7Trigonemtric Splines(191)
2.8Using Gaussian Randomness to Realistically Vary Projectile Paths(199)

SECTION 3 AI (205)

Introduction(20
3.1Creating Interesting Agents with Behavior Cloning(209)
3.2Designing a Realistic and Unified Agent-Sesning Model(217)
3.3Managing AI Algorithmic Complexity: Generic Programming Apprach(229)
3.4All About Attitude: Building Blocks for Opinion, Reputation, and NPC Personalities(249)
3.5Understanding Intelligence in Games using Player Traces and Interactive Player Graphs(265)
3.6Goal-Oriented Plan Merging(281)
3.7Beyond A*: IDA* and Fringe Search(289)

SECTION 4 AUDIO (295)

Introduction(297)
4.1Audio Signal Processing Using Programmable Graphics Hardware(299)
4.2MultiStream - The Art of Writing a Next-Gen Audio Engine(305)
4.3Listen Carefully, You Probably Won’t Hear This Again(321)
4.4Real-Time Audio Effects Applied(331)
4.5Context-Driven, Layered Mixing(341)

SECTION 5 GRAPHICS (349)

Introduction(351)
5.1Advanced Particle Deposition(353)
5.2Reducing Cumulative Errors in Skeletal Animations(365)
5.3An Alternative Model for Shading of Diffuse Light for Rough Materials(373)
5.4High-Performance Subdivision Surfaces(381)
5.5Animating Relief Impostors Using Radial Basis Functions Textures(401)
5.6Clipmapping on SM1.1 and Higher(413)
5.7An Advanced Decal System(423)
5.8Mapping Large Textures for Outdoor Terrain Rendering(435)
5.9Art-Based Rendering with Graftal Impostors(447)
5.10Cheap Talk: Dynamic Real-Time Lipsync(455)

SECTION 6 NETWORKING AND MULTIPLAYER (463)

Introduction(465)
6.1High-Level Abstraction of Game World Synchronization(467)
6.2Authentication for Online Games(481)
6.3Game Network Debugging with Smart Packet Sniffers(491)

SECTION 7 SCRIPTING AND DATA-DRIVEN SYSTEMS (499)

Introduction(50)
7.1Automatic Lua Binding System(503)
7.2Serializing C++ Objects into a Database Using Introspection(517)
7.3Dataports(535)
7.4Support Your Local Artist: Adding Shaders to Your Engine(541)
7.5Dance with Python’s AST(555)
About the CD-ROM(561)
Index(563)

Game Programming Gems 6, Table of Contents

Foreword(xi)
Preface(xv)
About the Cover Image(xxi)
Contributor Bios(xxiii)

SECTION 1 GENERAL PROGRAMMING (1)

Introduction(3)
1.1Lock-Free Algorithms(5)
1.2Utilizing Multicore Processors with OpenMP(17)
1.3Computer Vision in Games Using the OpenCV Library(25)
1.4Geographic Grid Registration of Game Objects(39)
1.5BSP Techniques(49)
1.6Closest-String Matching Algorithm(69)
1.7Using CppUnit To Implement Unit Testing(79)
1.8Fingerprinting Pre-Release Builds To Deter and Detect Piracy(97)
1.9Faster File Loading with Access-Based File Reordering(103)
1.10Stay in the Game: Asset Hotloading for Fast Iteration(109)

SECTION 2 MATHEMATICS AND PHYSICS (117)

Introduction(119)
2.1Floating-Point Tricks(121)
2.2GPU Computation in Projective Space Using Homogeneous Coordinates(137)
2.3Solving Systems of Linear Equations Using the Cross Product(149)
2.4Sequence Indexing for Game Development(161)
2.5Exact Buoyancy for Polyhedra(175)
2.6Real-Time Particle-Based Fluid Simulation with Rigid Body Interaction(189)

SECTION 3 ARTIFICIAL INTELLIGENCE (207)

Introduction(209)
3.1Applying Model-Based Decision-Making Methods to Games: Applying the Locust AI Engine to QuakeŽ III(211)
3.2Achieving Coordination with Autonomous NPCs(223)
3.3Behavior-Based Robotic Architectures for Games(235)
3.4Constructing a Goal-Oriented Robot for Unreal Tournament Using Fuzzy Sensors, Finite-State Machines, and Extended Behavior Networks(245)
3.5A Goal-Oriented Unreal Bot: Building a Game Agent with Goal-Oriented Behavior and Simple Personality Using Extended Behavior Networks(259)
3.6Short-Term Memory Modeling Using a Support Vector Machine(273)
3.7Using the Quantified Judgment Model for Engagement Analysis(283)
3.8Designing a Multilayer, Pluggable AI Engine(291)
3.9A Fuzzy-Control Approach to Managing Scene Complexity(307)

SECTION 4 SCRIPTING AND DATA-DRIVEN SYSTEMS (317)

Introduction(319)
4.1Scripting Language Survey(323)
4.2Binding C/C++ Objects to Lua(341)
4.3Programming Advanced Control Mechanisms with Lua Coroutines(357)
4.4Managing High-Level Script Execution Within Multithreaded Environments(371)
4.5Exposing Actor Properties Using Nonintrusive Proxies(383)
4.6Game Object Component System(393)

SECTION 5 GRAPHICS (405)

Introduction(407)
5.1Synthesis of Realistic Idle Motion for Interactive Characters(409)
5.2Spatial Partitioning Using an Adaptive Binary Tree(423)
5.3Enhanced Object Culling with (Almost) Oriented Bounding Boxes(437)
5.4Skin Splitting for Optimal Rendering(449)
5.5GPU Terrain Rendering(461)
5.6Interactive Fluid Dynamics and Rendering on the GPU(473)
5.7Fast Per-Pixel Lighting with Many Lights(489)
5.8Rendering Road Signs Sharply(501)
5.9Practical Sky Rendering for Games(517)
5.10High Dynamic Range Rendering Using OpenGL Frame Buffer Objects(529)

SECTION 6 AUDIO (537)

Introduction(539)
6.1Real-Time Sound Generation from Deformable Meshes(541)
6.2A Lightweight Generator for Real-Time Sound Effects(549)
6.3Real-Time Mixing Busses(555)
6.4Potentially Audible Sets(561)
6.5A Cheap Doppler Effect(573)
6.6Faking Real-Time DSP Effects(583)

SECTION 7 NETWORK AND MULTIPLAYER (589)

Introduction(591)
7.1Dynamically Adaptive Streaming of 3D Data for Animated Characters(593)
7.2Complex Systems-Based High-Level Architecture for Massively Multiplayer Games(607)
7.3Generating Globally Unique Identifiers for Game Objects(623)
7.4Massively Multiplayer Online Prototype Utilizing Second Life for Game Concept Prototyping(629)
7.5Reliable Peer-to-Peer Gaming Connections Penetrating NAT(641)
About the CD-ROM(651)
Index(653)