Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
NanoRT, single header only modern ray tracing kernel.
| Date | Stars |
|---|---|
| 2026-07-24 | 1119 |
| 2026-07-25 | 1119 |
| 2026-07-28 | 1120 |
| 2026-07-30 | 1120 |
| 2026-08-06 | 1120 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
0.0
growth rate 0.00%/day
# NanoRT, single header only modern ray tracing kernel.
[](https://travis-ci.org/lighttransport/nanort)
[](https://ci.appveyor.com/project/syoyo/nanort)

Path tracing example contributed by https://github.com/daseyb
`NanoRT` is simple single header only ray tracing kernel.
## Features
* Portable C++
* Only use C++-03 features by default.
* C++11 feature(threads) is also available
* There is experimental C89 port of NanoRT in `c89` branch https://github.com/lighttransport/nanort/tree/c89
* BVH spatial data structure for efficient ray intersection finding.
* Should be able to handle ~10M triangles scene efficiently with moderate memory consumption
* Custom geometry & intersection
* Built-in triangle mesh gemetry & intersector is provided.
* Cross platform
* MacOSX, Linux, Windows, iOS, Android, ARM, x86, SPARC, (maybe) MIPS, (will be) RISC-V, etc.
* For example, NanoRT works finely on Raspberry Pi 2 (arm 32bit) and Raspberrry Pi 3!(AARCH64 kernel)
* GPU efficient data structure
* Built BVH tree from `NanoRT` is a linear array and does not have pointers, thus it is suited for GPU raytracing (GPU ray traversal).
* OpenMP multithreaded BVH build.
* Robust intersection calculation.
* Robust BVH Ray Traversal (using up to 4 ulp version): http://jcgt.org/published/0002/02/02/
* Watertight Ray/Triangle Intesection: http://jcgt.org/published/0002/01/05/
* Double precision support
* Beneficial for HPC and scientific visualization.
## Applications
* Test renderer for your light transport algorithm development.
* Test renderer for your shader language development.
* Collision detection (ray casting).
* BVH builder for GPU/Accelerator ray traversal.
* Add 2D/3D rendering feature for non-GPU system.
* [ ] ImGui backend? https://github.com/syoyo/imgui/tree/nanort
* [ ] Nano SVG backend? https://github.com/syoyo/nanovg-nanort
## Projects using NanoRT
* lightmetrica https://github.com/hi2p-perim/lightmetrica-v2
* OSPRay NanoRT module https://github.com/jeffamstutz/module_nanort/
* Your project here!
## Projects similar/related to NanoRT
* bvh: C++17 BVH Construction and Traversal Library https://github.com/madmann91/bvh
* BlazeRT: double precision ray tracer for scientific or engineering applications https://github.com/cstatz/blazert
## API
`nanort::Ray` represents ray. The origin `org`, the direction `dir` (not necessarily normalized), the minimum hit distance `min_t`(usually 0.0) and the maximum hit distance `max_t` (usually too far, e.g. 1.0e+30) must be filled before shooting ray.
`nanort::BVHAccel` builds BVH data structure from geometry, and provides the function to find intersection point for a given ray.
`nanort::BVHBuildOptions` specifies parameters for BVH build. Usually default parameters should work well.
`nanort::BVHTraceOptions` specifies ray traverse/intersection options.
```c
template<typename T>
class {
T org[3]; // [in] must set
T dir[3]; // [in] must set
T min_t; // [in] must set
T max_t; // [in] must set
unsigned int type; // optional. ray type.
} Ray;
class BVHTraceOptions {
// Trace rays only in face ids range. faceIdsRange[0] < faceIdsRange[1]
// default: 0 to 0x3FFFFFFF(2G faces)
unsigned int prim_ids_range[2];
bool cull_back_face; // default: false
};
nanort::BVHBuildOptions<float> build_options; // BVH build option(optional)
const float *vertices = ...;
const unsigned int *faces = ...;
// Need to specify stride bytes for `vertices`.
// When vertex is stored XYZXYZXYZ... in float type, stride become 12(= sizeof(float) * 3).
nanort::TriangleMesh<float> triangle_mesh(vertices, faces, /* stride */sizeof(float) * 3);
nanort::TriangleSAHPred<float> triangle_pred(vertices, faces, /* stride */sizeof(float) * 3);
nanort::BVHAccel<floatExcerpt of 11,773 characters
Read on GitHubSyoyo Fujita · Light Transport Entertainment, Inc. · Japan
422
45
18
13
Guillaume Jacquenot · France
12
7
4
3
3
3
2
Luca Barbato
2
2
2
1
1
1
1
1
1
Would you bet a product on this? Bounded 0–100 and slow moving.
matched fp:c5c1eee699f7408c, topic:ray