이것은 어리석은 것처럼 보일 수 있지만 버그가 있습니다. 내가 이해 한 바에 따르면, 멀티 텍스쳐링 은 셰이더 당 하나 이상의 텍스처를 사용하고 있습니다 (보통 어쨌든 혼합). 텍스처 1 개를 만드는 대신 2 개 이상을 만듭니다.
왜 특별한 용어가 있습니까? 단순히 "1 개 이상의 텍스처 사용"보다 더 많은 것이 있습니까? 뭔가 빠졌습니까?
이것은 어리석은 것처럼 보일 수 있지만 버그가 있습니다. 내가 이해 한 바에 따르면, 멀티 텍스쳐링 은 셰이더 당 하나 이상의 텍스처를 사용하고 있습니다 (보통 어쨌든 혼합). 텍스처 1 개를 만드는 대신 2 개 이상을 만듭니다.
왜 특별한 용어가 있습니까? 단순히 "1 개 이상의 텍스처 사용"보다 더 많은 것이 있습니까? 뭔가 빠졌습니까?
답변:
특별한 용어는 그래픽 카드와 실시간 그래픽 API의 진화와 관련이 있습니다. 예를 들어 이미지 처리 및 오프라인 그래픽 렌더링에는 실시간 그래픽 API 및 소비자 수준의 하드웨어에서 사용하기 오래 전에이 기능이있었습니다.
OpenGL 1.1 (고정 기능) 이후 다중 텍스처링이 API에 새로운 상태로 도입되었습니다. 하나의 텍스처 만 바인딩하는 대신 여러 텍스처를 바인딩 할 수 있습니다. modulate..etc 각 텍스처 유닛 한 후 텍스처 환경 파라미터 중 하나를 혼합하여 그 사이에 블렌드, 1
그런 다음 텍스처 컴 바이 너가 도입되었습니다.보다 유연한 작업을 사용하여 텍스처 세트를 결합하는 기능을 제공했습니다. 매개 변수를 고정 된 오퍼레이션 세트에 전달하는 방법을 제공합니다 (쉐이더로 생각하지만 고정 된 매개 변수 세트). 원래의 "콤 바이 너"보다 더 유연합니다.
셰이더가 도입되면서 이전의 컴 바이 너는 공식적으로 사용되지 않을 때까지 중복되었습니다. 마지막으로 텍스처 샘플러를 쉐이더에 전달하고 GPU가 텍스처에 대해 임의의 작업 (쉐이더)을 이전보다 훨씬 유연하게 실행하도록하는 것이 (하드웨어 및 API가 진화함에 따라) 사소한 것이되었습니다.
여기 요점; 사소한 것이 되더라도이 용어는 여러 텍스처의 샘플링 및 컨벌루션을 설명하는 모든 작업에 대한 일반적인 용어로 남아 있습니다.
1 sth를 놓치면 OpenGL 고정 기능을 기억하기 위해 메모리를 사용하고 있습니다.
역사적 이유는 "멀티 텍스처링"이 옛날에 "하드웨어 TnL"과 같은 마케팅 용어였습니다. 새로운 카드의 특징이 되었기 때문에 판매 할 단어가 필요했습니다.
기술적 인 이유는 멀티 텍스쳐링은 하나가 아닌 두 개의 텍스처를 만들고 사용하는 것이 아닙니다 . 단순히 두 개의 텍스처 (또는 세 개 또는 임의의 숫자)를 사용한 경우 출력 조각이 하나뿐이므로 하나의 텍스처 만 사용할 수 있습니다. 그것은 아무런 차이를 만들지 않을 것입니다 (입력이 무엇이든간에 출력은 하나 또는 다른 것만 가능합니다). 따라서 특별한 것은 아닙니다.
차이점은 여러 텍스처를 만들 수있는 것이 아니라 둘 이상의 텍스처 를 결합 한다는 것 입니다. 예를 들어 알파 또는 정점 내 보간 혼합 요인을 기준으로 혼합하거나 추가하거나 다른 것을 추가 할 수 있습니다.
구성 가능성 / 프로그래밍의 양을 크게 지난 10 년간 진화, 그러나 당신이 할 수있는 하나 개의 큰 차이가 남아있다 어떻게 든 하나 개의 출력에 두 개 이상의 입력을 결합한다.
처음에는 빛이 있었다
구체적으로 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 (대부분의 맥락과 멀티 텍스쳐링에 대한 부분)에 대한 훌륭한 역사적 기록 입니다.