Awesome
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 <a href="https://www.instagram.com/p/BflXSN7BsUY/">desktop-class graphics card or external GPU</a>).
- 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
<p align="left"> <img width="600" src="https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/2016-0908-ModelViewer.jpg"/> </p>TODO
- π² Camera model.
- π² Depth of field. Lens blur.
- π Order-independent transparency.
- π² Bump (displacement) texture.
- π Support PBRT format.
- β Normal texture.</del>
- β 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).
<p align="left"> <img height="200" src="https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/ver0.0.jpg"/> <img height="200" src="https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/ver0.0-transparency.jpg"/> </p>