3D Video Production/Unreal Engine (5.6.1)

UE 5.6 RealityScan 포토그래메트리

보별 2026. 8. 21. 13:42
반응형

RealityScan은 여러 장의 사진에서 공통 특징점을 분석해 카메라 위치와 피사체의 형태를 계산하고, 텍스처가 포함된 3D 모델을 생성하는 포토그래메트리 프로그램이다.

이번 작업에서는 진저브레드와 망치 샘플 사진으로 모델을 만들었다.
RealityScan에서 모델을 생성한 뒤 Cinema 4D에서 메시를 정리하고, Materialize와 Unreal Engine 5.6에서 머티리얼과 텍스처 해상도를 설정한 과정을 순서대로 정리했다.

 

RealityScan & 포토그래메트리

포토그래메트리는 여러 위치에서 촬영한 사진을 비교해 피사체의 3차원 형태를 계산하는 기술이다.
RealityScan은 사진뿐 아니라 LiDAR 데이터도 활용할 수 있지만, 이번 수업에서는 일반 이미지 기반 작업을 진행했다.

2026년 8월 기준 RealityScan Desktop은 Epic Games Launcher의 Unreal Engine 영역에서 설치할 수 있다.

RealityScan 공식 페이지에서는 학습에 사용할 수 있는 샘플 데이터도 제공한다.
이번 작업에서는 진저브레드 샘플로 자동 처리 과정을 먼저 확인하고, 이후 별도의 망치 사진으로 수동 공정을 진행했다.

 

사진을 촬영할 때 확인할 점

RealityScan 작업은 프로그램 설정 이전에 촬영 단계에서 품질이 결정되는 경우가 많다.
공식 가이드에서는 각 표면점이 최소 두 장 이상의 선명한 사진에 보여야 하며, 한 위치에서 파노라마처럼 회전하기보다 피사체 주변을 실제로 이동해 촬영할 것을 권장한다.
한 번에 크게 시점을 바꾸지 말고 한 바퀴를 완성하는 것도 중요하다.

대략 50~80장을 기준으로 삼았지만 사진 수는 절대 조건이 아니다.
피사체 크기와 복잡도에 따라 더 적거나 많을 수 있으며, 인접 사진이 약 70% 정도 겹치도록 촬영하는 편이 안정적이다.

촬영 체크리스트

  • 피사체를 중심으로 여러 높이에서 360도 촬영
  • 인접 사진의 겹침을 충분히 확보
  • 초점, 화각, 노출, 화이트 밸런스를 가능한 한 일정하게 유지
  • 흔들리거나 초점이 빗나간 사진은 제외
  • 직사광선과 강한 그림자보다 흐린 날이나 그늘처럼 부드럽고 일정한 빛 활용
  • 투명한 유리, 거울, 광택이 강한 금속과 플라스틱은 가능하면 피함
  • 바람에 흔들리는 식물이나 움직이는 물체 피함
  • 스마트폰의 자동 렌즈 전환과 디지털 줌 끔

ISO 100 이하, 1/120초 또는 그보다 빠른 셔터 속도, 높은 F-stop은 실습 기준으로 참고할 수 있지만 모든 환경의 절대값은 아니다.
조리개를 지나치게 조이면 회절로 선명도가 떨어질 수 있으므로, 피사체 전체의 초점과 흔들림·노이즈 사이에서 균형을 잡아야 한다.
색온도 역시 항상 5500K로 고정하기보다 촬영 세트에 맞는 값을 정한 뒤 전체 사진에서 유지하는 것이 중요하다.

사진 수를 늘리는 것보다 흐릿한 사진을 빼고 촬영 간격을 일정하게 맞추는 편이 정렬 결과에 더 직접적인 차이를 만들었다.

회전판을 사용할 때

회전판 방식은 카메라를 삼각대에 고정하고 피사체를 돌려 촬영한다.
다만 포토그래메트리는 기본적으로 정지된 장면 주변을 카메라가 이동한다고 가정하므로, 고정된 배경의 특징이 많이 보이면 피사체보다 배경을 기준으로 정렬할 수 있다.

