3D RENDERING OPTIMIZING #4- 박 민 근 ( 민군 )DEVROOKIE(CAFÉ.NAVER.COM/DEVROOKIE)
임포스터 & 인스턴싱
1DevRookie 박민근 ( 민군 )
DevRookie 박민근 ( 민군 ) 2
Imposter 사기꾼 , 다른 사람의 행세를 하는 사람
DevRookie 박민근 ( 민군 ) 3
Simple is Best!가장 적은 수의 폴리곤을 그리는 것이 가장 빠르다 .
DevRookie 박민근 ( 민군 ) 4
3D 모델 -> 2D 빌보드-퀄리티를 떨어트리지 않는 LOD 비용↓ 성능↑
실제 모델 임포스터
DevRookie 박민근 ( 민군 ) 5
임포스터 적용전
DevRookie 박민근 ( 민군 ) 6
임포스터 적용후
DevRookie 박민근 ( 민군 ) 7
모델을 렌러 타겟에 렌더링
빌보드 생성
빌보드에 렌러 타겟을 맵핑
빌보드를 백버퍼에 렌더링
임포스터 갱신
DevRookie 박민근 ( 민군 ) 8
트럭으로부터 생성된 임포스터 .녹색라인은 임포스터를 생성하는 데 사용되는 카메라 위치로 모은다 .
텍스처에 렌더링된 4 개의 3D 오브젝트 이미지
임포스터 빌보드에 투영되는 3D 오브젝트
DevRookie 박민근 ( 민군 ) 9
Alpha Blending
ONE : INVSRCALPHA
일반 Mesh 는 SRCALPHA : INVSRCALPHA
임포스터 빌보드는이미 알파가 계산되어 있기 때문에ONE : INVSRCALPHA
DevRookie 박민근 ( 민군 ) 10
Regenarate
임포스터 갱신
거리 ( 해상도 )카메라 앵글조명 , 애니메이션 변화시간
DevRookie 박민근 ( 민군 ) 11
2D Imposter or 3D Imposter
< 2D 빌보드의 문제점 > < 바운딩 박스를 이용한 3D 임포스터 >
DevRookie 박민근 ( 민군 ) 12
Instancing
모아찍기
배치는 크게 , 렌더링은 적게
DevRookie 박민근 ( 민군 ) 13
렌더링은 나누는것보다 모으는게 빠르다(Batch Rendering)
Before
After
렌더링 파이프라인
렌더링 파이프라인
오브젝트 A 오버헤드오브젝트 B
DevRookie 박민근 ( 민군 ) 14
인스턴싱 적용전
DevRookie 박민근 ( 민군 ) 15
인스턴싱 적용 후
DevRookie 박민근 ( 민군 ) 16
오버헤드의 원인
캐시 미스Render-StateTexture
풀 ,
나무 ,
비행기
같은 텍스쳐와 같은 렌더 스테이트를
사용하는 것들은
단지 위치와
회전만
다르다 .
하나의 버텍스 버퍼에 몰아 넣어 , DP Call 을 최소화
DevRookie 박민근 ( 민군 ) 17
최적화의 원칙배치는 크게 DP Call 은 작게
Reduce!! DP CallReduce!! Cache Miss.Reduce!! SetRenderStateReduce!! SetTexture
DevRookie 박민근 ( 민군 ) 18
Using Vertex Shader
장점 . 1. Buffer 에 Lock 을 걸지 않아도 구현이 가능 2. 빠른 속도를 보장
단점 . 1. 쉐이더 상수 개수 제한으로 한꺼번에 수백개 이상은 그리지 못함 2. Skinning Shader 등 쉐이더 상수를 많이 사용하는 방법과 병행하기 힘듬 3. DP 콜이 Dynamic Buffer 에 비해 상대적으로 많음 .
DevRookie 박민근 ( 민군 ) 19
Using Dynamic Buffer
장점 . 1. 버퍼 크기만큼 인스턴싱이 가능하므로 Shader 보다 더 많이 가능 2. 스키닝 애니메이션등 , Shader 와 연계 되지 않음 . 3, DP 콜이 Shader 보다 상대적으로 적음
단점 . 1. Lock 을 걸어야 하기 때문에 부하가 상당히 큼 .
10. 참고 자료1. grass engine using instancing - 한글
블로그
2. Instancing.
3. Instancing – KGC 2005 최우영 ( 지티스 동영상 )
4. 리얼타임 렌더링
20DevRookie 박민근 ( 민군 )
Top Related