How to Render 3D Scenes to Images in .NET

How to Render 3D Scenes to Images in .NET

How to Render 3D Scenes to Images in .NET

This article explains how to produce a raster image from a 3D scene using Aspose.3D for .NET. The minimum setup requires a Camera, at least one Light, and a call to Scene.Render.


Step 1 — Install the Package

dotnet add package Aspose.3D.Converter --version 1.0.0

Step 2 — Load or Build a Scene

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

// Load an existing model
var scene = Scene.FromFile("model.fbx");

// Or build a scene in code
var scene = new Scene();
scene.RootNode.CreateChildNode("box", new Box(1, 1, 1));

Step 3 — Add a Camera

using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Utilities;

var camera = new Camera(ProjectionType.Perspective);
camera.FieldOfViewY = 45.0;
camera.NearPlane = 0.1;
camera.FarPlane = 500.0;

Node camNode = scene.RootNode.CreateChildNode("camera", camera);
camNode.Transform.Translation = new Vector3(0, 5, 10);
camNode.Transform.EulerAngles = new Vector3(-30, 0, 0); // tilt down toward origin

Step 4 — Add Lights

var sun = new Light("sun") { LightType = LightType.Directional };
Node sunNode = scene.RootNode.CreateChildNode("sun", sun);
sunNode.Transform.EulerAngles = new Vector3(45, -30, 0);

var fill = new Light("fill") { LightType = LightType.Point, Intensity = 100 };
Node fillNode = scene.RootNode.CreateChildNode("fill", fill);
fillNode.Transform.Translation = new Vector3(-4, 6, 4);

Step 5 — Render to an Image File

using Aspose.ThreeD.Utilities;

// size is Vector2; format is a string ("png", "jpg", "bmp")
scene.Render(camera, "output.png", new Vector2(1280, 720), "png");

Console.WriteLine("Rendered: output.png");

Tip: JPEG produces smaller files for screenshots. Use ImageFormat.Jpeg instead of ImageFormat.Png when lossless quality is not required.


Troubleshooting

SymptomLikely CauseFix
Black output imageNo lights in sceneAdd at least one Light node
Object not visibleCamera pointing the wrong wayCheck LookAt target coordinates
Scene renders emptyGeometry not attached to a nodeCall CreateChildNode(name, entity)

Related Resources