• Save
D2 Havok
Upcoming SlideShare
Loading in...5
×
 

D2 Havok

on

  • 866 views

 

Statistics

Views

Total Views
866
Views on SlideShare
772
Embed Views
94

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 94

http://aker.tistory.com 93
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 영화 : Matrix, 트로이 , 포세이돈 게임 : 스타크래프트 2 등 RTS, 바이오쇼크 2, 하프라이프 등 FPS FX 사라진듯하지만 AI, Cloth, Destruction 가 생김
  • Wrapper : Share.HavokCommon.dll Usage : Share.Havok.dll
  • Sync 는 Console 게임에 적합 Async 는 PC 나 Server 에 적합 우리는 Async 사용 , 정확도 등의 문제 때문에 “일정한 작은 시간”으로 쪼개어 Simulation
  • CenterMap 이 변경되면 물체들을 상대 좌표로 이동시킴
  • WorldEditor 에서 저장하면 Terrain Mopp 는 생성됨 RigidBody 용 Mopp 는 실시간 생성 - WorldArena 100ms 정도 - 백단위 폴리곤은 5-6ms 정도
  • 계단 오르기가 힘들어서 Proxy 를 사용했었는데 ... RigidBody 가 더 좋아보임
  • HavokSystem 은 3 개 클래스를 Has 하는 통합 관리 Class

D2 Havok D2 Havok Presentation Transcript

  • Havok(Physics)
    • Contents
      • About
      • Classes
        • Wrapper
        • Usage
      • ETC
      • QnA
  • About
    • Havok
    • 아일랜드 회사 ( 현재 Intel.com 이 인수 ) 인 Havok.com 이 만든 물리 엔진으로 2000 년 첫 개발 이후 약 150 여개의 게임과 영화에서 사용 되었다 . Window, Xbox, PS, Wii, Linux, Mac 등의 플랫폼 /OS 에서 동작하며 C++ 컴파일러가 있는 시스템이면 포팅이 가능할 정도로 호환성이 우수 하다 ....... 다만 CLI 는 없다 !
      • Physics
      • Animation
      • FX (Smoke 등의 효과 표현을 위한 PS 3.0 를 이용한 SW)
    • hav·oc [hǽvək]
      • n. ( 불가산 ) ( 대규모의 ) 파괴 , 황폐 ; 대혼란 , 대혼잡 , 무질서
      • v. 크게 파괴하다 , 쑥밭을 만들다 , 황폐화하다
  • Classes
    • Wrapper (Share/Library/HavokCommon)
      • Framework
      • World
      • Object
        • Terrain
        • Rigidbody
        • Character (Proxy, Rigidbody)
    • Usage (Share/Havok)
      • HavokSystem
      • HavokRepository
  • Wrapper
    • Framework
    • 프레임 당 Simulation 을 Update
      • SingleThread : Simulation 을 SingleThread 로
        • Sync : Frame 시간을 고정
        • Async : Frame 시간이 가변적일 때
      • Multithread : MultiThread 로
        • Sync
        • Async
      • TimeStep 이 커지면 Simulation 이 불안정해진다 . ( 오일러 적분기 사용의 폐해 )
  • Wrapper
    • World
    • Scene 과 유사한 기능
    • Character, RigidBody, Terrain 등 Add/Remove
      • Broadphase
        • Havok 의 Simulation 영역
        • 현재 3x3 Map 영역을 커버 (CenterMap 기준 )
        • 영역 밖의 물체는 Simulation 되지 않음
  • Wrapper
    • Mopp (Memory Optimized Partial Polytope)
    • 속도 , 메모리 등에서 최적화 된 Binary Shape 로 Compile 및 Serialize 필요 ( ♠ Code 1 )
    • RigidBody
      • Entity Has 1 Rigidbody
      • ProcessChangeTransform 에서 RigidBody 의 Transform 을 실시간으로 변경 ( ♠ Code 2 )
      • 기본적으로 Scale 이 불가능하므로 Scale 이 필요할 경우 Mopp 를 재생성 ( ♠ Code 3 )
    • Terrain
      • 엄밀히 말하면 RigidBody
  • Wrapper
    • Character Controller
      • RigidBody
        • 효율적 ( 별도의 simulation step 이 불필요 )
        • Simulation 이 정확
        • 계단 올라가기 힘들다
      • Proxy
        • 많은 테스트를 거쳐 안정적임
        • 다중충돌시 부정확함
        • 상대적으로 비효율적임
  • Usage
    • HavokSystem
      • Framework
      • World
      • Repository
    • HavokRepository
    • Havok 관련 Object 생성 / 소멸 관리
    • Cache 기능 (RefCount 이용 )
    • ※ Object 생성 순서
          • Empty Constructor -> Add to Repository -> Init ( ♠ Code 4 )
  • Usage
    • Engine
      • HavokSystem
        • HavokFramework
          • Update()
        • HavokWorld
          • BroadPhase
          • Add Objects()
          • Remove Objects()
        • HavokRepository
          • Create Objects()
          • Release Objects()
    Engine.Create(); new HavokSystem() CreateResource, Entity() HavokRepository.Create(); if (Inside of BroadPhase) HavokWorld.Add(obj) Engine.Update(); HavokWorld.UpdateCenterMap(); HavokBroadPhase.Shift(); if (Outside of BroadPhase()) HavokWorld.Remove(obj); if (Inside of BroadPhase()) HavokWorld.Add(obj); HavokFramework.Update(); Engine.Dispose(); HavokSystem.Dispose(); HavokRepository.Dispose(); all obj.Dispose();
  • ETC
    • Singleton
    • Havok 내부적으로 static global 이나 Singleton 을 사용하므로
    • Main Framework 는 1 개 /1process 여야만 한다 .
    • ThreadMemory
    • Havok 관련 객체를 생성하는 Thread 를 만들 경우
    • ( 예 :ResourceLoadingThread)
    • Thread 의 Running Body 에서 HavokThreadMemory 를 만들고
    • 소멸해줘야 한다 .( ♠ Code 5 참조 )
    • Finalize
    • Havok 객체는 GC 가 소멸하지 않도록 Havok Thread
    • (Framework 을 생성한 MainThread 혹은 HavokThreadMemory
    • 가 초기화된 Thread) 에서 명시적으로 Dispose 해야 함 .
  • QnA
    • Any Questions?
    • http://software.intel.com/en-us/forums/havok/