현대 게임이 거울에 텍스처 렌더링 방식을 사용하는 이유는 무엇입니까?


40

Mario64 또는 DukeNukem3D와 같은 오래된 게임을 볼 때 게임의 모든 거울은 본질적으로 그 뒤에 놓인 거울 앞의 지오메트리 사본이있는 벽의 구멍 일뿐입니다. DukeNukem3D의 경우 클립을 활성화하지 않고 미러링 된 방으로 들어갈 수도 있습니다.

대조적으로 현대 게임은 거울에 텍스쳐 렌더 방식을 사용합니다. 이로 인해 미러에 가까워 질 때 미러가 눈에 띄게 픽셀 화됩니다. 내가 처음으로 알아 낸 게임 중 하나는 Luigi 's Mansion이지만 거의 모든 현대 게임에서 사용되는 것 같습니다.

요즘 하드웨어 나 엔진의 어떤 변화로 인해 두 번째 접근 방식이 지배적이되었으며 그 이점은 무엇입니까? 순수한 영상의 관점에서 첫 번째 접근 방식은 픽셀 화 문제를 겪지 않기 때문에 우수합니다.


14
두 방 사이의 문에 거울을 원한다면?
Superbest

답변:


37
  1. RTT (렌더 투 텍스쳐)를 사용하면 렌더링 품질 (해상도, LOD, 조명 복잡도)을 쉽게 조정하여 성능을 조정할 수 있습니다. RTT를 사용하면 반사를 정확하게보기 어려운 특정 거리에서 표면을 큐브 맵으로 쉽게 교체 할 수 있습니다.
  2. 출력은 텍스처이므로 나중에 수행 할 수있는 작업 (조명, 음영, 혼합, 왜곡 등)에 대한 옵션이 더 있습니다.
  3. 대칭 버전의 형상이 장면에 배치되면 실제 형상과 교차 할 때 더 복잡한 컬링이 필요하며 코너 뒤에서 볼 수 있습니다. 오래된 게임에서는 레벨을 피하기 위해 설계되었습니다. 누군가 실제 미러링을 수행해야한다는 것은 말할 것도 없습니다.
  4. 지오메트리가 수동으로 미러링되지 않은 경우, 뷰 매트릭스와 컬링 모드를 변경하고 (매트릭스의 공간 반전을 보상하기 위해) 스텐실 버퍼를 사용하여 미러를 잘라 렌더링해야합니다. 최신 엔진은 모든 렌더링 상태를 미리 만드는 것을 선호하므로 미러 렌더링에 필요한 변경 사항을 적용하여 모든 장면 렌더링 상태의 복사본을 만드는 데 약간의 문제가 있습니다.

따라서 기본적으로 RTT를 사용하면 모든 사람에게 더 많은 자유가 제공됩니다.


On 3 : 대부분의 (구) FPS 게임 엔진은 가시성 컬링을 위해 이미 (대부분 쿼드) 폴리곤을 클리핑하는 이분법 알고리즘 (유명한 "포털 엔진"DOOM에서 사용)을 사용했습니다. 이러한 엔진은 미러 외부의 미러 지오메트리에 대한 걱정없이 미러 뒤의 방으로 사이트 포털로 쿼드 "미러"를 쉽게 밟을 수 있습니다.
dronus

@dronus 무엇? 왜 처음에 "미러"를 만드는 것을 귀찮게하는 것보다? 벽에 구멍을 뚫기 만하면됩니다.
S. Tarık Çetin

실제 형상은 거울 벽 뒤에 공간을 남기지 않을 수 있기 때문에, 실제 거울처럼 작업하기 위해 뒤에 공간이 없어도됩니다.
dronus

29

아닙니다, 당신은 틀 렸습니다-그것은 Duke Nukem 3D의 거울이 전혀 효과가 없었습니다.

