GPU Gems3 Chapter 2. Animated Crowd Rendering

Slides:



Advertisements
Similar presentations
다양한 종류의 문서를 언제든지 보고 바로 편집하세요. 여러 앱을 이용할 필요 없이 MS Office, HWP, PDF, TXT 의 문서를 한 곳에서 확인하고 어디서든 쉽게 편집해 보세요 ! *PDF 문서는 ‘ 보기 모드 ’ 만 지원합니다.
Advertisements

1)RACK 2)UPS 3)P D U 장치 4)Server Group 5)KVM Switch 7)UPS 를 위한 HUB 6) RACK Monitor.
컴퓨터와 인터넷.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
Skeletal LoD in bone-based animation
Gamma와 Linear-Color-Space
3D Project Cloud Warcraft 박 종 선.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
목차 백업과 복원.
어셈블리 문법 보강 4월 10일.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
제 14장 Multicast & Broadcast
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
오브젝트 조합 회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
COLLADA 1.5 Specification
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Raster 애니메이션은 GIF Animator로 만들면 쉽다
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Error Detection and Correction
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
23장. 구조체와 사용자 정의 자료형 2.
D / K / I / T / E / C / H / N / O / L / O / G / Y
Sungkyunkwan University OS Project Dongkun Shin
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
자바 5.0 프로그래밍.
C#.
GPU Gems 3 Chapter 13. Volumetric Light Scattering as a Post-Process
DirectX 3D 7개월차 김성도 3D 5인 프로젝트.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
7가지 방법 PowerPoint에서 공동 작업하는 다른 사용자와 함께 편집 작업 중인 사용자 보기
SAS Statistical Analysis System 통계패키지 실습 (2011년 1학기)
Terrain.
24장. 파일 입출력.
Samsung Software Membership 3D MIM 신진수
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
발표: Direct3D 10 API 개요 원저: Jack Hoxley 발표: KASA(
스크린 샷 클릭가능 클릭시 영한사전 반영.
8장 쿠키와 세션 한빛미디어(주).
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2강_첫번째 안드로이드 프로젝트 에뮬레이터(AVD) 만들기 처음 만들어 보는 프로젝트 전체적인 구성 살펴보기
ARM Development Suite v1.2
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
2D게임 프로그래밍 프로젝트 총은 사기입니다(가제) 박상윤.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
계산기.
CHAP 21. 전화, SMS, 주소록.
S-Work 2.0 DRM 신규 버전 설치 가이드 SOFTCAMP
헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 헤드라인 텍스트 샘플 텍스트
Animation copyright
기술 진화와 진보.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
1차 발표: 프로젝트 발표 안내 및 형식 학번: 이름: 김경우.
AT MEGA 128 기초와 응용 I 기본적인 구조.
StyleCop 소개 SGS Framework 개발 팀.
Part 2 개념적 데이터 모델 Copyright © 2006 by Ehan Publishing Co. All rights reserved.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
2D 게임 프로그래밍 제안서 김보명.
2D 게임프로그래밍 프로젝트 - Air Clear 심석용.
Numerical Analysis Programming using NRs
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
CHAP 15. 데이터 스토리지.
CODE INJECTION 시스템B 김한슬.
컴퓨터는 어떻게 덧셈, 뺄셈을 할까? 2011년 10월 5일 정동욱.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
SafeMSR 설정.
LEON3 DBT 엔진을 이용한 ERC32 기반의 하이퍼바이저 프로토 타입 개발
Presentation transcript:

GPU Gems3 Chapter 2. Animated Crowd Rendering http://www.kindnap.pe.kr http://cafe.naver.com/shader

introduction Shader 4.0 버전을 이용한 Skinned Hardware Instancing을 구현해본다. A Crowd of Characters Animated Using Skinned Instancing

Hardware Instancing? 모아 찍는 기술 오버해드의 원인 캐시 미스 Render State Texture 풀, 나무, 배경에 적용되는 간단한 Mesh 리소스의 공유 (Texture, VB, IB) 단지 위치,회전 혹은 칼러값 차이

Hardware Instancing? 하나의 버퍼에 몰아, Draw Call을 최적화 이점 Reduce :: Draw Call Reduce :: Cache Miss Reduce :: SetRenderState Reduce :: SetTexture 더 자세한 내용은 http://www.storyq.net/boxes/1841 http://www.storyq.net/boxes/1841

Hardware Instancing Dx9 사용법 In HLSL #define MAX_UNIT_INSTANCING 75 //상수 레지스터의 제한으로 인한 한번을 DP call시 그릴 수 있는 수의 한계를 둠 Float4x3 g_mWorldMatrixArrayInstancing[MAX_UNIT_INSTANCING] : WORLDMATRIXARRAY; //각 인스턴스의 월드행렬 정보의 저장 struct VS_INPUT { float4 vPos : POSITION; float2 vTexCoord0 : TEXCOORD0; float fWorldMatrixIndex : TEXCOORD1; //버퍼중 인스턴스의 아이디를 직접 알 수 있는 버퍼의 존재 } Vertex;

Hardware Instancing Dx9 In VS int iMatrixIndex = i.fWorldMatrixIndex; //버택스 Input에서 현제 아이드를 참조함 vWorldPos = mul( i.vPos, g_mWorldMatrixArrayInstancing[iMatrixIndex] ); //포지션 개산시 해당 월드행렬의 참조 o.vPos = mul( float4( vWorldPos, 1.0f ), g_mShadowViewProj ); // 이후 일반 연산과 동일한 과정

Hardware Instancing Dx9 In C Code D3DDevice()-> SetStreamSourceFreq( uiStreamNumber, uiFrequencyParam ); 의 호출

Hardware Instancing Dx9 한계점 협소한 상수레지스터(256)의 보유로 많은 수를 Instancing 처리할 수 없음 Shader 2.0버전 기준으로 Vs에서 택스쳐를 샘플링 할 수 없으므로 Skinned Instancing 구현 시 상수 레지스터가 더욱 모자라게 됨

In Article Technique (Use DX10 – shader 4.0) DX10을 이용한다면 현실적으로 적용하며 효율적인 Skinned animated instancing이 구현가능 Animation 정보를 택스쳐에 기입 // shader 3.0이상 사용시 vs에서 샘플링 가능 상수 레지스터에 기존방법에 + Animation info ( 참조 에니매이션, 프레임정보…)

Technique Cpu 프로그램의 로직을 실행 - (각종 업데이트, AI, 그에따른 ani 진행) 각 인스턴스에 대한 LOD 그룹화 - 결정된 LOD 그룹에서 매쉬별로 그룹화 LOD 그룹기준으로 각 그룹에 대하여 동일 매쉬를 사용한다면 DrawInstanced();

Technique Gpu VS Load Instance data Load bone matrix(in tex) ani 연산 PS 여타와 같은 행위

Technique Constants – Based Shader 4.0기준 상수 레지스터는 4096 (3.0 / 256) 위와 같은 방법으로 연산시 한번에 Dp call당 800개의 instance를 랜더링 가능 10000여기의 오브젝트를 랜더링시 13번의 Dp Call 이면 랜더링이 가능함

Technique Constants – Based HLSL struce struct PerInstanceData   {     float4 world1;     float4 world2;     float4 world3;     float4 color;     uint4  animationData;   };   cbuffer cInstanceData   PerInstanceData g_Instances[MAX_INSTANCE_CONSTANTS];   }  

