
개요
이전에 찾아봤던 프로시주얼 관련 자료중에 굉장히 인상깊었던 영상이 있었는데,
유비소프트의 기술력에 관한 자료였다.
현시점에서는 무려 7년전에 공개된 발표 자료인데도 여러 노하우에서 배울 점이 있다.
개발기간을 생각하면 기술 도입 시점은 최소 10년전이 아닐까 싶다.
특히 AAA급 게임을 개발하기 위해 후디니를 잘 접목시켰는데,
이제 AI 요약이 많이 발전한만큼 영상을 요약해두면 추후 도움이 많이 되리라 생각하여 소개한다.
요즘은 언리얼 자체 기능인 PCG 등 절차적 생성 방식이 국내에서도 많이 대중화 되고 있는 추세라 생각되는데,
어쩌면 이 흐름에 모태가 되는 기술이 아닌가 싶다.
영상
타임라인별 상세 요약
[00:00:00 - 00:03:06] 서론 및 초기 과제
유비소프트 몬트리올의 기술 아티스트로 소개하고, Far Cry 5 프로젝트에 참여하면서 절차적 개발 경험을 활용하여 파이프라인을 구축하게 된 배경을 설명합니다 [01:20]. 이어서 발표 내용에 대한 간략한 개요를 제시하고, 프로젝트 초기에 직면했던 주요 과제를 언급합니다.
가장 큰 문제는 지형이 끊임없이 변화한다는 것이었습니다 [03:11].
약 2년 반 동안 Far Cry 5의 지형이 여러 차례 반복적으로 변경되었는데, 이러한 변화에 맞춰 수동으로 콘텐츠(예: 숲)를 배치하면 지형이 바뀔 때마다 다시 작업해야 하는 비효율성이 발생했습니다 [03:39].
또한 여러 사용자가 월드를 관리할 때 일관성을 유지하는 것도 어려웠습니다. 지형 생성을 프로젝트 초기에 고정하는 것은 게임 품질에 필수적인 반복적인 개발 과정을 방해하므로 현실적인 해결책이 아니었습니다 [04:19].
[00:03:07 - 00:06:53] 절차적 파이프라인의 목표
이러한 과제를 해결하기 위해 절차적 파이프라인을 구축했고, 몇 가지 주요 목표를 설정했습니다.
- 매크로 관리 도구 개발: 자연스러운 콘텐츠로 월드를 채우는 도구를 개발하여 지형의 토폴로지(형태)와 일관성을 유지해야 했습니다 [04:48]. 이를 통해 지형 변화에도 숲 분포 패턴이 자동으로 적응하여 일관된 결과를 유지할 수 있었습니다 [04:57].
- 자동화: 파이프라인은 Houdini와 엔진 내에서 자동화되어야 했으며, 빌드 머신에서 야간(nightly) 생성을 통해 매일 밤 월드를 새로고침해야 했습니다 [05:11]. 이는 사용자가 매일 아침 최신 월드를 받을 수 있도록 보장합니다 [05:41].
- 확정적(Deterministic) 데이터 생성: 동일한 입력이 주어지면 항상 동일한 결과가 나와야 했습니다 [05:51]. 이는 여러 빌드 머신에서 월드의 다른 부분을 처리할 때 인접한 맵 사이의 이음매 없는(seamless) 전환을 보장하는 데 중요합니다 [06:07].
- 사용자 친화적: 야간 빌드만으로는 부족하며, 사용자가 작업 중에 절차적 생성을 직접 베이크할 수 있어야 했습니다 [06:38]. 이를 위해 모든 도구는 편집기(에디터) 내에서 사용 가능하도록 만들었습니다 [06:45].
[00:06:54 - 00:14:36] 절차적 도구 개요 및 사용자 관점
처음에는 바이옴 분포에만 초점을 맞췄지만, 프로젝트가 진행됨에 따라 다양한 다른 도구들도 개발하게 되었습니다.
- 담수 도구 (Freshwater tools): 호수, 강, 개울, 폭포를 생성합니다 [07:16].
- 울타리 및 전력선 도구 (Fences and power line tools): 울타리와 전력선 네트워크를 생성합니다 [07:22].
- 절벽 생성 도구 (Cliff generation): 가파른 지형 표면에 절벽 지오메트리를 생성합니다 [07:26].
- 바이옴 도구 (Biome tool): 월드 전체에 식생을 분포시킵니다 [07:31].
- 안개 밀도 맵 생성 (Fog density map generation): 지형의 토폴로지, 담수의 위치 등을 기반으로 안개 밀도 맵을 생성하여 안개 셰이더에 사용합니다 [07:36].
- 월드 맵 지형 및 미니어처 나무 (World map terrain and miniature trees): 월드 맵 지형과 그 위에 미니어처 나무를 스캐터링합니다 [07:51].
사용자 관점에서 이 도구들을 활용하여 빈 맵을 채우는 과정을 설명합니다 [08:10].
- 지형 변형 (Terraforming): 사용자는 먼저 지형을 변형합니다. Far Cry 5의 초기 월드는 머신에서 생성되었지만, 대부분의 지형 작업은 편집기 내 도구를 사용하여 수동으로 이루어졌습니다 [08:24].
- 담수 네트워크 배치: 커브와 스플라인을 사용하여 담수 네트워크(강, 호수 등)를 배치합니다 [08:34]. 스플라인을 통해 강의 너비 등을 직접 제어할 수 있으며, 절차적 생성을 실행하면 물 표면, 애셋 스캐터링, 지형 텍스처가 생성됩니다 [08:51].
- 절벽 생성: 지형 경사를 기반으로 절벽을 생성합니다 [09:15]. 사용자들은 대부분 야간 빌드에서 절벽이 자동으로 생성되므로 수동으로 실행하지 않는 경우가 많았습니다 [09:39].
- 식생 추가 (바이옴 페인터): 바이옴 페인터를 사용하여 식생을 추가합니다. 사용자들은 특정 영역에 어두운 녹색을 칠하여 숲이나 풀밭을 지정하고, 절차적 생성을 실행하면 잔디와 숲 바이옴이 자동으로 분포됩니다 [09:58]. 이 레시피는 물 근접성에 반응하여 특정 애셋이나 종을 생성하며, 절벽 침식선에는 식생 생성을 피하고, 고도에 따라 더 작고 드문 나무를 생성합니다 [10:24].
- 지역 사용자 정의: 사용자는 풀밭과 같은 서브 바이옴을 칠하여 특정 지역을 지우거나, 도로 스플라인을 배치하여 환경에 영향을 주고 자연적인 분포를 덮어쓸 수 있습니다 [10:48]. 도로를 베이크하고 바이옴 도구를 새로고침하면 도로가 생성되고 식생이 정리됩니다. 물론 수동으로 배치해야 하는 애셋(창고, 차량 등)도 있습니다 [11:15].
- 울타리 및 전력선 추가: 스플라인을 입력으로 사용하여 울타리 유형을 설정하고 절차적 생성을 실행하면 자동으로 울타리가 생성됩니다 [12:31]. 전력선 네트워크도 유사하게 스플라인의 제어점에 전봇대가 생성되고, 여러 유형의 전력선이 자동으로 연결됩니다 [12:54]. 시스템 간의 데이터 교환 덕분에 전력선 경로의 나무들은 바이옴을 새로고침하는 것만으로 자동으로 제거됩니다 [13:41].
- 비파괴적 워크플로우: 지형은 언제든지 조정할 수 있으며, 영향을 받는 절차적 도구(예: 절벽, 바이옴)를 새로고침하면 모든 것이 업데이트되어 다시 작동합니다 [14:02].
[00:14:37 - 00:20:38] 파이프라인 작동 방식 (내부 작동)
Houdini 엔진이 자체 엔진인 "Dunia"에 구현되어 있으며, Houdini와 Dunia 간의 입력 및 출력 데이터 교환이 이 파이프라인의 핵심입니다 [14:47].
Houdini로 전송되는 입력 데이터 (Dunia -> Houdini) [15:29]:
- 월드 정보: 월드 이름, 크기 등. (테스트용 월드에도 파이프라인이 실행되었습니다.)
- 파일 경로: 모든 PC가 파일을 동일한 위치에 설치하지 않을 수 있으므로, 엔진이 Houdini에 경로를 제공합니다.
- 지형 섹터: 생성하려는 지형 영역 (64x64 미터 단위의 가장 작은 영역).
- 스플라인 및 모양: 지오메트리 속성에 메타데이터가 포함됩니다 (예: 울타리 스플라인은 울타리 유형을 기본 속성으로 가집니다).
- 디스크에서 추출된 기타 입력: 하이트맵, 바이옴 페인터 파일, PNG 마스크, 이전 도구에서 생성된 Houdini 지오메트리 등이 포함됩니다 [16:38].
가장 중요한 입력은 지형 자체이며, 모든 생성은 특정 지형 영역에 연결됩니다 [17:01]. Dunia에서 지형은 섹터(64x64m)로 세분화됩니다 [17:14]. 사용자가 절차적 데이터를 다시 베이크할 때, 편집기에 로드된 전체 영역, 현재 카메라 아래의 로컬 맵 섹터, 또는 카메라 시야 내의 프러스텀(frustum) 영역을 선택할 수 있습니다 [17:34].
편집기로 다시 전송되는 데이터 (Houdini -> Dunia) [18:26]:
- 엔티티 포인트 클라우드: 지형에 배치될 식생, 바위, 수집품, 데칼, VFX 프리팹 등의 위치 데이터. 각 포인트는 스폰될 애셋의 오브젝트 ID와 함께 내보내집니다 [19:19].
- 지형 텍스처 (하이트맵, 나이트맵): RGB 또는 그레이스케일 지형 데이터.
- 지오메트리: 절차적으로 생성된 지오메트리.
- 지형 논리 구역 (Terrain logic zones): 지형에 적용할 포스트 프로세스 및 안개 설정 사전 설정을 할당하는 데 사용되는 ID.
이 모든 데이터는 디스크에 특수 형식의 버퍼로 저장되어 노드 간에 효율적으로 전송됩니다 [18:57]. 이 내보낸 데이터는 도구 간의 상호 연결성에도 핵심적인 역할을 합니다. 절차적 생성은 순차적으로 이루어지므로, 각 도구가 생성한 데이터가 다음 도구에 영향을 미치게 됩니다 [19:54]. 예를 들어, 담수 도구는 물 마스크를 생성하고, 이는 나중에 바이옴 도구에서 특정 종의 스폰 동작을 제어하는 데 사용됩니다 [20:23].
[00:20:39 - 00:31:20] 절벽 도구 (Cliff Tool)
절벽 도구의 목적은 넓은 지형 표면에 절벽 지오메트리를 생성하고, 지형 위에 디테일한 피부처럼 작용하는 것입니다 [20:40].
이전 Far Cry 시리즈의 접근 방식 [21:05]: Far Cry 4와 Primal에서는 절벽에 배치된 바위가 없었고, 절벽은 단순히 맨 지형이었습니다 [21:30]. 대규모 절벽 표면을 채우는 것은 비용이 많이 들고 반복적으로 보였습니다. 하지만 Far Cry 5에서는 훨씬 더 크고 멀리서도 보이는 절벽이 많아져 새로운 접근 방식이 필요했습니다 [22:12].
절벽 생성 과정 [22:48]:
- 초기 지오메트리: 지형 경사를 시작점으로 사용하여 특정 경사 임계값 미만의 모든 표면을 삭제합니다. 이 남은 부분이 절벽 입력 지오메트리가 됩니다 [22:56]. 이는 플레이어에게 걸을 수 없는 지형임을 시각적으로 알려주는 역할도 합니다 [23:16].
- 재메시 (Remeshing): 지형 메쉬에서 시작했기 때문에 경사면에 늘어진 쿼드(quads)가 생기는데, 이를 제거하기 위해 지오메트리에 재메시 패스를 적용하여 균일한 삼각형을 얻습니다 [23:38].
- 지질학적 층화 (Geological Stratification): 퇴적암과 토양이 시간에 따라 쌓여 형성된 수평선인 지질학적 층화를 재현합니다 [23:53]. 도구는 입력 지오메트리를 층(strata)으로 분할하고, 각 층에 무작위 두께와 층 ID를 할당합니다 [24:11].
- 층 각도 제어: 편집기에서 RGB 입력값을 지형에 칠하여 층의 슬라이싱 각도를 제어할 수 있습니다 [24:34]. Far Cry 5에서는 월드 지형 형태에 가장 잘 맞는 네 가지 사전 설정된 각도를 사용했습니다 [25:01].
- 층 분할 및 혼돈: 완벽해 보이는 층 라인을 깨고 자연스러움을 더하기 위해, 노이즈를 생성하여 입력 메쉬를 두 그룹으로 분할합니다 [25:23]. 노이즈는 낮은 해상도 메쉬에서 생성된 후 높은 해상도 메쉬로 전송되어 더 크고 덩어리진 패턴을 만듭니다 [25:31]. 각 그룹에 다른 시드(seed) 값으로 층화 도구를 실행하여 층 라인을 깨뜨립니다 [26:00].
- 볼륨 및 변위: 각 층은 다양한 두께로 돌출되고, 변위 맵 조합을 사용하여 변위됩니다 [26:16].
- 삼각형 개수 감소: 초기 지오메트리는 고해상도이므로, 삼각형 개수를 줄이는 패스를 거칩니다 [26:31].
- 개별 메쉬로 분할: 게임 내 로딩 및 스트리밍 효율성을 위해 지오메트리를 개별 메쉬(섹터당 하나의 메쉬)로 분할합니다 [26:44].
절벽 셰이딩 및 지형 통합 [27:17]:
- 지형 셰이더 (Terrain Shader): 절벽은 게임 내에서 "지형 셰이더"를 사용하여 셰이딩됩니다. 이는 절벽 오브젝트를 지형과 동일한 경로로 렌더링하여 절벽 아래의 지형과 동일한 텍스처를 사용하게 합니다 [27:25].
- 절벽 텍스처 전이: 절벽 아래 지형에 절벽 텍스처를 전이하여 풀과 같은 지형 텍스처가 절벽에 나타나는 것을 방지합니다 [27:48]. 이를 위해 최종 돌출된 절벽 메쉬를 사용하여 지형에 절벽 마스크와 층 속성을 투사합니다 [27:57].
- 매크로 색상 변화: 전이된 층 속성을 사용하여 월드에 매크로 틴트(tint) 변화를 생성하는 색상 레이어를 생성합니다 [28:15]. 이 색상은 절벽 메쉬의 정점 색상으로 만들 수도 있었지만, 지형에도 틴트를 유지하고 디스크 크기와 메모리 사용량을 최소화하기 위해 지형 데이터에 적용했습니다 [28:32].
- 침식 효과 (Erosion Effect): 절벽 마스크를 기반으로 유동 시뮬레이션을 실행하여 침식 효과를 만듭니다 [29:13]. 절벽 표면에 흩뿌려진 포인트가 경사를 따라 흘러내리며 침식 효과를 만듭니다. 침식 영역에는 원래의 층 색상이 유지됩니다 [29:20].
- 부서진 바위 (Crumble Rocks): 침식 데이터를 사용하여 지형에 부서진 바위 엔티티를 스캐터링하고 포인트 클라우드로 내보냅니다 [29:38].
- 지형 텍스처 ID: 마스크를 사용하여 지형에 지형 텍스처 ID를 생성하고, 노이즈를 사용하여 두 가지 다른 절벽 텍스처를 혼합하여 타일링(tiling) 현상을 줄입니다 [29:46].
- 식생 스캐터링: 절벽 표면에 식생을 스캐터링할 수도 있습니다 [30:17]. 위를 향한 폴리곤을 분리하고 레이캐스트(raycast)를 사용하여 위쪽이 열려 있는지 확인한 다음, 나무와 다른 식생을 절벽 선반에 스폰합니다 [30:25].
- 내보내는 데이터: 절벽 도구는 절벽 지오메트리(충돌 포함), 바위 및 일부 나무를 위한 포인트 클라우드, 지형 텍스처 ID, 지형을 위한 절벽 색상 및 절벽 마스크를 내보냅니다 [30:51].
[00:31:21 - 00:58:59] 바이옴 도구 (Biome Tool)
바이옴 도구의 목표는 생물학적 콘텐츠로 월드를 채우는 것입니다. 자연의 많은 미묘한 현상과 다양한 특성을 재현해야 하므로 많은 기능이 포함되어 있습니다 [31:21].
데이터 준비 [31:51]:
- 지형 생성: 하이트맵에서 지형을 생성합니다 [31:51].
- 비생물적 데이터 (Abiotic Data) 생성: 지형의 토폴로지로부터 "비생물적 데이터"라고 불리는 물리적 특징을 생성합니다 [32:00]. 여기에는 폐색(occlusion) 및 흐름 맵(flow map) 생성, 경사, 곡률, 조명 계산, 고도, 위도, 경도, 바람 벡터 맵 등이 포함됩니다 [32:10]. 이러한 지형 속성들은 대부분의 바이옴 레시피의 기반이 됩니다 [32:31].
- 2D 데이터 가져오기: Dunia에서 추출된 다른 2D 데이터를 가져옵니다 [32:40]. 여기에는 사용자가 그린 바이옴 페인팅 데이터와 담수, 도로, 울타리, 전력선, 절벽 마스크와 같은 이전 도구에서 생성된 절차적 데이터가 포함됩니다 [32:51].
바이옴 레시피 처리 [33:10]:
- 메인 바이옴 및 서브 바이옴: 바이옴 도구는 사용자가 숲을 칠한 곳에 단순히 숲을 생성하는 것이 아니라, 메인 바이옴과 서브 바이옴 개념을 사용합니다 [33:18]. 메인 바이옴은 Far Cry 5 월드의 대부분(75-85%)을 차지하며, 이전에 생성된 지형의 비생물적 데이터를 기반으로 서브 바이옴(예: 숲과 풀밭)이 어디에 있어야 하는지 자동으로 처리합니다 [33:26]. 이는 바이옴 분포에 자연스러운 매크로 디테일을 제공하며, 지형 토폴로지를 기반으로 하므로 예술적인 규칙이 항상 적용됩니다 [33:59].
- 전력선과 상호작용: 메인 바이옴은 사용자가 전력선을 배치한 곳에 숲을 초원(grassland)으로 대체하는 것과 같은 다른 기능도 처리합니다 [34:26].
- 서브 바이옴 레시피: 메인 바이옴 처리 후, 서브 바이옴 레시피들이 처리됩니다. 각 레시피에는 나무, 묘목, 수풀, 풀과 같은 해당 레시피를 정의하는 모든 요소가 포함됩니다 [34:47].
- 엔티티 생성 HDA (Generate Terrain Entities HDA): 바이옴 레시피의 핵심은 Generate Terrain Entities HDA라는 디지털 애셋입니다 [35:04]. 이 애셋은 식생 스캐터링, 지형 속성 수정 및 생성 등을 담당하지만, 가장 중요한 부분은 각 종의 **생존 가능성 (Viability)**을 정의한다는 것입니다 [35:14].
생존 가능성 (Viability) [35:24]:
- 종 간 경쟁: 각 종은 성장하고 번성하기 위해 "자신의 땅"을 놓고 경쟁합니다 [35:24]. 생존 가능성은 각 종에 대해 선호하는 지형 속성(예: 특정 폐색 지형 데이터 범위)을 설정하여 정의됩니다 [35:36]. 특정 위치에서 가장 높은 생존 가능성을 축적한 종이 다른 종들을 이깁니다 [35:45].
- 반경 (Radius): 승자를 결정할 때 반경도 관련됩니다. 생존 가능성이 높은 종의 반경 내에 있는 다른 종들은 제거됩니다. 이는 나무 사이에 바람직한 간격을 유지하는 데 도움이 됩니다 [36:18].
- 우선순위 (Priority): 하지만 나무 아래에 수풀이나 풀이 스폰되도록 허용하려면, 이러한 종들이 제거되지 않아야 합니다. 이를 위해 "우선순위" 개념을 사용합니다 [37:02]. 우선순위가 먼저 평가되고, 우선순위가 같으면 생존 가능성이 평가됩니다 [37:12]. 우선순위 반경이 작으면 낮은 우선순위의 종이 높은 우선순위의 종에 더 가깝게 자랄 수 있습니다 [37:38].
자연 현상 재현 [38:17]:
- 지형 데이터 결합: 다양한 비생물적 지형 데이터를 혼합하여 식생 종 분포를 위한 매우 특정한 패턴을 만들 수 있습니다 [38:39]. 예를 들어, 고도 범위로 곱하거나, 흐름 맵과 고도를 혼합하고, 노이즈를 지형 데이터와 결합하여 혼돈을 더할 수 있습니다 [38:58].
- 노이즈 (Noise): 표준 퍼린 노이즈(Perlin noise)를 스케일 및 오프셋 제어와 함께 사용하고, 지형 노멀(normal)에 의해 왜곡시켜 더욱 흥미로운 패턴을 생성합니다 [39:33].
- 배제 마스크 (Exclusion Masks): 담수, 절벽, 도로와 같은 이전 도구에서 생성된 다양한 배제 마스크를 현재 마스크 위에 적용하여 종 생존 가능성에 영향을 줄 수 있습니다 [39:55]. 이러한 지형 데이터 결합은 바이옴 생성 워크플로우의 핵심이며 흥미로운 패턴을 만듭니다 [40:22].
종 크기 제어 (Species Size Control) [40:28]:
- 생존 가능성과 크기 연결: 이전 Far Cry에서는 애셋 크기가 무작위로 선택되어 지형이나 종의 성장 가능성과 상관관계가 없었습니다 [40:39]. 이제 도구는 동일한 종에 대해 여러 크기를 지원하며, 애셋 크기 선택을 생존 가능성에 연결합니다 [41:05].
- 단계 효과 해결: 숲 가장자리의 테이퍼링 효과를 위해 크기 선택을 생존 가능성 그라데이션에 연결하면 좋습니다 [41:35]. 하지만 이는 때때로 계단식 효과를 만들 수 있습니다 [42:04]. 이를 해결하기 위해 각 크기가 특정 백분율만큼 스케일 업 및 다운되도록 하여 서로 다른 크기 간의 간격을 메울 수 있습니다 [42:12]. 또한 무작위 스케일을 사용하여 나무 크기에 추가적인 혼돈을 추가할 수 있습니다 [42:28].
- 나무 변형: 동일한 크기의 나무라도 반드시 동일하게 보이지는 않습니다. 도구는 각 크기에 대해 여러 변형을 가질 수 있도록 허용합니다 (예: 죽은 나무 변형) [42:47].
숲 캐노피 및 생태적 천이 (Forest Canopy & Ecological Succession) [43:10]:
- 어린 나무 및 늙은 나무: 어린 나무는 숲 가장자리에, 늙은 나무는 숲 깊숙한 곳에 자라는 경향이 있습니다. 또한 숲 내부에서도 어린 나무가 다시 자랄 수 있습니다 [43:20].
- 나이 매개변수 (Age Parameter): 생존 가능성이 항상 부드러운 그라데이션을 제공하지 않아 가장 큰 나무가 숲 가장자리에 나타날 수 있는 문제를 해결하기 위해 "나이" 매개변수를 추가했습니다 [43:45]. 이것은 기본적으로 생존 가능성 데이터에서 생성된 부호 거리 필드(signed distance field)입니다 [44:09].
- 나이의 영향 제어: 나이 매개변수가 크기 분포에 미치는 영향을 제어하는 다양한 옵션이 있습니다 (추가, 곱하기, 보간) [44:18]. 나이 최대 거리를 조정하여 숲 경계의 테이퍼링 효과 깊이를 제어할 수 있습니다 [44:36]. 또한 램프(ramp)를 사용하여 숲의 형태를 프로파일링할 수 있습니다 [44:54].
스캐터링 밀도 (Scattering Density) [45:11]:
- 밀도 제어의 중요성: 밀도가 균일하면 작은 나무에는 적절한 간격이 유지되지만 큰 나무에는 심한 중첩이 발생할 수 있습니다 [45:11]. 또한 스폰되는 애셋의 수는 게임 성능에 직접적인 영향을 미치므로 엄격하게 제어해야 합니다 [45:23].
- 밀도 램프: 간단한 램프를 사용하여 밀도를 제어합니다. 기본적으로 크기를 기반으로 하지만, 나이 또는 생존 가능성을 기반으로 할 수도 있습니다 [45:43].
- 지형 속성 혼합: 조명, 경사, 방향과 같은 지형 속성을 혼합하여 종의 밀도에 영향을 줄 수 있습니다 [46:03].
색상 변화 (Color Variation) [46:31]:
- 개별 인스턴스 틴트: 일부 바이옴은 많은 색상 변화를 가지며, 애셋, 텍스처, 재료를 복제하지 않고도 이를 구현하기 위해 스캐터링된 인스턴스를 개별적으로 틴트할 수 있는 옵션을 추가했습니다 [46:41].
- 그라데이션 색상 램프: 생존 가능성, 나이 또는 지형 데이터의 조합을 입력으로 사용하여 그라데이션 색상 램프를 구동합니다 [47:06]. 예를 들어, 물 부호 거리 필드를 사용하여 각 인스턴스에 다른 색상으로 틴트를 입힐 수 있습니다 [47:14]. 게임 내에서 풀의 색상 변화는 Houdini에서 생성된 특정 색상 링크 때문입니다 [47:29].
회전 옵션 (Rotation Options) [47:44]:
- 지형 경사 방향: 기본적으로 애셋의 전방 축은 항상 지형 경사를 향하도록 정렬됩니다 [47:44]. 이는 풀 애셋이 항상 물을 향해 기울어지게 만들거나 경사면에서 휘어진 나무 줄기를 만들 수 있습니다 [48:04].
- 바람 벡터 맵: 밀 밭과 같은 식생은 바람 벡터 맵을 기반으로 방향을 지정할 수 있습니다 [48:54]. 바람 맵은 전체적인 바람 방향을 기반으로 하지만, 지형의 형태에 따라 약간씩 변동합니다 [49:03].
- 회전 제어: 애셋은 수평으로 평평하게 놓이거나 지형 경사에 정렬될 수 있으며, 이는 백분율로 제어할 수 있습니다 [49:38]. 모든 축에 회전 지터(jitter)와 오프셋(offset)도 적용할 수 있습니다 [49:48]. 대부분의 식생 애셋은 패턴을 깨기 위해 무작위 회전을 사용합니다 [49:55].
애셋 위치가 지형에 미치는 영향 [50:14]:
- 지형 속성 변경: 바이옴은 애셋 배치에만 국한되지 않습니다. 애셋의 위치는 지형 속성과 주변 애셋에도 영향을 미칠 수 있습니다 [50:14].
- 데이터 전이: 엔티티 분포가 완료된 후, 스캐터링된 애셋에서 지형으로 일부 데이터를 전이할 수 있습니다 [51:27]. 이 과정은 다음 네 가지에 사용됩니다:
- 지형 변형 (Terrain deformation): 지형을 변형하여 나무 뿌리가 지면을 들어 올리는 것과 같은 효과를 만듭니다 [52:11]. 이는 지형에 대한 애셋의 물리적 영향을 시뮬레이션하여 게임에서 나무가 단순히 지면에 있는 것이 아니라 지형에 영향을 미친다는 느낌을 줍니다 [52:19].
- 지형 텍스처 (Terrain textures): 나무 뿌리 주변에 어울리는 지형 텍스처를 생성하여 뿌리가 지형과 매끄럽게 블렌딩되도록 합니다 [53:30].
- 지형 데이터 출력 마스크 (Terrain data output mask): 새 마스크를 생성하여 다음 종의 생존 가능성으로 재사용할 수 있습니다. 예를 들어, 나무 주변에 숲 바위와 같은 추가 요소를 스폰할 수 있습니다 [54:43]. 또한 숲 가장자리에 새로운 요소를 스폰하거나 숲 내부에서 어린 식물의 재생을 만들 수도 있습니다 [55:49].
- 지형 색상 틴트 (Terrain color tint): 지형 텍스처와 혼합되는 색상 틴트를 생성합니다 [57:05]. 이는 지형에 더 많은 색상 변화를 제공하고 게임에서 필요한 지형 텍스처 수를 줄이는 데 도움이 됩니다 [57:14]. 각 색상 레이어는 지형 텍스처를 어둡게 하거나 밝게 할 수 있습니다 [57:44]. 이러한 지형 텍스처 및 절차적 틴트는 풀에도 적용될 수 있습니다 [58:09].
- 내보내는 데이터: 바이옴 도구는 엔티티 포인트 클라우드, 지형 텍스처 ID, 하이트맵, 지형 색상, 그리고 나중에 안개 도구와 월드 맵 도구에서 사용될 숲 마스크를 편집기로 내보냅니다 [58:45].
[00:59:00 - 01:06:05] 결론 및 교훈
교훈 (Lessons Learned) [59:00]:
- 큰 힘에는 큰 책임이 따른다: 절차적 도구는 많은 데이터를 생성하며, 이는 성능뿐만 아니라 게임 플레이와 아트에도 큰 영향을 미칩니다 [59:28]. Far Cry 5에서는 아트 디렉션이 울창한 숲을 원했지만, AI와 큰 동물이 숲을 탐색하기 어려워 게임 플레이에 지장을 주었습니다. 따라서 게임 플레이에 영향을 주지 않으면서도 가장 적절한 밀도로 게임을 형성해야 했습니다 [59:35].
- 가능성을 열어주는 우아한 도구 디자인: 바이옴 도구와 같이 많은 가능성을 열어주는 시스템을 디자인하는 것이 중요합니다 [01:00:03].
- 간단하게 유지: 새로운 시스템은 종종 과도하게 설계되는 경향이 있습니다. 모든 요소가 제자리에 있고 전체 그림이 명확해지면, 정리 과정을 거쳐 시스템을 단순화해야 합니다. 더 간단하고 우아한 디자인이 결과적으로 더 나은 성능을 보여줍니다 [01:00:26].
- 사용자 의견 경청: 사용자는 자동화된 프로세스보다 수동 제어를 선호할 수도 있습니다 [01:01:00]. 예를 들어, 강 도구가 자동으로 강바닥을 파낼 수 있었지만, 사용자들은 지형 변형을 수동으로 하는 것을 선호했습니다 [01:01:08]. 사용자와 긴밀히 협력하는 것이 중요합니다.
- 유연성 유지: 초기 계획이 항상 최선은 아닙니다 [01:01:37].
- 제어와 자동화의 균형: 자동화된 도구가 수동으로 작업하는 것보다 더 많은 시간이 걸린다면 가치가 없습니다 [01:01:46]. 또한 너무 많은 자동화는 통제 불능 상태를 만들 수 있고, 너무 많은 수동 제어는 시간 소모적이고 관리하기 어렵습니다 [01:02:02].
질의응답 [01:02:37]:
- 종의 수: 게임 내 메모리 예산 때문에 종의 수가 제한되었습니다 [01:02:50]. Far Cry 5에는 세 가지 주요 바이옴이 있었고, 특정 바이옴 하나에 약 20종 이상의 종이 있었습니다. 바이옴 간의 전환 시 메모리에 로드되는 애셋을 신중하게 관리하여 부드러운 전환을 보장했습니다 [01:02:59].
- Houdini의 장점: Houdini를 사용하여 성능 관리가 쉬웠습니다. Houdini에서 슬라이더를 움직여 HDA를 저장하면 다음 날 모든 것이 업데이트되고 성능이 개선되었습니다 [01:03:44].
- 개발 인력 및 시간: 이 도구들을 개발하는 데 1.5명의 인력이 프로젝트 전반에 걸쳐 참여했습니다 [01:04:17]. 바이옴 도구를 먼저 개발한 후, 남은 시간 동안 담수 및 절벽과 같은 다른 도구들을 추가했습니다 [01:04:33].
- 재사용성: 이 파이프라인은 다른 프로젝트에서도 재사용할 수 있도록 디자인되었습니다 [01:05:13]. 프로젝트별 디지털 애셋과 파이프라인 애셋을 분리하여 다른 프로젝트에서도 레시피를 구축하는 데 재사용 가능하도록 했습니다 [01:05:22].
'이펙트 (FX) > 이펙트 팁 : Houdini' 카테고리의 다른 글
| [Houdini] MPM 솔버 기초 튜토리얼 정리 (INDIAN VFX SCHOOL) (0) | 2026.01.06 |
|---|---|
| [Houdini] MPM 솔버 생기초 요약 (MPM Fundamentals) (0) | 2025.12.25 |
| [Houdini] 캐릭터 FBX 익스포트 하는 법 (FBX Characteroutput) (0) | 2025.09.08 |
| [Houdini] RBD Cluster 올바른 사용법 (0) | 2025.08.26 |
| [Houdini] 뷰포트 색공간을 ACES로 설정하기 (Color Space, ACES의 중요성) (1) | 2025.08.24 |
댓글