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.
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). 
- AMD Radeon Pro W5700. 
 Acknowledge to @ibuick for the verification.
- 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
- 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
- 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 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.
- 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.
- 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
Screenshot of the first version (left). Add support to simple transparency (right).