3D Text in GIMP - Depth, Shadow and Perspective

Four practical methods for creating convincing three-dimensional text in GIMP 3.x, from simple layer offsets to Script-Fu automation and G'MIC filters.

Intermediate–Advanced ~35 min Updated May 2026
3D TEXT

Methods Overview

GIMP does not have a built-in true 3D renderer, but four distinct methods can produce excellent results depending on the level of realism, editing time, and whether the result needs to be editable after the fact. Each method is self-contained - Choose the one that matches your skill level and deadline. Understanding layers thoroughly will help with all four approaches.

Method Realism (1-10) Difficulty Time Editable?
Shadow Offset 6 Beginner 5–10 min Yes
Perspective Transform 7 Intermediate 15–25 min Partial
Script-Fu Stack 8 Intermediate 10 min (script runs instantly) Partial
G'MIC 3D Filter 9 Easy (UI-driven) 5 min (after install) No (flattens)

Method 1: Shadow Offset Technique

The quickest 3D simulation. Duplicate the text layer multiple times, each offset slightly, to create a stacked "depth" effect. The result resembles extruded block text viewed from a three-quarter angle.

  1. 1
    Create the text layer: Text tool (T). Choose a bold font (Impact, Bebas Neue, or similar). Large size: 150 px or more. Color: your desired front-face color (e.g. #E8E8E8 light grey).
  2. 2
    Flatten text layer: Right-click → Flatten Text Layer.
  3. 3
    Duplicate 10–15 times: Right-click → Duplicate Layer. Repeat or use Script-Fu console: (let* ((image (car (gimp-file-load ...)))) - The Script-Fu method in Method 3 automates this.
  4. 4
    Color the depth layers: Select all duplicate layers except the topmost. Lock their alpha channel (in Layers panel, click the lock icon). Fill each with a darker color, for example #555555 for mid-depth and #333333 for the back layers. Use Colors → Colorize or the Bucket Fill with "Fill by Color" checked if the layer alpha is locked.
  5. 5
    Offset each layer: Select each duplicate layer from top to bottom. Use the Move tool (M) to shift each one 1–2 px to the right and 1–2 px down relative to the layer above it. The lowest duplicate is the furthest-offset.
  6. 6
    Merge depth layers: Select all duplicate layers (not the top text). Right-click → Merge Down. The merged "depth" layer sits below the bright top text layer.
  7. 7
    Optional gradient on depth: Lock the depth layer alpha, then apply a gradient from #666666 (top of depth) to #222222 (bottom). This simulates how the extrusion face gets darker toward the base.

Method 2: Perspective Transform for Vanishing Point 3D

Adding a perspective transformation after the shadow-offset method makes the 3D depth recede toward a vanishing point rather than sitting at a fixed angle. This is more photorealistic and works well for packaging mockups and posters.

  1. 1
    Merge all text layers to one: After completing Method 1 (or starting fresh), flatten all text and depth layers into one layer using Image → Flatten Image, then immediately undo (Ctrl+Z) to recover layers - Alternatively use Layer → Merge Visible Layers set to "Expand as Necessary".
  2. 2
    Apply Perspective Tool: Select Tools → Transform → Perspective (Shift+P). Click and drag the corner handles of the text. To create a classic "floor text" perspective, pull the bottom two corners apart and push the top two corners toward each other. The text appears to lie flat receding into the distance.
  3. 3
    Apply the transform: Click the "Transform" button in the Perspective Tool Options bar, or press Enter. GIMP will rasterize the transformation.
  4. 4
    Create the shadow beneath: Duplicate the perspective-transformed layer. Colors → Desaturate → Desaturate. Colors → Levels: pull the Output white slider to 0 (the layer becomes black). This creates a black silhouette. Apply Gaussian Blur 15 px. Set blend mode to Multiply, opacity 60%. Move it below the text layer and nudge it slightly downward for a cast shadow.
  5. 5
    Scale shadow with perspective: Use the Perspective Tool on the shadow layer to make it match the angle of the text. The shadow should appear to stretch away from the base of the letters in the same direction as the perspective vanishing point.

Method 3: Script-Fu Stacking

Script-Fu can automate the layer duplication and offset steps from Method 1. The following script creates a configurable number of depth layers in seconds, each offset and color-shifted automatically.

Open the Script-Fu Console: Filters → Script-Fu → Console. Paste the script below and click Run. The script assumes your active image has a flattened text layer as the topmost layer.

; 3D Text Stack - Script-Fu
; Run in Filters -> Script-Fu -> Console
; Select your text layer first in the Layers panel

(let* (
  (image       (car (gimp-file-load RUN-NONINTERACTIVE
                  "/path/to/your-image.xcf" "your-image.xcf")))
  ; Use current image instead:
  ; (image (car (gimp-display-get-image (car (gimp-display-list)))))
  (text-layer  (car (gimp-image-get-active-drawable image)))
  (depth       15)    ; number of depth layers
  (offset-x    2)     ; pixels to shift per step (right)
  (offset-y    2)     ; pixels to shift per step (down)
  (base-dark   50)    ; how dark the deepest layer is (0=black)
)
  (let loop ((i 1))
    (when (<= i depth)
      (let* (
        (new-layer (car (gimp-layer-copy text-layer FALSE)))
        (darkness  (inexact->exact
                     (round (* 255 (/ (- base-dark (* i (/ base-dark depth))) 255)))))
      )
        (gimp-image-insert-layer image new-layer 0 -1)
        (gimp-layer-set-offsets new-layer
          (+ (car (gimp-drawable-offsets text-layer)) (* i offset-x))
          (+ (cadr (gimp-drawable-offsets text-layer)) (* i offset-y)))
        (gimp-curves-spline new-layer HISTOGRAM-VALUE 10
          #(0 darkness 64 (min 255 (+ darkness 30)) 128 (min 255 (+ darkness 60))
             192 (min 255 (+ darkness 90)) 255 (min 255 (+ darkness 120))))
        (gimp-image-raise-layer image text-layer)
        (loop (+ i 1))
      )
    )
  )
  (gimp-displays-flush)
)

After running the script, select all the depth layers (hold Shift, click each), then right-click → Merge Down to combine them into a single depth layer. Keep the original top layer separate.

Method 4: G'MIC 3D Text Filter

G'MIC (Filters → G'MIC-Qt) includes a dedicated 3D-extrude effect under the Text category. It renders true 3D extrusion with configurable light direction, extrusion depth, and surface material in one step.

  1. 1
    Install G'MIC: Download the GIMP plugin version from gmic.eu. Copy the .exe or .so plug-in file to your GIMP plug-ins folder (Help → Show Plug-In Folder). Restart GIMP.
  2. 2
    Open G'MIC: Filters → G'MIC-Qt. In the filter list, navigate to Text → 3D Text. Type your text in the text field, adjust font, size, and extrusion depth.
  3. 3
    Lighting controls: G'MIC's 3D Text filter provides sliders for light azimuth, elevation, and specular intensity. Set the light direction to match any other light sources in your composition (e.g. top-left at 315 deg azimuth, 45 deg elevation).
  4. 4
    Apply: Click OK. G'MIC renders the 3D text onto a new layer. The result is a flattened pixel layer - No further 3D editing is possible without re-running the filter.

