/NuoModelViewer

A simple Wavefront OBJ viewer.

Primary LanguageC++MIT LicenseMIT

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

  • 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.

  • 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

TODO

  • 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).