icon08_게임 애니메이션 최적화 기법
TRANSCRIPT
Introduction
•애니메이션 키 프레임 최적화
•메모리 최적화 이슈
•키 프레임 압축
•신호압축
•GPU 이용 최적화
•듀얼 쿼터니언
게임 애니메이션
•애니메이션 다양화
•모션 캡쳐의 대중화
•시네마틱 매크로 씬
게임 애니메이션
•애니메이션 다양화
•모션 캡쳐의 대중화
•시네마틱 매크로씬
•애니메이션 데이터량 폭발적인 증가
게임 애니메이션
•애니메이션 다양화
•모션 캡쳐의 대중화
•시네마틱 매크로씬
•애니메이션 데이터량 폭발적인 증가
•게임 리소스에서 애니메이션 데이터가 차지하는 비율이 비약적 높아짐
•게임 중 메모리 사용량의 비율이 높아짐(플렛폼에 따라선 애니메이션 사용량 제한)
애니메이션 최적화
•메모리 최적화의 요구
•좀 더 많은 애니메이션을 사용하기 위함
•메모리 사용으로 인한 병목
애니메이션 최적화
•메모리 최적화의 요구
•좀 더 많은 애니메이션을 사용하기 위함
•메모리 사용으로 인한 병목
•키프레임 압축
•키프레임 데이터 압축
•키프레임 신호 압축
키프레임
•키프레임(keyframe)
•계층 애니메이션
•회전+이동
•순차적 데이터
•회전
•Matrix
•Quaternion
•Axis Angle
•이동
•Vector
키프레임
•매트릭스 vs 쿼터니언 + 벡터
•메모리 사용량 : float[4*4]
•보간(interpolation)
•회전 키 프레임 보간(interpolation)을 하려면 쿼터니언으로 변환해서 사용해야 함 (매
트릭스간 보간은 회전 사이 값이 나오지 않음)
키프레임
•매트릭스 vs 쿼터니언 + 벡터
•메모리 사용량 : float[4+4]
•메트릭스 방식에 비해 절반
•변환없이 회전 키프레임 보간 가능
•결과는 매트릭스로 변환
•대부분 쿼터니언 + 벡터를 사용
데이터압축
•키프레임 압축
•쿼터니언 압축
•벡터 압축
데이터압축
•키프레임 압축
•쿼터니언 압축
•벡터 압축
•데이터 압축의 의미
•메모리 병목
데이터압축
•쿼터니언 구성
•쿼터니언 특징
•x*x + y*y + z*z + w*w = 1
•q = -q
•수의 범위 한정 : -1 에서 1사이
데이터압축
•w 값 생략
•w 의 크기는 x, y, z 로 계산 가능
•q = -q 성질을 이용 w를 양수로
데이터압축
•데이터 압축 (float 4 바이트 => 2 바이트)
•값 손실이 시작적으로 거의 느껴지지 않음
•16비트 fixed point 사용
데이터압축
•데이터 압축 (float 4바이트 => 2 바이트)
•값 손실이 시작적으로 거의 느껴지지 않음
•16비트 fixed point 사용
•16비트 float point 사용 (비표준)
•exponent의 범위를 4-bit로
•bias 값은 15로 (지수 -15에서 0)
•fraction의 범위를 11-bit로
데이터압축
•위치 벡터 특성
•계층적 애니메이션
•로컬 좌표계 사용
•값의 크기가 크지 않음
데이터압축
•위치 벡터 특성
•계층적 애니메이션
•로컬 좌표계 사용
•값의 크기가 크지 않음
•값의 변화량이 크지 않음 (엔트로피↓)
데이터압축
•위치 벡터 특성
•계층적 애니메이션
•로컬 좌표계 사용
•값의 크기가 크지 않음
•값의 변화량이 크지 않음 (엔트로피↓)
•벡터 압축
•값의 범위에 따라 fp16 사용
신호압축
•키프레임 샘플링
•신호압축
•데이터를 절반으로 줄이는 방법
•샘플링 주기를 더 크게 함
신호압축
•키프레임 샘플링
•신호압축
•데이터를 절반으로 줄이는 방법
•샘플링 주기를 더 크게 함
•오차가 작은 데이터를 제거한다
신호압축
•오차 분석
•양쪽 키 프레임에 의해예측된 값과 실제 값의차이
•크기가 가장 작은키프레임부터 제거
•원하는 만큼 압축
신호압축
•만약, 데이터가 massive 하게 크다면
•모션 데이터만 몇 백 메가바이트
•불가능해 보이지만, 본 40개, 60프레임 20분의 모션 캡쳐데이터라면 키프레임(36byte) 용량만 약 100메가 이상
•DCT를 이용한 주파수 도메인 압축이 필요할 지도 (JPEG 압축)
최적화된 키프레임 구성
•키프레임 셋
•캐시 메모리 최적화된 데이터 구성
VS
GPU를 이용한 최적화
•GPU를 이용한 최적화
•렌더링 배칭 이슈
•셰이더에 전달 가능한 변수의 제약
•스키닝시 전달 가능한 매트릭스 수 제약
GPU를 이용한 최적화
•GPU를 이용한 최적화
•렌더링 배칭 이슈
•셰이더에 전달 가능한 변수의 제약
•스키닝시 전달 가능한 매트릭스 수 제약
•매트릭스 => 쿼터니언+벡터로 전달
•두 배의 트랜스 폼 정보 전달가능
•셰이더 내부에서 쿼터니언 사용
•쿼터니언=>매트릭스 연산 부하가 큼
GPU를 이용한 최적화
•GPU를 이용한 최적화
•렌더링 배칭 이슈
•셰이더에 전달 가능한 변수의 제약
•스키닝시 전달 가능한 매트릭스 수 제약
•매트릭스 => 듀얼 쿼터니언 사용
•두 배의 트랜스폼 정보 전달가능
•셰이더 내부에서 듀얼 쿼터니언 사용
듀얼 쿼터니언
•듀얼쿼터니언
•스키닝 이점
•전통적인 방식에 쉽게적용 가능
•GPU friendly
•전통적인 매트릭스방식보다는 연산이 많음
•http://isg.cs.tcd.ie/projects/DualQuaternions