gsplat 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +202 -0
- data/README.md +236 -0
- data/docs/ACCEPTANCE.md +60 -0
- data/docs/BENCHMARKS.md +79 -0
- data/docs/DECISIONS.md +52 -0
- data/docs/MIGRATION.md +117 -0
- data/docs/PROFILE.md +75 -0
- data/docs/PROGRESS.md +199 -0
- data/docs/decisions/0000-template.md +17 -0
- data/docs/decisions/0001-pin-golden-reference-and-cpu-validation.md +27 -0
- data/docs/decisions/0002-retain-ruby-fallbacks-for-native-backend.md +26 -0
- data/docs/decisions/0003-share-projection-for-distorted-cameras.md +26 -0
- data/docs/decisions/0004-use-portable-world-space-reference-paths.md +26 -0
- data/docs/decisions/0005-reuse-ewa-core-for-2dgs.md +24 -0
- data/docs/decisions/0006-keep-eval3d-as-portable-reference.md +25 -0
- data/docs/decisions/0007-share-compositor-semantics-for-contribution-indices.md +25 -0
- data/examples/data/README.md +14 -0
- data/examples/data/colmap/images/view_000.png +0 -0
- data/examples/data/colmap/images/view_001.png +0 -0
- data/examples/data/colmap/images/view_002.png +0 -0
- data/examples/data/colmap/sparse/0/cameras.txt +2 -0
- data/examples/data/colmap/sparse/0/images.txt +6 -0
- data/examples/data/colmap/sparse/0/points3D.txt +17 -0
- data/examples/data/splats.ply +0 -0
- data/examples/fit_image.rb +35 -0
- data/examples/generate_sample_data.rb +147 -0
- data/examples/render_path.rb +117 -0
- data/examples/simple_trainer.rb +76 -0
- data/ext/gsplat_native/common.h +54 -0
- data/ext/gsplat_native/extconf.rb +39 -0
- data/ext/gsplat_native/gsplat_native.c +60 -0
- data/ext/gsplat_native/intersections.c +211 -0
- data/ext/gsplat_native/projection.c +199 -0
- data/ext/gsplat_native/raster_backward.c +129 -0
- data/ext/gsplat_native/raster_backward_bridge.c +69 -0
- data/ext/gsplat_native/raster_forward.c +150 -0
- data/ext/gsplat_native/rasterization.h +51 -0
- data/ext/gsplat_native/spherical_harmonics.c +129 -0
- data/gsplat.gemspec +36 -0
- data/lib/gsplat/autograd/context.rb +60 -0
- data/lib/gsplat/autograd/function.rb +68 -0
- data/lib/gsplat/autograd/variable.rb +159 -0
- data/lib/gsplat/backend/ruby/accumulate.rb +139 -0
- data/lib/gsplat/backend/ruby/accumulate_backward.rb +40 -0
- data/lib/gsplat/backend/ruby/eval3d_rasterizer.rb +175 -0
- data/lib/gsplat/backend/ruby/isect_tiles.rb +198 -0
- data/lib/gsplat/backend/ruby/projection.rb +251 -0
- data/lib/gsplat/backend/ruby/projection_backward.rb +190 -0
- data/lib/gsplat/backend/ruby/projection_covariance_vjp.rb +72 -0
- data/lib/gsplat/backend/ruby/projection_input_vjp.rb +252 -0
- data/lib/gsplat/backend/ruby/quat_scale_to_covar_preci.rb +139 -0
- data/lib/gsplat/backend/ruby/rasterize_to_indices_in_range.rb +121 -0
- data/lib/gsplat/backend/ruby/rasterize_to_pixels.rb +199 -0
- data/lib/gsplat/backend/ruby/rasterize_to_pixels_backward.rb +121 -0
- data/lib/gsplat/backend/ruby/spherical_harmonics.rb +135 -0
- data/lib/gsplat/backend/ruby/tile_compositor.rb +50 -0
- data/lib/gsplat/backend/ruby/tile_compositor_backward.rb +84 -0
- data/lib/gsplat/backend.rb +79 -0
- data/lib/gsplat/compression/grid_sort.rb +79 -0
- data/lib/gsplat/compression/kmeans.rb +121 -0
- data/lib/gsplat/compression/png.rb +147 -0
- data/lib/gsplat/compression/png_codec.rb +133 -0
- data/lib/gsplat/compression/quantizer.rb +79 -0
- data/lib/gsplat/io/checkpoint.rb +145 -0
- data/lib/gsplat/io/colmap.rb +175 -0
- data/lib/gsplat/io/colmap_binary.rb +98 -0
- data/lib/gsplat/io/colmap_text.rb +84 -0
- data/lib/gsplat/io/image.rb +63 -0
- data/lib/gsplat/io/image_backends.rb +81 -0
- data/lib/gsplat/io/npy.rb +189 -0
- data/lib/gsplat/io/ply.rb +185 -0
- data/lib/gsplat/io/ply_reader.rb +142 -0
- data/lib/gsplat/io/zip_archive.rb +183 -0
- data/lib/gsplat/math/camera_distortion.rb +123 -0
- data/lib/gsplat/math/camera_projection.rb +202 -0
- data/lib/gsplat/math/mat.rb +114 -0
- data/lib/gsplat/math/quaternion.rb +175 -0
- data/lib/gsplat/math/small_matrix_primitives.rb +112 -0
- data/lib/gsplat/math/spherical_harmonic_basis.rb +148 -0
- data/lib/gsplat/math/ssim.rb +153 -0
- data/lib/gsplat/native.rb +30 -0
- data/lib/gsplat/native_ops.rb +148 -0
- data/lib/gsplat/native_raster_ops.rb +76 -0
- data/lib/gsplat/ops/accumulate.rb +68 -0
- data/lib/gsplat/ops/eval3d_rasterize.rb +62 -0
- data/lib/gsplat/ops/isect_tiles.rb +38 -0
- data/lib/gsplat/ops/projection.rb +154 -0
- data/lib/gsplat/ops/quat_scale_to_covar_preci.rb +118 -0
- data/lib/gsplat/ops/rasterize_to_indices_in_range.rb +38 -0
- data/lib/gsplat/ops/rasterize_to_pixels.rb +105 -0
- data/lib/gsplat/ops/relocation.rb +94 -0
- data/lib/gsplat/ops/spherical_harmonics.rb +71 -0
- data/lib/gsplat/ops/tensor_shape_ops.rb +173 -0
- data/lib/gsplat/ops/tensor_value_ops.rb +150 -0
- data/lib/gsplat/optim/adam.rb +212 -0
- data/lib/gsplat/optim/lr_scheduler.rb +36 -0
- data/lib/gsplat/optim/selective_adam.rb +68 -0
- data/lib/gsplat/rasterization.rb +130 -0
- data/lib/gsplat/rasterization_2dgs.rb +140 -0
- data/lib/gsplat/rasterization_helpers.rb +162 -0
- data/lib/gsplat/rasterization_validation.rb +99 -0
- data/lib/gsplat/strategy/base.rb +49 -0
- data/lib/gsplat/strategy/default.rb +188 -0
- data/lib/gsplat/strategy/mcmc.rb +103 -0
- data/lib/gsplat/strategy/mcmc_ops.rb +143 -0
- data/lib/gsplat/strategy/ops.rb +165 -0
- data/lib/gsplat/training/config.rb +91 -0
- data/lib/gsplat/training/image_fitter.rb +158 -0
- data/lib/gsplat/training/losses.rb +191 -0
- data/lib/gsplat/training/scene.rb +116 -0
- data/lib/gsplat/training/trainer.rb +236 -0
- data/lib/gsplat/utils.rb +110 -0
- data/lib/gsplat/version.rb +6 -0
- data/lib/gsplat.rb +98 -0
- metadata +181 -0
data/lib/gsplat/utils.rb
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Gsplat
|
|
4
|
+
# Point-cloud initialization and scene geometry utilities.
|
|
5
|
+
module Utils
|
|
6
|
+
# Degree-zero real spherical-harmonic basis constant.
|
|
7
|
+
SH_C0 = 0.28209479177387814
|
|
8
|
+
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
# Brute-force Euclidean nearest-neighbor distances, including self at zero.
|
|
12
|
+
# rubocop:disable Naming/MethodParameterName
|
|
13
|
+
def knn(points, k: 4)
|
|
14
|
+
validate_points!(points)
|
|
15
|
+
unless k.is_a?(Integer) && k.between?(1, points.shape[0])
|
|
16
|
+
raise ArgumentError, "k must be in 1..#{points.shape[0]}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
output = points.class.zeros(points.shape[0], k)
|
|
20
|
+
points.shape[0].times do |index|
|
|
21
|
+
distances = Numo::NMath.sqrt(((points - points[index, true])**2).sum(axis: 1))
|
|
22
|
+
output[index, true] = distances.sort[0...k]
|
|
23
|
+
end
|
|
24
|
+
output
|
|
25
|
+
end
|
|
26
|
+
# rubocop:enable Naming/MethodParameterName
|
|
27
|
+
|
|
28
|
+
def rgb_to_sh(rgb)
|
|
29
|
+
(rgb - 0.5) / SH_C0
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Converts degree-zero SH coefficients back to RGB values.
|
|
33
|
+
#
|
|
34
|
+
# @param coefficients [Numo::NArray] [...,3]
|
|
35
|
+
# @return [Numo::NArray] [...,3]
|
|
36
|
+
def sh_to_rgb(coefficients)
|
|
37
|
+
(coefficients * SH_C0) + 0.5
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Initializes raw trainable Gaussian parameters from colored 3D points.
|
|
41
|
+
# rubocop:disable Metrics/AbcSize
|
|
42
|
+
def init_from_points(points, colors, **options)
|
|
43
|
+
sh_degree = options.fetch(:sh_degree, 3)
|
|
44
|
+
init_opacity = options.fetch(:init_opacity, 0.1)
|
|
45
|
+
init_scale = options.fetch(:init_scale, 1.0)
|
|
46
|
+
rng = options.fetch(:rng, Gsplat.rng)
|
|
47
|
+
validate_initialization!(points, colors, sh_degree, init_opacity, init_scale)
|
|
48
|
+
count = points.shape[0]
|
|
49
|
+
neighbor_count = [4, count].min
|
|
50
|
+
squared = knn(points, k: neighbor_count)[true, 1...neighbor_count]**2
|
|
51
|
+
distance = Numo::NMath.sqrt(squared.mean(axis: 1))
|
|
52
|
+
epsilon = points.is_a?(Numo::DFloat) ? 1e-12 : 1e-6
|
|
53
|
+
distance[distance.lt(epsilon)] = epsilon
|
|
54
|
+
log_scales = Numo::NMath.log(distance * init_scale).reshape(count, 1)
|
|
55
|
+
scales = points.class.zeros(count, 3)
|
|
56
|
+
scales[true, true] = log_scales
|
|
57
|
+
quaternions = points.class.cast(Array.new(count * 4) { rng.rand }).reshape(count, 4)
|
|
58
|
+
opacity = ::Math.log(init_opacity / (1 - init_opacity))
|
|
59
|
+
sh0 = rgb_to_sh(points.class.cast(colors)).reshape(count, 1, 3)
|
|
60
|
+
shn = points.class.zeros(count, ((sh_degree + 1)**2) - 1, 3)
|
|
61
|
+
{
|
|
62
|
+
means: variable(points.dup),
|
|
63
|
+
scales: variable(scales),
|
|
64
|
+
quats: variable(quaternions),
|
|
65
|
+
opacities: variable(points.class.ones(count) * opacity),
|
|
66
|
+
sh0: variable(sh0),
|
|
67
|
+
shN: variable(shn)
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
# rubocop:enable Metrics/AbcSize
|
|
71
|
+
|
|
72
|
+
# Maximum camera-center distance from the mean center.
|
|
73
|
+
def scene_scale(camera_to_worlds)
|
|
74
|
+
unless camera_to_worlds.is_a?(Numo::NArray) &&
|
|
75
|
+
camera_to_worlds.ndim == 3 && camera_to_worlds.shape[1..] == [4, 4]
|
|
76
|
+
actual = camera_to_worlds.respond_to?(:shape) ? camera_to_worlds.shape.inspect : camera_to_worlds.class
|
|
77
|
+
raise ShapeError, "expected camera_to_worlds [C,4,4], got #{actual}"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
locations = camera_to_worlds[true, 0...3, 3]
|
|
81
|
+
center = locations.mean(axis: 0)
|
|
82
|
+
Numo::NMath.sqrt(((locations - center)**2).sum(axis: 1)).max.to_f
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def validate_points!(points)
|
|
86
|
+
valid = points.is_a?(Numo::NArray) &&
|
|
87
|
+
[Numo::SFloat, Numo::DFloat].include?(points.class) &&
|
|
88
|
+
points.ndim == 2 && points.shape[1] == 3 && points.shape[0].positive?
|
|
89
|
+
raise ShapeError, "expected points [N,3] floating array" unless valid
|
|
90
|
+
end
|
|
91
|
+
private_class_method :validate_points!
|
|
92
|
+
|
|
93
|
+
def validate_initialization!(points, colors, degree, opacity, scale)
|
|
94
|
+
validate_points!(points)
|
|
95
|
+
raise ArgumentError, "at least two points are required" if points.shape[0] < 2
|
|
96
|
+
unless colors.is_a?(Numo::NArray) && colors.shape == [points.shape[0], 3]
|
|
97
|
+
raise ShapeError, "expected colors [#{points.shape[0]},3], got #{colors.shape.inspect}"
|
|
98
|
+
end
|
|
99
|
+
raise ArgumentError, "sh_degree must be in 0..4" unless degree.is_a?(Integer) && degree.between?(0, 4)
|
|
100
|
+
raise ArgumentError, "init_opacity must be in (0,1)" unless opacity.positive? && opacity < 1
|
|
101
|
+
raise ArgumentError, "init_scale must be positive" unless scale.positive?
|
|
102
|
+
end
|
|
103
|
+
private_class_method :validate_initialization!
|
|
104
|
+
|
|
105
|
+
def variable(data)
|
|
106
|
+
Autograd::Variable.new(data, requires_grad: true)
|
|
107
|
+
end
|
|
108
|
+
private_class_method :variable
|
|
109
|
+
end
|
|
110
|
+
end
|
data/lib/gsplat.rb
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "logger"
|
|
4
|
+
require "numo/narray"
|
|
5
|
+
|
|
6
|
+
require_relative "gsplat/version"
|
|
7
|
+
require_relative "gsplat/backend"
|
|
8
|
+
require_relative "gsplat/autograd/context"
|
|
9
|
+
require_relative "gsplat/autograd/function"
|
|
10
|
+
require_relative "gsplat/autograd/variable"
|
|
11
|
+
require_relative "gsplat/math/mat"
|
|
12
|
+
require_relative "gsplat/math/quaternion"
|
|
13
|
+
require_relative "gsplat/math/camera_distortion"
|
|
14
|
+
require_relative "gsplat/math/camera_projection"
|
|
15
|
+
require_relative "gsplat/math/spherical_harmonic_basis"
|
|
16
|
+
require_relative "gsplat/math/ssim"
|
|
17
|
+
require_relative "gsplat/ops/accumulate"
|
|
18
|
+
require_relative "gsplat/ops/isect_tiles"
|
|
19
|
+
require_relative "gsplat/ops/projection"
|
|
20
|
+
require_relative "gsplat/ops/quat_scale_to_covar_preci"
|
|
21
|
+
require_relative "gsplat/ops/rasterize_to_indices_in_range"
|
|
22
|
+
require_relative "gsplat/ops/rasterize_to_pixels"
|
|
23
|
+
require_relative "gsplat/ops/eval3d_rasterize"
|
|
24
|
+
require_relative "gsplat/ops/relocation"
|
|
25
|
+
require_relative "gsplat/ops/spherical_harmonics"
|
|
26
|
+
require_relative "gsplat/ops/tensor_shape_ops"
|
|
27
|
+
require_relative "gsplat/ops/tensor_value_ops"
|
|
28
|
+
require_relative "gsplat/rasterization_validation"
|
|
29
|
+
require_relative "gsplat/rasterization_helpers"
|
|
30
|
+
require_relative "gsplat/rasterization"
|
|
31
|
+
require_relative "gsplat/rasterization_2dgs"
|
|
32
|
+
require_relative "gsplat/training/image_fitter"
|
|
33
|
+
require_relative "gsplat/training/losses"
|
|
34
|
+
require_relative "gsplat/training/config"
|
|
35
|
+
require_relative "gsplat/training/scene"
|
|
36
|
+
require_relative "gsplat/training/trainer"
|
|
37
|
+
require_relative "gsplat/optim/adam"
|
|
38
|
+
require_relative "gsplat/optim/selective_adam"
|
|
39
|
+
require_relative "gsplat/optim/lr_scheduler"
|
|
40
|
+
require_relative "gsplat/strategy/base"
|
|
41
|
+
require_relative "gsplat/strategy/ops"
|
|
42
|
+
require_relative "gsplat/strategy/mcmc_ops"
|
|
43
|
+
require_relative "gsplat/strategy/default"
|
|
44
|
+
require_relative "gsplat/strategy/mcmc"
|
|
45
|
+
require_relative "gsplat/io/colmap"
|
|
46
|
+
require_relative "gsplat/io/checkpoint"
|
|
47
|
+
require_relative "gsplat/io/image"
|
|
48
|
+
require_relative "gsplat/io/npy"
|
|
49
|
+
require_relative "gsplat/io/ply"
|
|
50
|
+
require_relative "gsplat/compression/png"
|
|
51
|
+
require_relative "gsplat/utils"
|
|
52
|
+
require_relative "gsplat/native"
|
|
53
|
+
require_relative "gsplat/native_ops"
|
|
54
|
+
|
|
55
|
+
# Differentiable 3D Gaussian splatting for Ruby.
|
|
56
|
+
module Gsplat
|
|
57
|
+
# Base error for invalid runtime state and malformed serialized data.
|
|
58
|
+
class Error < StandardError; end
|
|
59
|
+
|
|
60
|
+
# Error raised when tensor dimensions do not satisfy an API contract.
|
|
61
|
+
class ShapeError < Error; end
|
|
62
|
+
|
|
63
|
+
# Error raised when a requested model, format, or backend is unavailable.
|
|
64
|
+
class NotSupportedError < Error; end
|
|
65
|
+
|
|
66
|
+
class << self
|
|
67
|
+
attr_writer :logger, :rng
|
|
68
|
+
|
|
69
|
+
# Logger used for backend fallbacks and unsupported option warnings.
|
|
70
|
+
#
|
|
71
|
+
# @return [Logger]
|
|
72
|
+
def logger
|
|
73
|
+
@logger ||= Logger.new($stderr, level: Logger::WARN)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Shared deterministic random source used by initialization and strategies.
|
|
77
|
+
#
|
|
78
|
+
# @return [Random]
|
|
79
|
+
def rng
|
|
80
|
+
@rng ||= Random.new
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Active operation backend.
|
|
84
|
+
#
|
|
85
|
+
# @return [Symbol] :auto, :ruby, or :native
|
|
86
|
+
def backend
|
|
87
|
+
@backend ||= Backend.normalize_backend(ENV.fetch("GSPLAT_BACKEND", "auto"))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Selects the operation backend.
|
|
91
|
+
#
|
|
92
|
+
# @param value [Symbol, String] :auto, :ruby, or :native
|
|
93
|
+
# @return [Symbol] normalized backend
|
|
94
|
+
def backend=(value)
|
|
95
|
+
@backend = Backend.normalize_backend(value)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: gsplat
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Yudai Takada
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: numo-narray
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0.9'
|
|
19
|
+
- - "<"
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '1.0'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: '0.9'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '1.0'
|
|
32
|
+
description: A CPU differentiable 3D Gaussian splatting renderer, trainer, and IO
|
|
33
|
+
toolkit with Numo::NArray and optional OpenMP acceleration.
|
|
34
|
+
email:
|
|
35
|
+
- t.yudai92@gmail.com
|
|
36
|
+
executables: []
|
|
37
|
+
extensions:
|
|
38
|
+
- ext/gsplat_native/extconf.rb
|
|
39
|
+
extra_rdoc_files:
|
|
40
|
+
- LICENSE.txt
|
|
41
|
+
- README.md
|
|
42
|
+
files:
|
|
43
|
+
- LICENSE.txt
|
|
44
|
+
- README.md
|
|
45
|
+
- docs/ACCEPTANCE.md
|
|
46
|
+
- docs/BENCHMARKS.md
|
|
47
|
+
- docs/DECISIONS.md
|
|
48
|
+
- docs/MIGRATION.md
|
|
49
|
+
- docs/PROFILE.md
|
|
50
|
+
- docs/PROGRESS.md
|
|
51
|
+
- docs/decisions/0000-template.md
|
|
52
|
+
- docs/decisions/0001-pin-golden-reference-and-cpu-validation.md
|
|
53
|
+
- docs/decisions/0002-retain-ruby-fallbacks-for-native-backend.md
|
|
54
|
+
- docs/decisions/0003-share-projection-for-distorted-cameras.md
|
|
55
|
+
- docs/decisions/0004-use-portable-world-space-reference-paths.md
|
|
56
|
+
- docs/decisions/0005-reuse-ewa-core-for-2dgs.md
|
|
57
|
+
- docs/decisions/0006-keep-eval3d-as-portable-reference.md
|
|
58
|
+
- docs/decisions/0007-share-compositor-semantics-for-contribution-indices.md
|
|
59
|
+
- examples/data/README.md
|
|
60
|
+
- examples/data/colmap/images/view_000.png
|
|
61
|
+
- examples/data/colmap/images/view_001.png
|
|
62
|
+
- examples/data/colmap/images/view_002.png
|
|
63
|
+
- examples/data/colmap/sparse/0/cameras.txt
|
|
64
|
+
- examples/data/colmap/sparse/0/images.txt
|
|
65
|
+
- examples/data/colmap/sparse/0/points3D.txt
|
|
66
|
+
- examples/data/splats.ply
|
|
67
|
+
- examples/fit_image.rb
|
|
68
|
+
- examples/generate_sample_data.rb
|
|
69
|
+
- examples/render_path.rb
|
|
70
|
+
- examples/simple_trainer.rb
|
|
71
|
+
- ext/gsplat_native/common.h
|
|
72
|
+
- ext/gsplat_native/extconf.rb
|
|
73
|
+
- ext/gsplat_native/gsplat_native.c
|
|
74
|
+
- ext/gsplat_native/intersections.c
|
|
75
|
+
- ext/gsplat_native/projection.c
|
|
76
|
+
- ext/gsplat_native/raster_backward.c
|
|
77
|
+
- ext/gsplat_native/raster_backward_bridge.c
|
|
78
|
+
- ext/gsplat_native/raster_forward.c
|
|
79
|
+
- ext/gsplat_native/rasterization.h
|
|
80
|
+
- ext/gsplat_native/spherical_harmonics.c
|
|
81
|
+
- gsplat.gemspec
|
|
82
|
+
- lib/gsplat.rb
|
|
83
|
+
- lib/gsplat/autograd/context.rb
|
|
84
|
+
- lib/gsplat/autograd/function.rb
|
|
85
|
+
- lib/gsplat/autograd/variable.rb
|
|
86
|
+
- lib/gsplat/backend.rb
|
|
87
|
+
- lib/gsplat/backend/ruby/accumulate.rb
|
|
88
|
+
- lib/gsplat/backend/ruby/accumulate_backward.rb
|
|
89
|
+
- lib/gsplat/backend/ruby/eval3d_rasterizer.rb
|
|
90
|
+
- lib/gsplat/backend/ruby/isect_tiles.rb
|
|
91
|
+
- lib/gsplat/backend/ruby/projection.rb
|
|
92
|
+
- lib/gsplat/backend/ruby/projection_backward.rb
|
|
93
|
+
- lib/gsplat/backend/ruby/projection_covariance_vjp.rb
|
|
94
|
+
- lib/gsplat/backend/ruby/projection_input_vjp.rb
|
|
95
|
+
- lib/gsplat/backend/ruby/quat_scale_to_covar_preci.rb
|
|
96
|
+
- lib/gsplat/backend/ruby/rasterize_to_indices_in_range.rb
|
|
97
|
+
- lib/gsplat/backend/ruby/rasterize_to_pixels.rb
|
|
98
|
+
- lib/gsplat/backend/ruby/rasterize_to_pixels_backward.rb
|
|
99
|
+
- lib/gsplat/backend/ruby/spherical_harmonics.rb
|
|
100
|
+
- lib/gsplat/backend/ruby/tile_compositor.rb
|
|
101
|
+
- lib/gsplat/backend/ruby/tile_compositor_backward.rb
|
|
102
|
+
- lib/gsplat/compression/grid_sort.rb
|
|
103
|
+
- lib/gsplat/compression/kmeans.rb
|
|
104
|
+
- lib/gsplat/compression/png.rb
|
|
105
|
+
- lib/gsplat/compression/png_codec.rb
|
|
106
|
+
- lib/gsplat/compression/quantizer.rb
|
|
107
|
+
- lib/gsplat/io/checkpoint.rb
|
|
108
|
+
- lib/gsplat/io/colmap.rb
|
|
109
|
+
- lib/gsplat/io/colmap_binary.rb
|
|
110
|
+
- lib/gsplat/io/colmap_text.rb
|
|
111
|
+
- lib/gsplat/io/image.rb
|
|
112
|
+
- lib/gsplat/io/image_backends.rb
|
|
113
|
+
- lib/gsplat/io/npy.rb
|
|
114
|
+
- lib/gsplat/io/ply.rb
|
|
115
|
+
- lib/gsplat/io/ply_reader.rb
|
|
116
|
+
- lib/gsplat/io/zip_archive.rb
|
|
117
|
+
- lib/gsplat/math/camera_distortion.rb
|
|
118
|
+
- lib/gsplat/math/camera_projection.rb
|
|
119
|
+
- lib/gsplat/math/mat.rb
|
|
120
|
+
- lib/gsplat/math/quaternion.rb
|
|
121
|
+
- lib/gsplat/math/small_matrix_primitives.rb
|
|
122
|
+
- lib/gsplat/math/spherical_harmonic_basis.rb
|
|
123
|
+
- lib/gsplat/math/ssim.rb
|
|
124
|
+
- lib/gsplat/native.rb
|
|
125
|
+
- lib/gsplat/native_ops.rb
|
|
126
|
+
- lib/gsplat/native_raster_ops.rb
|
|
127
|
+
- lib/gsplat/ops/accumulate.rb
|
|
128
|
+
- lib/gsplat/ops/eval3d_rasterize.rb
|
|
129
|
+
- lib/gsplat/ops/isect_tiles.rb
|
|
130
|
+
- lib/gsplat/ops/projection.rb
|
|
131
|
+
- lib/gsplat/ops/quat_scale_to_covar_preci.rb
|
|
132
|
+
- lib/gsplat/ops/rasterize_to_indices_in_range.rb
|
|
133
|
+
- lib/gsplat/ops/rasterize_to_pixels.rb
|
|
134
|
+
- lib/gsplat/ops/relocation.rb
|
|
135
|
+
- lib/gsplat/ops/spherical_harmonics.rb
|
|
136
|
+
- lib/gsplat/ops/tensor_shape_ops.rb
|
|
137
|
+
- lib/gsplat/ops/tensor_value_ops.rb
|
|
138
|
+
- lib/gsplat/optim/adam.rb
|
|
139
|
+
- lib/gsplat/optim/lr_scheduler.rb
|
|
140
|
+
- lib/gsplat/optim/selective_adam.rb
|
|
141
|
+
- lib/gsplat/rasterization.rb
|
|
142
|
+
- lib/gsplat/rasterization_2dgs.rb
|
|
143
|
+
- lib/gsplat/rasterization_helpers.rb
|
|
144
|
+
- lib/gsplat/rasterization_validation.rb
|
|
145
|
+
- lib/gsplat/strategy/base.rb
|
|
146
|
+
- lib/gsplat/strategy/default.rb
|
|
147
|
+
- lib/gsplat/strategy/mcmc.rb
|
|
148
|
+
- lib/gsplat/strategy/mcmc_ops.rb
|
|
149
|
+
- lib/gsplat/strategy/ops.rb
|
|
150
|
+
- lib/gsplat/training/config.rb
|
|
151
|
+
- lib/gsplat/training/image_fitter.rb
|
|
152
|
+
- lib/gsplat/training/losses.rb
|
|
153
|
+
- lib/gsplat/training/scene.rb
|
|
154
|
+
- lib/gsplat/training/trainer.rb
|
|
155
|
+
- lib/gsplat/utils.rb
|
|
156
|
+
- lib/gsplat/version.rb
|
|
157
|
+
homepage: https://github.com/ydah/gsplat
|
|
158
|
+
licenses:
|
|
159
|
+
- Apache-2.0
|
|
160
|
+
metadata:
|
|
161
|
+
rubygems_mfa_required: 'true'
|
|
162
|
+
source_code_uri: https://github.com/ydah/gsplat
|
|
163
|
+
documentation_uri: https://rubydoc.info/gems/gsplat/1.0.0
|
|
164
|
+
rdoc_options: []
|
|
165
|
+
require_paths:
|
|
166
|
+
- lib
|
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: 3.2.0
|
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
|
+
requirements:
|
|
174
|
+
- - ">="
|
|
175
|
+
- !ruby/object:Gem::Version
|
|
176
|
+
version: '0'
|
|
177
|
+
requirements: []
|
|
178
|
+
rubygems_version: 4.0.6
|
|
179
|
+
specification_version: 4
|
|
180
|
+
summary: Differentiable 3D Gaussian splatting for Ruby
|
|
181
|
+
test_files: []
|