언리얼 엔진에서 자연 환경을 만들 때는 지형을 높이고 나무를 배치하는 작업만으로 끝나지 않는다.
Landscape의 해상도와 Component 구조를 먼저 정해야 하며, Foliage의 밀도와 경사 조건을 조절해야 식생이 자연스럽게 배치된다.
외부 프로그램에서 수정한 애니메이션 에셋을 가져오거나 다른 프로젝트로 옮길 때는 Alembic과 Migrate의 동작 방식도 이해해야 한다.
이번 포스트에서는 Landscape로 기본 지형을 만들고, Foliage를 활용해 나무를 배치했다.
이후 식생의 바람과 계절을 조절하고, Fab에서 가져온 풍력발전기를 Cinema 4D에서 수정해 Geometry Cache 애니메이션으로 불러오는 과정까지 진행했다.
Landscape
언리얼 엔진 상단의 Selection Mode를 열고 Landscape를 선택하면 Landscape Mode로 진입할 수 있다.


Landscape 생성 설정
새 Landscape를 만들기 전에 다음 네 가지 설정을 확인해야 한다.

Section Size
Section Size는 Section 하나에 포함되는 가로·세로 방향의 Quad 수다.

이번 작업에서는 63×63 Quads를 사용했다.
화면에 보이는 작은 격자 하나하나가 Landscape를 구성하는 Quad에 해당한다.
Sections Per Component
Sections Per Component는 Component 하나를 몇 개의 Section으로 나눌지 정하는 설정이다.
- 1×1 Section: Component 하나에 Section 1개
- 2×2 Sections: Component 하나에 Section 4개


Section은 Landscape의 LOD가 전환되는 기본 단위다.
2×2를 사용하면 Component 하나가 4개의 Section으로 나뉜다.
Section 하나는 Landscape LOD 계산과 Draw Call의 단위이므로 Section 수에 따른 비용은 증가한다.
다만 같은 전체 해상도를 여러 개의 1×1 Component로 구성하는 것보다, 2×2 Section을 사용해 Component 수를 줄이는 편이 더 효율적일 수 있다.
Number of Components
Number of Components는 Landscape를 X축과 Y축 방향으로 몇 개의 Component로 구성할지 정한다.
이번에는 8×8로 설정했기 때문에 총 Component 수는 64개가 된다.

Overall Resolution
Overall Resolution은 최종 Landscape를 구성하는 전체 Vertex 해상도다.
이번 설정은 다음과 같이 계산된다.
63 Quads × 1 Section × 8 Components + 1 Vertex = 505 Vertices
따라서 최종 해상도는 505×505가 된다.
Quad의 양 끝을 구성하려면 Vertex가 한 줄 더 필요하기 때문에 마지막에 1이 추가된다.
Landscape 생성 & Sculpt 사용하기
설정을 마친 뒤 Create를 누르면 평면 형태의 Landscape가 생성된다.


이후 Sculpt 도구를 사용해 지형의 높낮이를 만들 수 있다.
- 마우스 좌클릭: 지형을 높임
- Shift + 좌클릭: 지형을 낮춤



Shift + 좌클릭은 Sculpt 값을 반대 방향으로 적용해 높이를 낮추는 기능이다.
물이나 바람에 깎인 것과 같은 침식 형태를 만들 때는 별도의 Erosion Tool을 사용해야 한다.
처음부터 큰 산을 한 번에 만들기보다 브러시 크기와 강도를 낮춰 여러 번 쌓아 올리는 편이 형태를 조절하기 쉽다.
나무 배치하기: Foliage Mode
Landscape가 완성되면 Selection Mode에서 Foliage를 선택하거나 Shift + 3을 눌러 Foliage Mode로 이동한다.
사용할 나무와 식생 에셋을 Foliage 목록에 등록하고, 배치할 에셋의 체크박스를 활성화한다.

