Loading
2023. 2. 19. 22:59 - lazykuna

[번역] 게임을 최적화하며 느낀 점들

시작하기 앞서: 아래는 제가 쓴 글이 아닙니다. 이 글은 "ryg" Giesen 님의 포스트에서 발췌해 온 것임을 알립니다. 모든 연관된 글의 저작권은 ryg 님께 있음을 알립니다.

Optimizing Software Occlusion Culling – index | The ryg blog (wordpress.com)

 

Optimizing Software Occlusion Culling – index

In January of 2013, some nice folks at Intel released a Software Occlusion Culling demo with full source code. I spent about two weekends playing around with the code, and after realizing that it m…

fgiesen.wordpress.com

해당 글은 Intel의 데모 "Software Occlusion Culling" 의 코드를 ryg님이 파헤쳐 보고, 재미있는 점들을 정리해두신 것입니다. 역시 RAD 게임 툴 개발자 분 답게 깊이있는 통찰이 엿보이는 글들이 많습니다.

* Occlusion Culling: 차폐 컬링이라는 용어로, 게임 렌더링 씬에서 보이지 않는 영역을 렌더링하지 않도록 하여 최적화 하는 기법을 의미합니다.

대충 Software Occlusion Culling 데모 실행 예

  • 읽기-쓰기가 혼재한 메모리에서 가급적 읽지 말 것
  • std::string 잘 쓰기
  • 코어는 공유하기를 싫어한다 (OoO pipeline panic 시 퍼포먼스 이슈)
  • 멤버 순서 변경으로 캐시 최적화하기 (근데 이건 compiler단에서 안 해주나?)
  • Triangle rasterization 기본과 최적화
  • Worker thread 효율을 높여보자
  • 이외 자잘한 것들...

읽고 있는데 정말 흥미로운 것들이 많습니다. 특히 Low level단의 구현이나 최적화에 대해서 재미있는 것들이 많은데, rasterization 방법이나 Intel's panic mode와 같은 것들입니다. 이런 내용들은 컴구 같은 전공과목에서 다뤄지긴 하지만, 실제 어떻게 영향을 미치는 사례를 알기 쉽지 않기 때문에 더 흥미롭습니다.

글쓴이도 이 글을 쓸 때 알고리즘이나 기초 설계와 같이 큰 변화를 주지 않고도 성능을 향상시킬 수 있는 여러 기법이 있음을 알리기 위해서 글을 썼다고 합니다. 하지만 역시 최대한의 성능을 내기 위해 가장 중요한 것은, 올바른 알고리즘과 자료구조를 적재적소에 사용하는 것임을 잊지 맙시다.

나중에 각 글들을 읽고 난 후, 적당히 정리해서 별도 포스팅으로 올려볼 생각입니다.