글 목록으로 돌아가기
🃏 Unreal Engine

[UE] 파일 네이밍 규칙

읽는 데 11분

참고 자료

https://github.com/VLAST-GIT/UE5-StyleGuide

참고 자료를 개인 작업 또는 팀 프로젝트를 하게 될 때 어떻게 적용시킬 것인 지에 대한 정리

1. 네이밍을 해야 하는 이유

번호설명
01하나의 스타일 가이드를 따라 협업하는 프로젝트는 마치 한 사람이 제작한 것처럼 일관성이 유지.
02이는 작업 과정에서의 모호성을 없애고 다른 팀원의 작업에 대한 불확실한 짐작을 할 필요가 없도록 만들어 줍니다.
03그 결과로 팀은 더 나은 생산성을 얻게 되며, 유지보수가 쉬워지게 됩니다.
04스타일 가이드를 지키지 않은 구조, 에셋명, 코드 등을 보게 된다면, 당신은 즉시 그것을 작성한 팀원에게 이를 알리고 스타일 가이드를 지키도록 정정해주어야 합니다.
05모든 사람이 같은 스타일 가이드를 지킨다는 것은 팀원 간의 질문과 답변을 더욱 쉽게 해줍니다. 아무렇게나 꼬아놓은 블루프린트를 풀거나 알 수 없는 변수명으로 가려진 머티리얼에 생긴 문제를 해결해주는 걸 좋아하는 사람은 없습니다.
06스타일 가이드를 통해, 협업 능력을 키우기 위함.

2. 폴더명 규칙

2.1. 파스칼 케이스 사용

설명
띄어쓰기를 모두 붙여서 표현한다. 즉, 공백이 없다.

각 단어의 첫 글자는 대문자로 사용한다.

예시)
DesertEagle, StyleGuide, ASeriesOfWords

2.2. 공백(스페이스 바)을 사용하지 말 것

금지된 문자에 따라 폴더 이름에 공백을 사용해선 안 됩니다.

2.3. 영문과 숫자 이외의 문자(특수문자 포함)를 사용하지 말 것

폴더 이름에 허용되는 문자는 A-Z, a-z, 0~9, _(언더바)

3. 금지 사항들

3.1. 금지 문자

아래의 문자들은 에셋명, 폴더명, 변수명 등 프로젝트 내 어디에서도 사용되어선 안 됩니다.

번호설명
01
공백(스페이스바)
02\
백슬래시 기호
03#!@$%
대부분의 특수 기호
04한글 등 모든 유니코드 문자 (즉, 영문이 아닌 대부분의 문자)

즉, 다음의 문자들만 허용됩니다.

번호설명
01A-Z
ABCDEFGHIJKLMNOPQRSTUVWXYZ
02a-z
abcdefghijklmnopqrstuvwxyz
030~9
0123456789
04 _
밑줄(언더바)

4. 에셋 명명 규칙

스타일 가이드의 모든 부분이 그렇지만, 에셋 명명 규칙은 반드시 지켜야 합니다.

명명 규칙에 따라 일관되게 지어진 에셋 이름을 통해 에셋 관리, 검색, 분석, 유지보수를 매우 쉽게 만들어줍니다.

명명 규칙의 큰 틀은 다음과 같이 _ (밑줄)에 의해 에셋의 종류, 이름 등을 구분합니다.

4.1. 에셋명 기본 형식: 접두사_기본에셋명_세부변형_접미사

접두사와 접미사는 에셋 형식에 따라 다음의 에셋 접두사 & 접미사 테이블에 의해 결정됩니다.

접두사는 기본적인 에셋의 형태에 따라 변형됩니다.

접미사는 에셋의 형태에서 디테일이 필요한 경우 사용됩니다. 텍스처를 제외한 에셋유형에는 가능한 한 접미사가 사용되지 않습니다.

에셋 접두사 &접미사 테이블

에셋명 기본 형식의 접두사, 접미사 규칙입니다.

이 스타일 가이드는 텍스처를 제외한 에셋유형에는 가능한 한 접미사를 사용하지 않습니다.

토글을 열어 어떤 네이밍이 사용되는 지 알 수 있습니다.