Density 설정
Foliage Type의 Density는 해당 식생의 기본 배치 밀도를 결정한다.



Brush Options의 Paint Density는 이 기본 Density에 적용되는 배수다.

따라서 식생별 전체 기준 밀도는 Foliage Type에서 정하고, 특정 구역을 칠할 때의 강도는 Brush Density로 조절하는 것이 편하다.
Scale 범위 설정
Scaling을 Uniform으로 설정한 뒤 Scale X의 Min과 Max를 다르게 지정하면, 그 범위 안에서 크기가 무작위로 결정된다.

모든 나무를 같은 크기로 배치하면 반복되는 패턴이 쉽게 보인다.
작은 나무와 큰 나무가 섞이도록 범위를 주면 같은 에셋을 사용해도 훨씬 자연스럽게 보인다.
Landscape Filter 확인
Landscape 위에 Foliage가 배치되지 않는다면 Filters의 Landscape가 활성화되어 있는지 확인해야 한다.

Foliage Mode의 Filter는 식생을 배치할 수 있는 표면을 결정한다.
Landscape뿐 아니라 Static Mesh, BSP, 다른 Foliage, Translucent 표면도 필요에 따라 선택할 수 있다.
경사면에 나무 배치하기
기본 설정에서는 경사가 지나치게 가파른 곳에 Foliage가 배치되지 않을 수 있다.

이때 Foliage Type의 Ground Slope Angle 옵션을 확인해야 한다.
Placement - Ground Slope Angle은 Foliage를 배치할 수 있는 경사 각도 범위를 결정한다.
최대 각도를 높이면 가파른 언덕에도 나무를 칠할 수 있다.


Align to Normal
가파른 경사에 나무를 배치하면 나무가 경사면의 방향을 따라 기울어질 수 있다.

이는 Align to Normal이 활성화되어 있기 때문이다.
- 활성화: 표면의 Normal 방향에 맞춰 기울어짐
- 비활성화: 월드의 수직 방향을 유지함
실제 나무는 경사면에서 자라도 대체로 위쪽을 향해 자라기 때문에, 큰 나무는 Align to Normal을 끄고 작은 풀이나 바위는 켜는 방식으로 구분할 수 있다.


경사 허용 각도만 높였을 때 나무가 산비탈에 누운 것처럼 보였는데, Align to Normal까지 함께 확인하니 원인을 바로 찾을 수 있었다.
배치된 Foliage 수정하기
Erase
Erase를 사용하면 브러시가 지나간 영역의 Foliage를 제거할 수 있다.
Erase Density는 삭제 후 남겨 둘 목표 밀도다.
- 0: 해당 영역의 Foliage를 모두 제거
- 0보다 큰 값: 일부를 남기면서 밀도를 낮춤

따라서 Erase Density는 반드시 0이어야 작동하는 것이 아니라, 완전히 지우고 싶을 때 0으로 설정하는 것이다.
Lasso
Lasso는 브러시로 칠한 영역에 포함된 Foliage 인스턴스를 선택할 때 사용한다.


선택한 인스턴스는 이동하거나 개별적으로 삭제할 수 있다.
선택 범위에서 일부 인스턴스를 제외하려면 Shift를 누른 상태로 좌클릭해 선택을 해제할 수 있다.
Reapply
Reapply는 이미 배치된 Foliage에 변경된 설정을 다시 적용하는 도구다.
기존 밀도를 조정하려면 Reapply 항목의 Density를 활성화한 뒤 Density Adjustment Factor 값을 설정한다.

이후 Reapply 브러시로 기존 Foliage가 배치된 영역을 칠하면, 해당 영역의 인스턴스 밀도가 설정한 배율에 따라 조정된다.


Reapply는 전체 숲을 지우고 다시 칠하지 않아도 밀도를 조정할 수 있어, 배치가 어느 정도 끝난 뒤 수정할 때 특히 유용했다.
Invalid
Invalid는 배치 기준이 사라지거나 잘못 연결된 Foliage 인스턴스를 선택하는 도구다.

