ray marching 활용

반응형

기존 글 목록 :

https://mgun.tistory.com/5441

 

ray marching 1

이전에 ray casting에 대해 다루어 보았다.https://mgun.tistory.com/4342 ray casting을 이해해 보자..목표 ray를 이해하고 구현해보자. ray(광선) casting(투사)는 무었인가? 레이캐스팅에 대해 알기 위해서는 이

mgun.tistory.com

https://mgun.tistory.com/5462

 

ray marching 2

ray marching 1.https://mgun.tistory.com/5441 ray marching 1이전에 ray casting에 대해 다루어 보았다.https://mgun.tistory.com/4342 ray casting을 이해해 보자..목표 ray를 이해하고 구현해보자. ray(광선) casting(투사)는 무

mgun.tistory.com

https://mgun.tistory.com/5473

 

ray marching 3

기존 글 목록https://mgun.tistory.com/5441 ray marching 1이전에 ray casting에 대해 다루어 보았다.https://mgun.tistory.com/4342 ray casting을 이해해 보자..목표 ray를 이해하고 구현해보자. ray(광선) casting(투사)는 무

mgun.tistory.com

https://mgun.tistory.com/5474

 

ray marching 4

기존 글 목록 :https://mgun.tistory.com/5441 ray marching 1이전에 ray casting에 대해 다루어 보았다.https://mgun.tistory.com/4342 ray casting을 이해해 보자..목표 ray를 이해하고 구현해보자. ray(광선) casting(투사)는 무

mgun.tistory.com

 

최근에 ray marching 관련 내용을 작성했는데 마지막 편으로 활용에 대해 간단하게 

정리하고 마무리 하려고 한다.

참 사람들 아이디어도 좋은게 너무 많고 똑똑한 사람도 참 많구나 라는 생각을 하게 된다.

따라가기에도 벅차지만 좀 더 이 일의 보람을 느끼기 위해 계속 ㄱㄱ.

https://www.shadertoy.com/results?query=tag%3Draymarching

 

내가 참 사랑하는 shadertoy에서 raymarching을 태그로 해서 검색해 보면 정말 많은 작품들이 나온다.

이 글을 쓸 시점에서 검색해 보니 12(한 화면에 나오는 갯수) x 702(페이지 수) = 약 8400개 정도의 

작품이 있다.

이 중에서 좋아요를 많이 받은 작품 몇개만 체크해 보자.

 

Clouds

https://www.shadertoy.com/view/XslGRr

 

Shadertoy

 

www.shadertoy.com

레이마칭은 볼륨렌더링 기반에 잘 어울리는 기술이다보니 이를 활용하여 구름을 표현할 때 많이 쓰인다.

이 작품은 2295의 하트(내꺼도 하나)를 받은 작품이다.

 

이 작품은 어떻게 구성되어 있는지 살짝 분석해 보자.

vec4 render( in vec3 ro, in vec3 rd, in ivec2 px )
{
float sun = clamp( dot(sundir,rd), 0.0, 1.0 );

    // background sky
   . .

    // clouds    
    vec4 res = raymarch( ro, rd, col, px );
    ..
    
    // sun glare    
    ..

    // tonemap
   ..
}

여기서 raymarch라는 함수를 사용하는데 인자로 ro(카메라 위치, ray origin), rd(카메라가 바라보는 지점, ray destination),

그리고 col(카메라에 따른 배경 하늘 색상)과, 루프 시간함수값을 인자로 받는다.

 

이 raymarch 라는 함수에서 메인계산이 이루어지는데 간략해서 적어보자면. 아래와 같은 연산을 거친다.

원하는 step만큼 raymarch를 수행하며 해당 위치의 밀도 값을 얻어 이를 기반으로 최종색상을 계산한다.

1. 현재 위치 계산 : 시작점(카메라 위치) ro에서 방향 rd를 따라 거리 t만큼 진행

2. 범위 체크 : 높이범위를 벗어나거나 누적된 알파가 불투명에 도달하면 중단.

3. 현재 위치에서 밀도값(density) 샘플링

4. 밀도값이 임계점 이상 존재할 경우 광선에 영향을 준다.

5. lighting 계산

6. 밀도를 기반으로 밝고 어두운 부분 계산.

7. 조명효과를 적용.

8. 거리에 따른 배경색 mix

9. 알파블렌딩을 통한 결과누적

10. 거리에 따라 스텝 사이즈 증가.

 

사실 코드는 좀 더 복잡하고 다양한 기능들이 들어가 있지만 레이마칭을 활용하는 부분만 보자면

이러한 과정을 거친다.

 

다음 작품은 Raymarching tutorial 이라는 이름의 작품인데, 이 작품은 ray marching 기술을

shader toy에서 놀라울 정도로 직관적으로 보여주고 있다.

만약 ray marching을 처음 접하는 사람은 이 작품을 보길 추천함.

https://www.shadertoy.com/view/4dSfRc

 

Shadertoy

0.00 00.0 fps 0 x 0

www.shadertoy.com

 

 

'Study > Graphics ' 카테고리의 다른 글

ray marching 4  (0) 2025.03.30
ray marching 3  (0) 2025.03.29
ray marching 2  (0) 2025.03.23
ray marching 1  (0) 2025.03.09
ray casting을 이해해 보자..  (0) 2023.01.10
TAGS.

Comments