post-custom-banner

확인 문제

1. 메모리 최적화 방법에 대해 알고 있는 것이 있나요?

  1. POT(Power of Two) 텍스쳐에 대해 설명해주세요.

내 답:
POT 텍스쳐는 가로와 세로의 길이가 2의 거듭제곱인 텍스쳐를 의미합니다. 예를 들어, 256x256, 512x512와 같은 크기입니다. 이러한 형식의 텍스쳐는 그래픽 처리 장치(GPU)에서 더 효율적으로 처리될 수 있습니다. 비POT 텍스쳐에 비해 메모리 사용량을 줄이고, 로딩 시간을 단축시키며, 렌더링 성능을 향상시킬 수 있습니다.

모범 답:

  1. 아틀라스에 대해 설명해주세요.

내 답:
아틀라스는 여러 개의 작은 텍스쳐를 하나의 큰 텍스쳐로 합치는 기법입니다. 이 방법을 사용하면 드로우콜을 줄일 수 있으며, 텍스쳐를 교체하는 데 드는 비용을 절감할 수 있습니다. 아틀라스를 사용함으로써 메모리 사용량을 최적화하고, 렌더링 성능을 향상시킬 수 있습니다.

모범 답:

  1. 오브젝트 풀에 대해 설명해주세요.
    내 답:
    오브젝트 풀은 게임에서 자주 사용되는 오브젝트를 미리 생성해두고 필요할 때마다 재사용하는 기법입니다. 이 방법은 오브젝트를 생성하고 파괴하는 데 드는 비용을 줄여주며, 가비지 컬렉션(GC) 발생 빈도를 감소시켜 성능을 향상시킬 수 있습니다. 오브젝트 풀을 사용함으로써 메모리 사용을 최적화하고, 게임의 프레임률을 안정화시킬 수 있습니다.

모범 답:

2. Unity 내에서 드로우콜을 확인할 수 있나요? 어떤 방법을 통해 확인할 수 있을까요?

  1. 배치는 무엇이고 Set Pass Call은 무엇인가요?

내 답:
드로우콜을 확인하기 위해서는 Unity의 프레임 디버거를 사용할 수 있습니다. 프레임 디버거를 통해 현재 장면에서 발생하는 드로우콜의 수와 세부 정보를 확인할 수 있습니다.

모범 답:

3. Unity 프로파일러란 무엇이며 어떻게 사용하나요?

내 답:
Unity 프로파일러는 Unity 애플리케이션의 성능을 분석하고 최적화하는 데 사용되는 도구입니다. CPU 사용량, 메모리 사용량, 드로우콜 수, 네트워크 트래픽 등 다양한 성능 지표를 실시간으로 모니터링할 수 있습니다.
프로파일러를 사용하려면 Unity 에디터의 상단 메뉴에서 Window > Analysis > Profiler를 선택합니다. 프로파일러 창이 열리면, Record 버튼을 클릭하여 애플리케이션의 성능 데이터를 수집하기 시작합니다. 수집된 데이터는 여러 탭으로 구분되어 표시되며, 각 탭에서 세부적인 성능 분석을 진행할 수 있습니다.

모범 답:

설명 문제

1. 유니티 최적화 기법은 어떤 것들이 있나요?

  • 최적화를 해본 적이 있나요? 없다면 어떤 최적화가 있는지 설명해주세요.
    내 답:
    배치 처리: 비슷한 렌더링 설정을 가진 여러 객체를 하나의 드로우콜로 묶어 처리합니다.
    텍스쳐 압축 및 최적화: 텍스쳐의 해상도와 포맷을 최적화하여 메모리 사용량과 로딩 시간을 줄입니다.

모범 답:

  • 최적화에서 가장 중요한 부분은 무엇인가요?
    내 답:
    최적화에서 가장 중요한 부분은 프로젝트의 요구 사항과 특성에 따라 다릅니다. 하지만 일반적으로 성능 병목 현상을 일으키는 요소를 식별하고 개선하는 것이 중요합니다. 예를 들어, 높은 드로우콜 수, 비효율적인 메모리 사용, CPU와 GPU 사이의 균형 문제 등이 있습니다.

모범 답:

  • 최적화를 위해서 적용해본 텍스쳐 포맷이 있나요?
    내 답:

모범 답:

2. 드로우콜에 대해서 설명하고, 최적화하는 방식에 대해 알고 있는 것이 있으면 설명하세요.

내 답:
드로우콜은 GPU에 전송되는 렌더링 명령의 수를 의미합니다. 드로우콜 수를 줄이는 것은 성능 최적화의 핵심 요소 중 하나입니다.
• 배치 처리: 비슷한 렌더링 속성을 가진 메시를 하나의 드로우콜로 묶어 처리합니다.
• 아틀라스 사용: 여러 텍스쳐를 하나의 큰 텍스쳐로 합쳐서 텍스쳐 교체를 줄입니다.
• 동적 배치: 런타임에 객체를 동적으로 배치하여 드로우콜을 줄입니다.

모범 답:

3. Find 함수 사용을 자제해야 하는 이유에 대해 설명해주세요.

내 답:
Find 함수와 같은 이름 또는 태그를 기반으로 하는 검색 함수는 실행 시간이 오래 걸리고, 성능에 부정적인 영향을 줄 수 있습니다. 특히, Update 함수 내에서 이러한 검색 함수를 사용하는 것은 매 프레임마다 불필요한 검색을 수행하게 되어 성능 저하를 일으킬 수 있습니다.

모범 답:

4. Update에서 GetComponent와 그 계열의 캐싱을 지양해야하는 이유를 설명하세요.

내 답:
GetComponent와 같은 컴포넌트 검색 함수는 비용이 많이 드는 연산입니다. Update 함수와 같이 매 프레임 호출되는 함수 내에서 GetComponent를 사용하면, 매 프레임마다 비용이 많이 드는 검색을 수행하게 되어 성능 저하를 일으킬 수 있습니다. 따라서, 가능하다면 시작 시점에 한 번 검색하여 결과를 캐싱해두고, 이후에는 캐싱된 값을 사용하는 것이 좋습니다.

모범 답:

실습 문제

[드로우콜 줄여보기]
패키지를 받아 GrassScene에 들어가보면,
풀밭이 있는 것을 확인할 수 있습니다.

현재 이 상태로는 Grass 오브젝트가 너무 많아 성능 저하가 발생하고 있습니다.

(참고 : 다음의 Statistics 창은 Unity 에디터 내 게임 뷰 우측 상단 [Stats] 버튼을 눌러 확인 가능)

1. Grass 오브젝트가 움직이지 않고 있다는 점을 이용하여
Batches를 줄여 프레임을 개선해보세요.

어떻게 했는지 제출답안에 적어주세요.

2. 모든 Grass가 같은 머테리얼과 메쉬를 공유하고 있다는 점을 이용하여
Batches를 줄여 프레임을 개선해보세요.

어떻게 했는지 제출답안에 적어주세요.

3. 1번 방법과 2번 방법의 성능 차이와 어느 상황에 사용하면 좋을 지를 생각하여 서술해주세요.

(Hint : 씬의 GrassSpawner가 아닌 RotatingGrassSpawner를 활성화 시켜 실습해봅시다.

아래와 같이 모든 Grass 오브젝트가 빙글빙글 돌아갈 때는 1번과 2번 방법 중 어느 것을 사용해야 할까요?)

profile
스터디 로그
post-custom-banner

0개의 댓글