Skip to content

romainaugier/RomanoRender

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Romano Render

First of all, I'd like to thank everyone that helped and helps me on the Graphics Programming discord, it's an amazing community, that you can find here : https://discord.gg/2nyse8kpKb

This was my first project using C++, the goal of this was to learn both this language, software engineering, rendering, maths and computer graphics. I've decided to end this project here and start a new pathtracer, RomanoRender++, to apply everything I've learned and create a more performant and versatile render engine, instead of rewriting almost everything here. I'll leave this project as it is, to have a memory of it but also compare to my new renderer and see how I've progressed.

How To Build

RomanoRender uses Vcpkg to manage libraries accross different platforms and CMake to support cross-platforms building.

Libraries needed are :

Make sure Git is installed on your machine and run

git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat

Once Vcpkg is installed, run the following to integrate it within visual studio

.\vcpkg\vcpkg integrate install

Run the following to install the needed libraries. This might take up to 30 min to build everything (OpenImageIO has a lot of dependencies)

cd /path/to/vcpkg/installation
vcpkg install embree
vcpkg install OpenImageIO
vcpkg install Boost
vcpkg install OpenColorIO

Once all needed libraries have been installed, you can run CMake to build the project

mkdir build
cd build
cmake ../
cmake --build ./ --config Release

Features

  • Intel embree3
  • OpenColorIO support (default configuration shipped with the renderer is ACES 1.0.3)
  • OpenImageIO support for image output (various format supported : exr, jpg, png, tiff...)
  • Obj file format supported
  • Different integrators (Pathtracing, Cartoon, Ambient Occlusion, Scene Viewer)
  • Uber-Shader (with different layers : Lambertian BRDF, GGX/Cook-Torrance BRDF/BTDF, Random-Walk SSS)
  • Rich render interface with a progressive render-view, scene editor (per scene object transform and material)
  • Basic pinhole camera model with depth of field

Planned

  • Importance Sampling / Multiple Importance Sampling
  • More BxDFs
  • Texture system
  • Small procedural texturing language
  • Adaptive sampling
  • Improve the ui
  • Add support for Alembic file format
  • Improve overall performance of the renderer

Showcase

UI

Journey:

First couple of triangles : Triangles

First triangle mesh, exported from maya as obj : Sphere

First real mesh rendered with face normal as color, and a proper camera with position and lookat : Dino

The first heavy mesh with a simple acceleration structure : Dragon1

The Pixar Kitchen rendered with an improved naive acceleration structure : Pxr Kitchen

X Wing rendered with uv coordinates from the obj file : X_Wing

First buggy test with light : Bug_light

Finally getting a proper point light working : Pxr_Kitchen_pt_light

Global illumination with point light : gi_dragon

Buggy Pixar Kitchen render : Broken_pixar_gi

Glass (and embree3 implementation) : Glass

Few bugs through area light implementation :

area_bug1 area_bug2

Finally working :

first_area

A more interesting area light render : drag_area

Render mixing area and directional lights : area_and_dir

Depth of field and pure reflective material : pure_reflec_dof

The infamous white dome light aka ambien occlusion : dome_light_ao

GGX and Cook-Torrance brdf : ggx_brdf

More GGX and Cook-Torrance : mustang_1

GGX and Cook-Torrance for refraction : ggx_ct_refrac

HDRI naive lighting :

hdri_1

Hdri crazyness : hdri_mdr

Combining all the cool stuff I implemented lately : gold_eagle (thank's to Flore Dechorgnat for the shading -> https://www.instagram.com/flore_dchrgnt) pxr_kitchen_lourd

Random Walk SSS : rwsss_1

Some more Random Walk SSS: rwsss_2

About

Monte Carlo pathtracer written in C++

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages