내일배움캠프 Unity 79일차 TIL - 팀 9와 4분의 3 - 개발일지

Wooooo·2024년 2월 19일
0

내일배움캠프Unity

목록 보기
81/94

[오늘의 키워드]

청크의 생성을 병렬로 처리해보기 위해 Job System 관련 자료를 찾아봤다.


[Job System]

Job System이란 유니티에서 멀티 스레드를 안전하게 사용할 수 있도록 제공해주는 기법이다.

유니티에서 메인 스레드를 제외한 다른 스레드는 메인 로직의 객체에는 접근할 수 없도록 막혀있다.
게임에서 멀티 스레드 사용 시 교착상태나 하나의 데이터를 여러 스레드에서 변경하는 경우 등을 방지하기 위해 막아둔 것 같다.

유니티는 CPU의 코어마다 워커 스레드를 할당한다. Job System을 이용하면 워커 스레드에 일을 하도록 명령을 할 수 있다.

Job System에서는 값 타입을 제외한 모든 참조타입을 사용할 수 없다.
단, IJobParallelForTransform이라는 인터페이스를 사용하면, Transform 타입을 한정해서 접근할 수 있다.

배열과 같은 컬렉션의 경우, Native라는 컬렉션을 제공한다. 이를 통해서 안전하게 컬렉션에 접근할 수 있도록 해준다.

  • NativeArray, NativeList, NativeHashMap, NativeQueue 등 . . .

[Job 인터페이스]

IJob

  • 1개의 Job에 1개의 작업을 할당할 때 사용
  • Execute() 메서드를 구현해야함

IJobParallelFor

  • NativeArray를 이용해 배열 데이터 처리
  • Execute(int index) 메서드를 구현해야함

IJobParallelForTransform

  • TransformAccess 구조체를 이용해 참조 타입인 Tranform에 접근 가능
  • Execute(int index, TransformAccess transform) 메서드를 구현해야함

[고민]

현재 프로젝트에는 약 70만개의 블럭 데이터와 약 2,000개의 청크가 존재한다.

갯수를 보면 IJobParallelFor을 사용하는게 빠를 것 같다는 튜터님의 의견도 있었고, 나도 그게 더 빠를 것 같다.

하지만 이걸 어떻게 적용해야할지 ,,, 그게 좀 어렵다.

단순히 IJob을 이용한다면 어떻게든 적용할 수 있을 것 같긴한데, IJobParallelFor은 아직 제대로 이해를 못한 것 같다.

청크는 자신이 생성해야할 블럭의 수, 청크가 생성해야할 mesh의 vertices와 triangles의 수가 다 다르기 때문에 IJobParallelFor를 어떻게 적용해야할지가 많이 어렵다.

profile
game developer

0개의 댓글