Raymarch 셰이더는 어떻게 작동합니까?


49

나는 shadertoy.com에서 발견 된 쉐이더를보고 있었고 멋진 것들 대부분에는 소음과 광선이 공통적으로 있습니다. 소스 코드를 전혀 이해하지 못하지만 정말로하고 싶습니다. 이 쉐이더는 어떻게 작동하고 raymarch 알고리즘은 어떻게 작동합니까? 나는 모든 것을 검색했으며 주제에서 아무것도 찾을 수 없습니다.

감사


6
Iñigo Quilez는 이에 대한 훌륭한 자습서를 작성했습니다. iquilezles.org/www/articles/raymarchingdf/raymarchingdf.htm , iquilezles.org/www/material/nvscene2008/nvscene2008.htmiquilezles.org/www/articles/distfunctions/distfunctions.htm을 참조하십시오 . 이 멋진 쉐이더는 단순한 레이 마칭이 아니라 구체 추적이라고도하는 레이 마칭 거리 필드입니다.
msell

일반적으로 광선 행진 또는 GPU에서 광선 행진에 대해 묻고 있습니까?
concept3d

@ 밀로 질문을 명확히 할 수 있습니까? 이 알고리즘을 사용하여 멋진 데모에서 보는 이미지를 생성하는 방법을 묻고 있습니까? 레이 행진이 어떻게 작동하는지 묻고 있습니까? 프래그먼트 / 픽셀 쉐이더 (예 : 효율적인 구현)에서 레이 마칭이 어떻게 작동하는지 묻고 있습니까?
TravisG

나는 유니티 엔진의 Raymarching 구현 github.com/smkplus/UnityRayMarching
세예드 모르테 카 말리

답변:


79

레이트 레이싱과 대조적으로 이해하는 것이 가장 쉬운 방법 일 것입니다.

레이트 레이싱으로 프리미티브를 렌더링하려면 프리미티브 및 입력 레이가 주어진 경우 해당 광선이 프리미티브에 도달하는 위치를 정확하게 알려주는 함수가 필요합니다. 그런 다음 모든 관련 프리미티브에 대해 광선을 테스트하고 가장 가까운 교차점을 선택할 수 있습니다. CPU가 좋습니다.

레이 마칭을 사용하면 간단한 광선 교차 기능이 없습니다. 광선에 점이 있으면 점이 표면에 얼마나 가까운 지 추정 할 수 있지만 표면에 닿도록 광선을 얼마나 멀리까지 확장해야하는지 정확히 알 수는 없습니다.

따라서 한 번에 한 단계 씩 "행진"합니다.

  1. 광선의 "시작"에서 시작-장면 렌더링을위한 가까운 평면 또는 경계 볼륨이 장면에서 하나의 객체 인 경우 경계 볼륨과의 교차. (아래 다이어그램에서 P0)

  2. 거리 함수를 평가하여 표면에 얼마나 가까운 지 추정하십시오. (다이어그램에서 가장 큰 원)

  3. 추정치에 따라 광선을 따라 앞으로 이동하십시오. 이동은 보수적으로 짧아야하므로 어디에서나 표면을 터널링하지 않을 것이라고 확신합니다.

  4. 이제 새로운 포인트가 생겼습니다 (아래 P1). 새로운 견적을 받고 반복하십시오.

  5. 지표면의 임계 거리 내에 있거나 최대 걸음 수에 도달 할 때까지 계속해서 견적을 받고 앞으로 나아가십시오. (아래 P4)

  6. 이제 표면의 깊이가 생겼으며 근처 샘플에서 법선 / 앰비언트 어 클루 전과 같은 것을 추론하고이 데이터를 사용하여 픽셀을 밝게하고 채색 할 수 있습니다.

P0에서 교차점을 향해 광선을 행진

GPU Gems 2, 8 장 예제 다이어그램

각 광선은 독립적이며 각 단계에서 로컬 정보 만 (일반적으로) 사용하기 때문에 GPU에서 병렬화하기에 적합합니다. 종종 화면에 두 개의 삼각형 만 그려집니다. 이들을 래스터 화 한 후 프래그먼트 셰이더로 전달 된 각 픽셀은 단일 광선을 나타냅니다. 프래그먼트 셰이더는 광선이 표면에 도달 할 때까지 행진하여 결과를 반환합니다 (종종 별도의 전체 화면 패스에서 텍스처링 및 음영 처리를위한 심도 값).

정확한 단계는 달성하려는 특정 효과에 따라 다릅니다. 레이 마칭 기법은 다음과 함께 사용됩니다.

  • 전통적인 래스터 화 된 지오메트리에서 표면 변위를 시뮬레이션하기위한 하이트 필드
  • 스크린 스페이스 리플렉션과 같은 것들을위한 장면 깊이 버퍼
  • 3D 샘플링 데이터 세트를 시각화하기위한 볼륨 텍스처 (종종 과학 / 의료)
  • 프랙탈과 같은 것을 렌더링하기위한 암시 적 함수
  • Iñigo Quilez의 작업 과 같은 절차 적 거리 필드 (위의 의견에서 msell의 훌륭한 링크).

Raymarching은 Wikipedia의이 예제에서 와 같이 볼륨 반투명도를 렌더링하기 위해 각 단계에서 블렌딩 (보통 매번 거리를 추정하는 대신 고정 된 단계를 사용)하는 데에도 사용됩니다 .

반투명 볼륨 텍스처 레이 마칭

이것은 상세한 구름을 실시간 으로 렌더링 하는 대중적인 방법이되었습니다 .

건물 창 뒤의 실내 공간 세부 사항을 시뮬레이션하는 방법 인 내부 매핑 조차도 광선이 창으로 들어오는 지점에서 가장 가까운 벽, 바닥 / 천장 또는 가구 평면까지 밟는 레이 마칭 형태로 간주 될 수 있습니다.

관심있는 특정 유형의 레이 마칭 효과가있는 경우 특정 예를 통해 새로운 질문을함으로써보다 자세한 답변을 얻을 수 있습니다. 가족에게는이 기술이 너무 다양하여 한 번에 모든 것을 다룰 수 없습니다. ;) 이것이 셰이더에서 발생하는 상황을 이해하기위한 프레임 워크를 제공하기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.