텍스처링을위한 최고의 이미지


13

자, 저는 OpenGL과 함께 C ++을 사용하고 있으며 3D 게임의 텍스처에로드 할 로더를 만들 것입니다. (그러나 텍스처는 2D입니다). 사용하지 않기로 결정하더라도 투명 옵션을 원합니다. 최고 수준 일 필요는 없지만 괜찮은 품질이 필요합니다. 당신은 형식 (PNG, TGA 등)에 대해 무엇을 제안합니까? 또한 로더를 쉽게 만들 수있는 것으로 만들 수 있습니다 (이미 작성된 것을 사용하지는 않을 것입니다). 또한 로더에 도움이되는 링크 / 팁이 있다면 감사하겠습니다.

답변:


15

기성품 로더를 사용하고 싶지 않은 이유를 이해하지 못합니다. 예를 들어 PNG 는 형식에 적합한 선택이지만 범용 로더를 작성하기에는 복잡합니다 (관심있는 PNG 형식의 특정 하위 집합 만로드하는 노력은 가치가 없습니다).

다소 특이한 요구 사항을 감안할 때 TGA 가 가장 좋은 방법 일 것입니다. TGA 2.0에는 알파 채널이 있으며 PNG에 비해 비교적 간단합니다.


3
OP가 직접 작성하려는 경우 TGA에 +1 내 TGA 로더를 한 번 작성했습니다. 너무 빠르고 고통스럽지 않습니다.
공산주의 오리

4
@ 덕 : 압축이나 멋진 기능없이 간단한 TGA를 수행하는 한 무통입니다. 완벽하게 호환되는 TGA 로더를 원한다면 약간의 고통을 발견했습니다. 이상한 형식입니다.
ZorbaTHut

1
@ 조바, 압축이 충분히 쉽습니다. 그것은 당신이 확장에 대한 관심 여부입니다.
감속

10

이미지 텍스처 형식도 성능 선택입니다. 압축 텍스처를 가능한 많이 사용하는 것이 좋습니다. 모바일 플랫폼에서는 성능 (40 % 이상), 메모리 사용량 및 시간로드를 크게 향상시킬 수 있습니다.

텍스처 1024 * 1024를 고려하십시오.

  • RGB 또는 RGBA (16 비트) : 2Mo (SGS에로드하는 0.5 초)
  • RGBA (32 비트) : 4Mo (SGS에로드하는 1 초)
  • PVRT (4bpp) : 512ko (SGS에로드하는 경우 125 초)
  • ETC1 + Alpha : 1.5Mo (SGS에로드하는 0.4 초)

게임에는 다양한 형식의 자산 (텍스처)이 있습니다.

  • DXTC 텍스처 용 DDS 형식 (데스크탑 플랫폼 : OS X, Linux, Windows & Tegra)
  • ATC 텍스처 (Andreno GPU) 용 DDS 형식
  • PVRT 형식의 PVR 형식 (PowerVR GPU)
  • ETC1 텍스처를위한 PKM 형식 (모든 OGLES 2.0 장치 호환)

마지막으로 호환성을 위해 원시 형식을 사용하지만 호환성 또는 GUI 요소를위한 것입니다.

  • 텍스쳐를위한 PNG 형식. RGBA 16, 24 또는 32 비트 텍스처 용입니다 (MIT 라이센스 로더 사용). 압축되지 않은 텍스처입니다.

ETC1 텍스처에는 알파 채널이 없으므로 두 텍스처 (rgb 텍스처 및 알파 텍스처)가있는 특수 셰이더를 사용합니다. 압축 형식은로드하기 매우 쉽습니다 (100 또는 200 위치).

데스크탑에서는 DXTC (S3TC)가 많은 카드에 있습니다. 그래서 당신은 그것을 사용해야합니다.

압축 텍스처

찬성

  • 텍스처 필 레이트 개선
  • 텍스처 로딩 (4x 이상)
  • 쉽게로드

범죄자

  • 모든 플랫폼에서 지원되지는 않습니다
  • 유물

6
비디오 카드에 압축 된 텍스처 (예 : DXTC)와 저장 중 압축되어 있고로드하는 동안 압축을 풀어야하는 텍스처 (예 : PNG) 사이에는 큰 차이가 있습니다. PNG는 먼저 압축을 풀어야하므로 압축되지 않은 텍스처보다로드 속도느립니다 . 그들은 더 작은 파일 크기이지만, 소비되는 그래픽 메모리의 양은 동일합니다.
jhocking September

8

