[UE5][RVT] RVT(Runtime Virtual Texture)로 바퀴 자국에 빗물 고이게 하기

Tony Kim·2025년 7월 26일
0

언리얼로 개발하기

목록 보기
17/19
post-thumbnail

※ 참고: 언리얼 엔진의 RVT를 사용해보신 분을 대상으로 작성합니다.

들어가기

진행 중이던 프로젝트에서 바퀴 자국을 RVT에 그려 출력하던 경험이 있습니다. 근데 이게 랜드스케이프에 결국 그려야 하기 때문에 랜드스케이프의 다양한 생태 효과들이 함께 적용되어야 했습니다. 그 중 하나가 비가 왔을 때 동적으로 퍼들이 생기는 기능. 바퀴 자국은 움푹 파인 곳이라 물이 고여야 할 것 같은데...


RVT(Runtime Virtual Texture)

필요한 텍셀 데이터만 런타임에 GPU로 생성하는 기술입니다. 보통 랜드스케이프를 그릴 때 사용하며 머테리얼에서 렌더링/샘플링 모두 가능합니다.


RVT를 사용하는 이유

랜드스케이프 렌더링 비용 절감

지금 렌더링되고 있는 랜드스케이프 컴포넌트의 랜드스케이프 머테리얼에서 5장의 텍스쳐 샘플러를 사용하고 있다고 가정해봅시다.

  • 이 머테리얼을 렌더링하기 위해선 매 프레임 GPU에서 10장의 텍스쳐를 샘플링 해야합니다.

그런데 이 5장의 샘플링 결과를 RVT에 그리고, 그 RVT를 샘플링해서 최종 출력을 한다고 가정해봅시다.

  • 이 머테리얼을 렌더링하기 위해선 RVT가 갱신되어야 하는 시점에만 GPU에서 10장의 텍스쳐를 샘플링하면 됩니다.
  • 나머지 프레임엔 RVT 한 장만 샘플링하면 됩니다.

여기에 기타 연산들이 들어간다고 가정해봅시다.

  • 텍스쳐 샘플링과 기타 연산들을 모두 RVT가 갱신되어야 하는 시점에만 실행합니다.
  • 나머지 프레임엔 RVT 한 장만 샘플링하면 됩니다.

RVT가 갱신되어야 하는 시점이란?
RVT에 렌더링을 새로 해야하는 상황이 생기면 RVT는 갱신됩니다. 반대로 얘기하면, 아래와 같은 상황이 자주 일어나면 RVT를 사용해서 얻는 이득이 적어집니다.

  • 예시 1) 랜드스케이프를 RVT에 렌더링하는데, 새로운 랜드스케이프 컴포넌트가 스트리밍 될 때
  • 예시 2) RVT에 렌더링하는 텍스쳐의 UV 계산이 변경될 때

랜드스케이프와 액터들의 블랜딩

랜드스케이프 → 메시

이 부분은 이미 너무 유명한 쓰임이라 간단히 언급하고 넘어가겠습니다.
랜드스케이프 머테리얼에서 그린 RVT를 메시 머테리얼에서 샘플링하여 적절히 블랜딩하는 경우입니다.
주로 랜드스케이프와 접하는 면의 자연스러운 블랜딩을 위해 사용합니다.

예시
출처: https://www.reddit.com/r/unrealengine/comments/zem3bz/simply_put_runtime_virtual_texturing_or_rvt_is_a/

메시 → 랜드스케이프

이 부분은 위 케이스보단 많이 알려지지 않은 것 같지만 잘 활용하면 좋은 효과를 볼 수 있습니다.
액터를 RVT로 렌더링하는 방법은 이미 공식 문서에 자세히 소개되어 있습니다.

  1. 공식 문서에 소개된 내용은 스플라인 메시를 RVT에 렌더링하고 RVT를 랜드스케이프에 렌더링함으로서 랜드스케이프 표면에 스플라인 메시 머테리얼을 입히는 방식입니다. 이렇게 하면 스플라인 메시를 마치 데칼처럼 사용할 수 있습니다.
  2. 꼭 보이는 것만 RVT에 렌더링할 필요는 없습니다. 다양한 데이터를 RVT에 저장하고 이를 랜드스케이프에서 샘플링해 가공하면 추가적인 효과를 낼 수 있습니다.
  • 바퀴 자국에 빗물 고이게 하기

    Red Dead Redemption 예시 (영상)

    예컨대 비가 오면 랜드스케이프에 물이 고이도록 구현했다고 가정해봅시다. 보통 랜드스케이프 머테리얼에서 랜드스케이프 레이어 간 하이트 블랜딩을 하기 위해 각 레이어의 하이트맵을 사용할 텐데요, 그 하이트를 바탕으로 비가 왔을 때 낮은 영역부터 물을 그려내면 됩니다.

    진흙 하이트맵 예시출처: https://filterforge.com/filters/12837-bump.html물이 차는 영역 예시

    근데 바퀴 자국은 1번 사례(공식 문서)와 같이 스플라인 메시의 바퀴 자국 노말을 RVT에 그리는 방식으로 구현했다고 해봅시다. 이 바퀴 자국에도 물이 고이도록 하려면 어떻게 하면 될까요?

    바퀴 자국 머테리얼에서 바퀴 자국의 하이트맵을 RVT에 그려 이를 랜드스케이프에서 샘플링해 기존의 랜드스케이프 텍스쳐들의 하이트 정보와 블랜딩하고, 이를 바탕으로 빗물을 그려내면 되겠죠!

    하이트맵 블랜딩 예시 최종 물 차는 영역 예시
profile
게임 테크니컬 아티스트

0개의 댓글