따라서 회전판을 사용할 때는 다음 사항을 함께 고려한다.

  • 피사체와 함께 회전하는 마커 배치
  • 손이 사진에 들어오지 않도록 회전
  • 피사체에 비해 지나치게 작은 회전판은 피함
  • 배경을 단순하게 만들고 필요하면 Mask를 사용
  • 고정 카메라 방식에서는 카메라 위치 메타데이터를 끄는 방식 검토

RealityScan의 AI Masking은 회전판 촬영이나 배경 특징이 적은 환경에서 피사체를 분리하는 데 활용할 수 있다.
별도의 마스크 이미지를 일반 촬영 이미지처럼 섞어 가져오는 것이 아니라, 공식 명명 규칙에 따라 Mask Layer로 연결해야 한다.

 

RealityScan 자동 작업: Start로 빠르게 모델 생성하기

RealityScan의 WORKFLOW 탭에서 Images를 누르면 여러 사진을 선택해 가져올 수 있고, Folder를 누르면 폴더 안의 이미지를 한꺼번에 가져올 수 있다.
사진은 드래그 앤 드롭으로도 추가할 수 있다.

사진을 가져온 뒤 Start를 누르면 설정된 자동 처리 공정이 실행된다.
기본적인 전체 작업에서는 이미지 정렬, 포인트 클라우드 생성, 메시 생성, 텍스처 생성까지 이어서 처리할 수 있다.
다만 Start가 실행하는 공정은 드롭다운 설정에 따라 달라질 수 있으므로, 실행 전에 설정을 확인하는 것이 좋다.

생성이 끝나면 3D View에서 메시와 텍스처 상태를 확인한다.
결과가 괜찮다면 상단의
Export 또는 MESH & COLOR - Export - Model & Point Cloud를 이용해 내보낼 수 있다.

이번 작업에서는 후처리를 위해 FBX 형식을 사용했다.
모델과 함께 텍스처를 내보내고, 알파 채널이 필요하지 않은 경우 Texture Pixel Format을
24-bit BGR로 지정했다.

 

RealityScan 수동 작업: Alignment부터 Texture까지

자동 작업은 전체 흐름을 빠르게 확인하기 좋지만, 수동 작업을 통해 각 공정의 역할을 더 정확하게 이해할 수 있다.

원본 이미지 가져오기

Images 또는 Folder로 촬영 이미지를 가져온다.
폴더 안에 별도의 Mask 이미지가 있다면 일반 원본 사진과 무작정 섞지 말고, 마스크를 사용할 때 RealityScan의 Mask Layer 규칙에 맞춰 불러온다.

Align Images 실행

ALIGNMENT - Align Images를 선택한다.
RealityScan은 사진 속 공통 특징점을 찾아 카메라의 위치와 방향을 계산하고, 희소 포인트 클라우드를 만든다.

정렬이 끝났을 때 필요한 사진이 하나의 주요 Component에 들어갔는지 확인한다.
여러 Component로 분리되었다면 사진 사이의 겹침, 흔들림, 반사, 노출 변화부터 점검한다.

Reconstruction Region 조절

Alignment가 끝나면 흰색 박스로 표시되는 Reconstruction Region을 모델링할 부분에 맞춘다.
텐키 시점 전환을 이용하면 위·옆 방향에서 영역을 맞추기 편하다.

바닥 전체와 주변 노이즈까지 포함하면 계산량이 늘고 정리할 면도 많아진다.
모델링할 피사체와 필요한 최소 바닥만 남기는 것이 좋다.

Normal Detail로 메시 생성

MESH & COLOR - Normal Detail을 선택해 메시를 생성한다.
Preview는 빠른 확인에 적합하고, High Detail은 계산 시간과 메모리 사용량이 크게 증가한다.
일반적인 소품 실습에서는 Normal Detail만으로도 형태를 확인하기에 충분했다.

Texture 생성

메시가 완성되면 Texture를 실행한다.
Texture는 정렬된 원본 사진을 UV에 투영해 표면 색을 만든다.

Color는 버텍스 컬러가 필요할 때 사용하는 별도의 작업이므로, 일반적인 텍스처 기반 자산에서는 Texture를 우선 사용하면 된다.

