2의 거듭 제곱이 아닌 텍스처를 사용해야합니까?


40

OpenGL과 DirectX의 초기에는 텍스처 크기가 2의 거듭 제곱이어야했습니다. 이것은 플로팅 값의 보간이 쉬프팅 등을 사용하여 매우 빠르게 수행 될 수 있음을 의미했습니다.

OpenGL 2.0 이후 (그리고 그 확장을 통해) 2의 거듭 제곱이 아닌 텍스처 크기가 지원되었습니다.

2 개 파워의 텍스처가 최신 통합 및 개별 GPU에서 성능 이점이 있습니까? 2의 제곱이 아닌 텍스처의 장점은 무엇입니까?

많은 데스크탑 인구가 2의 제곱이 아닌 텍스처를 지원하는 카드를 가지고 있습니까?


비슷한 질문에 대한이 훌륭한 답변을보십시오. 왜 iPhone의 텍스처 이미지가 2의 거듭 제곱을 가져야합니까?
Dvole

답변:


15

현대식 통합 및 이산 GPU에서 2의 거듭 제곱을 고수 할 때 성능 이점이 있습니까?

최신 GPU의 대부분은 NPOT (non-power of two) 텍스처를 지원하고 잘 처리합니다. 성능 저하는 거의 없습니다. 그러나 고려해야 할 몇 가지 문제가 있습니다.

  • NPOT 텍스처를 사용하면 다음 크기의 POT 텍스처와 같이 RAM에서 더 많은 공간을 차지합니다. 기술적으로 당신은 무언가를 넣을 수있는 공간을 낭비합니다.

  • NPOT 텍스처는 다음 크기의 POT에 비해 눈에 띄게 느리게 처리 될 수 있습니다 (OpenGL 2.1에서는 성능이 최대 30 % 떨어졌습니다).

  • 구형 GPU와 온보드 / 온칩 GPU는 그다지 진보되지 않았으며, NPOT 텍스처를 지원하지만, 지원 속도는 느리고 서투 릅니다.

  • 구형 GPU조차도 NPOT 텍스처를 전혀 수락 / 표시하지 않을 수 있습니다.

  • 밉맵 보간으로 인해 가장자리가 아티팩트가있을 수 있습니다. 25x25 텍스처에는 픽셀이 32x32 크기로 채워지도록 검은 색 프린지가있을 수 있습니다.

추신 : 나는 모바일 장치에 대해 잘 모르겠다 .POT 텍스처와 관련하여 더 많은 제한이있을 수 있습니다.

2의 제곱이 아닌 텍스처는 어떤 장점이 있습니까?

내가 아는 한 두 가지 장점 만 있습니다.

  • 포장되지 않은 경우 HDD의 공간을 덜 차지합니다 (빈 공간이 채워진 경우 추가 량이 거의 없음)
  • NPOT-> POT 변환기 작성 시간을 절약 할 수 있습니다. 릴리스 버전에는 하나가 필요하지만 인터페이스 / 모델을 디자인하고 프로토 타이핑하기 위해 NPOT 텍스처를 사용하는 것은 좋습니다.

2의 제곱이 아닌 텍스처를 지원하는 카드가없는 많은 데스크탑 사용자가 있습니까?

내가 알고 PC에서 테스트 한 한-네. 여기에는 속도 저하 / 사소한 버그 GPU의 상당 부분과 NPOT를 전혀 처리하지 않는 소수의 카드가 포함됩니다.


6

2의 제곱이 아닌 텍스처를 사용하는 한 가지 일반적인 용도는 후 처리 효과에 사용되는 '스크린 크기'또는 '반 스크린 크기'등의 대상 텍스처를 렌더링하는 것입니다.

이 경우 밉맵이 필요하지 않고 버퍼가 항상 압축되지 않으므로 텍스처 크기가 홀수이면 문제가 줄어 듭니다.


4

구형 하드웨어의 NPOT 텍스처에는 제한이있었습니다. 이 OpenGL 위키 에서 언급했듯이 일부 구형 하드웨어에는 NPOT에 밉맵이 없어야하고 압축 텍스처에는 4x4 픽셀의 정렬이 필요하지만 새 하드웨어에서는 완벽하게 처리해야합니다.

