레이 트레이싱의 앤티 앨리어싱 / 필터링


20

광선 추적 / 경로 추적에서 앤티 앨리어싱을 방지하는 가장 간단한 방법 중 하나는 픽셀 값을 수퍼 샘플링하고 결과를 평균화하는 것입니다. IE. 픽셀 중심을 통해 모든 샘플을 촬영하는 대신 샘플을 일정량 오프셋합니다.

인터넷 검색 에서이 작업을 수행하는 두 가지 방법이 있습니다.

  1. 원하는 샘플을 생성하고 필터로 결과를 측정
  2. 필터 모양과 동일한 분포를 갖는 샘플 생성


생성 및 계량

기본 프로세스는 다음과 같습니다.

  1. 원하는대로 샘플을 만듭니다 (무작위, 계층화, 불일치 시퀀스 등).
  2. 두 샘플 (x 및 y)을 사용하여 카메라 광선 오프셋
  3. 광선으로 장면을 렌더링
  4. 필터 기능과 픽셀 중심을 기준으로 한 샘플의 거리를 사용하여 가중치를 계산하십시오. 예를 들어 Box Filter, Tent Filter, Gaussian Filter 등) 필터 모양
  5. 렌더링에서 색상에 가중치를 적용합니다


필터 모양으로 생성

기본 전제는 역변환 샘플링 을 사용하여 필터 모양에 따라 분포 된 샘플을 생성하는 것입니다. 예를 들어 가우스 모양으로 분포 된 샘플의 히스토그램은 다음과 같습니다.
가우스 히스토그램

이것은 정확히 수행하거나 함수를 별도의 pdf / cdf로 비닝하여 수행 할 수 있습니다. smallpt 는 텐트 필터의 정확한 역 cdf를 사용합니다. 비닝 방법의 예는 여기 에서 찾을 수 있습니다


질문

각 방법의 장단점은 무엇입니까? 왜 다른 것을 사용하겠습니까? 몇 가지를 생각할 수 있습니다.

Generate와 Weigh는 가장 강력한 것으로 보이며, 모든 샘플링 방법과 필터를 조합 할 수 있습니다. 그러나 ImageBuffer에서 가중치를 추적 한 다음 최종 해결을 수행해야합니다.

필터 형태로 생성은 양의 필터 형태 만 지원할 수 있습니다 (예 : Mitchell, Catmull Rom 또는 Lanczos 없음). 그러나 위에서 언급했듯이 가중치를 추적 할 필요가 없으므로 구현하기가 더 쉽습니다.

결국, 방법 2는 본질적으로 암시 적 Box Filter 가중치를 사용하기 때문에 방법 1을 방법 1의 단순화로 생각할 수 있습니다.


큰소리로 생각하면 ... 필터의 음수 부분을 별도로 모델링하여 두 세트의 샘플을 생성 할 수 있습니까? 하나는 양성으로 처리하고 다른 하나는 음성으로 처리 할 수 ​​있습니까? 이것이 두 번째 접근 방식에 대한 임의의 필터를 허용합니까 (필터 모양으로 생성)?
trichoplax

아마도? Lemme는 그것으로 조금 바이올린
RichieSams

1
자, 함수의 0을 추적하면 출력을 pdf로 abs () 할 수 있습니다. 그런 다음 샘플링 할 때 부정적인지 확인할 수 있습니다. 샘플 코드는 다음과 같습니다. gist.github.com/RichieSams/aa7e71a0fb4720c8cb41
RichieSams

답변:


9

2006 년 부터이 주제 인 Filter Importance Sampling 에 관한 훌륭한 논문이 있습니다. 그들은 당신의 방법 2를 제안하고, 속성을 연구하며, 일반적으로 그것을 선호합니다. 그들은이 방법이 픽셀에 똑같이 기여하는 모든 샘플에 가중치를 부여하여 최종 픽셀 값의 분산을 감소시키기 때문에보다 부드러운 렌더링 결과를 제공한다고 주장합니다. 중요도 샘플링이 가중치가 부여 된 샘플보다 분산이 더 낮다는 몬테카를로 렌더링의 일반적인 최대 값이므로 이는 의미가 있습니다.

방법 2는 또한 각 픽셀의 계산이 다른 모든 픽셀과 독립적이기 때문에 병렬화가 약간 더 쉽다는 장점이 있습니다. 방법 1에서는 샘플 결과가 인접 픽셀에서 공유되므로 픽셀이 병렬로 처리 될 때 어떻게 든 동기화 / 통신되어야합니다 여러 프로세서). 같은 이유로 방법 1보다 방법 2를 사용하여 적응 샘플링 (이미지의 고 분산 영역에서 더 많은 샘플)을 수행하는 것이 더 쉽습니다.

이 논문에서 그들은 또한 필터의 abs ()에서 샘플링 한 다음 @trichoplax가 제안한 것처럼 +1 또는 -1로 각 샘플에 가중치를 부여하는 Mitchell 필터를 실험했습니다. 그러나 이것은 실제로 분산을 증가시키고 방법 1보다 나빠서 방법 2는 포지티브 필터에만 사용할 수 있다고 결론을 내 렸습니다.

즉,이 백서의 결과는 보편적으로 적용되지 않을 수 있으며 어떤 샘플링 방법이 더 나은지에 따라 다소 장면에 따라 다를 수 있습니다. 이 질문을 조사하는 블로그 게시물을 작성 했습니다.2014 년에는 전체 렌더링이 아닌 합성 "이미지 기능"을 사용했으며, 고 대비 가장자리를보다 부드럽게 매끄럽게하여 시각적으로 만족스러운 결과를 제공하는 방법 1을 찾았습니다. 베네딕트 비 텔리 (Benetikt Bitterli)는 자신의 렌더러와 유사한 문제를보고하는 게시물에 대해 언급했다 (방법 2를 사용할 때 광원 주위의 과도한 고주파 노이즈). 그 외에도 방법의 주요 차이점은 결과 노이즈의 주파수라는 사실을 발견했습니다. 방법 2는 더 높은 주파수, "픽셀 크기"노이즈를 제공하는 반면, 방법 1은 2-3 픽셀의 노이즈 "그레인"을 제공하지만 소음의 진폭은 두 가지 모두 비슷하여 어떤 소음이 덜 나빠 보이는지는 개인 취향의 문제 일 것입니다.


감사! 이들은 훌륭한 자원입니다. 결국 3 가지 방법이 있습니까? 1. 스플래 팅 생성 및 계량 2. 스플래 팅없이 생성 및 계량 3. 필터 모양으로 생성
RichieSams

당신은 무게를 생성하고 병렬화하는 방법을 탐구 등 모든 서류, 블로그, 알고 계십니까 스플래? 내 머리 꼭대기에서 타일 당 뮤텍스를 갖거나 각 픽셀을 원자로 만들 수 있습니다.
RichieSams

2
@RichieSams "스플래 팅없이 생성 및 계량"을 사용하는 이유를 모르겠습니다. 이는 필터 중요도 샘플링보다 어떤 경우 에나 더 나쁜 것 같습니다. 나는 "생성 및 계량"이 튀는 것을 의미한다고 가정했다. 스플래 팅의 병렬화와 관련하여 내 머리 꼭대기에서 이미지를 타일로 분할하지만 각 타일에 2 × 3 픽셀 경계선을 지정하여 타일 가장자리를 가로 지르는 스 플랫을 잡을 수 있습니다. 그런 다음 최종 패스에서 경계 타일을 추가하여 최종 이미지에 합성합니다.
Nathan Reed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.