Giter Site home page Giter Site logo

joejoetv / picture_perfector Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 206.79 MB

Path-tracing rendering engine created for the CG1 lecture at UdS in 2023/24. Based upon the provided lightwave framework.

Home Page: https://sonic.joejoetv.de/s/cg-2324_rendering-competition

License: GNU Affero General Public License v3.0

CMake 3.65% Batchfile 0.06% Shell 0.07% Python 15.53% C++ 80.69%
blender-addon computer-graphics cplusplus lightwave pathtracing raymarching rendering saarland-university python

picture_perfector's Introduction

Picture Perfector

Path-tracing rendering engine created for the Computer Graphics 1 lecture at Saarland University by Lukas Auer and me. This renderer is based upon the lighwave framework that was provided for the course.

Scene rendered with picture_perfector

Features

Provided by Lighwave

Some base functionality was already provided by lightwave:

  • Modularity
    • Modern APIs flexible enough for sophisticated algorithms
    • Shapes, materials, etc are implemented as plugins
  • Basic math library
    • Vector operations
    • Matrix operations
    • Transforms
  • File I/O
    • An XML parser for the lightwave scene format
    • Reading and writing various image formats
    • Reading and representing triangle meshes
    • Streaming images to the tev image viewer
  • Multi-threading
    • Rendering is parallelized across all available cores
    • Parallelized scene loading (image loading, BVH building, etc)
  • BVH acceleration structure
    • Data-structure and traversal is supplied by us
    • Split-in-the-middle build is supplied as well
  • Useful utilities
    • Thread-safe logger functionality
    • Assert statements that provide extra context
    • An embedded profiler to identify bottlenecks of your code
    • Random number generators
  • A Blender exporter
    • Export Scenes built in Blender to the XML format used by lightwave

Implemented in Picture Perfector

More features required for a working renderer were implemented into Picture Perfector in the practical assignments and advanced ones for the rendering competition:

  • Camera Models
    • Basic Perspective Camera
    • Thinlens Camera
  • Basic Primitives
    • Sphere
    • Mesh/Triagle
  • Instancing Support
  • Different Integerators
    • Normals integrator: Only renders normals of scene objects
    • Direct lighting integrator: Only renders using direct light
    • Path tracing imtegrator: Full path tracer using bounces
    • Albedo integrator
    • SDF bounce count integrator
    • Path tracing integrator for volumetric rendering
  • BSDFs:
    • Diffuse
    • Conductor
    • Dielectric
    • Rough Conductor
    • Simple Principled
  • Lambertian Emission
  • Textures:
    • Checkerboard Texture
    • Image Texture
  • Lights:
    • Environment Map
    • Area Lights
    • Point Light
    • Directional Light
  • Next Event Estimation
  • Image denoising using OpenImageDenoise
  • Acceleration Structures:
    • SAH Bounding Volume Hierarchy
  • Volumentric Rendering (semi heterogeneous)
  • Shading Normals
  • Signed Distance Fields and Ray-Marching
    • Basic Ray-Marching encapsulated in primitive object
    • Shape configurable in XML with hierarchy of SDF primitives and operations
    • SDF Primitives:
      • Box
      • Cylinder
      • Mandelbulb fractal
      • Sphere
    • SDF Operations:
      • Combine (Union, Intersection, Subtraction) of 2 SDF shapes
      • Thicken
      • Transform

Examples

The features folder contains example scenes including rendered results that show most of the features of the renderer. In addition, there was a rendering competition at the end of the course for which a scene was created. The results of this and credits for used assets can be found here.

Credits

Lightwave was written by Alexander Rath, with contributions from Ömercan Yazici and Philippe Weier. Many of our design decisions were heavily inspired by Nori, a great educational renderer developed by Wenzel Jakob. We would also like to thank the teams behind our dependencies: ctpl, miniz, stb, tinyexr, tinyformat, and pcg32.

picture_perfector's People

Contributors

les4kul avatar joejoetv avatar weiphil avatar

Watchers

 avatar

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.