그림자 매핑에서 투영 앨리어싱 처리


15

3D 프린팅을 위해 작은 건물을 만들기 위해 간단한 절차 적 3D 모델링을 사용하고 있습니다. 예 :

건물


모델을 화면에서 더 읽기 쉽게 만들기 위해 단일 방향 조명에 대한 기본 그림자 매핑을 구현했습니다. 씬이 바뀌지 않기 때문에 섀도우 맵의 경계가 무엇인지 파악하기 위해 씬의 축 정렬 상자를 사용하여 섀도우 맵을 한 번만 렌더링합니다. 그림자와 경계는 모든 행렬을 올바르게 가지고있는 것처럼 보이지만 조금 더 가까이 오는 것은 끔찍한 것처럼 보입니다.

타워의 근접 촬영

내가 읽은 독서에서, 나는 피터 패닝과 내가 그것에 대해 무엇을 할 수 있는지 이해하지만, 프로젝션 앨리어싱의 형태라고 생각하는 거친 가장자리는 너무 나빠서 기본 구현에 문제가 있다고 생각합니다.

그림자 텍셀 경계를 표시하기 위해 픽셀 쉐이더를 해킹했습니다.

텍셀 경계선 표시

텍스처에서 bilinear 필터링을 사용했습니다 (그것이 없으면 심각한 그림자 여드름이 생깁니다). 슬프게도 PCF에 대한 나의 시도도 실패했습니다.

여기에 이미지 설명을 입력하십시오

이중 선형 필터링이 비활성화 된 단일 샘플 사례는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

이것이 "전형적인"프로젝션 앨리어싱처럼 보입니까? 계단식으로 장면에 클리핑 된 뷰 절두체를 사용하여 그림자 맵을 동적으로 렌더링 할 수 있습니까?

편집 : 이중 필터 필터링, 포스트 섀도 비교의 근접 촬영을 추가하여 내가 얻은 것을 보여줍니다. 내부 모서리로 인해 나쁜 그림자 여드름이 나타납니다. 누적 가상 블록으로 모델링하고 적절한 통합 작업을 수행하지 않습니다. 내 독서에서 다면체에 부울 연산을 구현하는 것은 쉽지 않지만 정적 그림자 볼륨을 구현하고 일부 3D 인쇄 소프트웨어를 정리할 수 있습니다.

이중 선형 필터링

답변:


10

수용 가능한 품질의 섀도 매핑은 상당히 여정입니다. 따라서 전체 장면을 정적으로 포함하는 기본 그림자 맵인 첫 번째 단계를 구현했습니다. 즉, 라이트 뷰 공간의 그림자 맵 텍셀 크기 대 카메라 뷰 공간 비율의 렌더링 된 장면의 텍셀 크기가 상당히 커서 앨리어싱이 발생합니다. 이 비율을 1 : 1에 가깝게 줄이기 위해 다음과 같은 기술을 언급했습니다.

  • 가장 쉬운 방법은 그림자 맵의 크기를 늘리고 여전히 최적의 성능으로 값을 찾는 것입니다.
  • 그림자 맵을 카메라 뷰 절두체와 정렬합니다. 그런 다음 그림자 맵은 장면의 작은 부분을 포함하므로 앨리어싱을 줄입니다.
  • 이것은 CSM으로 개선 될 수 있지만, 동일하지만 각 절두체 슬라이스의 중심점을 기준으로 라이트 뷰 매트릭스의 다른 중심 위치로 각 캐스케이드에 대한 장면을 렌더링해야합니다.

그림자 가장자리를 부드럽게하는 기본 기술 중 일부 :

  • 분명히 PCF이지만 PCF 구현을 내장 하드웨어 PCF (Opengl 사용 sampler2DShadow) 와 결합하는 것이 좋습니다 . 결과적으로 루프 반복 횟수가 줄어들고 PCF가 저렴 해집니다.
  • 회전 된 포아송 디스크를 사용하여 에지의 블로 키를 노이즈로 교체 할 수 있습니다. 섀도 맵에서 샘플링하는 데 사용되는 샘플은 PCF 루프가 반복 될 때마다 무작위로 회전합니다.

다음과 같은 엣지 스무딩 기술을 연구 할 수도 있습니다.

  • 그림자 맵을 MSAA 적용 프레임 버퍼에 렌더링
  • 상기 PCF에 의해 향상 보간 ,
  • 임시 블렌드 로 샘플 수 증가 .

PCF 기본 기술은 그림자 테스트에서 약간의 오프셋을 적용하여 수정 될 수있는 그림자 여드름이 있습니다. 이 오프셋의 크기를 계산하는 것도 연구의 영역입니다 .

다른 고급 그림자 맵 방법에는 다음이 포함됩니다.

  • 지수 그림자 맵분산 그림자 맵 -대부분의 경우 그림자 여드름으로 고통받지 않고 막힘없이 매끄러운 가장자리를 제공하지만 일부 빛 누출 상황이 발생합니다.
  • 지수 분산 그림자 맵-아마도 2D 깊이 맵 그림자 매핑의 가장 진보 된 기술로, VSM의 매끄러움을 결합하고 메모리 사용량을 두 배로 늘리면서 빛 누출을 해결합니다.
  • 백분율에 가까운 부드러운 그림자 -다양한 반음 크기로 전통적인 그림자 맵을 향상시키는 기본 기술,
  • 멀티 뷰 섀도 맵 (Multiview Shadow Maps) -다양한 반음 크기로 사실적인 부드러운 섀도우를 계산하기 위해 영역 라이트에 배열 된 일부 기법의 섀도우 맵
  • 딥 섀도우 맵 -그림자로 체적 산란을 향상시키기 위해
  • 실시간 광선 추적 그림자 – 아마도 미래.

당신은 PCF에 실패하지 않았습니다.

카메라 뷰 공간에서 그림자 맵에 가우시안 블러를 적용하는 방법이 있었으면 좋았지 만 예상대로 작동하지 않습니다.


이 의견의 일부는 귀하의 답변에 대해 감사 드리므로 귀하는 그곳에서 통지를받지 못하기 때문에 귀하 께 알려 드리겠다고 생각했습니다.
trichoplax

예, 봤지만 감사합니다.
narthex

1

"... 텍스처에서 이중 선형 필터링 ..."이라고 말했습니다. 그림자 맵의 깊이 값을 보간하는 것 같습니다. 그림자 맵과 함께 보간을 사용하는 올바른 방법은 그림자 테스트 결과에 적용하는 것입니다 (OpenGL이 지원하는 한). 섀도우 테스트 결과의 보간과 PCF를 결합하여 훨씬 더 나은 결과를 얻을 수도 있습니다. 그러나 알 수 있듯이 앨리어싱은 항상 그림자 매핑을 추구하는 전염병입니다. :)

섀도 매핑에 대한 솔루션을 찾고 있음을 이해하지만 (구현하기가 간단하더라도) 섀도우 볼륨 사용을 고려한 적이 있습니까? 구현하기가 훨씬 복잡하지만 앨리어싱이 전혀 발생하지 않으며 귀하의 목적에 잘 맞을 것이라고 생각합니다.


답변 주셔서 대단히 감사합니다! 원하는 결과를 얻으려면 섀도우 볼륨으로 전환하는 것이 적절할 수 있습니다. "보간"에 제공된 코드 흐름 링크는 매우 유용합니다. 감사합니다!
Daniel M Gessel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.