Game Programming Gems 6

1.1 무잠금 알고리즘들

  • 무잠금 알고리즘들이 반드시 대기 없는 (wait-free) 알고리즘인 것은 아니다.
  • 대기 없는 알고리즘은 모든 스레드가 항상 작업을 진행할 수 있게 하는 것인 반면, 무잠금 알고리즘은 적어도 하나의 스레드가 작업을 진행할 수 있게 하는 것일 뿐이다.
  • 무잠금 알고리즘을 만들 때에는 stack이나 queue와 같은 간단한 무잠금 자료구조를 만들고 그것을 적절히 조합해서 복잡한 알고리즘을 구축하는게 효과적.
  • 예제) stack, queue, freelist

범용 기본수단 (universal primitive)

  • 무잠금 알고리즘에 적합한 기본수단
  • 비교 및 교환 (Compare and Swap, CAS)
  • 연결된 적재/조건부 저장 (Load Linked/Store Conditional, LL/SC))
  • 비교 및 교환 2 (Compare and Swap 2, CAS2)
  • 이중 비교 및 교환 (Double Compare and Swap, DCAS)
  • 비교 및 교환 N (Compare and Swap N, CASN)
  • 다중 워드 비교 및 교환 (Multiword Compare and Swap, MCAS)

ABA 문제

  • CAS 기반 알고리즘에는 어긋난 참조에 관련되 문제점이 존재
  • 무잠금 스택일 때, 뽑힌 횟수를 갱신하고 이걸 바탕으로 머리가 변경됐는지 여부를 판단
  • LL/SC를 사용하면 ABA 문제가 아예 발생하지 않음

무잠금 기법의 기초

  • 필요한 작업을 클래스 외부의 한 객체에서 오프라인으로 수행
  • 그것이 끝나면 공유 자료에 대한 포인터를 CAS로 갱신
  • CAS가 실패하면 처음부터 다시 시작

저자

  • Lock-Free Algorithms - Toby Jones

1.2 OpenMP를 이용한 다중 코어 프로세서 활용

  • 병렬 프로그래밍을 지원하는 이식성 있는 업계 표준 API이자 C/C++ 프로그래밍 프로토콜
  • 플랫폼에 독립적
  • 지시문 몇 개 추가로 구현할 수 있어서 가독성이 좋다
  • 이 코드를 병렬로 실행했을 때, 성능에 이익이 어느정도 있을지 테스트하기에 좋다.

저자

  • Utilizing Multicore Processors with OpenMP - Pete Isensee

1.3 OpenCV 라이브러리를 이용한 게임에서의 게임 컴퓨터 시각 활용

  • Open Computer Vision 라이브러리.
  • 플레이어 피부 표본을 이용해 히스토그램을 생성한 후 역투영(back projection) 이미지를 만들어 얼굴 위치를 검출하는 예제

저자

  • Computer Vision in Games Using the OpenCV Library - Arnau Ramisa, Enric Martí, Enric Vergara

reference

1.4 게임 객체의 지리 격자 등록

지리적 격자(geographic grid)를 적용해 근접 및 시선 판정에 필요한 계산을 줄이는 방법

저자

  • Geographic Grid Registration of Game Objects - Roger Smith

1.5 BSP 기법들

binary space partition 컴파일러 소개. PVS 생성 방법.

사용

  • 뒤에서 앞으로 렌더링되는 다각형들을 정렬할 때 쓰인 기법
  • BSP 기반 충돌 검출
  • 잠재 가시 집합(potentially visible set, PSV) 계산

BSP 종류

  • 노드 기반 BSP
  • 다각형을 자르지 않는 노드 기반 BSP
  • 볼록 말단형 BSP (leafy BSP)

저자

  • BSP Techniques - Octavian Marius Chincisan

1.6 최근접 문자열 부합 알고리즘

  • ’객체 ID ’Key Word’를 찾지 못했습니다. 혹시 ’keyword’를 찾으려고 하셨나요?’
  • 실행시점 효율성을 보장하지 않는 대신, 자원 할당 및 코드 크기 측면에서 최적화된 알고리즘
  • 레벤슈타인 거리 공식(Levenshtein distance formula)을 실용적으로 구현