버튼이 활성화되지 않거나 선택되는 인스턴스가 없다면 일반적으로 현재 확인할 수 있는 Invalid Foliage가 없는 상태다.
BlackAlder 에셋
Pivot Painter & Simple Wind 차이
이번에 사용한 BlackAlder 에셋에는 PivotPainter와 SimpleWind 폴더가 구분되어 있었다.

Pivot Painter는 각 가지와 잎의 Pivot 및 계층 정보를 이용해 나무의 부분별 움직임을 계산한다.
가까운 거리에서 나뭇가지가 서로 다른 방향과 강도로 흔들리는 모습을 표현할 때 유리하다.
Simple Wind는 Pivot Painter 버전보다 단순한 바람 표현을 사용하므로, 많은 인스턴스를 배치하는 배경용 Foliage에 상대적으로 활용하기 쉽다.

BlackAlder의 바람과 계절 조절
BlackAlder 에셋의 BP_GlobalFoliageActor_UE5를 레벨에 배치하면 해당 에셋의 바람과 계절 관련 값을 한 곳에서 조절할 수 있다.


Wind
- Wind Strength: 흔들리는 강도
- Wind Speed: 흔들리는 속도



Season & Health
- Season Strength: 계절 색 변화의 적용 강도
- Season Brightness: 계절 색상의 밝기
- Season Saturation: 계절 색상의 채도
- Health: 식생의 건강 상태 표현

Season Strength와 Season Saturation을 높이면 초록색 잎이 붉거나 주황빛이 강한 가을 색으로 바뀌는 모습을 확인할 수 있었다.


또한 레벨에 배치된 Foliage Actor가 사용하는 나뭇잎 Material Instance에서 Winter 옵션을 활성화하면 잎이 사라지고 가지 중심의 겨울 상태로 바뀌었다.



이 기능들은 언리얼 엔진의 모든 Foliage에서 제공되는 공통 기능이 아니라 BlackAlder 에셋의 Blueprint와 Material에 구현된 전용 기능이다.
Fab 에셋을 C4D에서 수정해 애니메이션 추가하기
이번에는 Fab에서 가져온 풍력발전기를 Cinema 4D에서 수정해 날개가 회전하도록 만들었다.
언리얼에서 FBX Export
풍력발전기 원본 Static Mesh를 우클릭하고 Asset Actions - Export를 선택한다.

이번 작업에서는 불필요한 데이터를 줄이기 위해 LOD와 Collision 관련 Export 옵션을 해제하고 FBX로 저장했다.

C4D에서 날개 분리
FBX를 C4D에서 연 뒤 날개 부분만 선택한다.

Select - Fill Selection을 이용해 날개가 연결된 Polygon을 선택한 뒤 Split을 실행했다.
이때 Keep Polygons in Source Object를 해제하면 선택한 날개가 원본 오브젝트에서 분리되어 새로운 오브젝트로 생성된다.
반대로 옵션을 활성화하면 원본에도 같은 Polygon이 남으므로, 중복된 날개가 생기지 않았는지 확인해야 한다.




회전축 정리
날개가 자연스럽게 회전하려면 Object Axis가 날개 허브의 실제 회전 중심에 있어야 한다.

Axis가 바깥쪽에 있으면 날개가 중심을 기준으로 도는 것이 아니라 원을 그리며 공전한다.
따라서 회전 애니메이션을 만들기 전에 Axis를 날개 허브의 회전 중심으로 이동시킨다.



반복 회전 애니메이션
날개의 Rotation에 시작과 끝 키프레임을 추가한다.

회전 속도가 일정해야 하므로 F-Curve의 보간 방식을 Linear로 변경한다.

이후 Track의 After 설정을 Offset Repeat로 변경하면 마지막 회전값에 이어서 회전이 반복된다.


