Physically-based GPU and CPU ray-tracer emerging on a surface

Overview

etx-tracer

Physically-based GPU and CPU ray-tracer emerging on a surface.

Features

  • Vertex Connection and Merging algorithm (CPU and GPU);
  • Full-spectral rendering in CPU integrators;
  • Heterogeneous and scattering medium rendering in path tracing integrators (CPU and GPU);
  • Volumetric Bidirectional Path Tracing integrator;
  • Variety of BSDFs:
    • basic materials - diffuse, plastic, conductor, dielectric;
    • additionaal materials - thinfilm, translucent, coating, mirror, coating;
    • generic PBR material (WIP);
  • Variety of emitters:
    • area;
    • environment map;
    • directional emitter with finite angluar size;
    • collimated area lights (lasers);
  • Spectral representation of material's properties (colors, index of refractions, etc);
  • Normal mapping (CPU only at the moment);
  • Thin-film rendering;
  • Using OptiX for GPU ray-tracing;
  • Most of the code is reused for CPU and GPU integrators.

Samples

Several renderings from the ray-tracer. Samples contains showcase for materials, volumetric data rendering, spectral rendering, participating media rendering and SDS (specular-diffuse-specular paths), which are usually tricky thing to render. As well as thin film rendering, collimated emitters, depth of field, and other effects.

More renderings could be found in my Twitter:

Bubbles in Cornell BoxVolumetric cloudRoom RefractionsLaserRing Soap BubblesDiamondsSDS

Story behind this project

This project is a fusion of several my previous projects

  • et-engine - the old game engine, which actually was used in several shipped games;
  • etx - an extension to the engine, which is used for UI;
  • metal-ray-tracer - ray-tracer based on Metal Performance Shaders;
  • and one more project is currently located in the private repository.

And the most interesting part is that private repo contains a GPU ray-tracer, which implements Vertex Connection and Merging algorithm on GPU using OptiX (alongside with other integrators, like standard path-tracing and ambient occlusion integrator, both CPU and GPU versions).

So now it is time for that hidden project to emerge on a surface. Releasing it as-is would be too embarrassing for me, because it contains a lot of hacks and code that was required "right now" to make things work. So I would try to rewrite it in a nice way, and probably write some post about it.

Project milestones:

Order is a subject to change, but here are main things to do:

  • boilerplate code for window, input handling, etc;
  • basic boilerplate code for ray-tracing;
  • simplest CPU path-tracer;
  • OptiX and GPU-related code basics;
  • additional code for ray-tracing;
  • VCM integrators (CPU and GPU);
  • cross-platform, cross-API support; ... maintaining code, adding new features.

Building

This part of the description would be updated during the development of the project, at the moment there is nothing to build here. All updates will be located here: BUILDING.md

Sponsors

This project is GitHub-sponsored by:

Links

Links to the books/papers/publications/resources I've used during the development:

Issues
  • Developer Preview 02

    Developer Preview 02

    Changes:

    • added Bidirectional integrator;
    • added VCM integrator;
    • added multiscattering materials;
    • added ability to save tonemapped image;
    • fixes and improvements in UI and workflow.
    opened by serhii-rieznik 0
  • WASD navigations are not smoothed as well

    WASD navigations are not smoothed as well

    Step:

    1. Just opened scene;
    2. Started navigation wtih WASD buttons;
    3. Started flickering when anvigation (sometimes if you press more time any WASD buttons so it is not stopped and goaway without responsiveness).

    Here an overview video which is shown:

    https://user-images.githubusercontent.com/64298012/168615471-77fde1d4-645d-4120-8abe-a845763d5ade.mp4

    opened by odil24 3
  • Last release isn't working

    Last release isn't working

    Step to reproduce:

    1. Run from exe;
    2. Select and open any of scenes from assets folder to test;
    3. Pop-up an error like this: etx

    PC spec: CPU - i3-10100f @ 3.6ghz up to 4.5 GPU - GTX 1060 6Gb RAM - 32 GB DDR4 2666 MHz

    GPU DRIVER - 471.68 NVIDIA

    opened by odil24 5
Releases(developer-preview-3)
  • developer-preview-3(May 15, 2022)

    Changes

    • GPU rendering with OptiX (unidirectional path tracing only now);
    • complex Fresnel coefficients (general form);
    • thin film rendering on top of all materials (with reflections);
    • performance improvements;
    • more samples added to assets;
    • atmosphere integrator (produces sky environment images).
    Source code(tar.gz)
    Source code(zip)
    developer-preview-3.zip(27.89 MB)
  • developer-preview-2(Feb 20, 2022)

  • develer-preview-01(Feb 6, 2022)

    The very a first developer preview or etx-tracer:

    • basic UI and controls;
    • is possible to open .obj files, but materials (.mtl file) have to be adjusted (by default all materials will be diffuse);
    • package includes sample scenes (json files), but exact scene format is still to be designed;
    • only CPU path tracing is included into this release.
    Source code(tar.gz)
    Source code(zip)
    developer-preview-01.zip(18.52 MB)