FBX와 텍스처 내보내기

Model & Point Cloud를 선택하고 FBX로 내보낸다.

모델이 선택되지 않았거나 텍스처가 계산되지 않았다면 관련 내보내기 옵션이 활성화되지 않을 수 있다.

이번 작업에서는 다음 항목을 확인했다.

  • File Format: FBX
  • Texture Pixel Format: 24-bit BGR

 

Cinema 4D에서 스캔 모델 최적화하기

RealityScan에서 내보낸 FBX를 Cinema 4D로 열면 작은 삼각형이 매우 조밀하게 생성된 것을 확인할 수 있다.

이러한 메시는 형태를 자세히 표현하지만, 편집과 저장, 다른 프로그램으로의 전송이 무거워질 수 있다.

Polygon Reduction 적용

이번 작업에서는 Cinema 4D의 Polygon Reduction Generator를 사용했다.

Reduction Strength는 제거할 비율에 가깝게 이해할 수 있다.

  • Reduction Strength 90% 1회: 약 10%가 남음
  • Reduction Strength 90% 2회: 약 1%가 남음

예를 들어 첫 결과의 10%만 남긴 뒤 다시 그 결과의 10%를 남기면 원본의 약 1/100이 된다.

좌측: Reduction Strength 90% 1회 / 우측: Reduction Strength 90% 2회

텍스처가 이미 적용된 스캔 모델은 Preserve UV Boundaries를 활성화하는 방식을 우선 검토한다.
이 옵션은 UV 경계가 지나치게 무너지는 것을 줄이는 데 도움이 되지만, 보존 범위가 커질수록 폴리곤 감소 폭이 제한될 수 있다.
실루엣과 주요 디테일을 보면서 최종 Triangle Count를 결정하는 것이 좋다.

이후 폴리곤을 직접 삭제하려면 C 키를 눌러 Polygon Reduction Generator를 편집 가능한 오브젝트로 변환해주면 된다.

Remesh를 사용하지 않은 이유

Remesh는 균일한 폴리곤과 더 나은 Edge Flow를 만들 수 있어 스캔 메시의 리토폴로지에 유용하다.
하지만 기존 UV를 단순히 그대로 보존하는 것은 아니고, Remesh 과정에서 UV 좌표가 변환되고 인접 UV 섬이 연결되면서 문제가 생길 수 있다.

이번 모델은 RealityScan에서 이미 UV와 Diffuse 텍스처가 생성된 상태였기 때문에, 재투영이나 재베이크 없이 Remesh를 적용하면 텍스처가 어긋날 위험이 있었다.
따라서 기존 UV를 유지하기 쉬운 Polygon Reduction을 사용했다.

불필요한 폴리곤 제거

폴리곤 수를 줄인 뒤 진저브레드의 쿠키 부분만 남기고 나무 바닥과 주변의 불필요한 면을 제거했다.

망치 모델도 같은 방식으로 바닥과 노이즈를 정리할 수 있다.

정리가 끝나면 FBX로 다시 내보낸다.
이때 모델의 방향과 스케일도 함께 확인한다.
RealityScan의 기본 좌표 단위와 Cinema 4D, Unreal의 단위 해석이 다를 수 있으므로 Unreal에서 크기가 비정상적으로 보이면 임포트 스케일만 임의로 바꾸기 전에 전체 파이프라인의 단위를 먼저 확인하는 편이 좋다.

 

Materialize에서 텍스처 맵 생성하기

Materialize는 한 장의 이미지 또는 기존 텍스처에서 게임용 재질 맵을 생성할 수 있는 무료 오픈소스 프로그램이다.
Diffuse에서 Height·Metallic·Smoothness를 만들거나, Height에서 Normal을 만드는 작업 등이 포함된다.

Diffuse Map 불러오기

Diffuse Map 영역의 O 버튼을 누르고 RealityScan에서 생성한 Diffuse 텍스처를 선택한다.

Diffuse를 불러오면 일부 맵의 Create 버튼이 활성화된다.
Normal처럼 Height를 기반으로 만드는 맵은 Height Map을 먼저 생성해야 버튼이 활성화될 수 있다.

