Lesson 3: Art Pipeline and Asset Organization
In Lesson 1 you chose a focused 2D action game concept, and in Lesson 2 you built a solid GDScript architecture. Now it is time to decide how your game should look and how every asset will flow into Godot 4.
The goal of this lesson is not to create every final sprite. The goal is to define a repeatable art pipeline and folder structure so adding new characters, tiles, VFX, and UI later feels easy instead of messy.
Step 1 – Lock in a Simple, Finishable Art Style
Before touching files, decide on constraints. A small, consistent style beats an ambitious, inconsistent one.
Answer these questions in your docs/concept.md or a new docs/art-direction.md:
- Camera and resolution: For example, 2D side view at 1920×1080, but assets authored at 2× scale.
- Rendering vibe: Flat pixel art, soft painted, vector‑like, or chunky “HD‑pixel” look.
- Palette rules: Limited shared palette vs. freeform colors; warm vs. cool, saturated vs. muted.
- Silhouette clarity: How you will keep the player and enemies readable on any background.
Keep examples small:
- Pick 2–3 reference screenshots from games you like.
- Note why you like them (silhouette, contrast, UI clarity), not just “looks cool”.
These decisions will drive how you name and group assets in the rest of the lesson.
Step 2 – Design a Clean Asset Folder Structure
Next, decide where every asset type will live on disk and inside Godot.
Recommended top‑level folders in your project:
art/– Source images (PSD/XCF/Krita files) and exportsart/characters/,art/enemies/,art/environment/,art/ui/,art/vfx/sprites/– Game‑ready PNGs and atlasestilesets/– Tilemaps and tileset texturesaudio/– Music and SFX (you will reuse this later in audio lessons)fonts/– UI fonts
In Godot’s FileSystem panel, mirror the important runtime folders:
res://sprites/characters/res://sprites/enemies/res://sprites/environment/res://sprites/ui/res://tilesets/
This separation lets you:
- Keep large source files out of your runtime structure.
- Quickly find the in‑engine asset used by a given scene.
If your project is already growing, spend a few minutes moving assets into this structure now while it is still small.
Step 3 – Establish Naming Conventions for Sprites and Tiles
Consistent names make searching, refactoring, and animation much easier.
Adopt conventions such as:
- Characters:
player_idle_01.png,player_run_03.png,enemy_slime_idle_02.png - Animations grouped by action:
player_attack_slash_01.png,player_attack_slash_02.png - Tilesets:
tileset_forest_ground.png,tileset_forest_props.png
Tips:
- Keep names lowercase with underscores.
- Include the role first (
player,enemy_slime,ui_button). - For animations, keep frame numbers zero‑padded (
01,02,03) so they sort correctly.
Write down a short naming cheatsheet in docs/art-naming.md and follow it from now on.
Step 4 – Import Sprites and Set Up Spritesheets in Godot 4
Now bring your first test sprites into Godot with import settings that will still work when you have hundreds of assets.
- Copy a few placeholder sprites (or quick mockups) into
res://sprites/characters/andres://sprites/enemies/. - In the Import dock, select a sprite and configure:
- Texture > Filter: Off (for crisp pixel art) or On (for smooth HD art).
- Texture > Repeat: Disabled unless used in scrolling backgrounds.
- Animation > H-Frames / V-Frames for spritesheets.
- Click Reimport after changing settings.
For spritesheets:
- Use a single PNG with all frames aligned to a grid.
- In a
Sprite2DorAnimatedSprite2D, sethframesandvframes, then create animations from frame ranges. - Name animations after actions:
idle,run,attack_slash,hit,death.
This gives you a repeatable pattern for every future character or enemy you add.
Step 5 – Organize Environment Art and Tilesets
Environment art often explodes into many small images. Keep it under control by using tilesets and grouping.
In your project:
- Create
res://tilesets/tileset_main.png(or multiple tilesets:tileset_forest.png,tileset_dungeon.png). - In Godot, create a
TileSetresource and assign your tileset texture. - Define tiles for:
- Ground and platforms
- Walls and ceilings
- Decorative props and background details
Best practices:
- Use clear collision layers in tiles for ground vs. walls vs. hazards.
- Tag tiles with navigation or metadata if you will use them later (for enemy spawn zones, interactive props, etc.).
- Group tiles visually in the TileSet editor so level building feels fast.
This structure keeps level design scalable when you reach the level design lesson.
Step 6 – Connect Art to Your Existing Scenes
With some sprites and tiles imported, wire them into the scenes you created in Lessons 1 and 2.
Examples:
- Replace placeholder rectangles in your
Playerscene with a properSprite2Dusing your player spritesheet. - Update the main test level to use your new
TileSetfor floors and walls. - Add simple background props (trees, rocks, signs) to test readability and contrast.
As you connect art, constantly ask:
- Can I still read the player’s position clearly?
- Do enemies pop from the background?
- Does the UI stay legible on top of everything else?
If not, adjust palette and contrast early, before you create lots of assets.
Step 7 – Create a Lightweight Art Checklist for Each New Asset
To keep the pipeline consistent, define a small checklist you will follow every time you add a new character, enemy, or prop.
For a new enemy, for example:
- Add concept or reference to
docs/enemies.md. - Create source art in
art/enemies/and export PNGs tosprites/enemies/. - Import into Godot with the correct filter/repeat settings.
- Set up spritesheet frames and animations.
- Wire the sprite into the
Enemyscene and test in a sample room.
You can store these checklists at the bottom of each docs file so they are always nearby when working on that asset type.
Troubleshooting and Common Mistakes
Sprites look blurry in‑game
- Cause: Texture filtering is on for pixel art or the import preset changed.
- Fix: Turn Filter off for pixel art textures and reimport. Verify your project’s default import preset if needed.
Tiles do not line up perfectly
- Cause: Source tiles are not a consistent size or have extra padding.
- Fix: Standardize tiles to a fixed grid (for example, 16×16 or 32×32) and re‑export spritesheets with that grid.
Player or enemies disappear when moving
- Cause: Sprite pivot/offset or collision shapes do not match the artwork.
- Fix: Center sprites and ensure collision shapes enclose the visible area sensibly.
Project folders feel random after a few assets
- Cause: No enforced structure or naming conventions.
- Fix: Move existing assets into the structure from Step 2 and update references once. It is easier to fix now than after 100 files.
Mini Challenge – Build a Tiny Art Slice
By the end of this lesson, aim to have:
- One player spritesheet with at least
idleandrunanimations wired into your Player scene. - One enemy spritesheet with at least an
idleanimation placed in a test room. - One tileset with enough tiles to build a simple room (floor, wall, a few props).
- A clean folder structure in both your file system and Godot’s FileSystem panel that matches the conventions you chose.
If you reach this point, your art pipeline is strong enough to support all the gameplay work coming next.
What’s Next – Lesson 4 Preview
In Lesson 4: Player Character and Movement System, you will take the placeholder movement from Lesson 2 and combine it with your newly imported art to build responsive, game‑feel‑focused movement for your character.
Make sure your sprites and tiles are wired into at least one simple test level so you can immediately see your character move through a real environment in the next lesson.