거울이나 다른 반사 표면을 어떻게 렌더링합니까?


16

방금 3D 게임 내에서 거울을 만드는 방법이 궁금했습니다. 내 제안은 광선을 추적하여 "미러"물체를 때린 다음 거울 물체의 히트면을 다음과 같이 사용하여 원래 카메라의 거울 "점"에 위치한 "거울"물체에 두 번째 캠의 그림을 그립니다. 미러링 평면.

우리는 비전의 중심이 거울면에 위치하는 지점을 결정하기 위해 원래 카메라의 중심에서 나오는 광선 하나를 사용해야합니다.


1
이 "의미"의 스케치 / 도표를 원하십니까?
daemonfire300

직접 게임 개발과 관련이 없으므로 stackoverflow.com에 게시 해보십시오 . 아마도 거기에는 더 많은 그래픽 전문가가 도움이 될 것입니다.
Ricket

답변:


14

OpenGL을 사용하는 경우 OpenGL FAQ 섹션 9 : 변환에서이 작업을 수행하는 방법을 정확하게 설명합니다. 그렇습니다. 레이트 레이싱은 포함되지 않습니다. 그렇기 때문에이를 달성하는 데 매우 비효율적 인 (그러나 고품질) 방법입니다.

9.170 미러를 어떻게 렌더링합니까?

본질적으로 FAQ 항목은 다음과 으며 예제 코드 는 다음과 같습니다.

  • 반사 된 뷰 매트릭스를 설정하십시오. 축 정렬 거울에 대해이 작업을 수행하는 방법은 두 번째 단락에서 설명합니다.
  • 장면 그리기
  • 뷰 매트릭스를 복원하고 깊이 버퍼를 지우십시오
  • 장면을 다시 렌더링하십시오. 이 씬의 실제 미러 지오메트리는 반투명하거나 완전히 투명해야 이전에 렌더링 된 미러 씬에 보여 질 수 있습니다.

분명히 최적화의 여지가 많이 있습니다. 반사 된 장면을 렌더링 할 때는 거울이 일반적으로 작고 화면에 있지만 거울을 통해 보이지 않는 형상에 대해 기본 오프 스크린 컬링이 시작되지 않기 때문에 가능한 한 많은 컬링이 필요할 것입니다. 미러를 통해 장면의 단순화 된 버전 만 렌더링 할 수도 있습니다. 효과를 줄이고 사용자가 품질 저하를 알지 못하게하려면 미러 렌더링을 수행 할 때 셰이더 (예 : 흐림 또는 밝게 / 지워짐)를 적용 할 수 있습니다.

DirectX를 사용하는 경우 절차가 거의 동일하다고 생각합니다.


3
렌더링 시간보다 더 많은 메모리가있는 경우 대안은 3D 편집기에서 미러를 통해 월드 지오메트리를 간단히 반영하는 것입니다. 그런 다음 원하는대로 보이도록 수정할 수 있습니다 (낮은 밉 레벨 적용 등). 우리는 PS1에서이 작업을 수행했습니다. 반짝이는 바닥에 앉아있는 물건들은 지하에서 복제 / 반전되었고 바닥 자체는 반투명하게되었습니다.
dash-tom-bang

하는 것으로 샘플 코드가 사용되지는 OpenGL 사양을 의미합니다. 그럼에도 불구하고 개념은 보편적이며 아마도 최신 OpenGL 사양을 사용하여 유사하게 적용될 수 있습니다 .
patryk.beza
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.