내 경험에 따르면 POT 대신 NPOT 텍스처를 사용하면 비교적 새로운 하드웨어조차도 성능이 크게 저하됩니다. 문제가 무엇인지 모르겠습니다. 렌더링 상태의 일부 조합에서 렌더링은 실제로 소프트웨어로 수행 될 수 있습니다. 따라서 충분한 이유가 없으면 가능한 한 POT을 계속 사용하는 것이 좋습니다.

POT 대신 NPOT를 사용하는 이유-예를 들어 1600x1200과 같이 NPOT 크기의 이미지가있는 경우 2048x2048 픽셀 표면을 사용하면 많은 비디오 메모리가 낭비됩니다.


3
메모리에서 압축 된 텍스처 형식 (예 : PVR 또는 DXT)을 사용하는 경우, 2의 다음 거듭 제곱으로 확장하면 압축되지 않은 작은 NPOT 텍스처보다 훨씬 적은 텍스처 메모리가 사용됩니다.
Tetrad

3
표현이 약간 모호하므로, 말하려는 것과 중복되는 경우 죄송합니다. NPOT 텍스처를 지원하는 최신 하드웨어에서도 압축 된 텍스처에는 여전히 4의 배수로 픽셀 크기가 필요합니다.

1
현재 하드웨어를 업로드 할 때 드라이버에서 타일링 / 스위 즐링 텍스처가 계속 유지 될 것으로 예상합니다. 이렇게하면 텍스처 레이아웃이 변경되어 하드웨어에보다 최적으로 액세스 할 수 있습니다. 콘솔 (내가 XNA를 포함하지 않음)을 사용하려면 자신의 툴 체인에서 수동 으로이 레이아웃 최적화를 수행해야합니다 .POW2에서만 작동한다고 확신합니다.
Roger Perkins

-1

2 텍스처의 성능은 구형 GPU뿐만 아니라 모든 GPU 유형에 대해 약 30 %의 성능을 향상시킵니다 (30 % 더 빠르면 하이 엔드 GPU와 평균 GPU의 차이). 특정 거리에 적합한 텍스처 크기를 제공하여 텍스처에 대한 앨리어싱 제거와 같이 작동합니다. 다크 라인 아티팩트는 게임 엔진에 의해 처리되어야하며 aaa 엔진은 잘 처리됩니다.


이것은 단지 당신이 사용하는 것이 왜 문제 자체가 해결되지 않는, 전원의 - 두 개의 텍스처의 (이미 지정) 이점을 제공 위의 장점 주어진 - 전원 - 중 - 두 개의 텍스처.
Josh

미안 해요 당신이 등은 아마이 주된 이유입니다, 2048, 1024, 512로 제한됩니다 2의 힘으로, 질문을 오해
유세프 ghatavi

도 2의 비 전력은 항상 가까운 카메라되도록 GUI 질감과 첫 번째 사람이 문자에 대한 질감으로 밉맵을 필요로하지 않는다 질감에 유용
유세프 ghatavi

-3

저의 프로그래머 아트는 정확한 크기입니다.

화면의 왼쪽 상단에 텍스처를 설정하려는 경우 텍스처의 왼쪽 상단으로 0,0을 설정 하고 올바른 위치에서 모든 텍스처를 볼 수 있음을 알기 위해 디스플레이 로직을 단순화 합니다 . 0alpha 패딩을 추가 해야하는 경우 화면 가장자리에 텍스처를 배치하는 것이 더 복잡합니다. 물론, 0alpha는 여전히 알파 블렌딩되어야하고, 불투명 한 텍스처를보고 있다면 알파 채널이없는 것이 좋습니다.


6
일반적으로 하나는 텍스처가 아닌 다각형을 화면에 배치합니다. 다각형에는 필요한 UV를 지정할 수 있습니다. 반드시 0에서 1로 갈 필요는 없습니다. 텍스처의 너비가 30 개에 불과한 경우 0.9375로 이동하는 것이 좋습니다 (POT 텍스처가 좋은 또 다른 이유-UV를 정확하게 표현할 수 있음).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.