Height Map 생성

Height Map의 Create를 누르고 미리보기를 보면서 주파수, 대비, Gain 등을 조절한다.

조정이 끝나면 Set as Height Map을 눌러 적용한다.

Normal·Metallic·Smoothness Map 생성

Height가 준비되면 Normal Map을 생성하고, 필요에 따라 Metallic과 Smoothness를 만든다.

여기서 모든 자동 맵을 반드시 사용하는 것은 아니다.
진저브레드의 쿠키와 아이싱은 비금속이므로 Metallic은 검은색, 즉 0을 기본값으로 두는 편이 PBR에 맞다. Materialize가 만든 Metallic Map은 후보 자료로 보고 실제 재질과 비교해 판단해야 한다.

또한 Materialize는 Smoothness를 생성하지만 Unreal의 머티리얼 입력은 Roughness다. 두 값은 반대이므로 Unreal에서 OneMinus 노드로 뒤집어 연결해야 한다.

프로젝트와 맵 저장

출력 형식을 선택하고 Save Project를 누르면 Materialize 프로젝트 파일과 생성한 맵을 저장할 수 있다.

이번 작업에서는 JPG로 저장했지만, Normal·Smoothness처럼 연속적인 값을 가진 데이터 맵은 손실 압축에 의해 블록이나 링잉이 생길 수 있다.
최종 자산은 PNG 또는 TGA로 저장하는 편이 안전하다.

Materialize 미리보기만 볼 때는 그럴듯해 보여도, Unreal의 실제 조명 아래에서 과도하게 반짝이거나 요철이 뒤집혀 보일 수 있으므로 최종 판단은 엔진에서 해야 한다.

 

Unreal Engine 5.6에서 모델과 텍스처 적용하기

Cinema 4D에서 정리한 FBX와 Materialize에서 만든 텍스처를 Unreal Engine으로 가져온다.

머티리얼을 생성한 뒤 텍스처를 다음과 같이 연결한다.

텍스처 Unreal 연결 확인할 설정
Diffuse 또는 Base Color Base Color sRGB 활성화
Normal Normal Compression Settings가 Normalmap인지 확인, sRGB 비활성화
Metallic Metallic 데이터 맵이므로 sRGB 비활성화. 비금속은 0 우선
Smoothness OneMinus → Roughness sRGB 비활성화

Normal Map의 굴곡이 반대로 보이면 텍스처 설정의 Flip Green Channel을 확인한다.
Unreal은 공식 Texture Asset Editor에서 Green Channel 반전 옵션을 제공한다.

머티리얼을 저장한 뒤 Static Mesh를 열고 Material Slots의 Element 0에 생성한 머티리얼을 지정한다.

스캔 모델의 표면이 플라스틱처럼 지나치게 반짝이면 다음 순서로 확인한다.

1. Smoothness를 Roughness에 바로 연결하지 않았는지 확인
2. Metallic이 비금속 부분에서 0인지 확인
3. Diffuse에 촬영 당시의 강한 하이라이트가 구워져 있지 않은지 확인
4. Normal 강도가 지나치게 높지 않은지 확인

처음 적용한 결과가 밝고 선명해 보여도 PBR 값이 잘못되면 조명이 바뀌는 순간 재질의 부자연스러움이 더 크게 드러난다.

Nanite 사용 여부

고밀도 스캔 모델은 Nanite의 장점을 얻을 수 있지만, 이번처럼 Polygon Reduction을 거쳐 약 2만 개 수준의 삼각형만 남은 단일 소품에서는 반드시 필요한 설정은 아니다.
목표 플랫폼, 같은 메시의 배치 수, 머티리얼과 충돌 비용을 기준으로 활성화 여부를 결정한다.

Nanite를 사용하더라도 스캔 과정에서 생긴 바닥, 노이즈, 내부 면과 비정상적인 실루엣을 정리하는 작업은 여전히 필요하다.

 

8K 텍스처 해상도 줄이기

