게임 프로그래밍의 스프라이트, 여러 파일 대 하나의 "텍스처"?

StackOverflow https://stackoverflow.com/questions/1452828

  •  12-09-2019
  •  | 
  •  

문제

게임 프로그래밍을 처음 접했기 때문에 내 링고가 올바르지 않으면 용서해주십시오. 나는 일부 오픈 소스 프로젝트를보고 있었고 일부 스프라이트가 여러 파일로 나뉘어져 있음을 알았으며, 모두 2D 객체를 애니메이션처럼 보이게하기 위해 함께 그룹화되어 있습니다. 그것은 간단합니다. 그런 다음 2D 객체를 하나의 PNG 파일 또는 비슷한 것과 함께 서로 옆에있는 다른 접근법을 볼 수 있습니다.

한 접근 방식을 다른 접근 방식으로 사용한다는 이점이 있습니까? 스프라이트는 별도의 파일에 있어야합니까? 왜 그들은 때때로 하나의 시트에 있는가?

도움이 되었습니까?

해결책

전자의 접근 방식은 일반적으로보다 간단하고 프로그램이 쉽기 때문에 오픈 소스 프로젝트에서 많은 것을 볼 수 있습니다.

두 번째 접근 방식은 최신 그래픽 하드웨어에서 더 효율적입니다. 다른 U, V 좌표를 지정하여 복합 시트에서 각 개별 스프라이트를 선택하여 하나의 큰 텍스처에서 여러 다른 스프라이트를 그릴 수 있기 때문입니다. u, v 좌표는 정점 데이터와 함께 셰이더로 스트리밍 할 수 있으므로 각 폴리의 텍스처 (셰이더 상태 변경을 의미하는)를 전환 해야하는 경우보다 훨씬 더 많은 스프라이트 그룹을 훨씬 더 효율적으로 그릴 수 있습니다. 즉, 밀리 초당 더 많은 스프라이트를 그릴 수 있으며 화면에서 더 많은 것을 얻을 수 있습니다.

다른 팁

현재 바인딩 텍스처를 전환 할 때마다 페널티가 발생합니다 (때로는 시스템이 메모리가 부족하여 텍스처를 제외하고 시작하면 매우 큰 것). 따라서 하나의 텍스처로 더 많이 그릴수록 더 잘 할 수 있습니다. 극단으로 이동하면 텍스처 바인딩을 전환 한 적이 없다면 0 페널티가 발생합니다.

반면에 비디오 카드는 텍스처의 최대 크기를 제한하므로 작은 텍스처를 큰 텍스처로 만 그룹화 할 수 있습니다. 카드가 오래 될수록 사용할 수있는 텍스처 크기가 작습니다. 따라서 다양한 카드로 게임을 만들려면 텍스처를보다 일반적인 크기로 제한해야합니다 (또는 다른 카드에 대해 다른 텍스처 세트가 있어야합니다).

또 다른 문제는 때때로 가상 세계의 물건이 이와 같이 그룹화되는 것과 관련이 없다는 것입니다. UI (창 프레임, 버튼 등)에 대한 모든 작은 장식으로 큰 질감을 가질 수 있지만 다른 적에 대해 단일 텍스처를 사용할 수있는 시간이 더 어려워 질 것입니다. 동시에 투명성에 필요한 연속 드로잉 체계로 인해 다른 사람을 따라 잡을 수 없을 수도 있습니다.

얼마 전까지 만해도 별도의 스프라이트 대신 포장 된 스프라이트를 사용해야하는 한 가지 이유는 그래픽 하드웨어가 두 가지 전력 텍스처 (256, 512, 1024, ...)로 제한 되었기 때문입니다. 따라서 업로드하기 전에 2 차원으로 모든 것을 확대해야하기 때문에 스프라이트를 포장하지 않음으로써 많은 양의 메모리를 낭비 할 것입니다. 여러 개의 스프라이트를 단일 텍스처로 포장하는 것이 그 주위에 효과가있었습니다.

또 다른 이유는 HD에서 하나의 큰 이미지 파일을로드하는 것이 훨씬 빠르기 때문에 수백 개의 작은 파일을로드하는 것이기 때문입니다. 파일 액세스에 파일 당 상당히 많은 오버 헤드가 제공되므로 파일이 더 빠를수록 더 빠를수록 파일 액세스가 많이 제공되므로 여전히 그렇습니다. 특히 작은 스프라이트를 사용하면 100 개의 파일을 하나의 파일로 쉽게 바꿀 수 있으므로 절약을 상당히 눈에 띄게 할 수 있습니다.

그러나 모든 것을 하나의 질감으로하는 것에 대한 이유도 있습니다. One OpenGL은 더 이상 두 가지 전력 텍스처에 국한되지 않으므로 모든 크기가 작동합니다. 그러나 더 중요한 것은 한 텍스처로 모든 것을 포장하는 것은 부작용이 부정적인 부작용이 있습니다. 예를 들어 게임에서 많은 스케일링이 있으면 스프라이트의 경계에주의를 기울여야합니다. 색상이 인접한 스프라이트에 혼합되어 추악한 인공물을 제공하기 때문입니다. 스프라이트 주위에 추가 공간을 추가하여 어느 정도 피할 수 있지만 완벽한 솔루션은 아닙니다. 한 질감에 모든 것을 갖는 것은 이미지로 할 수있는 일을 제한합니다. 예를 들어 폭포와 같은 특정 효과의 경우 텍스처의 UV 좌표를 오프셋하여 애니메이션을 수행 할 수 있습니다. 모든 것이 단일 텍스처로 포장 될 때 그렇게 쉽게 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top