Owner
Serhii Rieznik
Expert 3D Graphics Engineer at MBition
Serhii Rieznik
Get CPU & GPU temperatures and fan and battery statistics from your Mac.

macOS Hardware Stats Get CPU & GPU temperatures and fan and battery statistics from your Mac. This simple script will output a JSON array containing h

tigattack 4 May 5, 2022
Performance Evaluation of a Parallel Image Enhancement Technique for Dark Images on Multithreaded CPU and GPU Architectures

Performance Evaluation of a Parallel Image Enhancement Technique for Dark Images on Multithreaded CPU and GPU Architectures Image processing is a rese

Batuhan Hangün 5 Nov 4, 2021
A composable container for Adaptive ROS 2 Node computations. Select between FPGA, CPU or GPU at run-time.

adaptive_component A composable stateless container for Adaptive ROS 2 Node computations. Select between FPGA, CPU or GPU at run-time. Nodes using har

ROS 2 Hardware Acceleration Working Group 6 Apr 25, 2022
Filament is a real-time physically based rendering engine for Android, iOS, Windows, Linux, macOS, and WebGL2

Filament Filament is a real-time physically based rendering engine for Android, iOS, Linux, macOS, Windows, and WebGL. It is designed to be as small a

Google 14.2k Jun 20, 2022
Light probe generation and BRDF authoring for physically based shading.

IBLBaker About IBLBaker is provided under the MIT License(MIT) Copyright(c) 2015 Matt Davidson. Please see the LICENSE file for full details. Feel fre

MattD 633 Jun 23, 2022
a poc implementation arm64 tracer based on simulation

sim-trace a poc implementation arm64 tracer based on simulation Build Test ndk-build NDK_DEBUG=1 Run Test adb push test /data/local/tmp/test && adb s

null 26 Jun 17, 2022
Bollu learns physically based sound sythesis

Kavariance bollu learns digital audio synthesis from the blog at the bottom of the sea. the name is a pun on Kaveri, A wav/river goddess, and Covarian

Siddharth 8 Dec 29, 2021
A simple Linux kernel module that kills ptrace tracer and its tracees

dont_trace dont_trace is a simple Linux kernel module that kills ptrace tracer and its tracees. This kernel module relies upon the Linux kernel task_s

null 5 Mar 31, 2022
Emergency alert and tracer for realtime high-performance computing app (work in progress, currently supported env is only Linux x86-64).

HPC Emerg Emergency alert and tracer for realtime high-performance computing app (work in progress, currently supported env is only Linux x86-64). Exa

Ammar Faizi 7 Jan 19, 2022
Code accompanying our SIGGRAPH 2021 Technical Communications paper "Transition Motion Tensor: A Data-Driven Approach for Versatile and Controllable Agents in Physically Simulated Environments"

SIGGRAPH ASIA 2021 Technical Communications Transition Motion Tensor: A Data-Driven Framework for Versatile and Controllable Agents in Physically Simu

null 10 Apr 21, 2022
Grafana/Prometheus exporter for EPEVER/EPSOLAR Tracer solar charge controllers

epever_exporter epever_exporter is a standalone program written in C that can query Epever/Epsolar Tracer solar charge controllers and output metrics

Cédric Félizard 1 Nov 23, 2021
Contour mapping and 3D surface modeling app

QuikGrid v5.4 for 64-bit editions of MS Windows Contour mapping and 3D surface modeling app A 64-Bit Windows installer for QuikGrid can be found in th

Stephen Ferrell 2 Apr 15, 2022
A sample demonstrating hybrid ray tracing and rasterisation for shadow rendering and use of the FidelityFX Denoiser.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

GPUOpen Effects 47 May 24, 2022
Isotropic Remeshing of Triangulated Surface

Isotropic Remesher Isotropic Remeshing of Triangulated Surface Overview This repository implement the five steps of Isotropic Remeshing described in t

Jeremy HU 45 Jun 7, 2022
A proposition for a fully intergrated kext for all Surface Pro hardwares

BigSurface The name comes from macOS Big Sur. Big Sur + Surface -> Big Surface (LOL) PS:If you have a better name, please let me know. A proposition f

null 65 Jun 25, 2022
A format converter for surface mesh intergrated with muli tools.

MeshConverter A format converter for surface mesh intergrated with small tools for fast surface mesh modification in CFD application scenarios. Build

yhf 4 Mar 21, 2022
Wayfire plugin for handling touchpad gestures globally in a layer-shell surface

wf-globalgestures Global touchpad gestures plugin for Wayfire: implements a special protocol (also in this repo) that lets clients request that a part

null 4 Jan 18, 2022
CAFLOOD 2D surface flow (flood) simulator with two-way coupling to other simulators

CAFLOOD FLUIDIT This is an improved version of the latest published open source version of University of Exeter's CAFLOOD cellular automata based 2D f

Fluidit LTD 1 Dec 23, 2021
White paper describing the Autodesk Standard Surface shader.

Autodesk Standard Surface A white paper specifying an uber surface shader that aims to provide a material representation capable of accurately modelin

Autodesk 304 Jun 4, 2022