약한 iGPU에서 400 FPS를 뽑아낸 소프트웨어 오클루전 컬링

Software occlusion culling in Block Game

약한 iGPU에서 400 FPS를 뽑아낸 소프트웨어 오클루전 컬링

개발자는 AMD Ryzen 7 5700G의 내장 Radeon Vega 8 GPU를 사용하는 약한 워크스테이션에서 Block Game의 성능을 끌어올리기 위해 CPU 기반 소프트웨어 오클루전 컬링을 직접 구현했다. 256x128 해상도의 깊이 버퍼에 큐브를 렌더링하고, 청크를 5단계 서브청크로 나눠 오클루더를 수집한 뒤 백그라운드 스레드에서 컬링을 수행한다. 그 결과 지형에 따라 50~95%의 청크를 제거하며, 동굴 안에서는 400 FPS 이상을 달성했다.

동굴 안이나 지하에서는 청크의 95% 이상을 컬링해서, 약한 시스템에서도 400 FPS 이상의 프레임률을 얻을 수 있다.
  1. Pannoniae

    좋은 글 잘 봤습니다 :) 네, 이건 기본적으로 CPU와 GPU 성능 간의 트레이드오프죠. 컬링에는 여러 종류가 있습니다. backface culling(하드웨어에서 지원, 카메라 반대쪽을 향한 삼각형은 렌더링하지 않음)이나 frustum culling(카메라에 보이지 않는 오브젝트는 렌더링하지 않음) 같은 기본적인 것들이 있죠. 이런 건 거의 모든 게임에서 사용됩니다.

    오클루전 컬링은 좀 더 까다로운데, CPU에서 크게 두 가지 방식으로 할 수 있습니다. 글에서처럼 CPU에서 저해상도 레이캐스팅/소프트웨어 렌더링을 하고 그걸 기반으로 컬링하는 방식이죠. 이건 적응형 작업량이라 스레드나 CPU 성능을 더 주면 더 나은 컬링으로 확장되어 GPU에서 렌더링되는 픽셀이 줄어듭니다.

    GPU 컬링을 사용할 수도 있지만 그건 구현이 더 복잡하고 GPU를 사용하기 때문에 딜레마가 생깁니다 - GPU 부하를 줄이려고 GPU 컬링을 쓰고 싶지만, 통합 GPU는 컴퓨트 셰이더와 메모리 대역폭을 전반적으로 잘 감당하지 못해서 컬링 패스를 한 번 돌리면 얻을 수 있는 컬링 이득을 다 날려버릴 수도 있습니다.

    그리고 전용 GPU는 frustum 안의 모든 것을 그냥 제출하고 대부분을 깊이 테스트로 걸러낼 수 있는 원시 성능과 메모리 대역폭을 갖추고 있죠.

    CPU에서 연결 그래프를 만드는 게 더 빠를지도 궁금하네요. 각 청크가 이웃이 보이는지 서로 아는 식으로요. 렌더링할 때 청크 그래프를 순회하면서 보이는 청크를 제출하는, 일종의 원시 가비지 컬렉터로 생존 여부를 판단하는 거죠. 컬링 품질은 더 나빠지겠지만 아마도 […]

  2. throwaway2046

    https://archive.today/WCg6q

  3. keyle

    와, HN에 기술 글이네. 무슨 일이야. 2022년으로 돌아온 건가? /s

이 날의 다른 글

2026-09-29