Skip to content

Commit eac6c13

Browse files
mugammahorizon-blue
authored andcommitted
bindings working
1 parent cd23a82 commit eac6c13

4 files changed

Lines changed: 47 additions & 28 deletions

File tree

genmetaballs/src/cuda/bindings.cu

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
#include <nanobind/operators.h>
55
#include <nanobind/stl/tuple.h>
66
#include <nanobind/stl/vector.h>
7+
#include <tuple>
78

89
#include "core/blender.cuh"
910
#include "core/camera.cuh"
1011
#include "core/confidence.cuh"
1112
#include "core/fmb.cuh"
1213
#include "core/geometry.cuh"
1314
#include "core/image.cuh"
15+
#include "core/intersector.cuh"
1416
#include "core/utils.cuh"
1517

1618
namespace nb = nanobind;
@@ -24,6 +26,28 @@ void bind_image_view(nb::module_& m, const char* name);
2426

2527
NB_MODULE(_genmetaballs_bindings, m) {
2628

29+
/*
30+
* Confidence module bindings
31+
*/
32+
33+
nb::module_ confidence = m.def_submodule("confidence");
34+
nb::class_<ZeroParameterConfidence>(confidence, "ZeroParameterConfidence")
35+
.def(nb::init<>())
36+
.def("get_confidence", &ZeroParameterConfidence::get_confidence, nb::arg("sumexpd"),
37+
"Get the confidence value for a given sumexpd")
38+
.def("__repr__",
39+
[](const ZeroParameterConfidence& c) { return nb::str("ZeroParameterConfidence()"); });
40+
41+
nb::class_<TwoParameterConfidence>(confidence, "TwoParameterConfidence")
42+
.def(nb::init<float, float>())
43+
.def_ro("beta4", &TwoParameterConfidence::beta4)
44+
.def_ro("beta5", &TwoParameterConfidence::beta5)
45+
.def("get_confidence", &TwoParameterConfidence::get_confidence, nb::arg("sumexpd"),
46+
"Get the confidence value for a given sumexpd")
47+
.def("__repr__", [](const TwoParameterConfidence& c) {
48+
return nb::str("TwoParameterConfidence(beta4={}, beta5={})").format(c.beta4, c.beta5);
49+
});
50+
2751
/*
2852
* FMB module bindings
2953
*/
@@ -85,9 +109,9 @@ NB_MODULE(_genmetaballs_bindings, m) {
85109
.def("inv", &Pose::inv, "Inverse pose");
86110

87111
nb::class_<Ray>(geometry, "Ray")
88-
.def(nb::init<>())
89-
.def_rw("start", &Ray::start)
90-
.def_rw("direction", &Ray::direction);
112+
.def(nb::init<Vec3D, Vec3D>())
113+
.def_ro("start", &Ray::start)
114+
.def_ro("direction", &Ray::direction);
91115

92116
/*
93117
* Camera module bindings
@@ -116,26 +140,17 @@ NB_MODULE(_genmetaballs_bindings, m) {
116140
bind_image<MemoryLocation::DEVICE>(image, "GPUImage");
117141

118142
/*
119-
* Confidence module bindings
143+
* Intersector module bindings
120144
*/
121145

122-
nb::module_ confidence = m.def_submodule("confidence");
123-
nb::class_<ZeroParameterConfidence>(confidence, "ZeroParameterConfidence")
124-
.def(nb::init<>())
125-
.def("get_confidence", &ZeroParameterConfidence::get_confidence, nb::arg("sumexpd"),
126-
"Get the confidence value for a given sumexpd")
127-
.def("__repr__",
128-
[](const ZeroParameterConfidence& c) { return nb::str("ZeroParameterConfidence()"); });
129-
130-
nb::class_<TwoParameterConfidence>(confidence, "TwoParameterConfidence")
131-
.def(nb::init<float, float>())
132-
.def_ro("beta4", &TwoParameterConfidence::beta4)
133-
.def_ro("beta5", &TwoParameterConfidence::beta5)
134-
.def("get_confidence", &TwoParameterConfidence::get_confidence, nb::arg("sumexpd"),
135-
"Get the confidence value for a given sumexpd")
136-
.def("__repr__", [](const TwoParameterConfidence& c) {
137-
return nb::str("TwoParameterConfidence(beta4={}, beta5={})").format(c.beta4, c.beta5);
138-
});
146+
nb::module_ intersector = m.def_submodule("intersector");
147+
intersector.def(
148+
"linear_intersect",
149+
[](const FMB& fmb, const Ray& ray) {
150+
auto [t, d] = LinearIntersector::intersect(fmb, ray);
151+
return std::make_tuple(t, d);
152+
},
153+
"Linear intersection of ray and FMB.", nb::arg("fmb"), nb::arg("ray"));
139154

140155
/*
141156
* Utils module bindings

genmetaballs/src/cuda/core/geometry.cuh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,6 @@ public:
102102
struct Ray {
103103
Vec3D start;
104104
Vec3D direction;
105+
106+
CUDA_CALLABLE Ray(const Vec3D _start, const Vec3D _dir) : start{_start}, direction{_dir} {}
105107
};
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
#pragma once
22

3-
#include <utility>
3+
#include <cuda/std/tuple>
44

5-
#include "fmb.h"
6-
#include "geometry.h"
5+
#include "fmb.cuh"
6+
#include "geometry.cuh"
77

88
// implement equation (6) in the paper
99
class LinearIntersector {
10-
11-
static CUDA_CALLABLE std::pair<float, float> intersect(const FMB& fmb, const Ray& ray) const {
10+
public:
11+
CUDA_CALLABLE static cuda::std::tuple<float, float> intersect(const FMB& fmb, const Ray& ray) {
1212
auto vecdiv = [](const Vec3D& u, const Vec3D& v) {
1313
return Vec3D{u.x / v.x, u.y / v.y, u.z / v.z};
1414
};
1515
auto rot = fmb.get_pose().get_rot();
1616
auto tmp = rot.inv().apply(vecdiv(rot.apply(ray.direction), fmb.get_extent()));
17-
return dot(fmb.get_pose().get_tran() - ray.start, tmp) / dot(ray.direction, tmp);
17+
auto t = dot(fmb.get_pose().get_tran() - ray.start, tmp) / dot(ray.direction, tmp);
18+
return {t, fmb.quadratic_form(ray.start + t * ray.direction)};
1819
}
1920
};

genmetaballs/src/genmetaballs/core/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Literal
22

3-
from genmetaballs._genmetaballs_bindings import fmb, geometry
3+
from genmetaballs._genmetaballs_bindings import fmb, geometry, intersector
44
from genmetaballs._genmetaballs_bindings.blender import (
55
FourParameterBlender,
66
ThreeParameterBlender,
@@ -55,6 +55,7 @@ def make_image(height: int, width: int, device: DeviceType) -> CPUImage | GPUIma
5555
"geometry",
5656
"Camera",
5757
"Intrinsics",
58+
"intersector",
5859
"sigmoid",
5960
"FourParameterBlender",
6061
"ThreeParameterBlender",

0 commit comments

Comments
 (0)