2016-07-03 14 views
0

현재 그림자를 렌더링하는 데 shadowtexture를 사용하는 프로젝트에서 작업 중입니다.
스포트라이트는 스포트라이트의 방향으로 텍스처가 1 개만 필요하기 때문에 꽤 쉽지만 모든 방향으로 6 개의 텍스처가 필요하거나 포인트 라이트 주변의 모든 오브젝트를 렌더링하는 텍스처가 필요하기 때문에 조금 더 어려워졌습니다.
내 문제가있는 곳입니다. 포인트 라이트 주위에 360도 각도로 모든 오브젝트를 렌더링하는 프로젝션 매트릭스를 어떻게 만들 수 있습니까?
기본적으로 어안 렌즈 (또는 다른 360도 카메라) 버텍스 쉐이더를 만드는 방법은 무엇입니까?어떻게 포인트 쉐도우 맵에 사용할 수있는 프로젝션 매트릭스를 얻을 수 있습니까?

답변

0

어떤 방법으로 모든 객체를 pointlight 주위의 360도 각도로 렌더링하는 Projection matrix를 생성 할 수 있습니까?

수 없습니다. 동질 공간에있는 4x4 프로젝션 매트릭스는 다각형의 모서리를 구부리는 결과를 초래할 수 없습니다. 직선은 직선을 유지합니다.

기본적으로 어안 (또는 다른 360도 카메라) 버텍스 셰이더를 만드는 방법은 무엇입니까?

적어도 일반적인 경우는 아닙니다. 그리고 이것은 사용중인 투영 매트릭스의 한계가 아니라 래스터 라이저의 일반적인 한계입니다. 물론 어안 왜곡 수식을 버텍스 쉐이더에 넣을 수 있습니다. 그러나 래스터 라이저는 각 삼각형을 여전히 직선으로 래스터 화합니다. 각 삼각형의 모서리 점의 위치를 ​​왜곡합니다. 즉, 단일 픽셀을 덮는 작은 삼각형에 대해서만 정확할 것입니다. 큰 삼각형의 경우 이미지가 완전히 망가집니다. T 조인트와 같은 물건을 가지고 있다면 실제로 완전히 닫혀 야하는 물체에 구멍이나 겹침이 생깁니다. 이 필요 하나 모든 방향으로 6 개 텍스처 또는 1 개 질감은 어떻게 든 모든 obects를 렌더링 그 이후

그것은 주목의 방향 만 1 텍스처가 필요하기 때문에, 스포트라이트 꽤 쉬웠다 있지만 조금 더 어려운 포인트 라이트 주변.

올바른 해결 방법은 6 개의 얼굴을 제공하는 단일 큐브 맵 텍스처를 사용하는 것입니다. 완벽한 큐브에서 각면은 수평 및 수직으로 90 도의 시야각을 가진 표준 대칭 투시 투영으로 렌더링 할 수 있습니다.

최신 OpenGL에서는 layered rendering을 사용할 수 있습니다. 이 경우 큐브 맵의 6면을 FBO에 단일 레이어로 연결하고 기하학 쉐이더를 사용하여 기하 매티를 6 배로 증폭하고 6 개의 다른 투영 행렬에 따라 변형 할 수 있습니다. 완전한 쉐도우 맵을 위해 하나의 렌더 패스 만 있으면됩니다.

Nvidia의 NV_viewport_swizzle (Maxwell 및 최신 GPU에서 사용 가능)처럼 큐브 맵 렌더링을 더욱 최적화하는 데 사용할 수있는 다른 공급 업체별 확장이 있지만 완성을 위해서만 언급합니다.

+0

고맙습니다. 필자는 이중 parabloid 렌더링을 조사해 왔지만 아마도 큐브 맵으로 끝날 것입니다. 감사합니다. – user2741831