Skip to content
Back to skills

Ae Camera 3d

ASecurity

Cameras and 3D scenes in After Effects through the AE MCP Bridge - 3D layers and depth, camera rigs on nulls (dolly, orbit, push-in, parallax), depth of field, lights and shadows, materials, choosing the 3D renderer, 3D models, camera shake, and what the 3D camera tracker needs a person for. Use when asked for a camera move, parallax, depth, a 3D scene or extrusion, lighting, shadows, bokeh, or when layers should feel like they sit in space.

  • 4 stars
  • 0 votes
  • 1 copy
  • 12 views
  • Added September 19, 2026
ai-agentsgoexpress

Works with

  • mcp

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add solomondivyananth/aftereffects-mcp --skill ae-camera-3d --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ae Camera 3d?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ae Camera 3d
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/solomondivyananth-ae-camera-3d/badge)](https://www.skillsdirectory.com/skills/solomondivyananth-ae-camera-3d)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ae-camera-3d
description: Cameras and 3D scenes in After Effects through the AE MCP Bridge - 3D layers and depth, camera rigs on nulls (dolly, orbit, push-in, parallax), depth of field, lights and shadows, materials, choosing the 3D renderer, 3D models, camera shake, and what the 3D camera tracker needs a person for. Use when asked for a camera move, parallax, depth, a 3D scene or extrusion, lighting, shadows, bokeh, or when layers should feel like they sit in space.
---

# Camera and 3D

Any layer becomes 3D with `ae_set_layer_props {"props": {"threeDLayer": true}}`.
It then has Z Position, X/Y/Z Rotation and Orientation, and responds to
cameras and lights. Position becomes `[x, y, z]`: +Z is away from the camera.

## The renderer

The comp's 3D renderer decides what 3D can do. Set it with
`ae_set_comp_settings {"settings": {"renderer": "…"}}`:

| Renderer | Value | Use for |
|---|---|---|
| Classic 3D | `ADBE Advanced 3d` | flat layers in space, fast; lights and shadows |
| Advanced 3D (AE 2023+) | `ADBE Calder` | 3D models (glTF, GLB, OBJ), environment lighting, reflections, GPU |
| Cinema 4D | `ADBE Ernst` | extruded text and shapes (bevels, depth) |

## The lens, in numbers

After Effects measures a camera's Zoom in **pixels**, not millimetres. The
conversion, for a 36 mm-wide sensor:

```
zoom_px = comp_width × focal_mm / 36
focal_mm = 36 × zoom_px / comp_width
fov = 2 × atan(comp_width / (2 × zoom_px))
```

So on a 1920-wide comp: a 24 mm wide lens is zoom 1280, a 35 mm is 1867, a
50 mm is 2667, an 85 mm portrait lens is 4533. On a 1080-wide vertical comp a
50 mm is zoom 1500 — which is exactly what After Effects writes when you
create a camera with the 50 mm preset, so the formula is the same one it
uses.

| Lens | Feel | Use for |
|---|---|---|
| 18–28 mm | exaggerated depth, edges stretch | pushing through a scene, drama |
| 35–50 mm | close to how a room looks | most product and UI work |
| 85–135 mm | flat, compressed, elegant | beauty shots, slow drifts, logo ends |

Two consequences worth knowing before you place anything:

- **A long lens kills parallax.** If the move needs depth to read, use a
  wider lens and a shorter dolly rather than a long lens and a big one.
- **Moving a layer back by Δz and keeping its size** means scaling it by
  `(zoom + Δz) / zoom`. That is the whole trick behind flat artwork laid out
  in depth.

## Build depth first

Space the layers in Z before any camera exists. Foreground at Z −400 to
−200, subject at 0, background at +800 to +2000. Scale the far layers up so
they still fill the frame, by the factor above. Parallax comes from these Z
gaps, not from animating each layer separately.

A layout that reads, for a 1920×1080 comp with a 35 mm lens (zoom 1867):

| Plane | Z | Scale to hold size |
|---|---|---|
| Foreground furniture | −300 | 84% |
| Subject | 0 | 100% |
| Mid | +600 | 132% |
| Background | +1600 | 186% |

## A camera rig

Never animate the camera directly. Parent it to nulls so each move is one
property:

```json
ae_create_layer {"kind": "camera", "options": {"name": "Camera"}}
ae_create_layer {"kind": "null", "options": {"name": "Cam Dolly", "threeD": true}}
ae_create_layer {"kind": "null", "options": {"name": "Cam Orbit", "threeD": true}}
ae_set_layer_props {"layer": "Camera", "props": {"parent": "Cam Dolly"}}
ae_set_layer_props {"layer": "Cam Dolly", "props": {"parent": "Cam Orbit"}}
```

Put Cam Orbit at the subject's position.

**Parenting order matters.** After Effects keeps a child's look in the world
when it's parented. A layer that is already 3D, parented to a *rotated* 3D
parent, gets a counter-rotation and leaves the parent's plane: layers
"slice" into each other. Parent while the child is 2D, then set
`threeDLayer: true`. (`ae_set_layer_props` applies `parent` before
everything else in the same call.)

Then:

| Move | Animate |
|---|---|
| Push-in / dolly | Cam Dolly Z Position (toward the subject) |
| Orbit | Cam Orbit Y Rotation (or X for a crane) |
| Truck / pedestal | Cam Orbit X or Y Position |
| Roll | Cam Orbit Z Rotation |

Ease camera moves long and soft (landing ease 80–95, 20–60 frames), because
cameras have weight. Add a subtle handheld feel on the Camera itself:
`wiggle(0.6, 6)` on Position (see `ae-expressions`).

Numbers that read as deliberate rather than accidental:

| Move | Amount | Frames (30 fps) |
|---|---|---|
| Slow push (a shot that breathes) | 4–8% of the distance to the subject | 90–180 |
| Reveal push | 15–30% | 30–60 |
| Orbit around a subject | 15–35° | 45–90 |
| Whip to a new subject | 60–120° | 8–14, with motion blur |
| Crane down onto a layout | 20–40° on X | 45–75 |

**Orientation aims, Rotation animates.** Set a camera or layer's Orientation
once to point it where it should look, and keyframe X/Y/Z Rotation for the
move. Animating both, or animating Orientation across more than 90°, is how
you get a flip halfway through that nothing in the values explains.

**Turn motion blur on for camera moves.** A camera move is the fastest thing
in most comps, and without blur a push-in strobes on every edge.

A camera's transform paths are `["Transform","Point of Interest"]`,
`["Transform","Position"]` and so on. Its lens settings are under
`["Camera Options", …]`.

## Depth of field

| Property (under Camera Options) | What it does |
|---|---|
| Zoom | lens focal length in pixels: bigger is more telephoto |
| Depth of Field | on/off |
| Focus Distance | distance from the camera that is sharp |
| Aperture | larger is shallower focus |
| Blur Level | 0–100%+ strength |
| Iris Shape, Iris Rotation, Highlight Gain | bokeh character |

A rack focus: key Focus Distance from the foreground layer's distance to the
background's over 15–30 frames, eased. To keep focus locked on a layer, use
an expression on Focus Distance:

```js
length(thisComp.layer("Subject").toWorld([0,0,0]), toWorld([0,0,0]))
```

## What each renderer costs you

The renderer is not only about features; it changes which of your other
tools still work. Test with one `ae_render_frame` after switching, because
the viewport and the render can disagree.

| Renderer | Gives you | Takes away |
|---|---|---|
| Classic 3D | lights, shadows, intersecting layers, everything 2D still works | no extrusion, no real materials |
| Cinema 4D (`ADBE Ernst`) | extruded text and shapes, bevels | blend modes and track mattes on 3D layers are ignored; slower |
| Advanced 3D (`ADBE Calder`) | imported 3D models, environment lighting, reflections, GPU speed | needs a capable GPU; some legacy effects behave differently |

Whatever the renderer, effects are 2D: they run *after* the layer is placed
in space, so a glow on a tilted 3D layer is a flat glow on the flat result.
If an effect must live in the scene, put it on a precomp and make that
precomp the 3D layer.

## Lights and shadows

`ae_create_layer {"kind": "light", "options": {"name": "Key", "lightType": "spot"}}`
(`parallel`, `spot`, `point` or `ambient`).

| Light Options | |
|---|---|
| Intensity, Color | brightness (%) and tint |
| Cone Angle, Cone Feather | spot size and softness |
| Falloff, Radius, Falloff Distance | how light fades with distance |
| Casts Shadows, Shadow Darkness, Shadow Diffusion | shadows (soft = higher diffusion) |

Layers only cast and receive shadows when their Material Options allow it:

```json
ae_set_property {"layer": "Card", "path": ["Material Options","Casts Shadows"], "value": 1}
ae_set_property {"layer": "Floor", "path": ["Material Options","Accepts Shadows"], "value": 1}
```

Other material settings: Accepts Lights, Ambient, Diffuse, Specular
Intensity, Specular Shininess, Metal, Reflection Intensity, Transparency,
Index of Refraction. A classic setup: key light 100%, a dim ambient at
20–30% so shadows aren't black, and one rim light behind the subject.

## 3D models

With the Advanced 3D renderer (AE 2023+), `ae_import_file` a `.glb`, `.gltf`
or `.obj` and add it with `ae_create_layer` kind `footage`. Models are lit
by the comp's lights, or by an environment light (image-based lighting).

## Camera shake and impacts

Shake the camera, not the layers, so the whole scene moves together and the
parallax stays right. Put the marker-driven decaying shake from
`ae-expressions` on Cam Orbit Position, scaled down (amplitude 4–10) for 3D.

## What goes wrong in 3D

| Symptom | Cause | Fix |
|---|---|---|
| Layers slice into each other | two 3D layers intersect, or a child was parented after it went 3D | separate them in Z; parent while 2D, then set `threeDLayer` |
| A layer vanishes when the camera moves | it is edge-on to the camera | give it a small X or Y rotation, or make it face the camera |
| The move flips halfway | Orientation and Rotation are both animated | animate Rotation only |
| Everything is dark | a light is in the scene and layers accept lights | add ambient light at 20–30%, or switch Accepts Lights off on flat UI layers |
| Shadows look like blobs | a spot light very close, with high diffusion | move the light back, lower Shadow Diffusion |
| Focus drifts | Focus Distance is keyed but the camera also moves | drive Focus Distance from the subject with the expression above |
| The background shows its edges | a far layer was never scaled up | scale by `(zoom + Δz) / zoom` |
| It renders forever | depth of field plus shadows plus motion blur | preview with `downscale: 4`, and turn depth of field on last |

## What needs a person

- **3D Camera Tracker** (tracking real footage to get a camera) isn't
  scriptable. Ask the user to run Animation ▸ Track Camera on the footage.
  Once it has a solved camera, everything above works with it.
- Choosing an environment light's image (HDRI) is set in the Effect Controls
  or Project panel. Ask, or import the image and let the user assign it.

## Check it

Depth and camera moves only read in motion. `ae_review_motion` over the
whole move, and look for:
- layers that pass through each other or pop in Z
- edges of too-small background layers showing
- shadows that swim
- focus landing late

`ae_render_frame` at the start, middle and end confirms composition at each
point of the move.

`ae_proof` helps less here than elsewhere, and says so: once a camera is in
the comp it skips its space rules for 3D layers, because the sampler measures
flat boxes, not what the camera sees (`ae-motion-proof` names the layers it
skipped). Its timing, easing and integrity checks still apply to camera
moves — a camera's keyframes are keyframes like any others.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.