유니티에서 정적배칭(static batching) 사용하기 정적배칭을 사용하면 움직이지않고(static) 동일한 재질을 공유하는 오브젝트들을 일괄 처리함으로써 드로우콜을 줄일수있다. 정적배칭을 활성화하면 씬을 시작할때 동일한 재질을 공유하는 정적 오브젝트들(static objects)을 결합하여 하나의 공유된 버텍스와 이를 위한 인덱스 버퍼를 구축한다. 오브젝트들은 공유된 지오메트리와 재질을 사용하기때문에 드로우콜 사이의 상태변경을 거의 일으키지않으며 결과적으로 batches 및 드로우콜의 개수를 줄일수있다. docs.unity3d.com/Manual/DrawCallBatching.html 1)새로운 씬에서 라이트를 제거하고 카메라의 clear flags를 solid color로 변경하였다(batches..
유니티 에셋스토어(asset store)에서 구매한 에셋을 불러오는 방법 (에셋스토어에서 불러오기, 패키지매니저에서 불러오기, 패키지파일 불러오기) 에셋스토어에서 불러오기 1)유니티 상단의 window 메뉴에서 asset store를 선택한다. 2)에디터에 추가된 에셋스토어 창에서 유니티 계정으로 로그인하고 에셋을 다운로드 및 불러오기한다. 패키지매니저에서 불러오기(package manager) 3)상단의 window 메뉴에서 package manager로 이동한다. 4)패키지매니저에서 좌측 상단에서 my assets을 선택하면 에셋스토어에서 구매한 에셋 목록을 표시한다. 5)항목을 선택하고 다운로드 및 불러오기한다. 패키지파일 불러오기 6)에셋스토어에서 다운로드한 에셋은 아래 폴더에서 확인할수있다(경로..
유니티 터레인에 디테일 추가하기(paint details, grass) 1)터레인의 paint details 도구를 선택하고 edit details를 클릭한다. 2)add grass texture를 선택한다. 3)detail texture에 텍스처를 추가한다. 4)디테일을 선택하고 브러쉬의 속성을 설정한후 터레인에 추가한다. 5)터레인 세팅으로 이동한다. 6)mesh resolution의 detail resolution per patch, detail resolution의 수치를 조절해서 단위 면적에 대한 디테일 밀도를 설정할수있다. 7)씬의 draw mode를 shaded wireframe으로 변경한다. 아래에서 detail resolution per patch - 32, detail resolutio..
유니티 터레인의 나무 설정하기(paint tree, speedTree) 1)씬에 터레인을 생성한다. 2)터레인의 paint trees 도구를 선택하고 edit trees를 클릭한다. 3)add tree를 선택하고 나무 프리팹 오브젝트를 할당한다. add를 클릭하면 나무 오브젝트를 추가한다. 4)목록에 tree가 추가된것을 확인할수있다. brush size - 브러쉬의 크기를 설정한다. tree density - 나무의 밀도를 설정한다. tree height, tree width - 나무의 크기를 설정한다 (random - 범위내에서 나무의 크기를 무작위로 설정한다) color variation - 나무에 무작위로 색상 베리에이션을 추가한다. (이 속성을 사용하려면 오브젝트의 쉐이더가 _TreeInstan..
유니티 터레인 텍스쳐 설정(밉맵, base map dis, base texture resolution) 터레인 텍스처 밉맵 활성화하기 1)터레인에서 사용중인 텍스처에 밉맵을 설정한다. 텍스처 파일의 임포트 세팅(import settings)에서 generate mip maps에 체크하고 적용한다. 2)밉맵을 설정한 텍스처는 미리보기에서 원본 해상도의 텍스처와 이것을 축소시킨 비트맵 이미지 집합(밉맵)을 확인할수있다. 3)사물이 멀거나 작게 보이는 경우 축소된 텍스처를 사용하여 렌더링 속도를 향상시킬수있다. 터레인 텍스처 밉맵 미사용 터레인 텍스처 밉맵 사용 4)씬의 draw mode를 밉맵으로 변경한다. 5)아래에서 빨간영역은 텍스처의 크기가 필요 이상으로 크다는 의미이고 만약 텍스처의 밉맵을 활성화하였..
유니티에서 페인트 텍스처 사용하기(paint texture) 1)씬에 터레인을 생성한다. 텍스처 추가 이전의 터레인은 표면이 checkerboard 패턴으로 표시된다. 2)터레인에 텍스처를 페인트하기위하여 터레인 레이어를 생성한다. 프로젝트 폴더에서 마우스 우클릭한후 create의 terrain layer를 선택한다. 3)터레인 레이어를 설정한다. 페인트에 사용할 텍스처를 추가하고 재질의 속성(specular, metallic, smoothness), 타일링(tiling settings)을 설정한다. 4)터레인에서 paint texture 도구를 선택하고 edit terrain layers를 클릭한다. 5)add layer를 선택하고 터레인 레이어를 추가한다. add layer는 프로젝트에 존재하는 터레..
유니티 샘플 터레인 어셋 사용하기(speedTree, TerrainAssets) 유니티에서 제공하는 무료 에셋인 standard assets에는 터레인에서 사용할수있는 샘플 터레인 에셋이 포함되어있다(texture, tree, grass) 1)에셋 스토어에서 standard assets을 다운로드한다. 2)standard assets에서 environment의 speedTree, TerrainAssets에 체크하고 불러오기한다. 3)불러오기한 에셋을 프로젝트의 에셋 폴더에서 확인할수있다(speedTree, TerrainAssets) 4)speedTree 폴더에는 스피드트리 프로그램으로 제작한 샘플 나무 오브젝트 3종이 제공된다. 나무 오브젝트는 데스크톱, 모바일 버전으로 구분되고 LOD 및 빌보드가 설정..
유니티에서 터레인 페인트 도구 사용하기(paint terrain) 1)터레인 컴포넌트의 도구 모음에서 paint terrain 아이콘을 클릭하고 raise or lower terrain을 선택한다. 2)팔레트에서 몇가지 빌트인 브러쉬를 확인할수있다. 브러쉬를 선택하고 브러쉬의 속성을 조절한다. brush size는 브러쉬의 크기를 조절하고(단축키[ , ]), opacity는 브러쉬의 강도를 조절한다. 3)터레인 오브젝트에 페인팅을 진행한다. 터레인 위에서 클릭, 드래그하여 지형을 높일수있으며 클릭+shift, 드래그하여 지형을 낮출수있다. 4)paint holes는 지형에 구멍을 생성한다(opening) 동굴, 절벽과 같은 구조물을 생성할때 사용할수있다. blogs.unity3d.com/2020/01/3..
유니티에서 이웃 터레인 추가하기(create neighbor Terrains) 1)씬에 터레인 게임 오브젝트를 생성한다. 2)씬에 checker 패턴으로 표시되는 터레인 게임오브젝트가 생성된것을 확인할수있다. 3)터레인을 생성하면 터레인 에셋 데이터도 함께 생성한다. 터레인 게임오브젝트는 터레인 데이터를 참조하며 이것은 프로젝트의 에셋 폴더에서 확인할수있다. 3)터레인을 확장하려면 터레인 도구 모음에서 create neighbor Terrains를 활성화한다. 4)해당 터레인에 인접하여 확장 가능한 영역이 표시되는것을 확인할수있다. 5)해당 표시 영역을 클릭하면 이웃 터레인이 추가된다. 6)씬에서 추가된 터레인을 확인할수있으며 해당 터레인에 대한 터레인 데이터도 추가된것을 확인할수있다. 7)동일한 방법으..
유니티의 렌더링 파이프라인(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을 지원한다. 예..