2012-05-27 4 views
1

OpenSceneGraph를 사용하여 다중 패스 렌더링 방법을 구현하려고합니다. 그러나 나는 내 문제가 이론적이거나 OSG에 대한 지식이 부족하기 때문에 확신 할 수 없다. 지금까지 직교 투영을 사용하여 텍스처에 렌더링하여 다중 패스 음영을 성공적으로 구현했지만 투시 투영을 할 수없는 것처럼 보입니다.render-to-texture를 사용한 다중 패스 음영

멀티 패스 음영을 구현하는 방법을 잘 모르겠다. 물론 멀티 패스 쉐이더를 사용하여 전체 장면을 텍스처로 미리 렌더링 한 다음 최종 렌더에서 텍스처를 사용해야합니다. 그러나 장면의 각 객체에 대해 별도의 텍스처를 만드는 것이 아니라 미리 렌더링 된 전체 장면의 스크린 샷을 효과적으로 캡처하는 방법에 대해 설명하고자합니다. 그런 다음 그 텍스처만으로 렌더링 된 효과를 개별 지오메트리에 적용합니다.

이것은 내가 버텍스 쉐이더의 각 지오메트리에 대한 버텍스 좌표의 추가 변환을 수행해야한다고 가정합니다. 즉 컴퓨팅 후입니다 :

gl_Position = ModelViewProjectionMatrix * Vertex; 

나는 한 단계 더 가서 정점의 화면 질감이 장면의 전체 스크린 샷으로 구성되어 주어진, 다시 (정확하게 정점을지도하기 위해 좌표 계산해야).

내가 맞다면 직각 뷰가 아닌 최종 렌더에서 사용 된 뷰와 동일한 투시도에서 미리 렌더링 할 수 있어야합니다. 이것은 내가 곤경에 처한 곳입니다. 나는 직각 뷰를 원하는대로 할 수는 있지만 투시 뷰는 할 수 없습니다.

내 접근 방식에서 맞습니까? 내가 상상할 수있는 유일한 다른 접근법은 모든 것을 화면 채움 쿼드 (사실상 화면 좌표로 변환하는 것과 같은)로 렌더링하는 것이지만 사전 렌더링 단계에서 투시 투영을 사용할 필요성을 완화하지는 않습니다 .

생각하십니까? 모래밭??

편집 : 성공적인 시도에서 조각 쉐이더 만 사용했음을 지적해야합니다. 투시 투영법은 효과가 있었지만, 물론 화면 중심으로 정렬 된 쿼드는 중심이 아닌 오프셋이 사용되었습니다. 패스 스루 버텍스 쉐이더를 추가했는데 모든 것이 비어 있습니다.

답변

1

내 방식이 옳았습니다. 최종 출력물을 렌더링하기 위해 내 장면 그래프에 다른 카메라를 추가하지 않아도되므로 특히 좋습니다. 기본 카메라 만 사용하면됩니다. 불행하게도, 모든 출력 텍스처는 객체의 크기에 적합한 해상도가 아닌 화면 해상도로 렌더링됩니다. 즉, 내 화면이 1024 x 1024이면 출력 텍스처도 그래프에있는 각 미리 렌더링 카메라에 대해 하나입니다. 정확하지는 않지만 지금은 할 것입니다.