- 2022.07.20. 정리2022년 07월 21일
- 디지털 블리자드
- 작성자
- 2022.07.21.:55
래이 캐스팅, 래이 트레이싱 정리하기
래이 캐스팅
레이캐스팅은 2차원 맵에서 3차원의 원근감을 만드는 렌더링 기술입니다.
레이캐스팅은 스크린의 모든 수직선에 대해 계산만 하면 돼서 속도가 빠릅니다.
예전의 컴퓨터는 현재보다 느려서 3D 엔진을 실시간으로 실행할 수 없던 과거에는 레이캐스팅이 최초의 해결책이였습니다.
레이캐스팅과 레이트레이싱은 다릅니다.
레이캐스팅은 저사양에서도 실시간으로 작동하는 빠른 semin-3D 기술인 반면,
레이트레이싱은 실제 3D장면의 반사와 그림자를 지원해서 고사양이 필요한 현실감있는 렌더링 기술입니다.
레이 케스팅 기본적인 원리출처 - https://wonillism.tistory.com/183
2차원 정사각형 그리드로 된 맵이 있다고 합시다.
맵의 한 칸은 0 또는 양수 값을 갖습니다.(0은 벽이 없음을 의미하고, 양수값은 특정 벽을 의미합니다.)
화면의 모든 x값(수직선)에 대해 플레이어 위치에서부터 시작하는 광선(Ray)를 쏩니다.
이 때 광선의 방향은 플레이어가 바라보는 방향, 그리고 화면의 x좌표에 의존한다.
이 광선은 2D맵 위에서 벽에 부딪힐 때까지 직진하다가, 벽에 부딪히면 적중지점(hit point)으로부터 플레이어까지 거리를 잽니다.
이 거리에 따라 벽의 높이가 화면에 얼마만큼 그려져야 하는지 결정됩니다.
벽의 높이는 플레이어와 벽 사이의 거리가 멀수록 화면에 더 낮게, 가까울 수록 더 높게 표시됩니다.
이것들은 모두 2차원 계산으로 구할 수 있는 것들입니다.
상단의 이미지는 위에서 내려다 본 2차원 평면도 입니다.
광선이 플레이어에서 시작해서 벽에 도달하는 것을 보여줍니다.
광선이 처음으로 부딪히는 벽을 찾으려면, 광선을 플레이어의 위치에서부터 출발시켜 광선이 벽에 포함되는지 반복적으로 검사 해야합니다.출처 - https://ko.wikipedia.org/wiki/%EA%B4%91%EC%84%A0_%ED%88%AC%EC%82%AC
광선이 벽에 포함되는 것으로 확인되면, 벽에 포함되는지 확인하던 loop는 멈추게 되고, 거리를 측정해서 알맞은 높이로 벽을 표현해줍니다.
반대로 광선이 벽에 포함되지 않는 것으로 확인되면, 계속해서 추적합니다.
광선 방향에 맞는 새로운 위치에서 벽에 포함되는지 다시 검사합니다.
벽에 부딪힐 때까지 계속해서 반복합니다.
광선이 어디서 벽에 부딪히는지 한눈에 알 수 있는 사람과는 다르게, 컴퓨터는 광선의 경로 상에 있는 한정된 지점들만 검사할 수 있기 때문에 공식 하나로 뚝딱 알아낼 수 없습니다.출처 - https://wonillism.tistory.com/183
레이캐스터는 보통 광선의 위치에 일정한 값을 더해주며 반복하는 방식으로 벽에 부딪혔는지 검사합니다.
이렇게하면 벽에 부딪혔는데도 이를 놓치고 벽에 부딪히지 않았다고 판단할 가능성도 있습니다.
예를 들어 상단 이미지의 광선에서 일정한 간격으로 떨어져있는 적색 점들에서 검사한 경우를 봅시다
광선은 파란색 벽을 통과하여 직진하지만 컴퓨터는 빨간색 점이 있는 위치에서만 확인했기 때문에 이를 감지하지 못합니다.
더 많은 위치를 확인하면 컴퓨터가 벽을 놓칠 가능성이 줄어들지만 더 많은 계산이 필요하게 됩니다.출처 - https://wonillism.tistory.com/183
이번에는 검사지점의 간격이 반으로 줄여서 광선이 벽과 충돌 했음을 확인할 수 있게 됩니다.
그래도 위치가 정확하지는 않다는 문제점이 있습니다.출처 - https://wonillism.tistory.com/183
광선이 닿는 벽의 모든 면을 검사하는 방법이 있습니다.
정사각형 한 칸 너비를 1이라 하면, 모든 벽면을 정수값으로 표현할 수 있습니다.
이 튜토리얼에서는 DDA알고리즘을 기반으로 진행합다.
DDA 알고리즘은 2차원 그리드를 지나가는 선이 어떤 네모칸과 부딪히는지 찾을 때 일반적으로 사용되는, 속도가 빠른 알고리즘입니다.
그래서 이 알고리즘을 사용해서 광선이 맵에서 어떤 네모칸이랑 부딪히는지 찾아낼 수 있고, 벽에 부딪힌 것이 확인되면 이 알고리즘은 중단됩니다.
출처
https://wonillism.tistory.com/183
https://github.com/365kim/raycasting_tutorial/blob/master/2_basics.md
https://ko.wikipedia.org/wiki/%EA%B4%91%EC%84%A0_%ED%88%AC%EC%82%AC레이 트레이싱 (Ray Tracing)
1980년 Turner Whitted가 An improved illumination model for shaded display 논문에서 발표한 기법으로 이미지의 픽셀 하나하나를 통과하는 광선들이 있다 가정하고 그 광선(Ray)을 역추적(Trace)하는 방식입니다.
당연히 현실에 가장 가까우며 셰이더의 필요성이 기존 방식에 비해 현저히 낮습니다.
그러나 광원이 아닌 시점으로부터 추적하는 방식은 많은 문제를 가져 왔습니다.
세이더 자체가 Path Tracing을 할 수 없는 로컬 일루미네이션에 현실감을 주기 위해 많이 쓰이기 때문입니다.
대신 픽셀 하나하나를 통과하는 광선이 있다 생각하기 때문에, 요구 연산량이 엄청나게 많습니다.
게다가 광선의 산란이나 반사를 추적하기 위해서는 한 픽셀에 여러 번 연산을 해야 하는데 실시간 연산은 아주 간단한 렌더링이 아닌 이상 엄청난 연산이 요구되어 실시간 렌더링이 필요하지 않는 프리 렌더링 영상(영화, 광고, 드라마 등에서 쓰이는 CGI 등)에서는 이미 90년대 부터 쓰였으나 2010년대 후반까지만 해도 실시간 렌더링은 몇몇 실험적이거나 간단한 렌더링이 아니라면 실현되지 않았습니다.
이 정도의 연산은 80년대에 비해서 GPU가 엄청난 발전을 거듭했음에도 성능 문제로 인해 2018년부터 일부 게임에서 사용하기 시작했습니다.
한 때 1080p의 해상도는 아득히 높고 540p에 지포스 GTX 1080을 4개 SLI해도 노이즈 없이 60FPS을 달성할 수 없었습니다.
그러나 튜링 마이크로아키텍처를 기반으로 한 지포스 RTX 20 시리즈가 등장함으로서 어느 정도까지는 구현이 가능할 수 있게 되었습니다.
RTX 2080 Ti로 돌릴 경우 1080p 60FPS, RTX 최적화를 거치면 RTX 2080으로 1440p 60FPS까지 뽑을 수 있습니다.
완전히 레이 트레이싱만으로 화면을 만들어내는 것이 아닌, 낮은 해상도를 레이 트레이싱으로 렌더링 한 뒤에 AI를 이용해 화면을 합성해 결과물을 만들어내는 것으로 보입니다.
레이 트레이싱의 방대한 연산량을 우회한 방법입니다.
또한 이 레이 트레이싱 기법은 해상도를 줄이다보니 자연스레 광선 추적량이 줄어들게 됩니다.
또한, 언리얼 엔진의 테크 데모는 상당히 적은 오브젝트를 배치했고, 유리 굴절 같은 것은 보이지 않고, 사람의 맨살을 비롯한 난반사 재질이 드러나지 않고 있습니다.
즉, 완전히 기존 영화 산업의 렌더링 기법과 퀄리티면에서 완벽할 수 없다는 것입니다.
하지만 그럼에도 불구하고 기존의 렌더링 비용을 비롯한 여러가지 자원을 절약한다는 면에서 획기적인 신기술임은 확실하다고 볼 수 있습니다.출처 - https://www.youtube.com/watch?v=ykVGLdHJaoE 출처 - https://www.youtube.com/watch?v=Giy4omPRYpc 출처 - https://www.youtube.com/watch?v=Giy4omPRYpc 출처 - https://www.youtube.com/watch?v=Giy4omPRYpc 출처 - https://www.youtube.com/watch?v=Giy4omPRYpc
출처
https://namu.wiki/w/%EB%A0%8C%EB%8D%94%EB%A7%81
https://www.youtube.com/watch?v=Giy4omPRYpc
https://www.youtube.com/watch?v=ykVGLdHJaoE'과제(숙제)' 카테고리의 다른 글
2022.07.26 과제 (0) 2022.07.27 2022.07.25 과제 (0) 2022.07.25 2022.07.18 정리 (0) 2022.07.18 22.07.12 과제 (0) 2022.07.13 22.06.29 과제 (0) 2022.06.30 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)