텍스처는 하나 이상의 이미지 모음입니다. 텍스처가 있음이 수단 TGA 또는 PNG로 표현하지만, 어느 형식 텍스처의 가능한 모든 기능을 대표 할 수. 왜?

각각 만 보유 할 수 있기 때문에 하나의 이미지를. 밉맵이 없습니다. 가능한 3D 텍스처가 없습니다. 배열 텍스처가 없습니다. 큐브 맵이 없습니다. 각 파일은 하나의 2D 이미지 일뿐입니다. 그것들은 텍스처의 일부가 될 수 있지만 밉 매핑을 사용하지 않는 한 (그리고 특정 요구가없는 한 밉맵을 사용하지 않는 것이 좋습니다) 이러한 형식의 단일 이미지 파일은 텍스처가 될 수 없습니다.

이미지 형식은 좋지만 텍스처 형식 이 좋지 않습니다 .

DDS는 실제로 텍스처 요구 사항을 지원하므로 텍스처 형식의 선두 주자입니다. 밉맵 및 큐브 맵을 지원합니다. 3D 텍스처를 지원합니다. DDSv10은 배열 텍스처를 지원합니다. PNG 나 TGA로는 할 수없는 방식으로 DDS 내에 단일 텍스처를 패키징 할 수 있습니다.

DDS는 비 압축 및 압축 텍스처 데이터를 지원합니다. 압축 된 텍스처 형식이 DXT / BC 텍스처 형식 중 하나 인 한.

PKM은 ETC1 압축 이미지를 패키징하는 데 유용하지만 PNG와 마찬가지로 실제 텍스처 기능을 지원하지 않습니다.

PVR 파일은 DDS와 동일한 모바일 파일 인 것 같습니다 (DDS를 사용할 수없는 이유는 모르겠습니다). 다양한 압축 기술을 지원하지만 3D 텍스처 지원뿐만 아니라 어레이 텍스처와 같은 고급 DDSv10 기능이 부족합니다.

따라서 DDS는 포괄적 인 텍스처 지원 측면에서 우수합니다.


2
TIFF는 기능에 대해 말하면 DDS가 수행하는 모든 작업 등을 지원합니다. 알파 외에 원적외선, 근적외선, R, G, B 및 UV 채널이있는 텍스처를 원하십니까? 채널당 64 비트 IEEE 부동 소수점? 채널에 적합한 여러 알고리즘 (JPEG 및 JPEG2000 포함)으로 압축됩니까? 파일 당 여러 이미지와 모든 파일마다 풍부한 메타 데이터가 있습니까? 이 모든 것을 할 수 있습니다. 또한 얼마 전부터 Photoshop의 "기본"형식입니다. 이제, 로더 를 작성하는 것에 관해서는 ...
Martin Sojka

DDS 컨테이너에서 DXT / BC 텍스처 형식 만 사용하는 요구 사항에 대한 자세한 정보를 추가 할 수 있습니다. 그렇지 않은 것 같습니다. Compressonator 는 다양한 압축 형식과 출력을 모두에 대해 .dds로 사용하는 것을 보았습니다 (cli를 실행할 때 도움말 출력 에서이 힌트를 볼 수 있음). 그런 다음 자신을 처리하십시오).
haxpor

1
@ haxpor : 파일에 원하는 것을 넣고 DDS라고 부를 수 있습니다. 문제는 정상적인 DDS 파일을 읽을 수있는 응용 프로그램이 사용자의 파일을 읽을 수 있습니까, 아니면 그렇게하려면 특별히 코딩해야합니까? DDS 형식 은 DXT / BC 압축 형식 만 지정 합니다 (현재 ASTC라고 가정합니다). 다른 형식을 사용하면 프로그램을 작성하는 프로그램과 프로그램을 읽는 프로그램 사이에 발생합니다. 그러나 그것은 거의 모든 이미지 형식에 해당됩니다.
Nicol Bolas

@NicolBolas 요약 해 주셔서 감사합니다. 나는 이것이 생각합니다.
haxpor

5

Khronos Group 은 OpenGL 및 OpenGL ES 애플리케이션의 텍스처를 저장하기 위해 KTX 파일 형식 을 권장 합니다. 이 형식으로 작업 하기 위해 libktx 를 사용할 수 있습니다 .