DN3D는 포털 엔진을 사용했습니다 . 두 섹터 사이의 조인트는 어느 정도까지 임의적이며 렌더링 엔진이 포털에 왔을 때 다른 섹터를 렌더링해야한다는 것을 알았습니다. 거울 뒤의 섹터는 기본적으로 엔진의 단점을 다루는 자리 표시 자였습니다. 섹터의 유일한 포인트는 "반영"해야하는 것보다 더 커야했습니다. 실제 지오메트리는 포함되지 않았습니다. 실제로 포털 (포털 엔진을 기반으로하는 포털)이 런타임에 포털을 작성하고 포털이 재발 할 수있는 횟수 (A -> B-> A-> B-> A ...), 빌드 (DN3D)는 다른 미러에서 미러를 가리키면 스택이 오버플로되면 단순히 충돌합니다.

그것으로 거울을 구현하는 것이 얼마나 간단합니다- 방으로 다시 향하는 포털을 만드십시오 . 즉, 거울을 렌더링하는 것은 방 자체를 렌더링하는 것만큼이나 비용이 많이 들며 성능과 일관성이 뛰어납니다. 다른 거울을 거울로 가리 키지 않는 한, 즉. 빌드 엔진 소스 코드를 살펴보면 코드 처리 미러가 전혀 없다는 것을 알 수 있습니다. 포털이 작동하는 방식이기 때문에 미러가 필요하지 않습니다 . 참고 : 실제로 렌더링 된 픽셀을 뒤집는 코드가 있습니다. 지오메트리와 모든 다양한 스프라이트와 효과를 뒤집지 않습니다.. 편집자는 이러한 "가짜"포털을 만들 수 있어야했지만 다시 돌아 보았습니다. 아주 똑똑한 Build 엔진에 대해 더 알고 싶다면 Fabien Sanglard의 Build engine internals에 대한 훌륭한 분석이 있습니다. 전체 엔진은 오픈 소스이며 최신 플랫폼으로 포팅되었지만 이전 엔진은 여전히 ​​Windows 10에서 완벽하게 작동합니다 (테스트 : P). Build를 기반으로하는 많은 게임들도 오픈 소스 및 / 또는 리메이크되었습니다.

왜 더 이상 사용되지 않습니까? 글쎄, 일부 엔진은 더 이상 포털을 선호하지 않습니다. 많은 그래픽 해킹과 최적화를 적용하는 것은 까다로울 수 있습니다. 구체적인 내용은 말할 수 없지만 많은 사후 처리는 실제 포털 엔진에서 작동하지 않는 핵에 달려 있습니다 (그들은 많은 가정을합니다. 더 이상 보류하지 않음). 이것은 기본적으로 이러한 게임에서 입체 이미지와 동일한 종류의 문제입니다. 해킹이 더 이상 작동하지 않습니다.

가장 중요한 것은 거울이 더 복잡해 졌다는 것입니다. 그들은 복잡한 모양, 질감을 가질 수 있으며 지상에있을 수도 있습니다 ( "물"이라고도 함). 포털 엔진에서 이러한 모든 문제를 해결할 수 있지만 RTT는 어느 시점에서 더 간단한 선택이되며 GPU는 충분히 빠릅니다. 그것을 처리합니다.

그러나이 모든 것에도 불구하고 "실제"작업을 수행하는 하드웨어 3D 가속 기능을 갖춘 게임이 많이 있습니다. 예를 들어 오래된 게임 중에서 Quake 3 또는 Alien vs. Predator가 있습니다. 내가 아는 한, 소스 엔진 게임은 여전히 ​​"실제"미러를 사용합니다. 사람들이 거울에 가까워 질 것으로 예상하고 동시에 (예를 들어 레벨 디자인을 통해) 반사 표면이 너무 많지 않다는 것을 보장 할 수 있다면 포털 미러는 여전히 매우 매력적입니다.


Duke Nukem 3D가 이러한 방식으로 작동했다는 일반적인 믿음의 이유는 실제 레벨 디자인에서는 실제로 렌더링 엔진에 필요하지 않더라도 미러 뒤의 공간이 반사되는 공간만큼 큽니다.
Random832

