Back to all posts
TutorialPicoBerry Team

Rendering 3D as 2D in Unity — So You Don't Redraw Sprites for Every Angle

The exact Unity 6.3 setup for rendering 3D objects as 2D, grounded in the official docs. Three things do it — give the Mesh Renderer a Mesh2D-Lit-Default material (or a Sort 3D As 2D Compatible shader), add a Sorting Group at the root so it sorts by Sorting Layer / Order in Layer, and switch the Mesh Renderer's 2D › Mask Interaction to react to Sprite Masks. A plain URP Lit material won't respond to 2D Light or Sprite Mask.

Anyone who has rotated a character through eight directions and drawn eight sprites knows the trap — every new angle is another drawing, and once animation enters the picture it multiplies by the frame count. Unity 6.3's URP 2D Renderer breaks that multiplication. Put a single 3D Mesh through the same 2D Light, Sprite Mask, and sorting rules as everything else, and angles become rotation while animation becomes reuse. This isn't a workaround — it's an officially supported feature. This post lays out the exact setup, straight from the official docs — which materials and shaders to use, how to turn on sorting and masking, and what to check when it doesn't work.

A 3D draft placed in a 2D-style Unity scene, then checked for sorting, masks, lighting, and Game View readability.

Why 3D instead of sprites?

It won't look identical to hand-drawn 2D — especially where pixel-art or a painterly style is the game's identity. 3D's advantage isn't replacing hand-drawn art; it's reusing the cost of angles, animation, and repeated edits. The on-screen role can be similar, but the work of making it differs.

Left: hand-drawing a sprite for each of eight directions / Right: rotating one 3D model to reuse every direction — a concept diagram of the work each new angle costs

TaskHand-drawn sprites3D assets as 2D
New angles/posesRedraw per directionRotate one model
AnimationDraw frame by frameReuse asset animation
Depth/render orderStack layers by handSorting Group + Sort 3D as 2D
Lighting/masksBaked per frame2D Light and Sprite Mask respond

What the right column changes isn't the look — it's the iteration cost. When a new angle or animation is needed, do you start redrawing, or reuse what already exists?

Before and after applying 2D sorting rules — the same 3D object falls into place along the Sorting Layer order.

Two strategies: Z-depth vs Sort 3D as 2D

Decide one thing first — whether the scene uses depth.

  • Strategy A · Z-depth — use each object's actual Z position for parallax, depth of field, fog, and scene-depth effects. This fits 2.5D games.
  • Strategy B · Sort 3D as 2D — treat a 3D object as just another 2D scene element. It follows your existing Sorting Layer rules, so its front-to-back order is decided exactly the way a sprite's is.

If depth is part of the gameplay, go with A; if you're using 3D purely for the look, go with B.

Diagram comparing Z-depth against a 2D Sorting Layer — a reference for diagnosing front-to-back ordering problems

The actual setup — putting a 3D Mesh through the 2D Renderer

Prerequisite: the project has to be 2D URP. The URP Asset's renderer must be a 2D Renderer Data for the 2D options below to appear on the Mesh Renderer — starting from the 2D template sets this up for you.

  1. Material — give the Mesh Renderer (or Skinned Mesh Renderer) a Mesh2D-Lit-Default material. It's assigned automatically when you create a 3D object in a 2D URP project; for an existing object, pick it in the Materials slot. A plain URP Lit material won't respond to 2D Light. (docs)
  2. If you need a custom shader — create a Sprite Lit, Unlit, or Custom Lit shader via Assets › Create › Shader Graph › URP, then in the Graph Settings enable Sort 3D As 2D Compatible. Skip that toggle and the sorting won't follow 2D rules.
  3. Sorting — add a Sorting Group to the object's root (Component › Rendering › Sorting Group). Inside the group, each renderer's Sorting Layer / Order in Layer decides front-to-back order, and the distance to camera is computed once from the root's position. (docs)
  4. Masking — to react to a Sprite Mask, switch the Mesh Renderer's 2D › Mask Interaction from None to Visible Inside Mask or Visible Outside Mask. This option only appears in a 2D URP project. (docs)
  5. Lighting2D Light works only with URP + the 2D Renderer, and it targets objects wearing a Mesh2D-Lit-family material.

When it doesn't work — symptom checklist

SymptomCommon causeCorrect setting
2D Light has no effectA plain URP Lit materialMesh2D-Lit-Default (or a Sort 3D As 2D Compatible shader)
Sprite Mask has no effectMesh Renderer's 2D › Mask Interaction = NoneVisible Inside/Outside Mask
Front-to-back order is scrambledNo Sorting Group / Order in Layer unsetSorting Group at the root + Sorting Layer / Order in Layer
Fine in Scene, wrong in GameRender order not checked in Game ViewVerify in Game View with the actual play camera
The 2D options aren't even thereNo 2D Renderer Data on the URP AssetSet the project to 2D URP

Fine in the Scene View, broken in the Game View?

A model that looks fine in isolation can fall apart under the real camera. Always confirm sorting, masking, and lighting in the Game View, at the camera distance the player actually sees.

Following it from Scene View to Game View — does the character stay readable behind a large foreground tree, and does its depth match the distant bridge and water layers?

Is 3D cheaper than sprites?

Not automatically. Draw calls, material count, shader cost, and skinned-mesh overhead all have to be measured on the target device. The savings come not from the look but from iteration — they're recovered when angles multiply, animation gets reused, and large objects no longer need redrawing frame by frame. So decide on "does this project generate enough iteration cost to make it worth it?", not on "3D is cheaper."

When to use 3D, when to stay on sprites

3D pays offSprites are better
Rotating, multi-direction charactersOnly one angle, now and later
Units that reuse animationPixel-art craft is the identity
High-effort bosses, props that change oftenSmall and simple — 3D overhead isn't worth it

Getting the draft fast with PicoBerry

This workflow starts with a usable 3D draft. Use PicoBerry to generate a clear-silhouette draft from text or an image and put it through the setup above. It isn't AI replacing the artist; it's shortening the time to a first draft.

Make a 3D draft for Unity → — start from text or an image and verify it straight in your Unity scene. Free to start, no card required.

Refining the AI draft inside Unity — UModeler X

What comes out is a draft, not a finished asset. Fitting it cleanly into a 2D scene sometimes means adjusting the silhouette, the pivot, or the polygons — and you don't have to export to another tool and re-import to do it. UModeler X carries modeling, UV, painting, and rigging into the Unity editor itself, so you refine an AI-made draft right where the scene already lives.

UModeler X inside the Unity editor — editing an AI-made 3D mesh in place with Push/Pull, primitives, and modeling tools

PicoBerry generates, UModeler X refines and finishes — both without leaving Unity.

Explore next

In one line

Unity 6.3 URP officially supports rendering a 3D Mesh as 2D. A Mesh2D-Lit-Default material (or a Sort 3D As 2D Compatible shader) + a Sorting Group at the root + the Mesh Renderer's 2D › Mask Interaction — those three make a 3D object sort, light, and mask like a sprite. A plain URP Lit material won't do it, and you always verify in the Game View. Then you never redraw an angle again.

Keep reading