What RayD is not

The boundaries of RayD - no renderer, materials framework, scene loading, or image I/O - and what you are expected to bring yourself.

RayD is a set of geometry and wave-propagation primitives. Knowing its boundaries tells you what you have to write yourself and when another tool fits better.

Not a renderer#

RayD has no integrators, no emitters, no BSDF or material-model framework, and no sampler policy. A query takes rays and returns hits; what you do with the hits is up to you. If you need a complete physically based renderer, use Mitsuba 3. RayD exists for workloads where Mitsuba's material, light, and integrator layer is in the way: RF propagation, acoustics, sonar, visibility analysis, and custom wave solvers that need direct control over rays, edges, reflection chains, and diffraction state.

No scene or image I/O#

RayD does not load OBJ, PLY, glTF, or scene files, and it does not read or write images. Load meshes with any library you like and pass the vertex and index arrays to Mesh. The WiTwin core package and WiTwin Studio provide Scene and Project handling on top.

No implicit conversion between backends#

The Dr.Jit and PyTorch backends never exchange objects. RayD does not convert a Torch tensor to a Dr.Jit array or the reverse, and an operation missing from one backend is not emulated through the other. Convert explicitly, for example with DLPack, if your pipeline mixes frameworks.

No RF policy#

RayD's RF operations evaluate physics you configure; they do not decide the physics for you:

  • You choose the source and receiver model, the material parameters per primitive, the wavelength, and the receiver grid.
  • trace_* operations return per-ray or per-path records. accum_* operations reduce contributions onto a grid. Turning those into a channel impulse response, a coverage map, or a loss is your code, or a solver such as Channel.
  • Material tables are arrays you build and pass in, one entry per primitive. RayD does not create or manage them.
  • The RF layer-stack, transmission, scattering, and penetration families added in 0.7.0 are C++ integration headers (include/rayd/) for native consumers. They are not part of the Python API documented here.

No boundary-gradient integrator#

RayD differentiates continuous quantities with the winning primitive fixed. It supplies the edge queries an edge-sampling estimator needs, but it does not include such an estimator. See Edges and edge sampling.

Closed geometry scope for SDFs and surfels#

Signed-distance grids and surfels take part in a fixed set of queries: SDFs in intersection, visibility, and reflection; surfels in intersection, visibility, reflection, and alpha transmission. Neither takes part in diffraction, and MixedScene intentionally has no diffraction method. Triangle meshes are the only geometry with edges.

No CPU or non-NVIDIA backend#

Every query runs on an NVIDIA GPU through CUDA. There is no CPU, Metal, or ROCm path.