izpi

module
v0.0.0-...-c368630 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2026 License: MIT

README

Izpi

Unit Tests Go Report Card Ask DeepWiki

A path tracer that started life as a Golang implementation of Peter Shirley's Raytracing books. It has since grown in scope and gained more features that were not part of the original version.

Requirements

  • Go 1.26 or later
  • For optimal BVH4 performance, build with GOEXPERIMENT=simd to enable SIMD intrinsics

Goals

  • Have fun.
  • Learn about advanced computer graphics topics and put them to practice.
  • Create a well-written and robust renderer that is usable with real world scene workloads.
  • Integrate with DCC tools.
  • Support professional VFX flows.

Non-goals

  • Write the most performant path tracer possible.
  • Build a GPU-based path tracer.

Roadmap

  • Support for PBR materials.
  • Distributed Rendering.
  • Spectral Sampler to accurately simulate dispersion.
  • Nested dielectrics.
  • Physically correct light sources library.
  • Firefly rejection.
  • BVH traversal performance improvements.
  • ACEScg workflow support.
  • MaterialX support.
  • OpenSubdiv support.
  • OpenUSD support.
  • Implement a Hydra render delegate.
  • Adaptive sampling.
  • Implement Bidirectional path tracing.
  • Materials library.
  • Water material.
  • Sky simulation with day and night support.
  • Scene conversion tool by implementing Go bindings for Open Asset Import Library.
  • Implement Metropolis light transport.

Features

The Stanford dragon

The Stanford dragon in a Cornell box

A demonstration of the effect of displacement mapping on a surface using Bricks078 from ambientCG.com, licensed under CC0 1.0 Universal.

Displacement mapping in a Cornell box

A Cornell box showcasing various PBR materials from Free PBR.

Different PBR materials in a  Cornell box

A demonstration of the dispersion phenomenon calculated by the spectral sampler.

Cornell Box with transparent glass spheres

Directories

Path Synopsis
cmd
izpi command
internal
aabb
Package aabb implements functions to work with axis-aligned bounding boxes.
Package aabb implements functions to work with axis-aligned bounding boxes.
camera
Package camera implements a set of functions to work with cameras.
Package camera implements a set of functions to work with cameras.
colours
Package colours defines a few useful colours.
Package colours defines a few useful colours.
displacement
Package displacement implements functions to apply displacement maps to triangles and meshes.
Package displacement implements functions to apply displacement maps to triangles and meshes.
display
Package display implements an Fyne-backed preview window.
Package display implements an Fyne-backed preview window.
grid
Package grid implements functions to walk a 2D grid using various algorithms.
Package grid implements functions to walk a 2D grid using various algorithms.
hitable
Package hitable implements the methods used to compute intersections between a ray and geometry.
Package hitable implements the methods used to compute intersections between a ray and geometry.
hitabletarget
Package hitabletarget implements the methods used to extract PDF data from hitables.
Package hitabletarget implements the methods used to extract PDF data from hitables.
lightsources
Package lightsources implements different types of light sources.
Package lightsources implements different types of light sources.
mat3
Package mat3 implements functions to work with 3x3 matrices.
Package mat3 implements functions to work with 3x3 matrices.
material
Package material implements the different materials and their properties.
Package material implements the different materials and their properties.
materials
Package materials implements a library of built-in spectral materials.
Package materials implements a library of built-in spectral materials.
onb
Package onb implements methods to work with ortho-normal bases
Package onb implements methods to work with ortho-normal bases
output
Package output implements the file output functionality.
Package output implements the file output functionality.
pdf
Package pdf implements methods to work with probability density functions.
Package pdf implements methods to work with probability density functions.
perlin
Package perlin implements functions to generate Perlin noise.
Package perlin implements functions to generate Perlin noise.
postprocess
Package postprocess implements the postprocess pipeline.
Package postprocess implements the postprocess pipeline.
ray
Package ray implements the interface and methods to work with rays.
Package ray implements the interface and methods to work with rays.
render
Package render implements the main rendering loop.
Package render implements the main rendering loop.
sampler
Package sampler implements different types of samplers.
Package sampler implements different types of samplers.
scatterrecord
Package scatterrecord implements the scatter record.
Package scatterrecord implements the scatter record.
scene
Package scene implements structures and methods to work with scenes.
Package scene implements structures and methods to work with scenes.
scenes
Package scenes implements some sample scenes.
Package scenes implements some sample scenes.
texture
Package texture implements different types of textures.
Package texture implements different types of textures.
vec3
Package vec3 provides utility functions to work with vectors.
Package vec3 provides utility functions to work with vectors.
wavefront
Package wavefront implements functions to parse Wavefront OBJ files and transform the data.
Package wavefront implements functions to parse Wavefront OBJ files and transform the data.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL