Yotsuba Games
Back to Guide
Guide

3D Features

PixPipeline's 3D features run on two lanes with different goals.

You want Lane Strengths Output
Carved / fused shapes as pixel art Solid (sculpting) SDF union, subtraction, intersection, smooth blending Surface / image
Low-poly assets for a game engine Model (assembly) Placing small mesh parts, PBR, rigid-body animation GLB / Surface / image

Solid shapes are defined by math, so holes and smooth fusion come naturally — but they never become clean game-ready triangles. Model keeps triangles as the source of truth, which suits GLB export, but performs no booleans. In the Model lane, overlapping parts into each other is the correct way to build.

Isometric — IsoWorld is the canonical path

For isometric work, IsoWorld is the user-facing system. The recommended chain is IsoBlock / IsoItemBuilder → IsoAssemble → IsoPlace → IsoWorldCompose → IsoWorldToScene. IsoScene is the internal IR right before rasterization, kept public for compatibility and advanced tweaks.

  • Standard: iso_block, iso_item_builder, iso_assemble, iso_place, iso_world_compose, iso_world_to_scene
  • Advanced: iso_surface, iso_extrude, sprite_stack, iso_scene_compose, iso_scene_render, iso_scene_to_surface_geometry

Build new graphs from the World nodes; wire Scene nodes directly only when you need the internal IR structure. Advanced nodes are collapsed in the palette but still searchable.

Solid — the 3D sculpting system

  • Build parametric primitives (box / sphere / cylinder / cone / torus / stairs / ramp) in the Solid category, then combine (with smooth blending), subtract, and intersect them
  • Extrusions and revolutions from paths are available too
  • The 3D view (Solid 3D stage) lets you inspect angles while editing
  • Solids cannot be exported as 3D models. If you need a GLB, use Model

Model — game-ready mesh assembly

  • Create parts with model_box / model_cylinder / model_cone / model_wedge
  • model_transform handles movement, rotation, non-uniform scale, and pivots; model_group bundles parts into the same GLB. Parts are not stitched together and interior faces are not removed
  • model_extrude / model_revolve turn closed bezier paths into meshes
  • The Model 3D stage lets you select parts and write gizmo edits back to the originating node. Vertex/face/UV hand-editing is not available
  • model_gltf_export writes a self-contained .glb. With Animation Frames at 2 or more, rigid-body TRS per stable PartId is baked as a glTF animation

PBR textures from 2D images

pbr_material assigns ordinary Images explicitly to base color / tangent normal / roughness / metallic / AO / emission. Base color and emission are sRGB, the rest are linear. Normals require tangent-space maps in the OpenGL or DirectX convention — a Surface's view-space normal cannot be plugged in directly.

Connect a model generator's Texture Layout to model_texture_layout to get UV guides, region masks, and recommended resolutions as 2D images. To keep borders clean under nearest-neighbor sampling, extend edge colors into the gutter with texture_layout_dilate before bundling with pbr_material.

Saving re-editable assets

Models and Solids can be saved as native assets and reused across projects before the final export.

  • model_asset_save / model_asset_load
    • .pxmodel stores the Model hierarchy, stable PartIds, meshes, pivots, and PBR images. Default folder: user_data/library/models (configurable)
  • solid_asset_save / solid_asset_load
    • .pxsolid stores the SDF tree as-is, without polygonization. Default folder: user_data/library/solids (configurable)

Both save nodes start write-disabled; choose CreateIfMissing or Overwrite only when saving. Writes are atomic with read-back verification, and intermediate animation frames are never saved mid-evaluation.

Solid Render — 3D to pixel art

  • solid_render renders a solid orthographically (one ray per pixel) into a Surface (a multi-layer image with normals, height, depth, and material IDs)
  • Angle presets include 2:1 isometric; pixels_per_unit sets the dot density

model_render converts Models to Surfaces with the same parameter vocabulary. For animation and 8-direction assets, use frame_mode = FixedCanvas so every frame keeps the same size and center.

The bundled turntable sample: adjusting solid_render's azimuth, elevation, and pixels-per-unit in the inspector

The bundled workflows/solid_turntable_phase10.ppl is the minimal setup that spins a solid with a time source and bakes it via solid_render → animation_render.

Surfaces and lighting

  • A Surface is a "G-buffer for pixel art": albedo plus normal / height / AO / emission / roughness sub-maps
  • Lighting nodes control shading steps, OKLCH grading, and palette snapping to land on pixel-art-style stepped shading
  • Lighting definitions live in user_data/definitions/lighting/ and can be shared across assets

Turning drawings into 3D

  • height_from_image — estimate a height map from a silhouette or brightness
  • Quick Shade (quick_shade) — one-node light-and-shadow for sprites

Exporting

  • surface_export — writes a Surface as a texture set for game engines (naming conventions, normal Y-axis convention, integer upscaling)
  • model_gltf_export — writes the Model as a GLB with textures. Keep Save Mode = Disabled while editing and switch to CreateIfMissing / Overwrite after confirming the destination
    • Saved projects default to exports/models; unsaved projects use the "3D model export" folder from settings as the dialog's starting point

For step-by-step walkthroughs, see workflows/model-asset-basics.md and workflows/model-chest-animation.md.

3D Features — PixPipeline User Guide