DirectX 11 3D rendering engine for WPF and WinForms

Ab3d.DXEngine is a blazing fast 3D rendering engine that can be used in .Net Desktop applications.

Ab3d.DXEngine uses super fast multi-threading rendering techniques that can fully utilize graphics cards and provide the ultimate performance that is almost the same as when using C++.

The engine also supports top quality visuals with per-pixel lighting, PBR (physically based rendering) materials and shadows.

Ab3d.DXEngine is very easy to use. You can use WPF 3D objects to define the 3D scene, cameras and lights. What is more, it works greatly with the Ab3d.PowerToys library - the ultimate 3D toolkit that gives you many building blocks to create a 3D application.

Car engine model shown with DXEngine (DirectX 11 rendering engine for .Net and WPF)

 

Main Ab3d.DXEngine features

  • DirectX 11 based rendering engine with full hardware rendering support.
  • Render millions of triangles with using instancing, smart optimizations and other techniques to get extreme GPU performance.
  • Render millions of hardware accelerated 3D lines (super-smooth lines with custom thickness, line color and line pattern).
  • Render millions of characters.
  • Multi-threaded rendering that can in some cases achieve more then 4 times the performance of a single thread.
  • With DirectX command list caching almost ANY number of objects can be rendered in practically no CPU time (can be used when only camera or lights are changed).
  • Super-fast per pixel lighting and super-sampling for improved visual quality.
  • Support standard and PBR (Physically Based Rendering) materials.
  • Many post processing effects.
  • The most versatile 3D engine - the same application can run on systems from high end graphics card (full hardware acceleration) to computers without graphics card (DirectX 11 software rendering). The same application can also run on an old computers with operating systems that do not support DirectX 11 (using WPF 3D rendering).
  • The rendered 3D scene can be composed with existing WPF objects so that standard WPF controls can be added on top of the 3D scene or seen through the scene.
  • Fully managed code that works with AnyCpu (x86, x64 or ARM) build targets and can be used in C# and VB.Net. DXEngine uses SharpDX as DirectX wrapper.
  • Highly customizable: use custom shaders, rendering techniques, mesh data, etc.
  • Import 3D models from STEP and IGES files. See CadImporter.
  • Use new engine with just a few changes of the existing WPF 3D code. The engine fully supports Ab3d.PowerToys and Abd3.Reader3ds libraries.
  • Great customer support by forum or email.

 

Ab3d.DXEngine is not another game engine (like Unity) that forces you to use its game editor, its architecture and requires many hacks and tricks to be used in a standard .Net application. The Ab3d.DXEngine is a new rendering engine that is built from ground up with the purpose to be used in standard Desktop .Net applications.

 

Samples screenshots

X-Ray effect with some parts selected.
Model viewer with selected part of the model.
Super-smooth 3D lines in a CAD 3D scene.
Advanced edge lines with super-smooth 3D lines, lines depth bias and object onlines.
Incredible performance with DirectX instancing - 16.000 Stanford bunny models with more then 184 million positions in total.
DXEngine multi-threading benchmark rendering 160.000 individual boxes (without instancing) in less then 15 ms (more than 60 FPS).
When using DirectX command list caching then 160.000 individual objects (160.000 draw calls) can be rendered in almost no CPU time.
Rendering 100 million (!) pixels - each red cube contains 1 million pixels (100x100x100) (30 FPS on NVIDIA 1080 GTX).
Pistol model rendered with Physically Based Rendering (PBR).
Showing environment reflections.
Screen Space Ambient Occlusion (SSAO) that can dynamically shadow ambient light.
Rendering nice soft shadows with using variance shadow mapping technique.
Complex oil rig 3D model imported by Assimp importer.
Super fast 3D lines rendering showing 80 million line segments (2.1ms to render that on NVIDIA 3080 Ti).
Super fast line selection where lines can be selected by specifying the distance to the lines (moving mouse close to the line).
Rendering planar shadows.
Super-sampling solves problem with lost details on objects that are far from the camera.
Sobel edge detection post process (other possible post processes include Toon shading, Simple and Gaussian blur and Expand).
Showing many instances of Model3DGroup objects.
Animating 1 million 3D arrows at 60 fps with using instancing.
Arrows animation at a different angle.
Rendering for Oculus Rift - notice very stable 90 FPS performance shown on Oculus Performance overlay and in window title.
Split-screen stereoscopic rendering for 3D TV.
Anaglyph stereoscopic rendering for red-cyan glasses.
HLSL Shader editor with real-time preview of the 3D objects rendered by the compiled shader.
Render quality comparison between WPF and DXEngine rendering.
Using super-sampling to produce super-smooth 3D lines.
Rendering 3D lines with different patterns to create dashed and dotted 3D lines.
Rendering lines with different start and end color.
Rendering hidden 3D lines with different line patterns.
Rendering many 2D lines with using TwoDimensionalCamera that can be also used for editing 2D shapes and lines (simple line editor with position snapping is included).
Rendering object outlines that are visible through other 3D objects.
Importing point-cloud with more than 12 million pixels from a ply file.
Cropping point-cloud and exportin it to a ply file.
Rendering many 3D pixels with different colors and sizes.
OptimizedPointMesh class can optimize rendering of huge point clouds with reducing the number of rendered pixels.
Rendering may 3D textures as billboards (the screenshot shows 15.000 tree textures, but modern GPU can also easily handle many more textures).
Rendering height map with VertexColorEffect - the sample also shows how the Diamond square algorithm progressively adds details to randomly generated height map.
Using FaceColorMaterial to define different color for each face (triangle). This also provides an easy way to hide some triangles.
Rendering the same 3D scene in different views with different cameras and rendering settings.
Different options to render transparent 3D objects (using alpha blending, alpha-clipping or alpha-to-coverage).
Visualization of oct-tree nodes that divide the 3D teapot model.
Collision detection (showing that a box model intersects a torus model).
Rendering 8.000 different coordinates in a format '(xxx, yyy, zzz)'. This renders 94.800 characters.
Rendering 1 million (!!!) coordinates and 13.2 million charcters. This can still easily run at 60 FPS on a decent GPU.
Each string rendered with InstancedTextNode can have different position, size, orientation and color. You can also show, hide, move, scale and change the color of each string.
Rendering glowing objects.

 

Versions history information

To see the development history of Ab3d.DXEngine, check out:

 

Download

GitHub samples: NuGet packages: Try for free now