Skip to content

Hugobros3/pasta-braider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pasta-braider

Ray-tracing framework written in D as a learning project (both for D and for writing my own proper raytracing stuff from scratch)

Features

  • Somewhat optimised, heavily templated vector maths (makes use of SIMD intrinsics and results in reasonnable assembly)
  • Absolutely no GC happens during traversal (guaranteed by tagging all the RT functions @nogc)
  • Reasonnably fast (half the point of this exercise is finding out if D can be competitive in high performance stuff)
  • Can intersect spheres and triangles, no AS support yet
  • Debug renderer
  • Direct lighting renderer
  • Basic correct (if very naïve) path tracing renderer
    • only diffuse and mirror materials for now
    • BSDF model for materials
    • Both hemisphere sampling & next event estimation are available

Compiling

Please use ldc since DMD is a joke perf-wise, and also please tell it to actually optimise ! The default "release" config is still quite conservative in the grand scheme of things.

DFLAGS="-release -O3 -ffast-math -boundscheck=off -flto=thin -mcpu=znver1" dub run --compiler=ldc2 should do the trick. Make sure the -mcpu flag matches your config for best perf !

Performance notes

  • You may notice disabling the usage of SIMD intrinsics in vector.d significantly improves performance on Ryzen, by about a factor of 33%. That's equivalent to the overhead of doing 33% more ops by using a vec4 packed in 128 bits instead of an array of 3 float for Vec3f ), having spent a few evenings looking at the assembly, I believe this is due to the Ryzen front-end being smart enough to vectorize stuff by itself and doing so is more effective than SSE/AVX instructions. On older architectures (ie haswell), this isn't the case and explicit SIMD is essential, so make sure to tweak that accordingly !
  • LTO sometimes actually hurts performance, try without too !
  • MT scaling is not perfect (it's also really crappy and naive for now)

Prettyness

About

Dlang exploratory raytracing project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages