모듈 방식으로 역을 건설함으로써 콘텐츠 업데이트를 원활하게 진행할 수 있었고, 개별 메시, 텍스처, 부품 등을 업데이트하는 데 몇 시간을 소비하지 않도록 하는 데 중요한 역할을 했습니다.
Roblox 패키지는 Meshparts의 팔레트를 함께 패키징하여 쉽게 결합할 수 있도록 하여 이러한 모듈 설계를 달성할 수 있게 해주었습니다. 또한 트림 시트 세트와 SurfaceAppearance 노드를 공유할 수 있게 해주었습니다. 이를 통해 초기 플레이 테스트 중 레이아웃과 크기 변경에 적응할 수 있었고, 역을 채우는 과정이 훨씬 빨라졌습니다.

유연한 디자인에서 최종 아트까지
처음 시작했을 때, 우리는 역에 무엇이 있어야 하는지, 50명의 플레이어를 위해 얼마나 커야 하는지에 대한 완전한 이해가 없었습니다.
이를 파악하기 위해, 우리는 먼저 Parts를 사용하여 환경을 구축하고, 외부 DCC 애플리케이션인 Maya 또는 Blender에서 로툰다 형태와 같은 메시를 가져왔습니다. 이러한 간단한 형태로 우리는 맵의 스케일, 방의 배치 및 경로를 조정하여 가장 재미있는 배치를 찾았습니다. 게임이든 사회적 경험이든, 이 초기 단계는 가장 역동적인 경향이 있습니다.
역의 레이아웃을 구축할 때 탐험을 유도하는 가장 중요한 것은 사용자에게 목표를 주는 것이었습니다. 이 경우 가장 명백한 목표는 블랙홀을 가까이에서 보는 것이었습니다. 다음으로, 우리는 플레이어가 스폰에서 맵 끝까지 걸어갈 수 있기 때문에 블랙홀로 가는 직선 경로를 제공하는 것은 지루할 것이라는 것을 알았습니다. 우리는 경로를 끊어 플레이어가 다른 것들을 먼저 보고 블랙홀로 가도록 유도했습니다.
모듈 설계 덕분에 우리는 전체 디자인을 대대적으로 수정하지 않고도 환경에 이러한 변경을 할 수 있었습니다. 우리는 역의 전체 섹션을 이동하여 다양한 게임 플레이 아이디어를 실험할 수 있었습니다. 궁극적으로 이러한 모듈 조각들은 패키지를 사용하여 업데이트할 수 있었기 때문에 동일한 자산의 여러 버전을 다시 구축할 필요가 없었습니다.