흔히 사용되는 에셋
에셋 유형접두사접미사Notes
레벨Maps 폴더 안에 있어야 한다.
블루프린트BP_
머티리얼M_
머티리얼 인스턴스MI_
스태틱 메시SM_
스켈레탈 메시SKM_
텍스처T__?접미사 디테일은 텍스처 (Testures) 항목을 봐주세요.
나이아가라 시스템NS_
위젯 블루프린트WBP_
애니메이션
에셋 유형접두사접미사Notes
에임 오프셋AO_
오프셋 1DAO_
애니메이션 블루프린트ABP_
애니메이션 컴포짓AC_
애니메이션 몽타주AM_
애니메이션 시퀀스A_
블렌드 스페이스BS_
블렌드 스페이스 1DBS_
레벨 시퀀스LS_
컨트롤 릭 Control RigCR_
IK 릭 IK RigIK_
IK 리타기터 IK RetargeterRTG_
스켈레탈 메시 Skeletal MeshSKM_
스켈레톤 SkeletonSKEL_
인공 지능 (Artificail Intelligence)
에셋 유형접두사접미사Notes
AI ControllerAIC_
Behavior TreeBT_
BlackboardBB_
DecoratorBTDecorator_
ServiceBTService_
TaskBTTask_
Environment QueryEQS_
EnvQueryContextEQS_Context
블루프린트 (Blueprints)
에셋 유형접두사접미사Notes
블루프린트BP_
블루프린트 컴포넌트BPC_
블루프린트 함수 라이브러리BPFL_
블루프린트 인터페이스BPI_
블루프린트 매크로 라이브러리BPML_가능한 한 사용하지 않는다.
열거형 EnumerationE접두사 후 밑줄 없음. eg. ECharacterState
구조체 StructureS접두사 후 밑줄 없음.
위젯 블루프린트WBP_
게임플레이 어빌리티GA_
머티리얼 (Materials)
에셋 유형접두사접미사Notes
머티리얼M_
머티리얼 (포스트 프로세스)M_PP_
머티리얼 (데칼)M_Decal_
머티리얼 인스턴스MI_
머티리얼 인스턴스 (포스트 프로세스)MI_PP_
머티리얼 인스턴스 (데칼)MI_Decal_
머티리얼 함수MF_
머티리얼 파라미터 컬렉션MPC_
서브서피스 프로파일 Subsurface ProfileSSP_
피직스 머티리얼PM_
텍스처 (Textures)
에셋 유형접두사접미사Notes
텍스처T_
- Diffuse/Albedo/Base ColorT__D
- NormalT__N
- RoughnessT__R
- Alpha/OpacityT__A
- MaskT__A똑같이 Opacity 채널에 들어가므로 Alpha/Opacity와 동일합니다.
- Ambient OcclusionT__O
- BumpT__B
- EmissiveT__E
- SpecularT__S
- MetallicT__M
- RGB채널에 패킹된 텍스처T__*아래의 패킹된 텍스처 (Texture Packing)를 참고해주세요.
텍스처 큐브 Texture CubeTC_
미디어 텍스처 Media TextureMT_
렌더 타깃 Render TargetRT_
큐브 렌더 타깃RTC_
피직스 (Physics)
에셋 유형접두사접미사Notes
피직스 머티리얼PM_
피직스 에셋PA_
지오메트리 컬렉션GC_
지오메트리 컬렉션 캐시GC__Cache
카오스 솔버Solver_
카오스 캐시 컬렉션Chaos__Cache
유저 인터페이스 (User Interface)
에셋 유형접두사접미사Notes
FontFont_
위젯 블루프린트WBP_
기타 (Miscellaneous)
에셋 유형접두사접미사Notes
데이터 에셋DA_
데이터 테이블DT_
플롯 커브CV_Float_
벡터 커브CV_Vector_
컬러 커브CV_Color_
커브 테이블CV_Table_
벡터 필드VF_
HLOD 레이어HLODLayer_
그룸 GroomGroom_
사운드 (Sounds)
에셋 유형접두사접미사Notes
Dialogue VoiceDV_
Dialogue WaveDW_
Reverb EffectReverb_
Sound AttenuationATT_
Sound ClassNo prefix/suffix. Should be put in a folder called SoundClasses
Sound Concurrency_SCShould be named after a SoundClass
Sound CueA__Cue
Sound MixMix_
Sound WaveA_
메타 사운드MS_
메타 사운드 소스MSS_
컨트롤 버스CB_
컨트롤 버스 믹스CBM_
FX
에셋 유형접두사접미사Notes
나이아가라 시스템NS_
나이아가라 모듈NM_
Niagara Dynamic Input ScriptNM_
나이아가라 이미터NE_
나이아가라 이펙트 타입EffectType_
나이아가라 파라미터 컬렉션NPC_
- 인스턴스NPCI_
미디어 (Media)
에셋 유형접두사접미사Notes
File Media SourceMS_File_
Img Media SourceMS_Img_
Stream Media SourceMS_Stream_
Media PlayerMP_
Media TextureMT_

