https://github.com/middlefeng/NuoModelViewer
A simple Wavefront OBJ viewer.
https://github.com/middlefeng/NuoModelViewer
graphics raytracer renderer rendering-3d-graphics rendering-engine wavefront-obj
Last synced: 17 days ago
JSON representation
A simple Wavefront OBJ viewer.
- Host: GitHub
- URL: https://github.com/middlefeng/NuoModelViewer
- Owner: middlefeng
- License: bsd-3-clause
- Created: 2016-09-07T13:17:01.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-10-23T18:40:16.000Z (over 1 year ago)
- Last Synced: 2024-08-04T02:10:15.908Z (10 months ago)
- Topics: graphics, raytracer, renderer, rendering-3d-graphics, rendering-engine, wavefront-obj
- Language: C++
- Homepage: http://nuo.graphics
- Size: 22.5 MB
- Stars: 299
- Watchers: 25
- Forks: 39
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- AwesomeCppGameDev - NuoModelViewer
README
# 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).
![]()
![]()