저자

  • Closest-String Matching Algorithm - James Boer

1.7 CppUnit을 이용한 단위 검사 구현

난 CppUnit보단 gtest가 좋더라.

저자

  • Using CppUnit To Implement Unit Testing - Blake Madden

1.8 저작권 침해의 억제 및 검출을 위한 출시 전 빌드 지문 적용

빌드에 지문을 추가하는 전략들 소개.

전략

| 전략                                    | 구현 난이도    | 검출난이도       |
| 도입 화면에 이름 표시                   | 극도로 쉬움    | 그리 어렵지 않음 |
| 가짜 파일 추가                          | 극도로 쉬움    | 아주 어려움      |
| Adobe Photoshop CS Digimarc             | 대단히 쉬움    | 다소 어려움      |
| 이미지 파일에 지문 추가                 | 아주 쉬움      | 극도로 어려움    |
| 3D 모형, 애니메이션, 효과음에 지문 추가 | 그리 쉽지 않음 | 극도로 어려움    |
| 실행파일에 지문 추가                    | 다소 어려움    | 극도로 어려움    |
| 여러 전략 결합                          | 가변적         | 극도로 어려움    |

저자

  • Fingerprinting Pre-Release Builds To Deter and Detect Piracy - Steve Rabin

1.9 접근 기반 파일 재배치를 이용한 더 빠른 파일 적재

  • 일반적으로 자원 묶음 파일(packed resource file) 안의 실제 자원들의 순서는 디스크 상의 디렉터리 구조를 반영
  • 하지만 자원들을 디렉터리 안의 순서 그대로 사용하는 일은 거의 없다.
  • 게임이 자원을 어떻게 사용하는지에 대한 자료를 수집하고, 그 사용 패턴을 이용해 묶음 파일 안에서의 파일 순서를 최적화하는 해법을 제시

저자

  • Faster File Loading with Access-Based File Reordering - David L. Koenig

1.10 빠른 반복을 위한 실행시점 자산 즉석적재

자산 변환기, 파일 감시기, 실행시점 수신기, 자산 재연결’로 구성

저자

  • Stay in the Game: Asset Hotloading for Fast Iteration - Charles Nicholson, Noel Llopis

2.1 부동소수점 비법들

  • IEEE 754 형식, 예외 사항들 설명
  • float를 int로 취급해 비트 연산으로 빠르게 조작하는 방법을 소개

저자

  • Floating-Point Tricks - Chris Lomont

2.2 동차 좌표를 이용한 투영 공간 안에서의 GPU 계산

  • 교차 판정을 동차 좌표들을 직접 사용해서 수행하는 방법을 설명.
  • 동차 좌표(homogeneous coordinates)에서 유클리드 좌표(euclidean coordinates)로 변환해 사용하면
    • 나눗셈은 느리다
    • 0으로 나누기 예외 및 수치적 불안정성

동차 좌표를 이용해 안정적이고 간단하게 풀 수 있는 문제

  • \(E^2\) 공간의 동차 좌표들로 주어진 두 점을 지나는 하나의 선 구하기
  • \(E^2\) 공간의 두 선의 교점 구하기
  • \(E^3\) 공간의 동차 좌표들로 주어진 세 점으로 결정되는 평면 구하기
  • \(E^3\) 공간의 세 평면의 교점 구하기

저자

  • GPU Computation in Projective Space Using Homogeneous Coordinates - Vaclav Skala

2.3 외적으로 1차 연립방정식 풀기

  • 크레이머 법칙(Cramer’s rule)을 사용
    • 각 미지수에서 분자 열 순서를 바꾸면 외적에서 사용하는 scalar component
  • 두 음함수 선(implicit line, 암묵적 선)들의 교점을 계산하거나 주어진 두 점을 지나는 음함수 선의 계수를 구하는 데 유용.