애니메이션 저장하기: Bake as Alembic
몸체와 날개를 하나의 그룹으로 정리한 뒤 Bake as Alembic을 실행했다.



이번 작업에서는 오브젝트 누락을 방지하기 위해 몸체와 날개를 모두 선택한 상태에서 Bake를 진행했다.
완료 후에는 생성된 Alembic 파일을 다시 확인해 몸체와 날개가 모두 포함되었는지, 애니메이션 구간이 정상적으로 저장되었는지 확인하는 것이 좋다.
이번 작업에서는 Bake가 완료된 뒤 C4D 파일이 저장된 위치에 alembic 폴더와 .abc 파일이 생성됐다.


파일 용량이 예상보다 지나치게 작다면 Export 범위와 선택 대상을 확인할 필요가 있다.
다만 파일 크기만으로 성공과 실패를 단정하지 말고, 언리얼에서 다음 항목을 함께 확인하는 것이 정확하다.
- Track이 모두 표시되는지
- Frame Start와 End가 맞는지
- 날개와 몸체가 정상적으로 재생되는지
- 재생 중 메시가 사라지거나 깨지지 않는지
Alembic을 Geometry Cache로 Import하기
언리얼 엔진에서 .abc 파일을 Import한 뒤 다음 항목을 확인한다.
- Animation Track 활성화
- Import Type: Geometry Cache
- Flatten Tracks: 작업 목적에 따라 해제
- Recompute Normals: 노멀이 깨질 때 활성화


Recompute Normals는 노멀을 강제로 다시 계산하는 옵션이다.
원본 Alembic에 모든 프레임의 정상적인 노멀이 포함되어 있다면 언리얼은 기존 노멀을 사용할 수 있으므로, 항상 켜야 하는 옵션은 아니다.
Geometry Cache는 정점이 프레임마다 변하는 애니메이션을 재생할 수 있지만, 메시 복잡도와 프레임 수가 커질수록 데이터 비용도 증가한다.
Import를 완료한 뒤 Geometry Cache를 레벨에 배치해 메시와 Material 상태를 확인했다.
이번 Alembic 파일에서는 원본 Material이 Geometry Cache에 자동으로 연결되지 않았기 때문에, 레벨에 배치하면 기본 재질로 표시됐다.


Geometry Cache에 Material 적용하기
Alembic으로 가져온 Geometry Cache에 원본 Material이 정상적으로 연결되지 않았다면 새 Material을 만들고, 원본 에셋에서 사용한 Texture를 Import한 뒤 Base Color에 연결한다.


생성한 Material을 레벨에 배치된 Geometry Cache Actor의 Material Override에 지정하면 원본에 가까운 색상으로 표시된다.


Geometry Cache 재생: Level Sequence
Geometry Cache를 레벨에 배치한 뒤 Level Sequence를 생성한다.
- 레벨에 배치한 Geometry Cache Actor를 Sequencer에 추가
- Actor Track의 + Track 누름
- Geometry Cache Track을 추가
- Timeline을 재생해 애니메이션을 확인
Geometry Cache Track은 시작·종료 Offset과 Play Rate를 조절할 수 있으며, Sequencer에서 프레임 단위로 애니메이션을 확인할 수 있다.
Alembic을 Import한 것만으로 Sequencer에서 자동 재생되는 것은 아니기 때문에 Geometry Cache Track까지 추가해야 한다.



다른 프로젝트에 에셋 옮기기: Migrate
완성한 Geometry Cache를 다른 언리얼 프로젝트에서도 사용하기 위해 Migrate를 진행했다.
옮길 에셋을 우클릭한 뒤 Asset Actions - Migrate 메뉴를 선택한다.

Asset Report가 열리면 함께 복사될 에셋과 종속 파일을 확인하고, 이후 대상 프로젝트의 최상위 Content 폴더를 선택하면 된다.

