반응형

 

 

 

 

VS Code의 터미널을 실행하려했을 때 터미널이 설정되어있지 않으면 '터미널 프로세스를 시작하지 못했습니다'는 에러가 나타나면서 터미널이 실행되지 않는다. 이럴때 다음과 같이 해결한다.

 

- FilePreferencesSetting(단축키 Ctrl,)에서 검색창에 default profile:windows를 검색한다.

 

 

- 여기서 null로 설정되어있을건데 해당 값을 원하는 터미널로 변경해주면 된다.

- 다시 터미널을 실행해보면 다음과 같이 제대로 실행된다.

 

 

 

 

 

반응형
반응형

 

 

 

 

※ 해당 프로젝트는 3D 기능파악 및 최적화에 중점을 둔 프로젝트입니다.

 

 

 

 

제작기간

- 총 2일 (게임 제작 1일, 최적화 1일)

 

 

 

구현 내용

- UI

  • SafeArea를 적용하여 펀치홀 기종에 UI가 겹치지 않도록 조정
  • 커스텀 버튼을 구현하여 적용

- Game

  • 쉐이더(투명화, 툰)를 적용
  • 싱글톤(Manager class) 디자인 패턴 적용

 

 

 

최적화(배칭)

- UI

  • Sprite atlas 사용

- Game

  • Static batching으로 Batches를 줄임

 

 

 

Batches 수치 변화

※ 위 Batches의 수치는 평균값을 찍은것으로 두더지 출몰 수에따라 ±10정도 변경된다.

- 툰 쉐이더가 멀티패스를 사용하고 있어서 이 부분을 염두해두고 최대한 배칭작업을 진행했다.

- 처음에는 이 프로젝트도 Dynamic batching으로 배칭 처리를 하려고 배경에 구멍을 뚫기 위해 사용한 메쉬를 Sphere에서 Cylinder로 변경하여 배칭을 시도해봤지만, z-fighting 문제로 배칭처리가 되지않았다.

- 위의 문제도 있고, 두더지는 Skinned Mesh Renderer 컴포넌트를 갖고있어서 Dynamic batching 기능이 무의미하다고 판단함.

- 최종적으로 구멍 게임 오브젝트들은 움직이는 오브젝트들이 아니니 Static batching으로 변경하여 배칭처리를 했다.

 

 

 

 

 

반응형

'Game > Personal development' 카테고리의 다른 글

[Unity] 미로 게임 제작  (0) 2022.04.28
[Unity] 모바일 전략 시뮬레이션  (0) 2022.04.16
[WIN API] 서커스 찰리 게임  (0) 2022.02.05
[WIN API] 카드 맞추기 게임  (0) 2022.01.30
산성비 게임 제작 (C++)  (2) 2022.01.23
반응형

 

 

※해당 프로젝트는 3D 기능파악 및 최적화에 중점을 둔 프로젝트입니다.

 

 

 

 

제작기간

- 총 2일 (게임 제작 1일, 최적화 1일)

 

 

 

구현 내용

- UI

  • SafeArea를 적용하여 펀치홀 기종에 UI가 겹치지 않도록 조정
  • 커스텀 버튼을 구현하여 적용

- Game

  • 미로 생성 알고리즘 적용
  • 싱글톤(Manager class) 디자인 패턴 적용

 

 

 

최적화(배칭)

- UI

  • Sprite atlas 사용

- Game

  • Dynamic batching으로 Batches를 줄임
  • 캐릭터의 그림자를 Fake shadow로 대체
  • 카메라의 절두체 수치를 최대한 좁혀서 렌더링을 줄이고 절두체에 잘리는 끝부분은 Fog로 가려줘서 어색함을 줄임

 

 

 

Batches 수치 변화

- UI에서 2, 미로(벽, 천장, 바닥)에서 3, FakeShadow에서 1, 나머지는 유니티짱 모델에서 발생한다.

- 이번 프로젝트에서는 맵이 고정이 아닌 동적 오브젝트들이기 때문에 Dynamic batching을 사용해서 배칭처리를 했다.

 

 

 

 

 

반응형
반응형

 

 

 

 

배칭(Batching)

- 드로우콜을 줄이는 작업 (1개의 드로우콜이 1개의 배치가 되는데, 여러개의 배치를 하나로 묶어서 하나의 배치로 만드는 것을 배칭이라고 한다.)

 

 

 

스태틱 배칭(Static Batching)

- 정적(움직이지 않는) 오브젝트를 위한 배칭 기법.

- 주로 배경 오브젝트들에 사용되며 게임 오브젝트의 인스펙터 창에서 StaticBatching Static플래그를 활성화 시켜준다.

- 해당 플래그를 활성화하면 해당 게임 오브젝트는 이동, 회전, 스케일 조절이 되지 않는다.

- 스태틱 배칭은 다이나믹 배칭보다 효율적이다. (매 프레임마다 버텍스 연산을 수행하지 않기 때문이다.)

- 메시의 폴리곤 수 제한에 영향을 받지 않고 동일한 머티리얼을 사용하는 메시를 그릴 시, 드로우콜을 줄일 수 있다.

