Skip to content

middlefeng/NuoModelViewer

Repository files navigation

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.

⚠️❗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

  • Apple Silicon and macOS 13.3 adaptive.
    • High dynamic range display.
    • Replace the Performance Shader Intersector with Metal Ray Tracing shader.
  • 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

TODO

  • 🔲 Camera model.
    • 🔲 Depth of field. Lens blur.
  • 🕒 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.
    • ✅ Cubemap 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).