Migrate는 선택한 에셋뿐 아니라 참조된 Material과 Texture 등의 종속 에셋도 함께 복사한다.
종속 에셋의 체크를 해제하면 Material이나 Texture가 누락되어 결과가 깨질 수 있다.
Material이 함께 옮겨지지 않은 이유와 해결 방법
Migrate가 끝난 뒤 새 프로젝트를 열면 기존 프로젝트와 같은 Content 경로에서 Geometry Cache를 확인할 수 있다.

이번 작업에서는 Material을 Geometry Cache 에셋 자체에 연결하지 않고, 레벨에 배치한 Geometry Cache Actor의 Material Override에 지정했다.
이 상태에서 Geometry Cache 에셋만 Migrate했기 때문에 새 프로젝트에는 Actor에 설정했던 Material이 함께 이동하지 않았고, Geometry Cache를 레벨에 배치하면 기본 재질로 표시됐다.

Migrate는 선택한 에셋과 해당 에셋이 참조하는 종속 에셋을 함께 복사한다.
따라서 Geometry Cache가 Material을 직접 참조하고 있다면 관련 Material과 Texture도 함께 이동할 수 있지만, Material이 레벨의 Actor Override에만 지정되어 있다면 Geometry Cache의 종속 에셋으로 포함되지 않을 수 있다.
이를 해결하는 방법은 다음과 같다.
- 원본 Material과 Texture를 Geometry Cache와 함께 선택해 Migrate
- 필요한 Texture를 PNG 등의 이미지 파일로 Export한 뒤 새 프로젝트에 다시 Import
이번 작업에서는 원본 Texture를 PNG로 Export해 새 프로젝트에 Import한 뒤, 새 Material을 생성해 Base Color에 연결했다.


이후 생성한 Material을 Geometry Cache Actor의 Material Override에 지정하면 원본에 가까운 색상으로 표시된다.


수동으로 Texture를 옮길 때는 Base Color뿐 아니라 Normal, Roughness 등 원본 Material에서 사용한 맵도 함께 확인해야 한다.
마지막으로 Level Sequence를 생성하고 같은 방식으로 Geometry Cache Track을 추가하면 새 프로젝트에서도 애니메이션을 재생할 수 있다.


이번 포스트에서는 Landscape로 지형을 만들고 Foliage를 배치하는 기본 작업부터, 식생의 바람과 계절을 조정하는 방법까지 익혔다.
여기에 Fab 에셋을 Cinema 4D에서 수정하고 Alembic으로 다시 가져오는 과정, 완성한 에셋을 Migrate로 다른 프로젝트에 옮기는 과정까지 연결하면서 언리얼 환경 제작의 전체적인 파이프라인을 확인할 수 있었다.
이번 작업에서 Landscape의 Section과 Component 구조, Foliage의 배치 조건, Migrate가 처리하는 에셋 참조 관계가 각각 다른 문제와 연결된다는 점을 확인할 수 있었다.
나무가 경사면에 눕거나 Material이 함께 옮겨지지 않는 문제도 단순히 기능을 다시 실행하기보다, 관련 설정과 참조 구조를 확인하는 편이 원인을 찾기 쉬웠다.
'3D Video Production > Unreal Engine (5.6.1)' 카테고리의 다른 글
| UE 5.6 Height Map & Mask로 Landscape 만들기 (0) | 2026.07.15 |
|---|---|
| UE 5.6 Landscape 기초: 지형 생성부터 Material Paint, Water까지 (0) | 2026.07.14 |
| UE 5.6 버스 정류장 씬 제작: 시네마스코프 & Foliage 적용하기 (0) | 2026.07.11 |
| UE 5.6 Decal & 유리 Material 만들기: Alpha, Fresnel, IOR 활용 (0) | 2026.07.10 |
| UE 5.6 버스 정류장 씬 제작: 네온 간판 & 물웅덩이 머티리얼 만들기 (0) | 2026.07.09 |