GithubHelp home page GithubHelp logo

pearcoding / pearray Goto Github PK

View Code? Open in Web Editor NEW
17.0 4.0 0.0 43.57 MB

[Onhold] Experimental high accurate spectral path and ray tracer.

Home Page: http://pearcoding.eu/projects/pearray/

License: MIT License

CMake 3.25% C++ 68.98% Python 2.26% Shell 0.10% Assembly 0.01% C 25.40%
scientific-computing computer-graphics ray-tracer raytracer computer-animation

pearray's Introduction

This project is currently on hold in favour of my other renderer Ignis.

PearRay GitHub Tag Build Status

GitHub license GitHub issues Coverage Status Total alerts Codacy Badge
CMake 3.9 Language C++ Standard GCC 7 Clang 8 VS 19 Language Python

Experimental high accurate spectral path and ray tracer for research and data acquisition.

This is experimental software. API changes regularly

Example render by PearRay. Modeled with Blender 2.80

Blender Addon

There is an open source (still experimental) blender integration addon available here.

Dependencies

Optional

Submodules

Embedded

Other

Wiki

See Wiki for more information, examples and tutorials.

pearray's People

Contributors

pearcoding avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pearray's Issues

Multi-Material Meshes

Currently the infrastructure can detect multi material meshes as materials are defined per triangle, but the loading process is still missing!

Project Loading and Compilation

Need rework of project (.prc) files

  • Allow binary files using the powerful internal serialization component
  • Compile text based project files to binary and maybe vise versa -> Moana Scene!
  • Tokenize project file as stream to allow plugin based loading and better Python support -> Important for future archives
  • Make DataLisp based loader a subloader between many other

Rework Sensor/Film/Output relationship

Allow advanced sensors despite standard cameras and many other features:

Sensor

  • Batched ray generation
  • Batched incident radiance handling
  • Various sampler handling
  • (Multiple sensors by handling one after another)

Film

  • Optional filter handling per (supported) channel -> Requires thread safe tiled approach
  • Monotonic or other kind of mappers based on incoming spectral wavelength
  • Pushforward custom AOVs (with LPEs) from integrators or other parts of the raytracer

Output

  • Custom output devices (e.g. image, network, Jupyter, IPC etc)

Problems

  • The project files have to handle this accordingly. Multiple sensors would be good, but one is used at a time anyway. This is only useful for multiple goniometer like sensors, but could also be handled by an python script generating project files...
  • Proper interface for possible adaptive or progressive sampling
  • Plugin writers do not have to bother with sampling and film mapping if not desired. A new lens based camera plugin should not enforce multiple copied lines of code.

The general dependency is: Sensor > Film > Output
but initialization requires at least the mutual communication of sensor and film

A good starting point is the PBRT sensor/film relationship

Direct Integrator MSI Bias

The direct integrator seems to be biased, as the direct_py uinttest is failing only for the msi=true version

Python API

Develop a python API to be used easily by tools on top of PearRay, like the Blender Add-On.

Wrong PDF

The used probability density function are probably wrong and should be validated!

Add sample library.

A sample library with different "projects" showing different aspects of the framework is needed for easy training and instant feedback.

Examples would be:

  • Standard Cornell Box
  • Room with indirect light
  • Diamond
  • etc...

PPM Parallelization

PPM needs a parallel method, like Parallel Progressive Photon Mapping or just by using spatial hashing maps

[Low Priority] Simple Interactive Preview

Add simple interactive preview raytracer for first impression on material and data.
Keep complex specular and diffuse interaction at minimum. (e.g. only ~4 specular and ~1 diffuse bounce)

-- Requires GPU utilization for fast response.
-- Iterative pixel sampling with only one pixel sample each step.

Seed deterministic

The algorithms are deterministic on his own, but together with multi threading this deterministic approach gets lost. Rework of the pipeline would fix it.

Hero Wavelength Sampling Bias

Our hero wavelength approach has a bias which lets the whitefurnance test or an empty scene with D65 environment illuminant return a value close to 0.9 instead of 1. This may resolve at very high spp, but should be not visible at all at least in such a simple scene.

Proper Pixel Samples

Split pixel samples property to AA samples, DOF samples (Camera samples), Time samples etc. With each has his own sampling technique (user configurable).

Embed major plugins

Embed main plugins (and extras too) into the main dll. Better performance and build time.

Ray differentials

A huge improvement would be to use ray differentials. The broad structure is already there, but no functions to calculate and use this feature.

[Fun] Add Hilbert Curve based tiling

Add the L-System based Hilbert Curve as a tiling mechanism like Morten Code and Spiral. Just for fun. No benefit like in the case of the Morten Code (e.g. locality) or Spiral (e.g. early centric view)

Daylight Simulation

Add simple daylight simulation based features

  • Sky Models (ArHosek)
  • Sky Models (CIE/Perez)
  • Sun Models
  • False color visualization
  • DGP visualization

RGB -> Spectrum misses basic quality properties

Even while the RGB -> Spectrum -> RGB is quite ok, the spectrum lacks some basic properties.
The resulting spectrums are not positive in all samples and sometimes not even smooth when converting basic colors (like black).
The observation is reproducible within the spectral1 mode in the sandbox.

Spectrum Subspace not calculated for wavelength dependent functions.

The calculations for reflection and refraction (or any other wavelength dependent function) do not return an subspace of the spectrum, but the whole one. Following depths should only work on the subspace not the whole space!
Using 'Begin' and 'End' tokens would work, but would destroy the POD structure of the Spectrum class. We need something like SubSpectrum, SpectrumView (bad idea, due to the fact that a copy should be used and not a reference) or SpectrumArea (which sounds like a spectrum in two dimensional domain).

Network Output Device

Allow multiple output devices

  • Add network based output device, next to the simple image one
  • Add network based viewer
  • Add network remote control
  • Add Tev based viewer
  • Improve prdiag with a proper tone mapper

Sample "Point" lights with discs

Point lights are represented as spheres and sampled along the surface. This is unnecessary, as only one side of the sphere is visible. Use a disk and point towards the given ray.

Adaptive TileMap

Subdivide heavy tiles (big time spent, etc.) in the tile map after each iteration, to ensure maximum thread occupancy. Care should be taken for OutputBufferBucket.

Wavelength Change by Refraction

The change of the wavelength when a refraction occurs is not taken care of when intersecting with another surface, while being inside the diffracted domain. This is not visible on a glass sphere, but if something is inside of it, the calculation will get wrong. See for example the front-page screen-shot where water is on top of the floor. The returned reflection color is wrong.
The wavelength in vacuum has to be available all the time, as the index of refraction is calculated by it regardless of the media, but also the wavelength inside media has to be available at least when shading, as spectral lookups have to be done with this wavelength.
Adding this support is worth only when volume is added. IOR should be handled by two media intersecting (e.g. glass material)

Entity Statistics

Add statistical information (like triangle, quad count) for the complete scene!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.