멀티 텍스쳐링은 실제로 "하나 이상의 텍스처 사용"입니까?


10

이것은 어리석은 것처럼 보일 수 있지만 버그가 있습니다. 내가 이해 한 바에 따르면, 멀티 텍스쳐링 은 셰이더 당 하나 이상의 텍스처를 사용하고 있습니다 (보통 어쨌든 혼합). 텍스처 1 개를 만드는 대신 2 개 이상을 만듭니다.

왜 특별한 용어가 있습니까? 단순히 "1 개 이상의 텍스처 사용"보다 더 많은 것이 있습니까? 뭔가 빠졌습니까?


한 시점에서 특히 실시간 3D 그래픽에서 하나의 텍스처 (확산 맵)를 사용하는 것이 매우 일반적이었습니다. 따라서 이름은 둘 이상의 텍스처를 사용하고 있음을 나타내는 데 사용되었습니다. 문제가 보이지 않습니다. 멀티 스레드와 매우 유사
AturSams

그러나 멀티 스레딩에는 특별한 API, 완전히 다른 프로그램 디자인 등이 필요합니다. 많은 측면에서 다릅니다. 내 질문은 멀티 텍스처링이 텍스처 수와 다른 점이 없다는 사실에서 비롯됩니다. 그리고 그것은 문제가 아니라 질문입니다.
NPS

특별한 API가 필요하지 않습니다. 그것은 구현에 달려 있습니다. 멀티 텍스처를 "unitexture"와 같은 방식으로 처리하는 도구를 사용합니다.;)
AturSams

@concept 어느 부분입니까? 제목?
Anko

답변:


16

특별한 용어는 그래픽 카드와 실시간 그래픽 API의 진화와 관련이 있습니다. 예를 들어 이미지 처리 및 오프라인 그래픽 렌더링에는 실시간 그래픽 API 및 소비자 수준의 하드웨어에서 사용하기 오래 전에이 기능이있었습니다.

OpenGL 1.1 (고정 기능) 이후 다중 텍스처링이 API에 새로운 상태로 도입되었습니다. 하나의 텍스처 만 바인딩하는 대신 여러 텍스처를 바인딩 할 수 있습니다. modulate..etc 각 텍스처 유닛 한 후 텍스처 환경 파라미터 중 하나를 혼합하여 그 사이에 블렌드, 1

그런 다음 텍스처 컴 바이 너가 도입되었습니다.보다 유연한 작업을 사용하여 텍스처 세트를 결합하는 기능을 제공했습니다. 매개 변수를 고정 된 오퍼레이션 세트에 전달하는 방법을 제공합니다 (쉐이더로 생각하지만 고정 된 매개 변수 세트). 원래의 "콤 바이 너"보다 더 유연합니다.

셰이더가 도입되면서 이전의 컴 바이 너는 공식적으로 사용되지 않을 때까지 중복되었습니다. 마지막으로 텍스처 샘플러를 쉐이더에 전달하고 GPU가 텍스처에 대해 임의의 작업 (쉐이더)을 이전보다 훨씬 유연하게 실행하도록하는 것이 (하드웨어 및 API가 진화함에 따라) 사소한 것이되었습니다.

여기 요점; 사소한 것이 되더라도이 용어는 여러 텍스처의 샘플링 및 컨벌루션을 설명하는 모든 작업에 대한 일반적인 용어로 남아 있습니다.

1 sth를 놓치면 OpenGL 고정 기능을 기억하기 위해 메모리를 사용하고 있습니다.


5

역사적 이유는 "멀티 텍스처링"이 옛날에 "하드웨어 TnL"과 같은 마케팅 용어였습니다. 새로운 카드의 특징이 되었기 때문에 판매 할 단어가 필요했습니다.

기술적 인 이유는 멀티 텍스쳐링은 하나가 아닌 두 개의 텍스처를 만들고 사용하는 것이 아닙니다 . 단순히 두 개의 텍스처 (또는 세 개 또는 임의의 숫자)를 사용한 경우 출력 조각이 하나뿐이므로 하나의 텍스처 만 사용할 수 있습니다. 그것은 아무런 차이를 만들지 않을 것입니다 (입력이 무엇이든간에 출력은 하나 또는 다른 것만 가능합니다). 따라서 특별한 것은 아닙니다.

