NumbaShader
About
This repository contains an implementation of shaders using Numba for CUDA GPUs. The 3D shaders use the concept of ray marching.
This is simply a hobby project, I make no claims about the robustness or efficiency of this code.
Examples
Examples of animations
- Reflecting and refracting sphere in Menger sponge
- Game of life in 3D with depth of field
- Mandelbrot bulb
- N body chaos
Example stills
Contents
The folder NumbaShader3D
contains:
- The script
shader_example_general.py
which gives a short introduction on how a shader could be constructed usingnumba.cuda
, - The script
Shader_setupy.py
which contains classes for a 3D camera model and viewing the shader output interactively with OpenCV, - The script
Shader_tools.py
which contains functions for computing the path of a ray trough a scene, based on intersections, reflections and refractions, as well as a simple method for creating depth of field.
the folder Fractals_on_text
contains:
- The script
Poisson_2D.py
for numerically solving the Poisson equation with either homogeneous Neumann or homogeneous Dirichlet boundary conditions, - several attempts at wrapping sections of the Mandelbrot set around letters in the notebooks
Text_to_fractal.ipynb
andText_to_fractal_2.ipynb
.
The main folder contains some more examples of 3D shaders:
- The script
Cube_grid.py
contains an implementation for intersecting rays with a grid of cubes defined by 3D boolean array. Furthermore there are functions to define the Menger sponge or some text in the form of such a cube grid, - The script
Game_of_life_3D.py
also uses the cube grid implementation, but applies to the cube grid a 3D version of the Game of Life algorithm to create animations as seen in the second animation linked to below, - The script
Menger_sponge.py
implements the first animation linked to below with a sphere in the Menger sponge, - The script
Menger_sponge.py
uses the 3D shader to visualize the Mandelbulb, see the third animation linked to below, - The script
N_body_fractal.py
implements a shader to visualise the chaos arising from the N body problem, see the last animation linked to below.
Lastly the script Makevid.py
contains a simple function to show and save animations as video files using OpenCV.