- 스태틱 배칭은 오브젝트들을 합쳐서 내부적으로 하나의 메시로 만들어주기 때문에 1개의 메시만 사용하더라도 해당 메시로 여러개의 오브젝트를 만들면 오브젝트들을 합친만큼의 추가 메모리가 필요하게된다.

- 이렇게 만들어진 메시를 GPU가 그대로 화면에 그리기 때문에 오브젝트마다 드로우콜을 거치지 않고 한번의 드로우콜로 처리되는 것이다.

- 스태틱 배칭 오브젝트들은 처음부터 씬에 존재해야한다.

- 런타임에 추가하게되면 StaticBatchingUtility.Combine() 메서드를 사용해야 배칭처리를 해준다.

 

 

 

다이나믹 배칭(Dynamic Batching)

- 동적으로 움직이는 오브젝트들끼리 배칭하는 기능

- 스태틱 배칭과 다르게 런타임상에서 배칭처리가 이루어진다.

- 다이나믹 배칭은 Batching Static 플래그가 활성화 되어있지 않은 오브젝트들이 대상이다.

- 동일한 머티리얼을 사용하고 특정 조건들을 만족하는 다이나믹 오브젝트들은 자동으로 배칭이 이루어진다.

- 배칭 처리는 엔진이 알아서 처리해주며, 별도의 추가 작업은 필요없다.

- Player settings에서 Dynamic batching플래그만 활성화시켜주면 된다.

- 다이나믹 오브젝트는 매 프레임 씬에서 Vertex들을 모아서 합쳐주는 과정을 거치고 다이나믹 배칭에 쓰이는 Vertex buffer와 Index buffer에 담으면 GPU는 이를 가져가서 렌더링한다.

- 이러한 과정을 거치기 때문에 다이나믹 배칭은 매 프레임마다 오버헤드가 발생한다.

 

 

 

다이나믹 배칭의 제약

  • Skinned Mesh에는 적용 불가

- 캐릭터의 경우 Skinned Mesh를 사용하는데 이러한 스키닝은 GPU나 SIMD(Single Instruction Multiple Data)에서 고속 연산을 수행한다.

- 이를 다이나믹 배칭으로 묶으면 CPU 연산효율이 떨어지기 때문에 다이나믹 배칭의 영향을 받지 않는다.

※※ 일반적으로 메시가 렌더링 될때에는 Vertex 쉐이더(GPU)에서 월드 스페이스로의 변환이 이루어지는데, 다이나믹 배칭은 이러한 연산이 CPU에서 이루어진다. 따라서, 이러한 연산이 드로우콜보다 더 많은 시간을 잡아먹게 되면 오히려 효율이 떨어지게 된다.

  • Vertex가 많은 메시는 배칭 대상에서 제외됨

- 다이나믹 배칭은 메시의 Vertex를 일일이 수집하여 연산하기 때문에 너무 많은 Vertex를 수집하게 되면, 오히려 오버헤드가 드로우콜의 비용보다 높아질 가능성이 있다.

- Position, Normal, UV를 사용하는 모델이라면 300이하의 Vertex를 가진 모델만 다이나믹 배칭 적용이 가능하다.

 

 

 

추가

- 특정 오브젝트의 배칭 오버헤드가 더 크다고 판단되면 해당 오브젝트가 배칭이 되지 않도록 쉐이더에서 강제설정이 가능하다.

SubShader{
    Tags { "DisableBatching" = "True" }
}

 

 

드로우 콜 배칭 - Unity 매뉴얼

드로우 콜 배칭은 Unity가 더 적은 드로우 콜로 렌더링할 수 있도록 메시를 결합한 드로우 콜 최적화 메서드입니다. Unity는 두 가지 빌트인 드로우 콜 배칭 메서드를 제공합니다.

docs.unity3d.com

 

 

 

 

반응형
반응형

 

 

 

 

내적

- '곱한다'는 뜻을 가지고 있다.

- 한 벡터(A)를 다른 벡터(B) 위로 정사영 시킨 길이와 다른 벡터(B) 길이의 곱이다.

- 내적의 결과는 스칼라(실수) 값이 나오게된다.

- 물체의 위치, 시야각, 빛 등에 사용된다.

- 기호는 •이며 dot(inner) product라고한다.

- 좀 더 자세한 설명은 다음 영상 참고 : https://youtu.be/IOf1o72aKDc

 

 

 

내적 공식

- 다음 그림을 기준으로 내적을 구해보자

1. 두 벡터의 각 성분끼리의 곱의 합으로 정의

2. 두 벡터가 이룬 사잇각(ʘ)으로 정의

 

※ 위의 두 정의에 따라 사잇각(ʘ)을 구할 수 있다.

cosʘ의 값이 0.8이라는것을 알았으니 2번 정의에 대입을 해보면 30 * 0.8 = 24가 되므로 1번과 2번의 결과값이 동일하다는 것을 알 수 있다.

 

 

 

각도를 알고싶으면 결과값 0.8을 역함수로 계산기를 돌려보면 각도를 얻을 수 있다.

 

 

 

 

 

반응형

+ Recent posts