Kerr-Newman DSR-14의 모듈 설계
우주 정거장은 몇 가지 모듈 팔레트 조각만을 사용합니다. 모듈 팔레트 조각은 재사용 가능한 자산으로, 각 벽을 독특하게 만들 필요 없이 여러 개의 작은 벽을 조합할 수 있습니다. 이는 우리가 구축하는 동안 레이아웃의 유연성을 제공합니다.
다음은 모듈 설계를 만드는 데 도움이 된 몇 가지 팁입니다:
균일한 그리드 크기를 정하세요 — 역을 위해 우리는 대부분의 모듈 세트를 만들기 위해 16 스터드 그리드 크기를 정했습니다. 사용하는 그리드 크기는 임의적이지만, 프로젝트 전반에 걸쳐 일관되게 유지해야 하며, 해당 프로젝트에서 작업하는 모든 아티스트 간에도 일관되어야 합니다. 프로젝트 시작 시 그리드 크기를 정하면 각 조각이 옆 조각과 잘 맞아떨어지도록 보장합니다. 또한, 예를 들어 벽 섹션을 문 섹션으로 쉽게 교체할 수 있습니다.
모든 단위는 스터드로 가져옵니다 — Maya 또는 Blender와 같은 다른 DCC 애플리케이션에서 메시를 만들 때, Studio는 미터, 센티미터, 피트 또는 인치를 변환하지 않고, 들어오는 단위를 스터드의 동일한 단위로 대체합니다. 예를 들어, 단위를 미터로 설정하면 Studio는 2미터를 2스터드로 변환합니다. 선택한 애플리케이션에서 단위 스케일을 Roblox의 스터드 스케일로 취급하는 것이 가장 좋습니다. Roblox에서 단일 스터드의 가장 가까운 실제 세계 스케일은 28센티미터입니다.
조각을 간단하게 유지하세요 — 필요할 것이라고 생각되는 모든 조각을 만들려고 하지 마세요. 아이디어는 몇 가지 매우 다재다능한 조각을 가지고 많은 일회용 조각을 만들지 않는 것입니다. 조각이 많을수록 각 조각을 만드는 데 더 많은 시간이 걸리고, 전체 메모리 및 성능 예산에 더 많은 영향을 미칩니다. 절대적으로 필요하다면 키트에 다른 조각을 추가할 수 있습니다.
패키지를 사용하세요 — 모든 모듈 조각을 패키지로 변환하고 게임에 배치하기 전에 재료를 패키지에 넣으세요. 이렇게 하면 모든 인스턴스에 쉽게 업데이트를 푸시할 수 있습니다. 패키지에 대해서는 나중에 좀 더 자세히 다루겠습니다.
다음 스크린샷은 모듈 설계를 사용하여 역의 일부를 구성하는 다양한 방법을 보여줍니다.




트림 시트 만들기
1:1 텍스처는 미래의 방향이지만, 메모리 예산과 제작 시간 측면에서 비용이 많이 듭니다. 우주 정거장의 경우, 90%의 건축 요소가 수직 또는 수평 방식으로 배치된 몇 가지 교체 가능한 트림 시트 세트를 사용했습니다. 시트의 각 행 또는 열은 고유한 모양을 가지고 있어 모델을 언랩할 때 선택할 수 있는 다양한 표면 처리를 제공합니다. 이 모든 것은 하나의 이미지 시트를 사용하면서 가능합니다.
트림 시트를 만드는 데 대한 몇 가지 팁은 다음과 같습니다:
필요한 객체 및 재료 유형의 목록을 작성하세요 — 트림 시트는 나무, 금속, 고무 등 다양한 재료 유형을 포함할 수 있습니다. 첫 번째 객체를 모델링하기 전에 트림 시트 템플릿을 만드세요. 이는 다른 모든 트림 시트 세트의 시작점이 되며, 모델을 언랩하는 데 빠른 시작점을 제공합니다. 이러한 트림 시트는 나중에 다룰 SurfaceAppearance 노드 내에 존재합니다.
하나의 시트에 다양한 표면 처리를 포함하세요 — 이렇게 하면 메시를 여러 개의 메시로 나누지 않고도 새로운 처리를 적용할 수 있습니다. 이는 객체 및 재료 드로우 호출을 줄여 런타임 성능을 향상시킵니다.
트림 시트 템플릿을 만드세요 — 템플릿은 어떤 맵 세트를 다른 것으로 교체할 수 있도록 보장합니다. 예를 들어, 깨끗한 금속 세트를 녹슨 금속 세트로 교체할 수 있습니다.
우리는 역을 위해 트림 시트를 다음과 같이 만들었습니다:
우리는 시트가 어떻게 보여야 하는지에 대한 대략적인 윤곽을 만들었습니다:

Photoshop에서 각 트림 섹션이 시트에서 어떻게 보일지에 대한 빠른 아이디어를 얻기 위해 목업을 만들었습니다.

우리는 Substance를 사용했지만, 최종 맵을 만들기 위해 적합한 애플리케이션을 사용할 수 있습니다. 이것은 Substance에서 생성된 최종 트림 시트 맵 세트입니다. 모든 네 개의 맵은 SurfaceAppearance 노드 내에서 함께 작동하여 물리 기반 렌더링(PBR) 재료를 생성합니다.




