구획 나눔을 통한 충돌 연산 최적화 연습

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
개요
-적과 탄환의 충돌 판정을 체크하는데 연산을 너무 많이 함
-적마다 현재 존재하는 모든 탄환에 대해 충돌 체크 연산을 시행
-부딫힐 가능성이 제로인 저 멀리 있는 탄환과도 연산을 시행하고 있음
-이에 따라 게임 공간을 구역(Cell)으로 나눠 적이 있는 구역과 인접한 구역에 있는 탄환하고만 충돌 연산을 시행하도록 변경함
-구역은 10x10, 총 100개 192x108크기로 나눠짐
-현재 적의 좌표에 속하는 Cell과 인접한 8개의 Cell내에 있는 탄환을 가져옴
-탄환은 컨테이너에서 매 Update마다 Cell에 미리 넣어둬 매 충돌마다 위치 체크를 하지 않도록 함
실험 환경
-최대 프레임 120으로 설정
-플레이어는 매 프레임마다 탄환을 발사
-적은 100마리 소환
-탄환은 적에게 적중하거나 발사후 3초가 지나면 사라짐
-적에게 계속 쏘는 상황과 적에게 적중하지 않고 옆으로 지나치는 상황 2개를 체크
기존 모든 탄환 충돌 연산
-적에게 계속 쏠때(탄환이 지워질때) 70~80 정도의 프레임 유지
-적중하지 않고 옆으로 지나치자 게임 내 탄환 개수가 급증해 30~40프레임까지 내려감


Cell 기반 탄환 충돌 연산
-적에게 계속 쏠때 100~110 정도의 프레임 유지
-적중하지 않고 옆으로 지나치자 70~80프레임으로 감소
-인접 Cell에 걸치지 않도록 완전히 빗나가게 쏘자 충돌 연산 틱이 감소하고 프레임이 소폭 개선됨



결과
-Tick 체크상 대략 연산량이 60~70% 정도 감소함
-특히 탄환이 빗나가 적과 전혀 접촉하지 않는 상황에서 큰 개선 폭을 보임(90% 이상)
-적이 한데 뭉쳐 구획을 나눈 의미가 약간 퇴색되는 상당히 특수한 환경에서 진행했기에 실제 게임 환경(탄환과 적이 고르게 퍼져있는)에서는 각 적들이 자기 인접 셀에 있는 탄환만 체크하여 좀 더 나은 효율을 보여 주리라 기대됨

PPU에서말하는 Units는 Gird타일의 한 칸을 의미합니다.

우리들의 게임 발매 이야기

안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.



안녕하세요. 플밍 4기 입니다. 게임 개발을 배우기 전 네트워크 엔지니어 도메인에서 익히고 배웠던 네트워크 이론에 대한 기초 입니다. 학습에 도움이 되길 바라며 공유 드립니다.