Method Comparison: Realism Score vs Time (minutes)

Adding Realistic Shadows

GIMP's built-in Drop Shadow filter (Filters → Light and Shadow → Drop Shadow) creates a quick blurred shadow offset. For more control, build shadows manually.

  1. 1
    Duplicate the finished text layer.
  2. 2
    Darken to black: Colors → Curves. In the shadow duplicate, pull the top-right of the Value curve all the way down to black. The layer becomes a solid black silhouette of the text.
  3. 3
    Blur: Filters → Blur → Gaussian Blur. 12–20 px for a diffuse ground shadow.
  4. 4
    Set blend mode to Multiply, opacity 55%. Move the shadow layer below the text layers. Offset it in the direction away from the light source.
  5. 5
    Perspective the shadow: Use Tools → Transform → Perspective on the shadow layer to stretch it in the direction of the cast shadow. For a strong overhead sun, the shadow stretches short and slightly behind the text; for a low-angle light, it stretches far.

Embossing for Surface Detail

Adding an emboss layer to the front face of the 3D text creates the illusion of surface texture, particularly useful when simulating stone, metal, or carved wood lettering.

  1. 1
    Duplicate the top text face layer.
  2. 2
    Apply Emboss: Filters → Distorts → Emboss. Azimuth: 315 deg, Elevation: 30 deg, Depth: 5–8. Check Emboss (greyscale output).
  3. 3
    Blend mode Hard Light, opacity 50–70%.

Combining 3D Text with Photo Backgrounds

Placing 3D text convincingly into a photograph requires matching perspective, lighting direction, and color temperature.

  • Match perspective: Use the Perspective Tool on the text to match the horizon line and vanishing points visible in the photograph. The Perspective Grid (View → Show Grid, then configure as a perspective grid) can help.
  • Match light direction: Identify the light source in the photo (look at which way shadows fall) and apply the emboss/bump map from the same azimuth angle.
  • Color grade the text: After compositing, use Colors → Curves on the text layer to add a slight warm or cool cast matching the photo's ambient light. Multiply a thin semi-transparent copy of the background photo over the text layer at 10–15% opacity - This picks up environmental color automatically.
  • Ambient occlusion simulation: Add a very soft shadow directly underneath and around the base of the 3D text using a black layer at 25% Multiply. This is where the text meets any surface and creates contact shadow.

Export Tips

  • Save the .xcf source before exporting - 3D text compositions contain many layers that are impossible to reconstruct from a flattened export.
  • Export PNG for print prep and compositing. Export JPEG (quality 92) for web.
  • If exporting a transparent-background PNG for use in other applications, flatten only the text and depth layers before export, leaving the background hidden.
  • For print, scale the entire composition to 300 dpi (Image → Scale Image - Set X and Y resolution to 300, then scale pixel dimensions proportionally) before exporting to TIFF.