또한 미러가 아닌 포털은 문제를 반영 하지 않으므로 "코드 처리 미러가없는"방법이 무엇인지 모르겠습니다.
Random832

5
@ Random832 그것은 일종의 요구였습니다-거울이있는 방에 일부 섹터가 나타 났을 때 시각적 인 인공물이있었습니다. 이는 대부분 무해한 가정이 성능에 큰 영향을 미치는 부분 중 하나입니다. Build를 가지고 놀아 본 적이 있다면, 두 섹터가 같은 높이로 교차 할 때 제대로 렌더링되지 않을 것입니다. 미러링은 실제 미러와 동일한 방식으로 작동합니다. 왜 y 축에서 거울이 "플립"만하는지 궁금한 적이 있습니까? 같은 방으로 다시 연결되는 포털을 뒤집을 필요가없는 이유도 마찬가지입니다.
Luaan

요점은,이다 정상적인 방에 리드가 반대 방향으로면이 있다는 것을 포털 을 반영하는보다 180도 오히려 회전 일에 있습니다. 따라서이를 수행 할 수없는 기능은 미러에 대한 특수 처리로 간주됩니다. (이 기능이 없으면 포털은 포털로 작동하지 않으며 미러에만 적합하며,이 경우 전체 시스템은 미러를 특수 처리합니다.) 그렇습니다. 왜 거울이 "y 축에"플립 "만 있는지 알고 있습니다. 실제로, 그들은 z 축을 뒤집습니다. 그러나 그들이 홀수의 축을 뒤집기 때문에 포털과 구별됩니다.
Random832

@ Random832 물론 y 축이라고 부르는 것에 따라 다릅니다. :) 네, 맞습니다. 특별한 처리가 있습니다. 그러나 그것은 매우 흥미 롭습니다. 지오메트리가 아니라 렌더링 된 데이터를 뒤집습니다. 포털 프레임이 뒤집히고 포털이 평소와 같이 렌더링 된 다음 모든 것이 한 줄씩 뒤로 렌더링됩니다.
Luaan

3

가능한 경우 RTT가 사용되었지만 하드웨어 렌더링 파이프 라인이 한 가지 방법이었습니다.

오래된 하드웨어에는 렌더 투 텍스쳐를 막는 한계가있었습니다. RAM에 쓰면 동시에 읽을 수 없습니다. 렌더링 성능을 향상시키기 위해 대상 버퍼가 쓰기 전용으로 잠겨 있었기 때문에 디스플레이 하드웨어 만 읽을 수있었습니다. 읽기를 요청할 수는 있지만 RAM을 잠그고 렌더링은 다음 프레임을 시작하기 전에 잠금이 해제 될 때까지 기다려야했습니다. RTT는 파이프 라인에 큰 병목 현상을 일으켜 다른 솔루션이 사용되었습니다.

하드웨어 렌더링 파이프 라인의 경우 렌더링로드를 줄이는 방법을 제공하는 RTT가 표준으로 사용되었습니다. 의사 3D 컨텐츠를 제공하기 위해 스프라이트로 렌더링 된 3D. 텍스처 렌더링은 일반 소비자 시장 이외의 특수 기계와는 별도로 당시에는 너무 비싸기 때문에 (CPU) 사용되었습니다.


1

Duke Nukem은 거울 뒤의 지오메트리를 다시 렌더링하여 다른 답이 부분적으로 맞음을 처리합니다. 실제로 게임 데이터 파일에 지오메트리를 포함하지 않는 미러 뒤에 영역이 있으며, 런타임에 실제로 지오메트리가 다시 렌더링됩니다. 이러한 영역이 존재하는 이유는 레벨을 편집 할 때 실수로 레벨을 배치하지 않기 위해서입니다. :

표시된 영역이 있기 때문에 실수로 지오메트리를 배치하지 않습니다.

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