GPU 스프라이트 컬링 설정
이 문서는 GPU에서 스프라이트와 타일 맵의 컬링을 설정하는 함수인 gpu_set_sprite_cull
에 대해 설명합니다. 기본적으로 이 기능은 활성화되어 있습니다.
스프라이트 컬링이란?
스프라이트 컬링은 CPU가 뷰 프러스텀(view frustum)과 비교하여 스프라이트가 화면에 보이는지 여부를 판단하는 과정입니다. 만약 스프라이트가 화면 밖에 완전히 위치한다면, 해당 스프라이트는 GPU에 제출되지 않고 그려지지 않습니다. 이 기능은 수동으로 draw_sprite_*
함수를 사용하여 그려지는 모든 스프라이트에 적용됩니다.
타일 맵 컬링
타일 맵은 스프라이트와 다르게 컬링됩니다. 타일 맵에서 그려지는 타일은 방의 경계와 뷰포트 사각형의 교차점으로 정의된 사각형 안에 있는 타일만 그려집니다.
뷰 프러스텀
뷰 프러스텀은 카메라가 보는 게임 세계의 영역입니다. 카메라의 위치와 방향, 그리고 설정된 프로젝션에 따라 결정됩니다. - 정투영 프로젝션: 박스 형태 - 원근 프로젝션: 잘린 피라미드 형태
카메라 뷰 밖에 완전히 위치한 스프라이트는 컬링되어 GPU에 제출되지 않습니다.
스프라이트 가시성 판단
GameMaker는 스프라이트 주위에 구를 계산하고 이 구가 뷰 프러스텀 안에 있는지 확인하여 스프라이트의 가시성을 판단합니다. 만약 구가 완전히 밖에 있다면, 스프라이트도 밖에 있다고 판단하여 컬링됩니다.
함수 문법
gpu_set_sprite_cull(enable);
인자 설명
인자 | 타입 | 설명 |
---|---|---|
enable | Boolean | 스프라이트 컬링을 전역적으로 활성화할지 여부 |
반환 값
- N/A
예제
아래 코드는 객체의 생성 이벤트에서 스프라이트 프러스텀 컬링을 활성화하는 예제입니다.
gpu_set_sprite_cull(true);
활용 예제
- 스프라이트 컬링 비활성화
gml gpu_set_sprite_cull(false);
- 게임 시작 시 컬링 설정
gml if (game_start) { gpu_set_sprite_cull(true); }
- 특정 조건에서 컬링 변경
gml if (player_health < 50) { gpu_set_sprite_cull(false); } else { gpu_set_sprite_cull(true); }
- 레벨 로딩 시 컬링 설정
gml function load_level(level) { gpu_set_sprite_cull(true); // 레벨 로딩 코드 }
- 게임 종료 시 컬링 비활성화
gml function end_game() { gpu_set_sprite_cull(false); // 게임 종료 코드 }