다음은 Substance Designer 내에서 트림 시트의 최종 렌더링입니다:


그리고 다음은 다양한 객체에 사용된 동일한 트림 시트의 예입니다:

트림 시트 UV 매핑에 대해 더 알고 싶다면, 웹에서 주제를 검색해 보세요. 훌륭한 튜토리얼이 많이 있습니다.
표면 외관 적용하기
SurfaceAppearance는 MeshParts에 대한 물리 기반 렌더링 시스템에 새로운 텍스처 입력을 지정할 수 있게 해주며, ColorMap, MetalnessMap, RoughnessMap 및 NormalMap을 포함한 고급 그래픽 옵션으로 메시의 외관을 재정의할 수 있게 해줍니다. 또한 Roblox가 크롬과 같은 재료의 반사에 사용하는 새로운 동적 큐브맵 시스템을 활용합니다. 예를 들어, SurfaceAppearance가 적용된 메시와 적용되지 않은 메시의 나란히 비교한 이미지는 다음과 같습니다:

표면 외관을 사용할 때 다음 팁을 염두에 두세요:
- 트림 맵에 투명도를 위한 알파 정보가 포함되어 있다면, AlphaMode를 Overlay에서 Transparency로 변경하세요.
- SurfaceAppearance는 Parts와 함께 작동하지 않습니다. Parts는 맵을 적용하는 데 필요한 UV 정보가 없기 때문입니다. Parts는 UV 정보 대신 월드 정렬 프로젝션을 사용합니다. MeshParts는 일반적으로 Maya, 3ds Max 또는 Blender와 같은 다른 앱에서 생성되며 UV 언랩 정보가 포함되어 있습니다.
SurfaceAppearance를 적용하려면:
Explorer에서 MeshPart 또는 폴더 이름 끝에 있는 아이콘을 클릭하고 SurfaceAppearance를 검색합니다. 하나를 추가하면 이미 적용된 BrickColor, Color, Material 및 TextureID를 재정의합니다.
SurfaceAppearance 노드의 이름을 고유한 것으로 바꾸고 _SA 접미사를 추가하여 검색하기 쉽게 만듭니다. 이 예에서는 Metal_Trim_A_SA를 사용했습니다.
트림 시트 맵을 가져오고, Asset Manager 창에서 ID를 복사하여 Properties 창의 적절한 슬롯에 붙여넣습니다. 다음은 모든 맵 ID가 삽입되고 문에 적용된 Metal_Trim_A_SA 노드의 모습입니다.

패키지로 효율성 증가
패키지를 사용하면 Roblox 게임 전반에 걸쳐 객체 인스턴스를 생성할 수 있으며, 패키지에 대한 업데이트가 해당 패키지의 모든 인스턴스에 게시됩니다. 우리는 역에 넣은 거의 모든 객체에 대해 패키지를 사용했기 때문에 조정이 필요할 때 각 배치를 찾아다닐 필요가 없었습니다. 예를 들어, 우리는 패키지의 1,000개 이상의 벽 패널 인스턴스를 사용했으며, 패키지를 수정하여 즉시 업데이트를 게시할 수 있었습니다.
패키지를 사용할 때 다음 팁을 따르세요:
PackageLink에서 자동 업데이트 기능을 켭니다. 이 기능이 활성화되면 모든 수정 사항이 패키지의 모든 사용에 적용되어 "모두 업데이트" 기능을 사용할 필요가 없습니다.

SurfaceAppearance 객체에 패키지를 사용하여 "재료 라이브러리"를 만들 수 있습니다. 이렇게 하면 SurfaceAppearance 객체의 비트맵을 수정하고 이를 사용하는 모든 객체에 게시할 수 있습니다. 다음 스크린샷은 데모 전반에 걸쳐 사용된 마스터 재료를 보여줍니다. 맵을 수정해야 할 경우, 마스터 재료를 업데이트하고 패키지를 다시 게시하기만 하면 됩니다.
