문제는 제목에 거의 있습니다. OpenGL과 같은 3D 시스템에서 사용할 수있는 직교 및 원근 이외의 3D 투영이 있습니까?
특히 게임 디자인에 특별한 용도가 있습니까?
답변
예, 몇 가지 예를 들면 다음과 같습니다.
예를 들어, Pannini 투영 은 넓은 시야를 멋진 방식으로 캡처 할 수 있습니다 . (완전히 내 의견)
구현 세부 사항은이 특정 질문의 범위를 벗어나는 것으로 생각합니다.
편집 : 의견 주셔서 감사합니다, 나는 Pannini의 철자를 틀 렸습니다. 이 편집 내용을 가치있게 만들려면 여기에 몇 가지가 더 있습니다.
- 포물면 / 이중 파라볼 로이드 (반사, 그림자, 스테인드 글라스에 유용)
- Equirectangular (구의 세계지도보기를 생성 할 수 있음)
- 구의
- 정현파
답변
“OpenGL과 같은 3D 시스템에서 사용할 수있는”의 의미에 따라 다릅니다. 🙂
엄밀히 말하면 OpenGL과 같은 3D 그래픽 하드웨어 및 API는 선형 투영 (세계 공간의 직선을 이미지의 직선에 매핑하는 투영) 만 올바르게 처리합니다 . 그들은 곡선 모양으로 무언가를 왜곡하지 않습니다 (시작하기 위해 곡선이 아닌 한). GPU는 화면에서 올바르게 래스터 화하기 위해 가장자리가 직선 인 삼각형에 의존하기 때문입니다.
우리가 선형 투영으로 제한한다면, 너무 많은 선택이 없습니다. 표준 직교 및 원근법 외에도 뷰 절두체를 전단하여 얻은 “중심 외”변형도 있습니다.
- 중심을 벗어난 직교 투영법을 경사 투영법 이라고 하며 종종 공학 다이어그램에 사용되지만 게임에는 많이 표시되지 않습니다.
- 중심을 벗어난 원근 투영법 은 입체 3D 렌더링에 사용됩니다 . 왜냐하면 절두체를 회전시키는 대신 대상체에 초점을 맞추는 대신 절두를 기울이면 뇌에서 좌안과 우안이 더 잘 융합됩니다.
이러한 투영은 일반적인 4×4 투영 행렬로 표현 될 수 있으며 문제없이 3D API에 사용될 수 있습니다.
그리고 직선을 직선으로 매핑하는 데 제한이없는 비선형 투영법이 있습니다. 그들은 사물을 곡선으로 왜곡 할 수 있습니다. 원통형, 구형, 다양한 유형의 어안 등을 포함하여 많은 것들이 있습니다.
비선형 투영에서는 단순히 투영 행렬을 사용할 수 없습니다. 쉐이더를 사용하여 투영을 직접 구현해야합니다. 한 가지 방법은 버텍스 당 투영을 수행하기 위해 사용자 정의 버텍스 쉐이더를 작성하는 것입니다. GPU는 여전히 정점 사이에 직선으로 삼각형을 그립니다. 따라서 작은 삼각형은 수정하기에 가깝지만 큰 삼각형은 눈에 띄게 잘못됩니다. 이로 인해 문제가 발생할 수 있으며 올바르게 렌더링하려면 지오메트리를 세분화해야합니다.
비선형 프로젝션을 얻는 두 번째 방법은 먼저 정규 투시 투영을 사용하여 장면을 렌더링하고 (각 큐브면에 투시 투영이있는 큐브 맵에 적용) 포스트 프로세스 픽셀 쉐이더를 적용하여 원하는대로 리샘플링하는 것입니다 비선형 투영. 이는 지오메트리 수정이 필요하지 않은 이점이 있지만, 추가 렌더링 작업으로 인해 비용이 더 많이들 수 있으며 첫 번째 패스 렌더링의 해상도가 충분하지 않으면 일부 영역에서 결과가 흐려질 수 있습니다. 예를 들어, Oculus Rift 게임은 포스트 프로세스 방식을 사용하여 Rift가 렌즈 작업에 필요한 비선형 투영을 구현합니다.