UE Style and Folder Structure Guide
Data Folder Structure
1.01 UE Project Parent Folder Specification (i.e. including UE project folder and Assets resource folder)
1.01.a The project parent folder name should be: six-digit date + underscore "" + project name. If the project name contains whitespace, it will be replaced by an underscore "". If it contains ":" or other symbols, they will be removed.
For example: Today is March 27, 2023, and the project name is Generic Shooter, then the created folder name should be 202303_Generic_Shooter.
1.01.b The project parent folder contains the UE project folder and Assets resource folder. The project name will be processed in the same way as in 1.01.a. Under the project parent folder, there will be a UE project folder named after the project name, which is used to store the UE project, and an Assets folder, which is used to store related resources and working files. Other types of broadcast or game project files can also exist.
For example, the UE project folder name is Generic_Shooter.
|-- 202303_Generic_Shooter (Parent Folder )
|-- Assets (Resource Folder )
|-- Generic_Shooter (UE Project Folder )
|-- Config
|-- Content
|-- Generic_Shooter.uproject
1.01.c The .uproject name is: project name.uproject. The project name will be processed in the same way as in 1.01.a.
For example, the uproject is Generic_Shooter.uproject.
1.02 There is only one top-level folder under Content.
The top-level folder is named after the project name, and all files and classified assets in other projects will belong to this folder. For example, if the project is called 'Generic Shooter', all files will be in Content/GenericShooter.
*Does not include downloaded asset files from Marketplace.
1.03 Explanation of the hierarchy of folders within the UE project
Note: The hierarchy of folders is A>B>C>D>..., where A is the parent level of B, C is the child level of B, and so on. The following is an example of the folder structure of an animation project.
| -- Content
|-- A
|-- B
|-- C
|-- D
|-- Marketplace Package
A-level: The project level and the Marketplace asset package belong to the top-level. There can be more than one project, which can provide multiple projects to run concurrently. For example, the first season and the second season of an animation project need to be accommodated at the same time or with overlapping use.
ex:
Content/GenericShooter/ <-- project name (project level)
B-level: The main category is based on the main elements of the animation, which are 1. Scene, 2. Character, and 3. Shot. The individual detail objects are further classified downwards.
ex:
Content/GenericShooter/01_Env/ <-- Scene category (main category)
Content/GenericShooter/02_Ch/ <-- Character category (main category)
Content/GenericShooter/03_Seq/ <-- Sequence category (main category)
Content/GenericShooter/04_Temp/ <-- Temporary category (main category)
C-tier: Sub-elements are further classified based on the attributes of the main animation elements.
ex:
Content/GenericShooter/01_Env/OutDoorScene/ <-- First scene (sub-category)
Content/GenericShooter/02_Ch/Bob/ <-- First character (sub-category)
D, E, F... tier: Advanced elements are further categorized based on the individual details of the animation sub-elements, and subsequent sub-categorization follows suit.
ex:
Content/GenericShooter/01_Env/OutDoorScene/_Common/ <-- Common (classified by type)
Content/GenericShooter/02_Ch/Bob/SkeletalMesh/ <--SkeletalMesh property (classified by specific detail)
1.04 Animation Example Project Folder Structure
|-- Content
|-- _GenericShooter
|-- _Common
| | |-- Blueprints
| | |-- Effects
| | |-- Materials
| | |-- Props
| | |-- Textures
|-- 01_Env
| |-- OutDoorScene
| | |-- _Marketplace
| | | |-- SpaceshipPack
| | | | |-- Blueprints
| | | | |-- Effects
| | | | |-- Materials
| | | | |-- Props
| | | | |-- Textures
| | |-- _Moonshine
| | | |-- CustomTree
| | | | |-- Blueprints
| | | | |-- Effects
| | | | |-- Materials
| | | | |-- Props
| | | | |-- Textures
| | |-- Maps
| | | |--_OutDoorScene.umap
| | | |--OutDoorScene_Light.umap
| | | |--OutDoorScene_Props.umap
| |-- NatureEnv
| |-- Office
|-- 02_Ch
| |-- _Common
| | |-- Animations
| | |-- Blueprints
| | |-- Rigs
| | |-- HairCloth
| | |-- Effects
| | |-- Materials
| | |-- Meshes
| | |-- Textures
| |-- Bob
| | |-- Animations
| | |-- Blueprints
| | |-- Rigs
| | |-- Effects
| | |-- HairCloth
| | |-- Materials
| | |-- Meshes
| | |-- Textures
| | |-- Bob_LookDev.umap
| |-- Jack
| |-- Steve
|-- 03_Seq
| |-- Seq01
| | |-- Shot01
| | | |-- VarientProp
| | | | |-- Blueprints
| | | | |-- Effects
| | | | |-- Maps
| | | | |-- Materials
| | | | |-- Textures
| | | |-- Seq01Sh01.uasset
| |-- Ep01_Seq07
| |-- Seq24
|-- 04_Temp
| |-- ArtistName1
| |-- RandomFolder
|-- Movies
|-- MS_SampleVideoSource.uasset
|-- SpaceshipPack
|-- Blueprints
|-- Effects
|-- Materials
|-- Props
|-- Textures
1.05 VP XR Example Project Folder Structure
|-- Content
|-- _GenericVPXR
|-- _Common
| |-- _Marketplace
| |-- fog_pack
| |-- _Moonshine
| |-- Blueprints
| |-- Effects
| |-- Materials
| |-- Props
| |-- Textures
|-- OutDoorScene
| |-- _Marketplace
| | |-- cloud_pack
| |-- _Moonshine
| | |-- Tree01
| | | |-- Blueprints
| | | |-- Effects
| | | |-- Materials
| | | |-- Props
| | | |-- Textures
| |-- Maps
| | |-- _OutDoorScene.umap
| | |-- _OutDoorScene_Dev.umap
| | |--OutDoorScene_A_VP.umap
| | |--OutDoorScene_A_XR.umap
| | |--OutDoorScene_Light.umap
| | |--OutDoorScene_Props.umap
| |-- VP
| | |-- Blueprints
| | |-- Effects
| | |-- Materials
| | |-- Sequence
| | |-- Props
| | |-- Textures
| |-- XR
| | |-- Blueprints
| | |-- Effects
| | |-- Materials
| | |-- Sequence
| | |-- Props
| | |-- Textures
|-- NatureEnv
|-- Office
|-- Movies
| |-- MS_SampleVideoSource.uasset
Naming conventions
2.01 Basic naming principles Base Asset Name Principles
Prefix_BaseAssetName_Variant_Suffix
BaseAssetName should have a logical relationship with the object. For example, if a character's name is Bob, all resources related to Bob should be named Bob, see table 2.01.a below for more details.
Prefix should be associated with the corresponding attribute of the object. For example, Prefix should be named SK, see table 2.01.a below for more details.
Variant (extension) is a unique identifier for assets generated for iterative branches. For example, if Bob's skin has two variants, half-orc (Orc) and robot (Cybrog), the variants should be named Bob_Orc and Bob_Cybrog respectively. Alternatively, two-digit numbers starting from 01 can also be used to represent them. For example, if a large number of stone assets are needed, the names of these stones can be Rock_01, Rock_02, Rock_03, etc. See table 2.01.b below for more details.
2.01.a Basic Naming for Assets of the Same Type - Bob Table
| Asset Type | Asset Name |
| ----------------------- | ---------------------------------------------------------- |
| Skeletal Mesh | SK_Bob |
| Material | M_Bob |
| Texture (Diffuse/Albedo)| T_Bob_D |
| Texture (Normal) | T_Bob_N |
| Texture (Evil Diffuse) | T_Bob_Evil_D |
2.01.b Table for Naming Rocks with Two-Digit Numbers
| Asset Type | Asset Name |
| ----------------------- | ---------------------------------------------------------- |
| Static Mesh (01) | SM_Rock_01 |
| Static Mesh (02) | SM_Rock_02 |
| Static Mesh (03) | SM_Rock_03 |
| Material | M_Rock |
| Material Instance (Snow)| MI_Rock_Snow |
2.02 Asset Name Modifiers
Naming prefixes and suffixes can refer to the table below.
2.02.a Most Common
| Asset Type | Prefix | Suffix | Notes |
| ---------------- | ------ | --------- | ------------------------------------------ |
| Level / Map | _ | | |
| Level (Audio) | | _Audio | |
| Level (Lighting) | | _Light | |
| Level (Props) | | _Props | |
| Level (A_VP) | | _A_VP | Studio A |
| Level (B_VP) | | _B_VP | Studio B |
| Level (A_XR) | | _A_XR | Studio A |
| Level (B_XR) | | _B_XR | Studio B |
| Level (Gameplay) | | _Gameplay | |
| Level (LookDev) | | _LookDev | |
| Blueprint | BP_ | | |
| Widget Blueprint | WBP_ | | |
| Material | M_ | | |
| Static Mesh | SM_ | | |
| Skeletal Mesh | SK_ | | |
| Texture | T_ | _? | |
| Particle System | PS_ | | |
| Niagara System | NS_ | | |
| Niagara Emitter | NE_ | | |
| ControlRig | CR_ | | |
| IK Rig | IK_ | | |
| Render Media | RT_ | | |
| Media Bundle | MB_ | | |
| Lens File | LF_ | | |
2.02.b Animations
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Aim Offset | AO_ | | |
| Aim Offset 1D | AO_ | | |
| Animation Blueprint | ABP_ | | |
| Animation Composite | AC_ | | |
| Animation Montage | AM_ | | |
| Animation Sequence | A_ | | |
| Blend Space | BS_ | | |
| Blend Space 1D | BS_ | | |
| Paper Flipbook | PFB_ | | |
| Rig | Rig_ | | |
| Skeletal Mesh | SK_ | | |
| Skeleton | SKEL_ | | |
| IK Rig | IK_ | | |
| IK Retarget |IKR_ | | |
2.02.c Blueprints
| Asset Type | Prefix | Suffix | Notes |
| -------------------------- | ------ | --------- | --------------------------------------- |
| Blueprint | BP_ | | |
| Blueprint Component | BP_ | Component | I.e. BP_InventoryComponent |
| Blueprint Function Library | BPFL_ | | |
| Blueprint Interface | BPI_ | | |
| Blueprint Macro Library | BPML_ | | Do not use macro libraries if possible. |
| Enumeration | E | | No underscore. |
| Structure | S | | No underscore. |
| Tutorial Blueprint | TBP_ | | |
| Widget Blueprint | WBP_ | | |
2.02.d Materials
| Asset Type | Prefix | Suffix | Notes |
| ----------------------------- | ---------- | ---------- | -------------------------------- |
| Material | M_ | | |
| Material (Post Process) | PP_ | | |
| Material Function | MF_ | | |
| Material Instance | MI_ | | |
| Material Parameter Collection | MPC_ | | |
| Subsurface Profile | SP_ | | |
| Physical Materials | PM_ | | |
| Decal | M_, MI_ | _Decal | |
2.02.e Textures
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Texture | T_ | | |
| Texture (Diffuse/Albedo/Base Color)| T_ | _BaseColor | |
| Texture (Normal) | T_ | _Normal | |
| Texture (Occulusion Roughness Metallic) | T_ | _ARM | Substance Painter UE packed |
| Texture (Roughness) | T_ | _R | |
| Texture (Alpha/Opacity) | T_ | _A | |
| Texture (Ambient Occlusion) | T_ | _O | |
| Texture (Bump) | T_ | _B | |
| Texture (Displacement) | T_ |_Dist | |
| Texture (SSS) | T_ | _SSS | |
| Texture (Emissive) | T_ | _E | |
| Texture (Mask) | T_ | _M | |
| Texture (Specular) | T_ | _S | |
| Texture (Metallic) | T_ | _M | |
| Texture (Packed) | T_ | _* | |
| Texture Cube | TC_ | | |
| Media Texture | MT_ | | |
| Render Target | RT_ | | |
| Cube Render Target | RTC_ | | |
| Texture Light Profile | TLP | | |
2.02.f Effects
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ------ | ------ | ----- |
| Particle System | PS_ | | |
| Niagara System | NS_ |||
| Niagara Emitter | NE_ |||
| Niagara Module | NM_| | |
| Material (Post Process) | PP_ | | |
2.02.g Miscellaneous
| Asset Type | Prefix | Suffix | Notes |
| -------------------------- | -------- | ------- | -------------------------------- |
| Animated Vector Field | VFA_ | | |
| Camera Anim | CA_ | | |
| Color Curve | Curve_ | _Color | |
| Curve Table | Curve_ | _Table | |
| Data Asset | *_ | | Prefix should be based on class. |
| Data Table | DT_ | | |
| Float Curve | Curve_ | _Float | |
| Foliage Type | FT_ | | |
| Force Feedback Effect | FFE_ | | |
| Landscape Grass Type | LG_ | | |
| Landscape Layer | LL_ | | |
| Matinee Data | Matinee_ | | |
| Media Player | MP_ | | |
| Img Media Source | IMS_ | | |
| File Media Source | FMS_ | | |
| Media Texture | MT_ | | |
| Media Bundle | MB_ | | |
| Object Library | OL_ | | |
| Sprite Sheet | SS_ | | |
| Static Vector Field | VF_ | | |
| Substance Graph Instance | SGI_ | | |
| Substance Instance Factory | SIF_ | | |
| Touch Interface Setup | TI_ | | |
| Vector Curve | Curve_ | _Vector | |
2.02.h Paper 2D
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Paper Flipbook | PFB_ | | |
| Sprite | SPR_ | | |
| Sprite Atlas Group | SPRG_ | | |
| Tile Map | TM_ | | |
| Tile Set | TS_ | | |
2.02.i Physics
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Physical Material | PM_ | | |
| Physics Asset | PHYS_ | | |
| Destructible Mesh | DM_ | | |
2.02.j Sounds
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Dialogue Voice | DV_ | | |
| Dialogue Wave | DW_ | | |
| Media Sound Wave | MSW_ | | |
| Reverb Effect | Reverb_ | | |
| Sound Attenuation | ATT_ | | |
| Sound Class | | | No prefix/suffix. Should be put in a folder called SoundClasses |
| Sound Concurrency | | _SC | Should be named after a SoundClass |
| Sound Cue | A_ | _Cue | |
| Sound Mix | Mix_ | | |
| Sound Wave | A_ | | |
2.02.k User Interface
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| Font | Font_ | | |
| Slate Brush | Brush_ | | |
| Slate Widget Style | Style_ | | |
| Widget Blueprint | WBP_ | | |
2.02.l Artificial Intelligence
| Asset Type | Prefix | Suffix | Notes |
| ----------------------- | ---------- | ---------- | -------------------------------- |
| AI Controller | AIC_ | | |
| Behavior Tree | BT_ | | |
| Blackboard | BB_ | | |
| Decorator | BTDecorator_ | | |
| Service | BTService_ | | |
| Task | BTTask_ | | |
| Environment Query | EQS_ | | |
| EnvQueryContext | EQS_ | Context | |
2.03 Special Naming Categories Defined by Project Type
2.03.a Sequencer
Currently, Sequencer naming is divided into two categories. One is based on the names of sequences and shots in Shotgrid, and the naming principle is the (TV series) + sequence number + shot number. This name is related to external client and PM requirements, so the name is not fixed.
The other type is related to scene dynamic effects. The naming principle for this type of Sequencer is to clearly define the dynamic effects and focus on independence, and there are no specific naming rules.
2.03.b Copied resources on the Marketplace
For a detailed explanation, please refer to 3. Variation Principle 3.01.
2.03.c When the main material can be referenced by the sub-materials in various resources
The main material can be named according to the output format or recognizable software name. For example, if the material set uses the "Unreal Engine 4 (Packed)" configuration in Substance Painter, which is a commonly used output setting, the main material can be named M_SubstancePainter_UE4Packed and placed in the project's global shared folder.
Variation principle
3.01 When adjustments are needed for Marketplace resources, do not modify the original resource files. Instead, make a copy of the files to the folder where the variation is needed. Keep the original folder location, name, and structure. When changing the resource, copy the file to the corresponding internal project folder and change the name by adding suffixes according to the variation category, such as scene name, shot name, and camera name.
3.01a Example of variation by camera for Marketplace resource:
Suppose there is a Marketplace resource named "Factory_pack" that needs to be varied for the first shot of the first scene. The resources that need to be varied are Skeletal Mesh: SK_Crane, Static Mesh: SM_Tire_A, Materials: M_PBR, MI_Tire, MI_Tire_Dirts, MI_Tire_Broken, Textures: T_Tire_D, T_Tire_Dirts_D, T_Tire_Broken_D, T_Tire_N, T_Tire_Dirts_N, T_Tire_Broken_N. In this case, copy the resources that need to be varied to a new folder named after the original prop name, which in this example is "Tire." Then, change the name of the resources by adding a suffix with the camera name, resulting in Skeletal Mesh: SK_Crane_Seq01Shot01, Static Mesh: SM_Tire_A_Seq01Shot01, Materials: M_PBR_Seq01Shot01, MI_Tire_Seq01Shot01, MI_Tire_Dirts_Seq01Shot01, MI_Tire_Broken_Seq01Shot01, Textures: T_Tire_D_Seq01Shot01, T_Tire_Dirts_D_Seq01Shot01, T_Tire_Broken_D_Seq01Shot01, T_Tire_N_Seq01Shot01, T_Tire_Dirts_N_Seq01Shot01, T_Tire_Broken_N_Seq01Shot01.
3.01b Data structure diagram for the above example of variation by camera for Marketplace resource.
|-- Content
|-- GenericShooter
|-- _Common
|-- 01_Env
|-- 02_Ch
|-- 03_Seq
| |-- Seq01
| | |-- Shot01
| | | |-- Audio
| | | |-- Tire
| | | | |-- Blueprints
| | | | |-- Effects
| | | | |-- Maps
| | | | |-- Materials
| | | | | |-- M_PBR_Seq01Shot01.uasset
| | | | | |-- MI_Tire_Seq01Shot01.uasset
| | | | | |-- MI_Tire_Dirts_Seq01Shot01.uasset
| | | | | |-- MI_Tire_Broken_Seq01Shot01.uasset
| | | | |-- SkeletalMesh
| | | | | |-- SK_Crane_Seq01Shot01.uasset
| | | | |-- StaticMesh
| | | | | |-- SM_Tire_Seq01Shot01.uasset
| | | | |-- Textures
| | | | | |-- T_Tire_D_Seq01Shot01.uasset
| | | | | |-- T_Tire_N_Seq01Shot01.uasset
| | | | | |-- T_Tire_Dirts_D_Seq01Shot01.uasset
| | | | | |-- T_Tire_Dirts_N_Seq01Shot01.uasset
| | | | | |-- T_Tire_Broken_D_Seq01Shot01.uasset
| | | | | |-- T_Tire_Broken_N_Seq01Shot01.uasset
| | | | |-- Seq01Sh01.uasset
| |-- Ep01_Seq07
| |-- Seq24
|-- 04_Temp
| |-- ArtistName1
| |-- RandomFolder
|-- Movies
| |-- MS_SampleVideoSource.uasset
|-- Factory_pack
| |-- Blueprints
| |-- Effects
| |-- Maps
| |-- Materials
| | |-- M_PBR.uasset
| | |-- MI_Tire.uasset
| | |-- MI_Tire_Dirts.uasset
| | |-- MI_Tire_Broken.uasset
| |-- Props
| | |-- StreetProps
| | |-- FactoryProps
| | | |-- SM_Tire.uasset
| | | |-- SK_Crane.uasset
| |-- Textures
| | |-- T_Tire_D.uasset
| | |-- T_Tire_N.uasset
| | |-- T_Tire_Dirts_D.uasset
| | |-- T_Tire_Dirts_N.uasset
| | |-- T_Tire_Broken_D.uasset
| | |-- T_Tire_Broken_N.uasset
3.01c Example of Marketplace Resources Variation by Scene:
After importing the animal pack resource library into the project from the Marketplace, several resources need to be varied for the Forest scene. The resources that need to be varied are Skeletal Mesh: SK_Crane, Static Mesh: SM_Tire_A, Materials: M_PBR, MI_Tire, MI_Tire_Dirts, MI_Tire_Broken, Textures: T_Tire_D, T_Tire_Dirts_D, T_Tire_Broken_D, T_Tire_N, T_Tire_Dirts_N, T_Tire_Broken_N. These resources should be copied and placed in the variation folder for that scene, with the original prop name as the folder name. In this example, the folder name for the Tire would be Tire, and the file names would be changed by adding a suffix with the camera name, such as Skeletal Mesh: SK_Crane_Seq01Shot01, Static Mesh: SM_Tire_A_Seq01Shot01, Materials: M_PBR_Seq01Shot01, MI_Tire_Seq01Shot01, MI_Tire_Dirts_Seq01Shot01, MI_Tire_Broken_Seq01Shot01, Textures: T_Tire_D_Seq01Shot01, T_Tire_Dirts_D_Seq01Shot01, T_Tire_Broken_D_Seq01Shot01, T_Tire_N_Seq01Shot01, T_Tire_Dirts_N_Seq01Shot01, T_Tire_Broken_N_Seq01Shot01.
3.02 Variation of Scenes by Sequence:
3.02a Principles for Variation by Scene in Sequencer:
The Persistent Level and SubLevels are the original elements created for the scene. After being confirmed by the director, they are considered as the main principles for the scene.
When a scene needs to be adjusted based on the camera view, please add a Sequencer with the name: card number + Variant to distinguish the original location of the scene.
Drag the objects that need to be adjusted into the Sequencer and set the key to adjust their position.
Add the newly created Sequencer Variant to the main Sequencer for that camera as a Subsequencer.
3.02b Example of Variation by Scene in Sequencer:
For the 15th shot of the second scene, variation needs to be made to the CyberStreet scene. Therefore, the Sequencer variation name would be: Seq02_Sh15_CyberStreet.uasset
Add the newly created Seq02_Sh15_CyberStreet.uasset to the Seq02_Sh15.uasset as a Subsequencer.
Last Update: April 23, 2023
Reference:
Naming reference source link: ue5-style-guide/README.md at main · Allar/ue5-style-guide · GitHub