Combobulate 0.6.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Combobulate --version 0.6.2
                    
NuGet\Install-Package Combobulate -Version 0.6.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Combobulate" Version="0.6.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Combobulate" Version="0.6.2" />
                    
Directory.Packages.props
<PackageReference Include="Combobulate" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Combobulate --version 0.6.2
                    
#r "nuget: Combobulate, 0.6.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Combobulate@0.6.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Combobulate&version=0.6.2
                    
Install as a Cake Addin
#tool nuget:?package=Combobulate&version=0.6.2
                    
Install as a Cake Tool

Combobulate

A XAML controls library for UWP and WinUI 3 / Windows App SDK that renders 3D .obj files made of quads using the Windows Composition visual layer — no D3D, no SwapChainPanel, no shaders.

combobulate (humorous) — to compose (oneself); to compose, organize, design, or arrange; to reverse the effect of discombobulation. (Wiktionary)

Each quad becomes a SpriteVisual placed in 3D by a perspective TransformMatrix. Back-face culling and a polygon sort keep the draw order right without a depth buffer, and a fully analytical baked aspect graph renderer can sustain GPU-driven animation with zero CPU work per frame.

Packages

NuGet: Combobulate

Targets

  • UWP — uap10.0.19041
  • WinUI 3 / Windows App SDK — net10.0-windows10.0.19041.0

Repo Layout

src/
  Combobulate/                 UWP class library (canonical source)
  Combobulate.WinAppSdk/       WinUI 3 head — links sources from Combobulate
  Combobulate.Sample.Uwp/      UWP sample app
  Combobulate.Sample.WinUI3/   WinUI 3 sample app
samples/
  book.obj                     Example quad-based model

Getting Started

  1. Add the Combobulate NuGet package to your UWP or WinUI 3 app.

  2. Place a Combobulate control in your XAML:

    <Page xmlns:c="using:Combobulate">
        <c:Combobulate x:Name="Viewer"
                       Source="ms-appx:///Assets/book.obj"
                       ModelScale="200"
                       RotationX="-30"
                       RotationY="40"
                       RotationZ="0" />
    </Page>
    

    Source accepts an ms-appx:/// URI, an absolute file path, or an ObjCache key — geometry, materials (via sibling mtllib), and texture surfaces are all loaded and cached process-wide.

  3. Or parse an .obj yourself and assign the resulting model directly:

    using Combobulate.Parsing;
    
    var text = await FileIO.ReadTextAsync(
        await StorageFile.GetFileFromPathAsync(@"C:\path\to\book.obj"));
    var result = ObjParser.Parse(text);
    Viewer.Model = result.Model;        // partial model on parse error
    foreach (var err in result.Errors)  // optional: inspect parse diagnostics
        System.Diagnostics.Debug.WriteLine(err);
    

That's it — the control rebuilds its visual tree whenever any of its inputs change.

Highlights

  • Materials. Auto-loaded from mtllib or supplied via ObjMaterialPack, with live texture updates from SoftwareBitmap or streams.
  • Three sort algorithms. Bsp (default, exact, O(n)), Newell (split-on-cycle, deformable-friendly), and Topological (legacy, fast).
  • Composition-driven rotation. SetExternalRotation(ExpressionAnimation) binds rotation directly to the compositor; pair with EnableAutoRefresh to keep cull and sort in lock-step with the compositor clock.
  • Baked aspect graph. Pre-computes every painter-order breakpoint along an animation axis and emits one ContainerVisual per cell, each gated by an opacity expression on a live scalar. Smooth GPU spin without per-frame CPU cost. See docs/rendering-pipeline.md.

For everything beyond "drop a control, point Source at a file" see the usage guide and the rendering pipeline doc.

Supported .obj subset

  • v x y z [w] — vertex positions
  • vt u v [w] — texture coordinates
  • vn x y z — vertex normals (parsed; not used for shading today)
  • f a b c dquad faces; a/ta/na style references accepted
  • usemtl <name>, mtllib <file> — material binding and library load
  • o, g, s — preserved; l, p, vp, curves/surfaces are ignored

Faces must be quads (triangles and n-gons are reported as parse errors). Wind each face so that (V1 - V0) × (V3 - V0) points outward — that's the direction the renderer treats as front-facing for back-face culling.

See samples/book.obj for a worked example.

Control properties at a glance

Property Type Default Notes
Source string? null Path, ms-appx:/// URI, or ObjCache key
Model ObjModel? null Direct model assignment
Materials ObjMaterialPack? null Overrides any auto-loaded mtllib
MaterialMode MaterialMode Auto Auto / UseDiffuse / UseFallback
ModelScale double 100 Pixels per model unit
EnablePerspective bool true Apply perspective M34 to the root
PerspectiveDistance double 0 Focal distance in px (0 = host width)
RotationX/Y/Z double 0 Euler angles in degrees
SortAlgorithm SortAlgorithm Bsp Bsp / Newell / Topological
CullMarginDegrees double 0 Widen back-face cull cone for GPU lag
RenderingMode RenderingMode SpritePainter SpritePainter / BakedAspectGraph

Full descriptions and examples are in the usage guide.

Releasing

Push a tag of the form vX.Y.Z to trigger the GitHub Actions workflow that builds both targets, packs Combobulate.nuspec, publishes to NuGet.org, and creates a GitHub Release.

Product Compatible and additional computed target framework versions.
.NET net10.0-windows10.0.19041 is compatible. 
Universal Windows Platform uap10.0.19041 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.6.4 105 5/18/2026
0.6.3 95 5/12/2026
0.6.2 88 5/5/2026
0.5.2 103 4/21/2026
0.5.1 102 4/21/2026
0.5.0 93 4/20/2026
0.4.1 99 4/20/2026
0.3.0 102 4/20/2026
0.2.0 102 4/19/2026