유니티 렌더링 패스(rendering paths) - 포워드 렌더링 패스, 디퍼드 렌더링 패스 렌더링 패스는 오브젝트의 라이팅과 쉐이딩에 관련한 일련의 작업을 수행하는 방법입니다. 서로 다른 종류의 렌더링 패스는 각각 기능과 성능에서 다른 특성을 가지며 장점과 단점이 있습니다. 유니티의 렌더 파이프라인은 포워드 렌더링 패스(Forward Rendering) , 디퍼드 렌더링 패스(Deferred shading)를 지원합니다. 개발자는 프로젝트 및 플랫폼에 적합한 렌더링 패스를 선택할수있습니다. 렌더링 패스는 기본적으로 프로젝트 설정(project settings)의 그래픽(graphics)에서 설정하며 camera에서 오버라이드할수있습니다. 그래픽카드가 해당 렌더링패스를 지원하지않는다면 유니티는 자동으로..
유니티에서 카메라 layerCullDistances를 사용하기(per-layer culling distances) layerCullDistances를 사용하면 특정 레이어의 게임오브젝트가 카메라의 farClipPlane보다 더 가까운 거리에서 컬링되도록 설정할수있다. 작은 오브젝트를 초기에 컬링하는데 유용하다. 1)예에서 씬을 구성하였다. 2)일반적으로 카메라의 farClipPlane보다 가까이 있는 오브젝트를 모두 렌더링한다. 3)tags & layers에서 새로운 레이어를 추가한다. 예에서 2개의 레이어를 추가하였다. cull5 - 컬링거리를 5m로 설정할 게임오브젝트의 레이어 cull30 - 컬링거리를 30m로 설정할 게임오브젝트의 레이어 4)크기가 32인 실수형 배열을 선언하고 컬링거리로 사용할 ..
유니티에서 CombineMeshes 함수를 사용하여 드로우콜 수치 낮추기 CombineMeshes 함수를 이용하여 다중 메시를 단일 메시로 결합할수있다. 1)프로젝트의 동적배칭 및 정적 배칭을 비활성화하고 아래와 같이 씬을 구성하였다. 2)씬을 구성하는 오브젝트들은 같은 재질을 공유하여 오브젝트의 수와 동일한 수치의 batches를 표시하고있다. 3)새로운 게임오브젝트를 생성하고(parent) 개별적으로 존재하는 오브젝트들을 parent의 하위에 위치시킨다(child) 4)parent 게임오브젝트에 mesh filter, mesh renderer 컴포넌트를 추가한다. 결합한 메시와 재질을 할당하는데 사용된다. meshrenderer에 child 게임오브젝트와 같은 재질을 할당한다. 5)스크립트를 작성하여..
유니티에서 동적배칭 사용하기(dynamic batching) dynamic batching은 런타임에서 매 프레임마다 동적 배칭이 가능한 오브젝트들에 대해 일괄처리하여 드로우콜을 줄일수있다. 다이나믹 배칭을 활성화하면 유니티가 자동적으로 같은 재질을 공유하는 오브젝트들(버텍스의 개수가 적은)의 버텍스를 모아서 한번에 처리한다. 정적 배칭은 메모리 오버헤드를 발생시키는데 반해 런타임에서 매 프레임마다 버텍스 연산을 수행하는 동적 배칭은 CPU 오버헤드를 발생시킨다. 동적 배칭은 정적 배칭과 마찬가지로 게임 오브젝트들이 독립적으로 컬링될수있다는 장점을 가진다. docs.unity3d.com/Manual/DrawCallBatching.html 1)유니티에서 다이나믹 배칭은 기본적으로 비활성화되어있다. 이 기능..
유니티에서 정적배칭(static batching) 사용하기 정적배칭을 사용하면 움직이지않고(static) 동일한 재질을 공유하는 오브젝트들을 일괄 처리함으로써 드로우콜을 줄일수있다. 정적배칭을 활성화하면 씬을 시작할때 동일한 재질을 공유하는 정적 오브젝트들(static objects)을 결합하여 하나의 공유된 버텍스와 이를 위한 인덱스 버퍼를 구축한다. 오브젝트들은 공유된 지오메트리와 재질을 사용하기때문에 드로우콜 사이의 상태변경을 거의 일으키지않으며 결과적으로 batches 및 드로우콜의 개수를 줄일수있다. docs.unity3d.com/Manual/DrawCallBatching.html 1)새로운 씬에서 라이트를 제거하고 카메라의 clear flags를 solid color로 변경하였다(batches..
유니티의 렌더링 파이프라인(built-in, SRP, URP, HDRP) Render Pipelines 렌더 파이프라인은 씬의 내용들을 취하여 컬링(culling), 렌더링(rendering), 포스트프로세싱(post-processing)등의 작업을 수행하고 그것을 스크린에 표시하는 역할을한다. 유니티는 몇가지 서로 다른 렌더 파이프라인을 제공한다(built-in, URP, HDRP) 렌더 파이프라인은 모두 다른 기능과 특성을 가지고있다. 사용자는 개발의 초기 단계에서 프로젝트(게임, 어플리케이션, 플래폼)에 적절한 렌더 파이프라인을 선택하는것이 중요하다(프로젝트 중간에 렌더 파이프라인을 다른것으로 변경하는것을 권장하지않는다) docs.unity3d.com/Manual/render-pipelines.ht..
skinned mesh renderer 게임 오브젝트의 인스턴싱 실외 씬 작업에서 건물, 나무, 잔디와 같은 오브젝트에 대해 GPU 인스턴싱을 사용하면 드로우콜을 낮출수있다. 하지만 캐릭터등의 SkinnedMeshRenderer 오브젝트는 스키닝(skinning)이 CPU에서 계산되고 하나씩 GPU로 제출되기때문에 일반적인 방법으로 인스턴싱을 사용할수없다. 만약 씬에 수많은 캐릭터가 존재한다면 그것은 막대한 양의 애니메이션 계산과 함께 높은 드로우콜 수치를 초래할것이다. 유니티에서는 이러한 한계에 대하여 CPU 비용을 절감하고 GPU 인스턴싱을 보강할수있는 방법을 제공한다. (현재는 root motion, attachment, animation events를 지원하며(transition, animatio..
유니티 최적화 GPU 인스턴싱(instancing) GPU 인스턴싱을 사용하면 다중으로 복사된 동일한 메시의 오브젝트(인스턴스)를 한번에 렌더링하여 드로우콜 수치를 낮추고 렌더링 퍼포먼스를 향상시킬수있다. 씬에서 반복적으로 사용되는 건물, 나무, 기타 오브젝트에 사용할수있다. 아래 예에서 씬에 게임 오브젝트를 생성하였다. 게임 오브젝트를 여러개 복사하면 batches의 수치가 증가한것을 확인할수있다. 재질의 쉐이더가 gpu instancing을 지원한다면 재질에 enable GPU instancing 속성이 표시된다. 유니티에서 기본적으로 제공하는 쉐이더인 standard, standardSpecular, mobile diffuse, mobile bumped등이 gpu instancing을 지원한다. 예..
유니티 게임 그래픽 최적화 주제 모음 프러스텀컬링 오쿨루젼컬링 정적 배칭 유니티에서 정적배칭(static batching) 사용하기 동적 배칭 유니티에서 동적배칭 사용하기(dynamic batching) GPU인스턴싱 유니티 GPU 인스턴싱(instancing) vsync CombineMeshes함수 유니티에서 CombineMeshes 함수를 이용하여 배칭하기 LOD(level of detail) 유니티에서 LOD 그룹 설정하기 라이팅기법 라이트맵 gpu스키닝 라이트프로브 리플렉션 프로브 텍스처 압축 파티클최적화 렌더링파이프라인(빌트인, URP, HDRP) 유니티의 렌더링 파이프라인(built-in, SRP, URP, HDRP) 포워드렌더링, 디퍼드렌더링 안티 엘리어싱 유니티 안타 엘리어싱(anti-al..