KakaoTalk_20210610_221210492.jpg

👨🏻‍💻 몰입할 줄 아는 개발자 박진혁입니다.

📧 Contact: [email protected]

🌐 Github: https://github.com/criel2019


e4e2af_131477f3efbe46328068c1c9853edbed_mv2.jpg

Yesterday is History, Tomorrow is a Mystery, but Today is a gift

위의 대사는 영화 <쿵푸팬더>에서 “우그웨이”라는 캐릭터가 주인공 “포”에게 한 말입니다.

저는 쿵푸팬더를 70회 이상 시청했을 정도로 이 영화를 좋아합니다. 그런 제가 쿵푸팬더에서 가장 인상 깊었던 장면을 꼽으라면 위에서 언급한 대사가 나온 장면일 겁니다.

지나간 일은 역사가 되고, 미래는 아직 알 수 없으니 과거와 미래를 너무 걱정하지 말고 자신에게 주어진 오늘을 소중히하라는 이 격언은 저에게 있어 깊은 인상을 안겨줬습니다. 이러한 격언에 따라 저는 현재에 몰입하여 살아가는 것으로 과거에 연연하지 않으며, 미래를 겁내지 않고, 현재를 소중히 하도록 노력하고 있습니다.

이력서


경력 기술


풀 렌더링 최적화

  1. 필요성
    1. 풀은 게임의 진행과는 거의 관련이 없지만 퀄리티에 큰 차이를 주는 중요한 작업이다. 문제는 풀을 렌더링하게 되면 인스턴스가 조금만 많아져도 많은 부하를 가지고 오기 때문에 이를 최적화할 필요성이 있었다.
  2. 해결방법
    1. 유니티에서 제공하는 DrawMeshInstancedIndirect라는 API를 통해서 드로우콜을 직접 관리하는 방법을 통해서 GPU Instancing(Procedural instancing)을 통해 많은 인스턴스를 그림자를 포함하여 10번이 안되는 드로우콜로 처리를 할 수 있었음.
    2. 인스턴스가 많아지게 되면 그림자에 대한 부하도 커지는데 멀리있는 풀에 대해서도 그림자를 항상 업데이트 해줄 필요가 적어서 유니티 쉐도우맵 시스템에서 쉐도우 맵을 커스텀으로 생성하고 해당 부분을 기존 쉐도우 맵 대신 캐싱해서 사용하는 것으로 성능을 아낄 수 있었음.
    3. LOD에 따라서 빌보드 처리, 바람 기능, 거리에 따른 컬링, 프러스트럼 컬링 들을 GPU 단에서 처리할 수 있게 컴퓨트 쉐이더, Vertex/Fragment shader를 통해서 작업하여 빠르게 처리할 수 있게 하였음.
  3. 이 작업으로 얻을 수 있는 메리트
    1. 그림자를 렌더링할 때와 LOD에 따라 달라지는 마테리얼을 제외하면 랜더 스테이트를 변화시키지 않기 때문에 다른 방법들에 비해서 압도적으로 많은 배칭으로 드로우콜을 아낄 수 있으며 일반적인 어셋을 구매해서 사용할때는 커스텀이 불가능한 경우가 있는데 직접 구현하였기 때문에 필요에 따라서 커스텀도 할 수 있음
    2. GPGPU를 이용하여 렌더링하기 때문에 비교적 간단한(분기가 일어나지 않는) 작업을 GPU로 옮겨서 계산하기 때문에 풀 이외에 CPU에서 발생하게될 부하를 상당부분 아낄 수 있음

게임 데이터 로딩 최적화