RealityScan에서 생성한 Diffuse가 8192×8192라면 이를 기반으로 Materialize에서 만든 맵도 같은 8K 해상도를 가질 수 있다.
8K 텍스처 여러 장은 GPU 메모리와 저장 용량을 크게 사용하므로 실제 화면 크기에 맞게 제한해야 한다.

LOD Bias 사용

텍스처를 열고 Level of Detail - LOD Bias를 조절한다.
8K 정사각형 텍스처에서 다른 Bias가 없다면 다음처럼 계산된다.

  • LOD Bias 0: 8192×8192
  • LOD Bias 1: 4096×4096
  • LOD Bias 2: 2048×2048

최종값은 해당 텍스처의 값만이 아니라 Texture Group과 플랫폼 설정이 합산된 Combined LOD Bias로 결정된다.
따라서 상단의
Displayed와 Max In-Game 수치를 함께 확인해야 한다.

Maximum Texture Size 사용

Compression - Advanced - Maximum Texture Size에 4096처럼 최대 크기를 직접 입력할 수 있다.
0은 플랫폼과 포맷이 허용하는 최대 크기를 사용한다는 뜻이다.

LOD Bias와 Maximum Texture Size는 Unreal이 생성하거나 사용할 최대 Mip을 제한하는 비파괴 설정이다.
Import된 파일은 여전히 8192×8192로 남을 수 있다.

원본 파일과 프로젝트 소스 아트 자체를 줄이려면 Photoshop의 Image - Image Size에서 4096×4096으로 리사이즈한 뒤 저장하고 재임포트해야 한다.

여러 텍스처를 한꺼번에 수정하기

Content Browser에서 대상 텍스처를 모두 선택한 뒤 다음 메뉴를 사용한다.

우클릭 - Asset Actions - Edit Selection in Property Matrix

Property Matrix에서 Maximum Texture Size를 입력하면 선택한 텍스처에 같은 값을 일괄 적용할 수 있다.
Base Color, Normal, Roughness 등 같은 자산 세트의 최대 해상도를 통일할 때 편리하다.

최종 해상도는 실제 사용 거리에서 4K와 2K의 차이를 확인한 뒤 결정하면 된다.

 

전체 작업 순서 정리

  1. 피사체를 여러 높이와 각도에서 겹치도록 촬영
  2. RealityScan에 원본 이미지를 가져옴
  3. 빠른 확인은 Start, 세부 작업은 Align Images부터 진행
  4. Reconstruction Region을 필요한 영역에 맞춤
  5. Normal Detail로 메시 계산
  6. Texture 생성
  7. FBX와 텍스처를 Export
  8. Cinema 4D에서 Polygon Reduction과 불필요한 면 삭제 진행
  9. Diffuse 원본이 지나치게 크다면 Photoshop에서 4K 등으로 줄임
  10. Materialize에서 Height·Normal·필요한 보조 맵을 만듦
  11. Unreal Engine에 FBX와 텍스처를 Import
  12. Smoothness 반전, Metallic 값, sRGB와 Normal 설정 확인
  13. Static Mesh에 머티리얼 적용
  14. LOD Bias 또는 Maximum Texture Size로 런타임 해상도 조절

 

RealityScan은 사진만으로 복잡한 형태와 텍스처를 빠르게 생성할 수 있지만, 생성된 결과를 그대로 Unreal Engine에 넣는 것만으로 작업이 끝나지는 않는다.

스캔 메시의 폴리곤 수와 불필요한 면을 정리하고, 기존 UV를 보존하면서 텍스처 맵의 의미를 정확히 맞춰야 한다.
특히 Materialize의 Smoothness와 Unreal의 Roughness 차이, 비금속 재질의 Metallic 값, 8K 원본과 엔진의 런타임 해상도 제한을 구분하는 것이 중요하다.

RealityScan에서 모델이 만들어지는 과정은 생각보다 빨랐지만, 실제로 Unreal에서 사용하려면 C4D의 메시 정리와 텍스처 설정까지 확인해야 했다.
특히 Smoothness와 Roughness의 차이, 8K 원본과 엔진에서 사용하는 해상도를 구분하는 과정이 이번 작업의 핵심이었다.