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: 6 months 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 (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-10-23T18:40:16.000Z (about 2 years ago)
- Last Synced: 2024-08-04T02:10:15.908Z (over 1 year 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).