저자

  • Solving Systems of Linear Equations Using the Cross Product - Anders Hast

2.4 게임 개발을 위한 순차 색인 기법

  • 객체들의 모음을 수학적인 수열(sequence)로 취급하고 색인화, 역색인화를 위한 수학 공식 소개.
  • 범위 수열, 치환 수열(순열), 조합 수열

저자

  • Sequence Indexing for Game Development - Palem GopalaKrishna

2.5 다면체의 정확한 부력

  • 질량 중심, 부력 중심을 찾아 돌림힘(torque, 토크) 계산
  • 물의 관성을 무시해 다소 비현실적인 부침(bobbing) 행동이 나타날 수 있다
  • 완전한 동적 물 시뮬레이션에 비해선 훨씬 단순
  • 부력 계산 결과를 재사용해 물의 항력(drag force)을 근사하는 방법도 소개

이전 실시간 부력 방법

  • 모형에 내장된 구(sphere)를 이용해 부력을 근사
  • 물체 표면에 부력을 근사하는 데 쓸 점들을 분산

저자

  • Exact Buoyancy for Polyhedra - Erin Catto

2.6 강체와 상호작용하는 실시간 입자 기반 유체 시뮬레이션

파티클 기반 기법인 SPH(smoothed particle hydrodynamics) 소개. 친절하다.

저자

  • Real-Time Particle-Based Fluid Simulation with Rigid Body Interaction - Takashi Amada

3.1 모형 기반 의사결정 방법을 게임에 적용: Locust AI 엔진을 Quake III에 적용하기

  • 규칙 기반이 아닌 행동, 행동의 결과, 관찰과 같은 모형에 기초한 접근 방식
  • 미래의 의사결정 과정에 근거한 기대성과(expected outcome)를 최대화하는 선택
  • 관찰 -> 갱신 -> 결정 -> 행동 주기

저자

  • Applying Model-Based Decision-Making Methods to Games: Applying the Locust AI Engine to Quake III - Armand Prieditis, Mukesh Dalal

3.2 자율 NPC들의 협동 구현

  • 중앙집중이 아닌 자율적 접근 방식 소개
  • 애니메이션, 이동, 감지, 행동을 처리하는 제어기들로 구성된 NPC

저자

  • Achieving Coordination with Autonomous NPCs - Diego Garcés

3.3 게임을 위한 행동 기반 로봇 아키텍처

저자

  • Behavior-Based Robotic Architectures for Games - Hugo Pinto, Luis Otavio Álvares

3.4 퍼지 감지기, 유한상태 행동, 행동망으로 목표 지향적 Unreal Tournament 로봇 만들기

  • Constructing a Goal-Oriented Robot for Unreal Tournament Using Fuzzy Sensors, Finite-State Machines, and Extended Behavior Networks - Hugo Pinto, Luis Otavio Álvares

3.5 목표 지향적 Unreal 봇: 확장 행동망으로 목표 지향적 행동과 간단한 개성을 가진 게임 에이전트 만들기

  • A Goal-Oriented Unreal Bot: Building a Game Agent with Goal-Oriented Behavior and Simple Personality Using Extended Behavior Networks - Hugo Pinto, Luis Otavio Álvares

3.6 지지 벡터 기계를 사용하는 단기 기억 모형

  • Short-Term Memory Modeling Using a Support Vector Machine - Julien Hamaide

3.7 교전 분석에 정량 판정 모형 적용하기

  • Using the Quantified Judgment Model for Engagement Analysis - Michael Ramsey

3.8 플러그인 모듈식 다층 AI 엔진 설계

  • Designing a Multilayer, Pluggable AI Engine - Sebastien Schertenleib

3.9 퍼지 제어를 이용한 장면 복잡도 관리

  • A Fuzzy-Control Approach to Managing Scene Complexity - Gabriyel Wong, Jialiang Wang

4.1 스크립팅 언어 개괄

  • Scripting Language Survey - Diego Garcés

