Huiwenshi commited on
Commit
5b2716e
·
verified ·
1 Parent(s): 0faa2c1

Upload ./hy3dgen/texgen/custom_rasterizer/lib/custom_rasterizer_kernel/rasterizer.h with huggingface_hub

Browse files
hy3dgen/texgen/custom_rasterizer/lib/custom_rasterizer_kernel/rasterizer.h ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #ifndef RASTERIZER_H_
2
+ #define RASTERIZER_H_
3
+
4
+ #include <torch/extension.h>
5
+ #include <vector>
6
+ #include <ATen/ATen.h>
7
+ #include <ATen/cuda/CUDAContext.h> // For CUDA context
8
+
9
+ #define INT64 unsigned long long
10
+ #define MAXINT 2147483647
11
+
12
+ __host__ __device__ inline float calculateSignedArea2(float* a, float* b, float* c) {
13
+ return ((c[0] - a[0]) * (b[1] - a[1]) - (b[0] - a[0]) * (c[1] - a[1]));
14
+ }
15
+
16
+ __host__ __device__ inline void calculateBarycentricCoordinate(float* a, float* b, float* c, float* p,
17
+ float* barycentric)
18
+ {
19
+ float beta_tri = calculateSignedArea2(a, p, c);
20
+ float gamma_tri = calculateSignedArea2(a, b, p);
21
+ float area = calculateSignedArea2(a, b, c);
22
+ if (area == 0) {
23
+ barycentric[0] = -1.0;
24
+ barycentric[1] = -1.0;
25
+ barycentric[2] = -1.0;
26
+ return;
27
+ }
28
+ float tri_inv = 1.0 / area;
29
+ float beta = beta_tri * tri_inv;
30
+ float gamma = gamma_tri * tri_inv;
31
+ float alpha = 1.0 - beta - gamma;
32
+ barycentric[0] = alpha;
33
+ barycentric[1] = beta;
34
+ barycentric[2] = gamma;
35
+ }
36
+
37
+ __host__ __device__ inline bool isBarycentricCoordInBounds(float* barycentricCoord) {
38
+ return barycentricCoord[0] >= 0.0 && barycentricCoord[0] <= 1.0 &&
39
+ barycentricCoord[1] >= 0.0 && barycentricCoord[1] <= 1.0 &&
40
+ barycentricCoord[2] >= 0.0 && barycentricCoord[2] <= 1.0;
41
+ }
42
+
43
+ std::vector<torch::Tensor> rasterize_image_gpu(torch::Tensor V, torch::Tensor F, torch::Tensor D,
44
+ int width, int height, float occlusion_truncation, int use_depth_prior);
45
+
46
+ std::vector<std::vector<torch::Tensor>> build_hierarchy(std::vector<torch::Tensor> view_layer_positions, std::vector<torch::Tensor> view_layer_normals, int num_level, int resolution);
47
+
48
+ std::vector<std::vector<torch::Tensor>> build_hierarchy_with_feat(
49
+ std::vector<torch::Tensor> view_layer_positions,
50
+ std::vector<torch::Tensor> view_layer_normals,
51
+ std::vector<torch::Tensor> view_layer_feats,
52
+ int num_level, int resolution);
53
+
54
+ #endif