게임 개발(25)
-
[ 개발 공부 ] Dynamic / Static Batching 최적화
Batching을 통해 최적화를 할 때 사용하는 방법들인Dynamic / Static Batching에 대해 알아보자 ! 3D 기준으로 설명한다. !2D 스프라이트 Batching은 Static/Dynamic 설정이 안 되어있더라도 자동으로 Batching된다. Static Batching정적인 오브젝트를 대상으로 하는 배칭 기법이다.위치, 회전, 스케일 등의 변화가 없는 오브젝트 스태틱 배칭은 폴리곤 수와 상관없이 같은 메테리얼을 사용하는 오브젝트들을 하나의 메시로 묶어준다.단, 메테리얼이 1개라고 해서 무조건 1개의 배치로 합쳐지지는 않는다. 빛 같은 요소로 인해 배칭이 나뉠 수 있다. 주의할 점메테리얼을 메모리에 올려놓고 사용하기 때문에 적은 메모리, 과도하게 많은 메모리를 사용할 때는 피해야 한다..
2024.05.21 -
[ 개발 공부 ] Unity Batching 개념
최근에 최적화 공부를 하며 배운 Unity Batching이다. 배칭( Batching )이란?드로우 콜을 줄이기 위해 동일한 메테리얼을 공유하는 오브젝트를 묶어 한 번에 드로우 콜해주는 작업이다. 유니티 오른쪽 위 스탯창을 열어보면 Batches라는 값과 SetPass Call이 있다.Batches라는 값이 무엇이냐면 DrawCall과 갖가지 렌더 상태 변경을 합한 값이다.Batches = Draw Call + 갖가지 렌더 상태 변경 근데 갖가지 렌더 상태 변경 중에는 Set Pass Call이 포함된다.Set Pass Call이 나뉘어져 Stat창에 표기되어 있는데 왜냐하면, Set Pass Call은 GPU에 부하를 주기 때문이다. 저 커맨드들은 GPU에 상태값을 전달하는 명령이라는 공통점이 있다..
2024.05.20 -
[ 개발 공부 ] Unity Coroutine의 동작 원리 및 특징
혹여나 틀린 점이 있다면 댓글로 피드백 해주시면 감사하겠습니다. > Unity Coroutine의 동작원리Key Point!어떻게 싱글 스레드로 비동기 방식을 구현하는가?어느 주기에 실행되는가?IEnumerator는 무엇인가?> 코루틴의 동작 원리 요약1. MonoBehaviour를 상속받은 스크립트에서 StartCoroutine으로 실행한다.2. StartCoroutine으로 실행된 IEnumerator 메서드는 yield return시 제어권한을 유니티에 반환한다.3. 이후 유니티 라이프 사이클에 있는 LateUpdate에서 yield return의 조건을 충족하는 지 확인한다.4. 조건이 충족된다면, 나머지 구문을 실행한다.이러한 동작을 우리는 코루틴이라고 부른다. + 정보제어권한은 유니티 내부에 ..
2024.05.17 -
[ 개발 공부 ] 싱글 스레드에서 비동기 방식을 구현하는 방법 in Unity Coroutine
이번에는 Unity Coroutine이 싱글 스레드에서 비동기 방식을 구현한 방법을 알아볼 것입니다. 이를 위해서는 IEnumerator에 대해서 알아야 할 필요가 있습니다.IEnumerator에 대해서 -> 링크 IEnumerator에 대해서 알고있다면, 어느 정도 감이 잡혔을 수도 있는데Unity Coroutine에서 StartCoroutine이 실행하는 메서드는 IEnumerator를 반환합니다.// 대충 클래스 내부private void Start(){ StartCoroutine(DoTest);}IEnumerator DoTest(){ yield return null; // 제어권을 옮기고 다음 LateUpdate부터 조건 체크, 조건이 Null이기에 다음 프레임에 다음 구문이 실..
2024.05.16 -
[ 개발 공부 ] IEnumerator, IEnumerable
IEnumerator는 다른 언어의 Iterator와 비슷한 역할을 하는 열거자입니다.IEnumerator를 알기 위해 IEnumerable부터 알아봅시다. IEnumerable은 인터페이스입니다.이 때 IEnumerable라는 인터페이스는 IEnumerator를 반환하는 GetEnumerator라는 메서드를 구현해야 합니다.public class SceneTitle : IEnumerable{ private string[] _titles = ["Intro", "Play", "Ending"]; // IEnumerable 인터페이스를 구현 public IEnumerator GetEnumerator() { for (int index = 0; index IEnumerable을..
2024.05.15 -
[ 개발 공부 ] 퀵 정렬 ( Quick Sort ) 방법
시간 복잡도: O( n log n ), 최악의 경우 O( n^2 ) > 퀵 정렬 방법하나의 배열에서 피벗 하나를 선택한다. ( 보통 맨 처음 인덱스 ) 선택한 피벗을 기준으로 두 개로 분할하고, 분할된 부분을 퀵 정렬한 다음, 두 개의 정렬된 부분을 합하여 전체가 정렬된 배열이 되게 한다. > 과정퀵 정렬은 다음의 단계들로 이루어진다.분할(Divide): 입력 배열을 선택한 피벗을 기준으로 비균등하게 2개의 부분 배열(피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽: 피벗보다 큰 요소들)로 분할한다.정복(Conquer): 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 순환 호출 을 이용하여 다시 분할 정복 방법을 적용한다.결합(Combine): 정렬된 부분 배열들을 하나의 배열에 합..
2024.05.14