Technique Constants – Based C Struct struct InstanceDataElement { D3DXVECTOR4 world1; D3DXVECTOR4 world2; D3DXVECTOR4 world3; D3DXCOLOR color; // Offset in vectors (texels) into the whole data stream // for the start of the animation playing UINT animationIndex; // Offset in vectors (texels) into the animation stream // for the start of the frame playing UINT frameOffset; UINT unused1; // pad UINT unused2; // pad };

Palette Skinning Using an Animation Texture

Conditional branching float4x4 finalMatrix; // Load the first and most influential bone weight finalMatrix = input.vWeights.x *loadBoneMatrix(animationData,input.vBones.x); // Conditionally apply subsequent bone matrices if the weight is > 0 if(input.vWeights.y > 0) { finalMatrix += input.vWeights.y * loadBoneMatrix(animationData,input.vBones.y); if(input.vWeights.z > 0) finalMatrix += input.vWeights.z * loadBoneMatrix(animationData,input.vBones.z); if(input.vWeights.w > 0) finalMatrix += input.vWeights.w * loadBoneMatrix(animationData,input.vBones.w); }

Geometry Variations 같은 ani를 참조하고 있지만, 캐릭터의 장비를 다양하게 줄 수 있다. 하지만 장작된 장비기준으로만 인스턴싱 그룹이 된다. 자동화를 위하여 익스포터시 모든 장비를 장착한체 익스포터 시키고 프로그램 상에서 특정 장비를 선택하게 하는 방식으로 구현할수 있다.

Geometry Variations

The Level-of-Detail System 거리 기준으로 정렬 거리 기준으로 정렬된 데이터를 매쉬별로 정렬 ANIMATION 데이터 또한 LOD 별로 제작되 있음

Other Considerations Color Variations 베이스가 되는 칼라값 또한 인스턴스 정보에 넣어주어 효과를 줄 수 있으며 기존 app에 적용되어 있다. (LOD 설정 정도의 표시 기능)

Performance 8600 회사똥컴 24frame / 9547 characters if no instancing 8800 Gtx 34frame / 9547 characters

Conclusion Instancing 사용합시다. 끝!