4.2 C/C++ 객체와 루아의 바인딩

  • Binding C/C++ Objects to Lua - Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes

4.3 루아 코루틴을 이용한 고급 제어 메커니즘 구현

  • Programming Advanced Control Mechanisms with Lua Coroutines - Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes

4.4 다중 스레드 환경에서 고수준 스크립트 실행 관리하기

  • Managing High-Level Script Execution Within Multithreaded Environments - Sebastien Schertenleib

4.5 비개입 대리자를 이용한 활동 객체 속성 노출

  • Exposing Actor Properties Using Nonintrusive Proxies - Matthew Campbell

4.6 게임 객체 구성요소 시스템

  • Game Object Component System - Chris Stoy

5.1 상호작용 캐릭터를 위한 사실적인 유휴 동작 합성

  • Synthesis of Realistic Idle Motion for Interactive Characters - Arjan Egges, Nadia Magnenat-Thalmann

5.2 적응형 이진 트리를 이용한 공간 트리

  • Spatial Partitioning Using an Adaptive Binary Tree - Martin Fleisz

5.3 준 유향 경계상자를 이용한 개선된 객체 선별

  • Enhanced Object Culling with (Almost) Oriented Bounding Boxes - Ben St. John

5.4 최적의 렌더링을 위한 스킨 분할

  • Skin Splitting for Optimal Rendering - Dominic Filion

5.5 GPU 지형 렌더링

  • GPU Terrain Rendering - Harald Vistnes
  • nil

5.6 상호작용적인 유체의 동역학 및 GPU 렌더링

  • Interactive Fluid Dynamics and Rendering on the GPU - Frank Luna

5.7 빠른 픽셀 당 다중 광원 조명

  • Fast Per-Pixel Lighting with Many Lights - Frank Puig Placeres

5.8 도로 표지를 뚜렷하게 렌더링하기

  • Rendering Road Signs Sharply - Jörn Loviscach

5.9 게임을 위한 실용적인 하늘 렌더링

  • Practical Sky Rendering for Games - Aurelio Reis

5.10 OpenGL 프레임 버퍼 객체를 이용한 HDR 렌더링

  • High Dynamic Range Rendering Using OpenGL Frame Buffer Objects - Allen Sherrod

6.1 변형 가능 메시에서 실시간으로 소리 내기

  • Real-Time Sound Generation from Deformable Meshes - Marq Singer

6.2 실시간 효과음을 위한 가벼운 음 합성기

  • A Lightweight Generator for Real-Time Sound Effects - Frank Luchs

6.3 실시간 버스 믹싱

  • Real-Time Mixing Busses - James Boer

6.4 잠재 가청 집합

  • Potentially Audible Sets - Dominic Filion

6.5 저렴한 도플러 효과

  • A Cheap Doppler Effect - Julien Hamaide

6.6 실시간 DSP 효과 흉내내기

  • Faking Real-Time DSP Effects - Robert Sparks

7.1 3D 캐릭터 애니메이션 자료 스트림의 동적 적응

  • Dynamically Adaptive Streaming of 3D Data for Animated Characters - Chris Joslin, Nadia Magnenat-Thalmann, Stephane Garchery, Thomas Di Giacomo, 김형석

7.2 대규모 다중플레이어 게임을 위한 복잡계 기반 고수준 아키텍처

  • Complex Systems-Based High-Level Architecture for Massively Multiplayer Games - Chun Che Fung, Kok-Wai Wong, Viknashvaran Narayanasamy

7.3 게임 객체를 위한 전역 고유 식별자 생성

  • Generating Globally Unique Identifiers for Game Objects - 김용하

7.4 MMOG의 프로토타이핑: 세컨드라이프를 이용한 게임 개념 프로토타입 작성

  • Massively Multiplayer Online Prototype Utilizing Second Life for Game Concept Prototyping - Peter Smith

7.5 NAT 구멍 뚫기와 신뢰성 있는 동급간 게이밍 TCP 연결

  • Reliable Peer-to-Peer Gaming Connections Penetrating NAT - Larry Shi