풍모:

  • KTX 파일에서 OpenGL 텍스처를 인스턴스화
  • 하드웨어가 ETC1을 지원하지 않는 경우 ETC1 압축 텍스처 이미지를 압축 해제하십시오.
  • 텍스처가로드 될 때 KTX 파일에서 키-값 쌍의 해시 테이블을 생성합니다
  • 소스 이미지 배열과 키-값 쌍으로 구성된 해시 테이블 (선택 사항)로 KTX 파일을 작성하십시오.
  • 키-값 쌍의 해시 테이블을 구성하고 채 웁니다.

3

것 같습니다 DDS (DirectDraw Surface) 가 현재 텍스처에 가장 많이 사용되는 . 픽셀 형식, 투명도 및 압축이 다릅니다. GL_ARB_texture_compression 확장을 통해 OpenGL에서 지원됩니다.

예를 들어 여기에 OpenGL 로더가 있습니다 .


당신의 대답은 약간 혼동됩니다. OpenGL에서 DDS가 지원된다는 것은 말이되지 않습니다. OpenGL은 이미지 형식을 처리하지 않습니다.
rdb

3

여기에는 여러 가지 고려 사항이 있습니다.

  1. 텍스처를 디스크와 시스템 메모리로 얼마나 빨리 가져올 수 있습니까?
  2. 시스템 메모리에서 GPU로 텍스처를 얼마나 빨리 얻을 수 있습니까 (귀하의 경우 glTexImage2D를 통해).
  3. 예산에 필요한 디스크 공간 및 비디오 RAM 스토리지 용량
  4. 성능과 품질.

압축되지 않은 24 비트와 32 비트의 경우 하나의 단일 스프레드 / 무엇이든 데이터를 읽고 추가 처리없이 glTexImage2D를 통해 직접 결과를 보낼 수 있기 때문에 TGA가 적합합니다. 파일 크기가 가장 클 수 있으므로 디스크 I / O에 병목 현상이 발생하면 읽기 속도가 느려질 수 있습니다.

PNG는 파일 크기가 상당히 작은 이미지 품질을 유지하므로 선택하는 것이 좋습니다. 병목 현상이 발생하면 PNG의 압축이 느리게 진행될 수 있으므로 좋지 않은 선택입니다.

JPG는 일반적으로 파일 크기가 가장 작고 디스크에서 실제로 빨리 나옵니다 (네트워크를 통해 파일을 보내야하는 경우에 적합합니다). 중간 소프트웨어 압축 해제 단계와 품질 손실로 인해 잘못된 선택입니다 (품질 완화 설정을 조정하여이를 완화 할 수는 있음). 알파 채널도 없습니다.

파일 크기가 작고 미리 작성된 밉맵 체인을 포함하는 기능 때문에 DDS (또는 다른 압축 형식)를 선택하는 것이 좋습니다. 하드웨어에서 기본적으로 지원되는 형식 인 경우 (그리고 DDS는 대부분의 소비자 PC 하드웨어에서 기본적으로 지원되며 오랜 시간이 지났음에도 불구하고) TGA와 동일한 이점을 얻을 수 있습니다. 일부 이미지 속성을 설정 한 다음 중간 단계없이 바로 데이터를 보냅니다. 압축 된 텍스처는 또한 프로그램 실행 속도를 높이고 비디오 RAM을 적게 사용합니다. 손실 압축 (때로는 눈에 띄게 나타날 수 있음)을 사용하고 모든 하드웨어에서 지원되는 것은 아니기 때문에 잘못된 선택입니다.

그것이 나라면 콘텐츠 제작자가 가장 적합한 형식을 선택할 수 있도록이 4 가지 형식 (TGA 및 DDS는 JPG 및 PNG로 로더를 작성하는 것이 매우 간단합니다)을 모두 지원합니다. 텍스처 기반.


1
"DDS는 대부분의 소비자 PC 하드웨어에서 기본적으로 지원됩니다."DDS는 다양한 형식의 컨테이너입니다. DDS 파일을 GPU로 전달하지 않고 그 내용을 전달하십시오!
Tara

0

물론 실제로로드하기 쉬운 오래된 32 비트 BMP를 사용할 수 있습니다 (특히 크기가 2의 거듭 제곱 (실제로는 8 바이트 IIRC의 배수)).

그렇지 않으면 하나의 형식 만 원한다는 것이 이상하게 보입니다 .jpg는 멋진 실제 고해상도 텍스처 (jpeg는 디스크 공간과 (다운)로드 시간에 경이로움을 나타냅니다), 투명도를위한 png 및 제어 텍스처를위한 가끔 32 비트 BMP로 정말 멋집니다 (스크립트 또는 '빠르고 더러운'도구로 쉽게 만들 수 있습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.