Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Nuo Model Viewer

This project consists of:

  • A Wavefront OBJ viewer, supporting both real-time rendering and ray-tracing, which is based on Viewer Foundation, a reusable framework.
  • Viewer Foundation, a reusable framework consisting of:
    • Viewer Foundation Render, which is an encapsulation to the Metal APIs, providing simplified resource and state management on top of the Metal APIs.
    • A scene-graph-like system which enables building real-time and path-tracing based renderers.

Supported GPUs

  • Apple Silicon GPU is supposed to be the only GPU working on macOS in the future.
    • M1 Max (tested).

⚠️The whole Intel Mac product line has been terminated. AMD eGPU support is obsoleted.

  • Intel HD serious GPUs are not supported. (Built-in integrated GPU in most models of Mac.)
  • AMD Radeon Pro 560, and built-in descrete GPUs in almost all MacBook Pro later than 2017, are barely suppored. Their performance would be poor for the ray tracing rendering.
  • For early macOS on Intel supporting eGPU, AMD Radeon RX 580 or above is recommended, in particular but not limited to:
    • AMD Radeon RX Vega 56 is recommended.
    • AMD Radeon RX Vega 64, RX 5700, and so on, should be working, but untested.
    • AMD Radeon VII is highly recommended.
    • AMD Radeon Pro Vega II (Duo) (in the Mac Pro 2019). [1]
    • AMD Radeon Pro W5700. [1]

[1] Acknowledge to @ibuick for the verification.

Latest Update

  • Specular lighting on a Fresnel surface.
  • Multiple-importance sampling.
  • Slider with adjustable scale.
  • Full ray tracing.

  • Hybrid rendering with ray tracing.
    • Direct lighting soft shadow.
    • Indirect lighting (ambient) with physically-based occlusion.
    • Physically based effect for the shadow overlay (blend-in with photographic scene).
    • Self-illuminating objects.
  • Checkerboard background for better inspecting the result transparency.

  • Inspecting intremediate textures in debug.

  • Overlay indicator for selected parts.

  • Transformation on the entire scene accurately around the scene's center.
  • More accurate bounds calculation (improving shadow map sampling quality).
  • User selection on GPU.
  • Better take advantage of dedicated video memory by using private buffers. Especially important for desktop-class graphics card or external GPU).
  • Background loading.
  • Motion blur.
  • Blending with real-scene background.

  • Ambient occlusion.

  • Transform of the entire scene (including the light sources).
  • Better PCSS soft shadow

  • Ground shadow

  • Skybox.

  • BRDF mode. Fix artifacts in specular lighting.
  • Save to high resolution PNG (up to 3900 px).
  • Rotate individual parts (mandatory for the varying-geometry wing plane model!).

  • Adjustable shadowing PCF and bias to alliviate artifacts.
  • Preliminary shadowing for two of the four light sources.

  • Load/save scene parameters (postion, light source direction, etc.).
  • Normal texture.
  • Light source configuration.
  • Multiple light sources.

  • Adjustable lighting direction.
  • Better handling to material opacity.

Screenshots on Development


  • Order-independent transparency.
  • Bump (displacement) texture.
  • Support PBRT format.
  • Normal texture.
  • Direction of lgiht source.
  • Intensity of light source.
  • Mutilple light sources.
  • Selectable list of object.
  • Surface smooth.
  • Shadow
    • Shadow to model
    • Shadow to ground.
    • PCSS.
      • Basic PCSS.
      • Adjustable occluder search range.
      • More adjustable bias.
    • Transparency (strength) of shadow overlay. (Achieved by ambient)
    • Linear shadow map (more plausible PCSS, VSM).
    • Adaptive shadow map resolution/region.
  • Per light-source, per-surface shadow properties (bias, soft edge).
  • Cull mode.
  • Surrounding.
    • Cubmap skybox.
    • Water (for ship model).
  • Motion blur (especially for rotating parts like rotor).
  • Detailed properties panel for indiviudal model parts.
    • Smooth options (everywhere, texture discontinuiation only, etc).
    • Material opacity adjustment.
    • Material adjustment (specular, colors, etc).
    • List of board objects.
    • Self illumination.
  • Ray tracing
    • Faster buffer construction.
    • Ground reflection.
    • Specular term in direct lighting shadow, and in global illumniation.
    • Light source surface sampling.
    • Shadow ray visibility.
    • Multiple importance sampling. Unified reflection model.
    • Normal map.
    • Specular map.
    • Translucent map.
  • BRDF mode.
  • Ambient occlusion.
  • Model visualization
    • PCSS steps visualization.
    • Triangle mesh
    • Normal/tangent visualization

Early Screenshots

Screenshot of the first version (left). Add support to simple transparency (right).