차이점은 여러 텍스처를 만들 수있는 것이 아니라 둘 이상의 텍스처 를 결합 한다는 것 입니다. 예를 들어 알파 또는 정점 내 보간 혼합 요인을 기준으로 혼합하거나 추가하거나 다른 것을 추가 할 수 있습니다.
구성 가능성 / 프로그래밍의 양을 크게 지난 10 년간 진화, 그러나 당신이 할 수있는 하나 개의 큰 차이가 남아있다 어떻게 든 하나 개의 출력에 두 개 이상의 입력을 결합한다.


2

처음에는 빛이 있었다

구체적으로 OpenGL 조명은 조각에 적용 할 특정 수학 연산을 지정한 다음 텍스처와 결합하여 최종 색상을 도출합니다.

그리고 지진이있었습니다

Quake 많은 종류의 오브젝트에 이런 종류의 조명을 사용 하지 않았습니다 . 대신에 조명을 표현하기 위해 두 번째 텍스처를 사용했으며, 최종 텍스처를 도출하기 위해 오브젝트 텍스처와 곱하거나 "변조"했습니다.

그러나 당시의 하드웨어는 단일 작업에서이를 지원하지 않았습니다. 따라서 Quake는 장면 객체를 두 번 그리는 것이 필요했습니다.

  • 기본 텍스처를 배치하기 위해 모든 것을 한 번 그립니다.
  • 모듈레이션 블렌드 모드를 설정하십시오.
  • 조명 텍스처를 적용하기 위해 모든 것을 두 번째로 그립니다.

물론 이것은 느렸다; 모든 지오메트리를 두 번 변형하고 클리핑해야했을뿐만 아니라 (그 당시에는 CPU 작업 이었음) 렌더링하는 동안 화면의 모든 픽셀이 두 번 터치되었습니다.

다중 텍스처 입력

다중 텍스처는 이에 대한 솔루션이며 원래 특정 소비자 3DFX 카드에만 존재했던 GL_SGIS_multitexture 확장을 통해 노출되었습니다. 원래는 두 텍스처 만 블렌딩 할 수있었습니다 (그리고 제한된 블렌드 모드 세트).

원래 GLQuake readme 에서 인용하려면 :

GL_SGIS_multitexture
Multitextures 지원은 특정 하드웨어가 두 번이 아닌 한 번에 세상을 렌더링 할 수 있도록합니다. GLQuake는 두 개의 패스를 사용합니다. 하나는 월드 텍스처 용이고 다른 하나는 텍스처에 혼합 된 라이트 맵입니다. 일부 하드웨어에서는 GL_SIGS_multitexture가 지원되는 OpenGL 구현을 통해 한 번에 수행 할 수 있습니다. 이를 지원하는 하드웨어에서는 프레임 속도가 60 %에서 100 % 증가합니다. 현재 3DFX 듀얼 TMU 카드 (예 : Obsidian 2220) 만이 확장을 지원하지만 다른 하드웨어도 곧 지원 될 것입니다.

이 시점에서 노멀 매핑, 다른 종류의 픽셀 당 조명, 셰이더 등의 효과 만 기억해야합니다. 존재하지 않았다 그들이했던 아니라 (하지만 주로 단지 학술 논문 및 연구 프로젝트에, 그리고 실시간 렌더링에 사용하기에 적합하지 않은 것으로 간주 됨).

그리고 현재에

여기에서 다른 답변에 설명 된 것과 거의 같습니다. 멀티 텍스쳐링은 시간이 지남에 따라 표준 기능이되었으며 더 많은 블렌드 모드를 사용할 수있게되었으며 결국 임의의 셰이더 코드를 만들었습니다.

그러나 질문의 ​​목적에 중요한 것은 이것입니다. 처음에는 표준 기능이 하나 를 사용할 수있었습니다. 렌더링 할 때 텍스처 만 . 둘 이상의 기능을 사용할 수 있다는 것은 고급 하드웨어 만 지원하는 추가 기능이므로 이름이 필요했습니다. 그 이름은 "이중 텍스쳐링 (dual-texturing)"(첫 번째 구현은 두 개의 텍스쳐를 지원했기 때문에) 일 수 있었지만, 미래에 한 눈으로 "멀티 텍스처"라는 이름이 선택되었습니다.

이 모든 이력에 대한 추가 정보 는 여기 에서 볼 수 있으며 ,이 프로그래머의 SE (대부분의 맥락과 멀티 텍스쳐링에 대한 부분)에 대한 훌륭한 역사적 기록 입니다.

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