기본에셋명

모든 에셋들은 기본이 되는 에셋 이름인 기본에셋명을 가져야 합니다. 기본에셋명은 그 에셋이 속한 그룹의 문맥에 연관되는 짧고 쉬운 이름일수록 좋습니다.

예를 들어 캐릭터의 이름이 Nina라면, 모든 Nina의 에셋들의 기본에셋명이 Nina가 되어야 합니다.

세부변형

세부변형은 기본에셋에서 파생된 다양한 변형의 이름을 지칭합니다.

예를 들어 Nina 캐릭터 에셋에는 다양한 스킨 변형이 있을 수 있습니다. Nina 스켈레탈 메시 중 캐주얼 스타일의 스킨이 있다면 에셋명은 SKM_Nina_Casual이 됩니다.

또 다른 예로 레트로 스타일의 스킨이 있다면 에셋명은 SKM_Nina_Retro가 될 겁니다.

예시들

기본에셋명 Nina의 특정 변형 예시

에셋 유형에셋명
스켈레탈 메시 (캐릭터 상의)SKM_Nina_Suit_Shirt
스켈레탈 메시 (캐릭터 하의)SKM_Nina_Suit_Slacks
머티리얼 (캐릭터 상의)M_Nina_Suit_Shirt
텍스처 Diffuse/AlbedoT_Nina_Suit_Shirt_D
텍스처 NormalT_Nina_Suit_Shirt_N

기본에셋명 Rock의 불특정 변형 예시

에셋 유형에셋명
스태틱 메시 (변형1)SM_Rock_01
스태틱 메시 (변형2)SM_Rock_02
스태틱 메시 (변형3)SM_Rock_03
머티리얼 (변형들의 마스터)M_Rock
머티리얼 인스턴스 (변형1의 인스턴스)MI_Rock_01
머티리얼 인스턴스 (눈쌓인 세부변형의 인스턴스)MI_Rock_Snow

5. Content 폴더 디렉터리 구조

에셋 명명 규칙과 마찬가지로, 프로젝트 디렉터리 구조 스타일 역시 반드시 지켜야 합니다.

에셋 이름과 Content 디렉터리 구조는 서로 연관이 깊으며, 둘 중 하나를 위반하게 된다면 불필요한 혼란이 많이 생기게 됩니다.

프로젝트 이름 [MySampleProject]의 [Content] 폴더 디렉터리 구조 예제
|-- Content
    |--MySampleProject
        |--3D_Assets
            |-- Building
                |-- Balcony
                |-- Wall
            |-- Nature
                |-- Rock
                |-- Tree
            |-- Props
                |-- OldWoodenBench
            |-- OldSchool
        |--3D_Plants
            |-- Desert
                |-- Cactus
                |-- DesertYellowHead
            |-- Arctic
                |-- Moss
        |--Decals
            |-- Concrete
            |-- Metal
        |--Surfaces
            |-- Asphalt
            |-- Fabric
        |--Characters
            |--Common
                |-- Animations
                |-- Audio
            |-- Nina
                |-- Animations
                |-- Blueprints
                |-- Meshes
                |-- Materials
                |-- Textures
            |-- Abo
                |-- Animations
                |-- Blueprints
                |-- Meshes
                |-- Materials
                |-- Textures
        |--Core
            |-- Characters
            |-- Engine
            |-- GameModes
            |-- Interactables
            |-- Weapons
        |-- Effects
            |-- Electrical
            |-- Fire
            |-- Weather
        |-- Blueprints
        |--Maps
            |-- Campaign1
            |-- Campaign2
        |--MaterialLibrary
            |-- Debug
            |-- Functions
            |-- Textures
            |-- Utility
        |-- GUI
    |--Megascans
    |--StarterContent
    |--ThirdPerson