ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UE4] A Scalable and Production Ready Sky and Atmosphere Rendering Technique 리뷰 (1/2)
    Graphics/Graphics Study 자료 2023. 3. 7. 23:32

    [UE4] A Scalable and Production Ready Sky and Atmosphere Rendering Technique 리뷰 (1/2)

    최초 작성 : 2023-03-07
    마지막 수정 : 2023-03-07
    최재호

    목차

    1. 목표
    2. 내용
     2.1. Single scattering 기반 대기 산란 식
      2.1.1. Transmittance function
      2.1.2. Shadowing function
      2.1.3. Single scattering function
      2.1.4. luminance function
     2.2. 행성의 특징
     2.3. 지구와 같은 행성을 렌더링 하기 위해 필요한 컴포넌트
     2.4. 대기 산란을 관찰했을 때 우리가 확인할 수 있는 부분
     2.5. 실제 렌더링을 위해 사용되는 4개의 LUT
      2.5.1. Transmittance LUT
      2.5.2. Sky-View LUT
      2.5.3. Aerial Perspective LUT
      2.5.4. Multiple scattering LUT
       2.5.4.1. 이전 대기 렌더링 기술의 특징과 새로운 방식의 목표
       2.5.4.2. Multiple scattering 의 특징
       2.5.4.3. Multiple scattering 식 유도 및 LUT 생성
     2.6. 최종적으로 얻어진 Multiple scattering 식
    3. 레퍼런스
     

    1. 목표

    UE4에 사용하는 대기 산란 알고리즘의 기반이 되는 논문 A Scalable and Production Ready Sky and Atmosphere Rendering Technique, Sébastien Hillaire (레퍼런스1) 를 이해하고 실제 구현코드를 분석해 봅시다.
    이 글은 총 2개로 구성됩니다.

    • 이번 글에서는 논문의 내용을 요약하고 이론에 대해서 알아봅니다.
    • 다음글에서는 저자가 제공하는 구현코드 https://github.com/sebh/UnrealEngineSkyAtmosphere 를 보면서 논문에서는 명세되지 않은 세부사항 들을 코드레벨로 확인해 봅니다.

    이 글을 읽기 전에 다음 글을 먼저 읽어보면 내용을 이해하는데 도움이 됩니다.

    이 논문에는 radiance 를 luminance, Irradiance 를 illuminance 로 표기하고 있기 때문에 동일하게 설명하겠습니다.
     
    그리고 혹시 보시다가 틀린점이 발견되면 지적해주시면 감사하겠습니다.
     

    2. 내용

    A Scalable and Production Ready Sky and Atmosphere Rendering Technique, Sébastien Hillaire (레퍼런스1) 에서 목표하고 있는 것은 다음과 같습니다.

    • 리얼타임에 라이트의 Multiple scattering 을 평가하기 위한 새로운 근사를 제안.
    • 대기 속성들을 동적으로 갱신할 수 있고(Dynamic time of day 지원). 아이폰 6s 부터 하이엔드 PC 에도 적용할 수 있도록 효율적으로 렌더링 가능해야 함.

     
    Multiple scattering 가 어떤 것인지 알기 전에 기존 Single scattering 방식에 대해서 알아보고 두 가지가 어떤 차이가 있는지 알아봅시다. Single scattering 의 의미는 태양에서부터 특정위치에 도달하는 빛이 대기 내에서 단 한번 산란한 후 도착하는 것을 의미합니다. Single scattering 식을 보면서 어떻게 근사되는지 확인해 봅시다.
     
    다음으로 진행하기 전에 Absorbption, in-scattering, out-scattering 에 익숙하지 않으시다면, 꼭 레퍼런스2 에서 해당 내용을 확인해 보시길 추천드립니다.
     

    2.1. Single scattering 기반 대기 산란 식

    그림1. Single scattering 방식의 대기산란 식 (출처 : 레퍼런스1)

    그림1의 식에 나오는 항목들의 설명은 다음과 같습니다.

    • c : 카메라의 위치
    • v : 현재 위치에서 카메라로의 방향
    • p : 표면과 충돌한 지점의 위치
    • t_atmo : 현재 위치에서 라이트 방향으로 레이를 쐈을때 대기의 최상단까지의 거리
    • L0 : p 에서의 luminance. (즉, 가상 행성의 지면에서의 라이팅)
    • li : i 번째 라이트 방향
    • Ei : i 번째 라이트의 illuminance
    • σa : absorption(흡수되는 luminance 비율)
    • σs : scattering(out-scattering 되는 luminance 비율)
    • σt = σa + σs : extinction (absorption 와 out-scattering 으로 잃어버리는 에너지의 총 비율)
    • Phase function p : 라이트의 방향과 카메라의 방향을 기반으로 카메라 방향이 있을 때, 카메라 방향으로 산란이 일어나는 비율

     
    이제 그림1의 식을 하나씩 뜯어봅시다.

    2.1.1. Transmittance function

    그림2. Trancemittance 함수 (출처 : 레퍼런스1)

    T(Xa, Xb) 함수부터 확인해 봅시다. T 함수는 구간 Xa ~ Xb 사이를 이동하면서 extinction 으로 잃어버리고 남은 luminance 의 비율을 나타냅니다. 식 내부에 extinction 계수 σt 는 Optical Depth 입니다. 이것은 경로 이동 중에 luminance 를 얼마나 감소하게 될지를 나타냅니다. 대기는 고도가 낮을수록 밀도가 높고 고도가 높을수록 밀도가 낮습니다. 그래서 σt(x) 형태로 현재 위치를 기반하여 extinction 정보를 얻어오는 것을 볼 수 있을 것입니다.
     

    2.1.2. Shadowing function

    그림3. Shadowing function (출처 : 레퍼런스1)

    다음으로 S(x, li) 함수를 확인해 봅시다. 여기서 x 는 현재위치, li 는 라이트의 방향입니다. S 식의 Vis(li)는 i 번째 라이트의 Visibility 여부를 나타냅니다. 만약 Visibility 값이 1이라면, T 를 추가로 평가해야 합니다. T(x, x + t_atmo * li)는 태양으로 부터온 라이트가 대기를 지나 x 로 이동했을 때 남아있는 비율을 나타냅니다.
     

    2.1.3. Single scattering function

    그림4. Single scattering function (출처 : 레퍼런스1)

    계속해서 Lscat(c, x, v) 함수를 봅시다. 여기서 c 는 카메라의 위치, x 는 현재위치, v 는 현재위치에서 카메라위치로의 방향벡터입니다. 이 식은 앞에 구한 T와 S 식 그리고 Phase function, σs, Ei 를 사용합니다. Phase function 의 경우 라이트가 진행하는 방향과 카메라의 방향을 기준으로 얼마만큼의 비율이 카메라의 방향으로 스케터링 되는지에 대한 정보입니다. σs 는 위에서 설명했듯 out-scattering 되는 라이트의 비율입니다. Ei 는 i 번째 라이트의 illuminance 입니다. S 에서는 라이트의 감소 비율만 계산했기 때문에 초기 라이트의 값이 필요합니다. 그래서 E 를 여기서 곱해줍니다. 그러면 이 식에서 우리가 모르는 내용은 없네요. 식을 다시 한번 봅시다.
    Lscat 의 시그마 부분의 식을 먼저 봅시다. 모든 라이트에 대해 T * S * p * E 를 곱한뒤 더하는 것을 볼 수 있습니다. S * E 식은 태양에서 나온 라이트가 대기상단에서 현재위치까지 이동한 뒤 남은 라이트를 알 수 있습니다. 그림5 의 빨간색 선을 확인해 보세요. 다음으로 현재위치 x 에서 잔여 라이트의 양에 Phase function p 를 곱하여 카메라가 있는 방향으로 scattering 되는 라이트의 양을 계산합니다. 그리고 T 를 곱해주는데, T(c, x) 으로 현재위치 x 에서 카메라 위치 c 로 이동한 뒤 남은 라이트를 계산합니다. 그림5 의 초록색 선을 확인해보세요. 마지막으로 앞서 구한 결과에 σs 를 곱해줍니다. 현재위치에서 카메라 방향으로 향하는 라이트의 양은 현재 위치에서 out-scattering 되는 라이트의 양 중에서 Phase function 을 통해서 카메라 방향으로만 가는 라이트의 양을 얻어야 합니다. Phase function 은 이미 시그마내에서 곱해줬고, σs 는 공통으로 사용할 수 있는 변수이므로 식에서 빠져나온 것을 볼 수 있습니다.
    이 식은 한 번의 Scattering 으로 부터 얻어진 luminance 입니다. 그래서 Lscat은 Single scattering 식이 됩니다. 레퍼런스1에서는 이 식을 개선하여 Multiple scattering 을 적용합니다.
     

    그림5. Single scattering 에 대한 설명. 빨간색 선을 통해 태양으로 부터 in-scattering 된 라이트가 카메라 방향 c 로 scattering 되어 이동하는 것을 볼 수 있음. (출처 : 레퍼런스1)

     

    2.1.4. luminance function

    위의 Lscat 의 경우 카메라의 위치 c와 쉐이딩 포인트 p 사이에 있는 임의의 위치 x 한 곳에 대한 Single scattering 을 정의합니다. 그런데 실제로 c 와 p 사에는 수많은 구간이 있고 그 구간의 모든 지점에서 Single scattering 이 일어날 수 있을 것입니다. 그림6 의 빨간선을 봐주세요.

    그림6. Single scattering 은 쉐이딩 지점 p에서 카메라 위치 c 의 모든 구간에서 일어날 수 있기 때문에 실제로는 이 그림의 빨간색 선을 통해 모든 구간에서 in-scattering 이 일어남 (출처 : 레퍼런스1)

    이 부분을 고려한 식이 바로 아래의 식입니다. 이 식은 카메라의 위치 c 와 쉐이딩 포인트 p 사이의 모든 Single scattering 을 더합니다. 그리고 쉐이딩 포인트 p 에서 카메라 방향 c 로 반사되는 라이트를 L0 로 둡니다. 그리고 여기에 T(c, p) 를 곱하여 c와 p 를 사이를 이동후 남은 L0 의 양을 구하여 이전에 구한 식에 더합니다.
    정리하면, 쉐이딩 포인트 p 에서 부터 카메라 위치 c로 들어온 라이트와 p 에서 c 로 이동 중 발생한 Single scattering 라이트를 모두 합산한 값이 L 입니다. L은 실제 c 위치에서 관찰할 수 있는 라이트 (luminance) 입니다.

    그림7. 최종적으로 스크린에 평가될 픽셀의 luminance 를 나타내는 식 (출처 : 레퍼런스1)

    지금까지 이 글에서 가장 중요한 식을 봤습니다. 이제 대기 모델에 필요한 세부사항에 대해서 조금 더 확인해 봅시다.
     

    2.2. 행성의 특징

    • 행성의 지면은 Uniform albedo ρ = 0.3 인 순수한 diffuse 머터리얼로 가정합니다.
    • 지구의 경우 그림8 과 같이 나타낼 수 있습니다. 지구의 중심을 기준으로 지면은 6360km, 대기가 존재하는 최고 높은 고도는 6460km 입니다. 즉, 대기 레이어는 100km 정도입니다.

    그림8. 지구의 대기에 대한 설명. R_bottom 이 지면, R_top 이 대기 상단이며, 대기 레이어는 총 100km 정도임.

    2.3. 지구와 같은 행성을 렌더링 하기 위해 필요한 컴포넌트

    • Rayleigh : 라이트와 공기분자(air moecules) 의 상호작용을 나타냅니다.
      • 라이트는 흡수되지 않고 주변으로 스캐터링만 된다고 가정합니다.
      • 고도에 따른 밀도분포(density distribution) 은 (d^r)(h) = e^(-h/8km) 입니다.
      • Phase function 은 다음과 습니다. 여기서 θ 는 라이트의 입력방향과 스케터링 돼서 나가는 방향 사이의 각임.

    그림9. Rayleigh phase function, theta 는 라이트의 입력과 스케터링 되서 나가는 방향(카메라 방향)의 사이각 (출처 : 레퍼런스1)

    • Mie : 라이트와 Reyleigh 에 비해 상대적으로 큰 먼지와 같은 에어로졸(aerosols) 의 상호작용을 나타냅니다.
      • 라이트는 흡수되거나 산란될 수 있습니다.
      • 고도에 따른 밀도분포(density distribution) 은 (d^m)(h) = e^(-h/1.2km) 입니다.
      • Phase function은 Cornette-Shanks phase function 을 근사하여 사용합니다.
        • g 는 -1~1 범위고, 이것은 forward 와 backward scattering 의 상대 강도를 나타냅니다.
        • Henyey-Greenstein phase function 도 사용할 수 있습니다. 이 함수에 대한 설명은 레퍼런스4 에서도 다루고 있습니다.

    그림10. Mie phase function, Cornette-Shanks phase function. theta 는 라이트의 입력과 스케터링 되서 나가는 방향(카메라 방향)의 사이각. g는 -1~1 범위이고 forward ~ backward scattering 강도를 나타냄 (출처 : 레퍼런스1)

    • Ozone : 지구에만 있는 특수한 부분입니다. 태양이 지평선에 있을 때 Sky-blue 색상을 얻게 해 줍니다.
      • 라이트를 흡수하기만 합니다.
      • 고도에 따른 밀도분포(density distribution)는 가로 30km 이고, 중심에서 고도가 25km 인 tent function 를 사용합니다. 그림11 를 참고해 주세요. 식 (d^o)(h) = max(0, 1 - |h-25|/15)

    그림11. Ozone 의 밀도분포 함수. 식의 x 가 고도임.

    위의 세 가지 컴포넌트들의 scattering 과 absorption 을 그림12에서 볼 수 있습니다.

    그림12. Rayleigh, Mie, Ozone 에 대한 Scattering 과 Absorption 계수 (출처 : 레퍼런스1)

     
     

    2.4. 대기 산란을 관찰했을 때 우리가 확인할 수 있는 부분

    그림13. 대기 산란 렌더링 결과 비교. 위쪽 2개는 공중(Sky & aerial perspective)에서 촬영한 것이고 좌측은 volumetric shadow 끔, 우측은 켬. 아래 2개는 지면에서 촬영한 것이며, 좌측은 Multiple scattering 이 적용 안됨, 우측은 적용됨. (출처 : 레퍼런스1)

    • Rayleigh scattering 이 부드럽습니다. 그림12 를 보면 Reyleigh 의 경우 파란색을 많이 스케터링 하는 것을 볼 수 있습니다. 그림13 의 하늘이 파란색으로 나오는 것은 Reyleigh 의 영향을 많이 받는데 하늘의 파란색이 부드럽게 잘 빠지는 것을 볼 수 있습니다.
    • Mie scattering 으로 발생하는 태양 주변의 halo 효과가 꽤 부드럽습니다.
    • 그림13 의 아래쪽 좌측이 Multiple scattering 적용전이고, 우측이 적용 후입니다.
    • High frequency(급격한 변화) 는 지평선 방향에서 확인할 수 있습니다. 왜냐하면 대기의 밀도가 지면과 가까울수록 빠르게 증가하기 때문에 scattering 이 더 많이 일어나기 때문입니다.
    • 행성의 산과 같은 지면이 만들어내는 그림자들이 High frequency 를 만들어냅니다. 왜냐하면 Single scattering 이벤트를 차폐시키기 때문입니다.

     

    2.5. 실제 렌더링을 위해 사용되는 4개의 LUT

    1. Transmittance LUT
    2. Sky-View LUT
    3. Aerial Perspective LUT
    4. Multiple Scattering LUT

     

    2.5.1. Transmittance LUT

    Transmittance LUT 는 그림2 에서 봤던 T 함수를 캐싱해 둔 LUT 입니다. T 를 계산하기 위해서 적분을 계산해야 되는데, 런타임에 적분하는 것은 성능에 좋지 않으니 이 부분을 가속하는 데 사용합니다.

    • LUT 입력값 : uv.x : 대기 내에서의 높이 (0은 Bottom, 1은 Top), uv.y : CosZenithAngle (ZenithAngle 그림14 참고)
    • LUT 출력값 : Extinction(Absorb + out-scattering) 뒤 남아있는 luminance 비율

    그림14. Zenith angle 에 대한 설명

    2.5.2. Sky-View LUT

    Sky-View LUT 는 렌더링 중간에 다른 물체에 걸리는 것 없이 SkyBox or SkySphere 를 렌더링 할 때 사용하는 LUT 입니다. 이 식은 그림1 의 L 식으로 luminance 입니다.

    • LUT 입력값 : uv.x : 위도, uv.y : 경도
    • LUT 출력값 : Sky 를 렌더링할 때 사용되는 luminance(L) 값.

    대기 구성에 참여하는 매체가 Low frequency 인 것을 생각하면, 레이마칭을 적은 숫자로 해도 충분할 것입니다. 그래서 더 낮은 해상도에서 Sky 를 렌더링 한 뒤 더 높은 해상도로 업스케일 하는 형태로 그립니다. 그림16 를 보면 지평선에 가까울수록 High frequency 를 띄는 모습을 볼 수 있습니다. 그래서 uv.y 를 non-linear 방식으로 사용하여 지평선에 가까울수록 더 많은 픽셀을 사용하도록 합니다. 아래 그림15와 그림17 을 참고해 주세요.

    그림15. non-linear 방식의 고도 계산 (출처 : 레퍼런스1)
    그림16. Sky-View LUT. SkyBox or SkySphere 가 렌더링 될 때 사용됨. 지평선이 항상 텍스쳐의 가운데 위치하도록 렌더링 됨. (출처 : 레퍼런스1)
    그림17. non-linear 방식으로 고도를 계산하여 상대적으로 High frequency 를 가지는 지평선에서 높은 해상도를 얻을 수 있음. Sky-View LUT 는 저해상도 텍스쳐에 렌더링하여 업스케일링 하기 때문에 artifact 가 더 뚜렷하게 관찰됨. 위쪽과 아래쪽 이미지의 지평선 부분의 퀄리티로 확인할 수 있음. (출처 : 레퍼런스1)

     

    2.5.3. Aerial Perspective LUT

    이 LUT 는 SkyBox 가 아닌 오브젝트를 렌더링 할 때 사용하는 LUT 입니다. 장면에 있는 오브젝트는 카메라와 떨어진 거리가 얼마나 될지 모르기 때문에 Depth 를 기준으로 LUT 텍스쳐를 3D Texture 에 저장합니다. 기본 해상도는 32x32x32 입니다. Depth 가 32인데, 32 km 라는 의미입니다. (레퍼런스1에서는 포트나이트에서는 월드맵이 3km^2 이라 충분했다고 하네요). 실제 오브젝트가 렌더링되는 경우 거리를 기반으로 적절한 Depth 를 인덱싱하여 사용할 것입니다. 그림18 을 봐주세요.

    • LUT 입력값 : 카메라 뷰 기준 Screen uv 값, 거리기반 Slice index
    • LUT 출력값 : luminance(L) 값, Transmittance 값

    그림18. Aerial perspective LUT. 카메라 뷰를 기반으로 만들어지는 LUT 이며, 3D Texture 에 거리별로 Luminance 와 Transmittance 값을 캐싱함. SkyBox or SkySphere 가 아닌 오브젝트를 렌더링하는 경우에 사용됨. (출처 : 레퍼런스1)

     

    2.5.4. Multiple scattering LUT

    마지막으로 우리가 리뷰 중인 논문(레퍼런스1)의 핵심인 Multiple scattering LUT 입니다. 세부사항을 알아보기 전에 Multiple scattering 에 대해서 조금 더 알아보고 식을 어떻게 구성하는지도 확인해 봅시다.

    • LUT 입력값 : uv.x 태양의 CosZenithAngle, uv.y 대기 내에서의 높이(0이 Bottom, 1 이 Top)
    • LUT 출력값 : 현재 지점에서의 Multiple scattering 결과 (이 결과에 illuminance E 를 곱하여 실제 luminance 를 얻을 수 있음)

     

    2.5.4.1. 이전 대기 렌더링 기술의 특징과 새로운 방식의 목표

    레퍼런스1에서는 이전 대기 렌더링 기술은 다음과 같은 특징이 있다고 합니다.

    • Multiple scattering 의 구현은 3D or 4D LUT 를 반복적으로 업데이트하며, 1번의 반복당 order 1 라고 부릅니다.
    • 지구와 같은 대기에서는 Multiple scattering order 5 로도 괜찮지만, 더 두꺼운 대기에 적용하는 경우 더 많이 LUT 를 업데이트해야 되기 때문에 사용이 어려울 수 있습니다. (O(n) 의 연산복잡도, n 은 scattering order). 시분할로 처리할 수도 있겠지만 딜레이가 되기 때문에 실시간 GI 나 Reflection cube map 캡쳐에 영향을 줄 수 있습니다.

    레퍼런스1에서 이 Multiple scattering LUT 를 개선 목표는 다음과 같습니다.

    • Scattering order 와 무관하게 O(1) 에 완료하여 Multiple scattering 기여를 지연 없이 평가합니다. 그래서 모바일부터 하이엔드 디바이스까지 적용하는 것입니다.

     

    2.5.4.2. Multiple scattering 의 특징

    Multiple scattering 의 특징은 다음과 같습니다.

    • 특정 한 점에 도달하는 illuminance E 의 값은 그 점의 주변에서도 동일합니다. 대기 렌더링의 경우 다루는 범위가 상당히 넓기 때문에 해당 지점 주변의 E 가 거의 차이가 없다고 볼 수 있을 것입니다.
    • 현재 위치의 주변으로 더 높은 차수(order) 의 scattering 이벤트는 현재 위치를 둘러싸고 있는 Sphere 에 대한 Single scattering 의 적분으로 근사할 수 있습니다. 이때 이웃점들은 동일한 illuminance E 를 받고 있을 것이고 이것을 사용하여 Single scattering 이 일어날 것입니다. 이웃점들 간 이동 시에 Transmittance 또한 고려합니다.
    • Scattering order 가 2보다 같거나 크면, Scattering 방식이 isotropic phase function 가 됩니다. 그래서 Mie, Rayleigh phase function 은 Multiple scattering 에서 무시합니다.
    • 현재 위치의 이웃 점들은 모두 동일한 양의 2 order scattering 을 가집니다.

     

    2.5.4.3. Multiple scattering 식 유도 및 LUT 생성

    그림19. Multiple scattering 를 위해 L_2ndOrder(좌측), F_ms(우측) 를 유도하는 것을 보여줌 (출처 : 레퍼런스1)

    • 이전 내용을 기반으로 2개의 함수를 정의합니다. 2 order scattering 기여를 나타내는 L_2ndOrderf_ms 입니다.
      • L_2ndOrder 에 대해서 먼저 알아봅시다. 이 식은 이웃지점에서 현재 방향으로의 Single scattering L 의 총합니다. 이때 이웃지점은 주변 Sphere 방향 전체를 말합니다. 그림19 의 왼쪽을 봐주세요. 그리고 L_2ndOrder 식은 그림20 을 봐주세요. Single scattering 을 구표면적에 대해서 적분하는 식을 확인할 수 있습니다. 그리고 그림20 의 식에서 Ei 는 1로 설정하여 Transfer function 과 같이 동작하도록 합니다. Transfer function 은 나중에 디렉셔널 라이트의 illuminance 를 곱하게 되면 실제 픽셀에 기여하는 luminance 값을 얻을 수 있는 함수입니다. 그림24 식을 보면 추후에 디렉셔널 라이트의 illuminance 를 곱해줍니다.
      • f_ms 에 대해서 이야기해봅시다. 이식은 L_2ndOrder 에서 S(x, ws)와 Phase function pu가 빠진 것입니다.
        • S(x, ws) 와 pu 는 L_2ndOrder 에서 적용되었기 제거됩니다. 그림21의 식을 확인해 주세요.
        • 마지막으로 그림19 의 우측을 보면 f_ms 또한 구표면적에 대해서 적분하는 것을 확인할 수 있습니다.

    그림20. L_2ndOrder 식 (출처 : 레퍼런스1)
    그림21. f_ms 를 구하는 식. (출처 : 레퍼런스1)

     

    • f_ms 는 Sphere 전체 방향에서 현재 지점으로 scattering 이 1회 일어나는 것을 의미합니다. 이것이 무한번 일어나서 계속 누적된다면, 무한등비급수를 통해서 표현할 수 있을 것입니다. 그리고 그 결과를 F_ms 로 둡니다.

    그림22. f_ms 가 무한히 일어난 결과를 F_ms 로 둠. (출처 : 레퍼런스1)

    • 최종 Multiple scattering 기여는 Ψ_ms (프사이라고 읽음) 이며, 위에서 구한 L_2ndOrder * F_ms 입니다.

     

    그림23. 최종적으로 구한 Multiple scattering 기여 Psi_ms 를 LUT 에 저장함 (출처 : 레퍼런스1)

    이렇게 구해진 Ψ_ms 가 LUT 에 저장됩니다.
     

    2.6. 최종적으로 얻어진 Multiple scattering 식

    이렇게 만들어진 Ψ_ms 가 Single scattering 식을 Multiple scattering 식으로 어떻게 바꾸는지 확인해 봅시다. 그림24와 같이 Single scattering 식에 Multiple scattering 더해줍니다.

    그림24. Multiple scattering 이 반영된 최종식. 그림1에 있는 (3) 식을 변형한 것임. (출처 : 레퍼런스1)

     
    다음 글에서는 실제 코드 구현을 리뷰해볼 것입니다. 코드에서는 논문에서는 언급하지 않은 좋은 아이디어들이 많았습니다. 이 부분을 리뷰해 보는 것도 의미 있는 것 같아서 다음글에 다뤄보겠습니다.
     

    3. 레퍼런스

    1. A Scalable and Production Ready Sky and Atmosphere Rendering Technique, Sébastien Hillaire
    2. Absorption and Scattering (흡수와 산란)
    3. Accurate atmospheric scattering
    4. Atmospheric Shadowing
     
     
     
     

    댓글

Designed by Tistory & scahp.