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.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +202 -0
  3. data/README.md +236 -0
  4. data/docs/ACCEPTANCE.md +60 -0
  5. data/docs/BENCHMARKS.md +79 -0
  6. data/docs/DECISIONS.md +52 -0
  7. data/docs/MIGRATION.md +117 -0
  8. data/docs/PROFILE.md +75 -0
  9. data/docs/PROGRESS.md +199 -0
  10. data/docs/decisions/0000-template.md +17 -0
  11. data/docs/decisions/0001-pin-golden-reference-and-cpu-validation.md +27 -0
  12. data/docs/decisions/0002-retain-ruby-fallbacks-for-native-backend.md +26 -0
  13. data/docs/decisions/0003-share-projection-for-distorted-cameras.md +26 -0
  14. data/docs/decisions/0004-use-portable-world-space-reference-paths.md +26 -0
  15. data/docs/decisions/0005-reuse-ewa-core-for-2dgs.md +24 -0
  16. data/docs/decisions/0006-keep-eval3d-as-portable-reference.md +25 -0
  17. data/docs/decisions/0007-share-compositor-semantics-for-contribution-indices.md +25 -0
  18. data/examples/data/README.md +14 -0
  19. data/examples/data/colmap/images/view_000.png +0 -0
  20. data/examples/data/colmap/images/view_001.png +0 -0
  21. data/examples/data/colmap/images/view_002.png +0 -0
  22. data/examples/data/colmap/sparse/0/cameras.txt +2 -0
  23. data/examples/data/colmap/sparse/0/images.txt +6 -0
  24. data/examples/data/colmap/sparse/0/points3D.txt +17 -0
  25. data/examples/data/splats.ply +0 -0
  26. data/examples/fit_image.rb +35 -0
  27. data/examples/generate_sample_data.rb +147 -0
  28. data/examples/render_path.rb +117 -0
  29. data/examples/simple_trainer.rb +76 -0
  30. data/ext/gsplat_native/common.h +54 -0
  31. data/ext/gsplat_native/extconf.rb +39 -0
  32. data/ext/gsplat_native/gsplat_native.c +60 -0
  33. data/ext/gsplat_native/intersections.c +211 -0
  34. data/ext/gsplat_native/projection.c +199 -0
  35. data/ext/gsplat_native/raster_backward.c +129 -0
  36. data/ext/gsplat_native/raster_backward_bridge.c +69 -0
  37. data/ext/gsplat_native/raster_forward.c +150 -0
  38. data/ext/gsplat_native/rasterization.h +51 -0
  39. data/ext/gsplat_native/spherical_harmonics.c +129 -0
  40. data/gsplat.gemspec +36 -0
  41. data/lib/gsplat/autograd/context.rb +60 -0
  42. data/lib/gsplat/autograd/function.rb +68 -0
  43. data/lib/gsplat/autograd/variable.rb +159 -0
  44. data/lib/gsplat/backend/ruby/accumulate.rb +139 -0
  45. data/lib/gsplat/backend/ruby/accumulate_backward.rb +40 -0
  46. data/lib/gsplat/backend/ruby/eval3d_rasterizer.rb +175 -0
  47. data/lib/gsplat/backend/ruby/isect_tiles.rb +198 -0
  48. data/lib/gsplat/backend/ruby/projection.rb +251 -0
  49. data/lib/gsplat/backend/ruby/projection_backward.rb +190 -0
  50. data/lib/gsplat/backend/ruby/projection_covariance_vjp.rb +72 -0
  51. data/lib/gsplat/backend/ruby/projection_input_vjp.rb +252 -0
  52. data/lib/gsplat/backend/ruby/quat_scale_to_covar_preci.rb +139 -0
  53. data/lib/gsplat/backend/ruby/rasterize_to_indices_in_range.rb +121 -0
  54. data/lib/gsplat/backend/ruby/rasterize_to_pixels.rb +199 -0
  55. data/lib/gsplat/backend/ruby/rasterize_to_pixels_backward.rb +121 -0
  56. data/lib/gsplat/backend/ruby/spherical_harmonics.rb +135 -0
  57. data/lib/gsplat/backend/ruby/tile_compositor.rb +50 -0
  58. data/lib/gsplat/backend/ruby/tile_compositor_backward.rb +84 -0
  59. data/lib/gsplat/backend.rb +79 -0
  60. data/lib/gsplat/compression/grid_sort.rb +79 -0
  61. data/lib/gsplat/compression/kmeans.rb +121 -0
  62. data/lib/gsplat/compression/png.rb +147 -0
  63. data/lib/gsplat/compression/png_codec.rb +133 -0
  64. data/lib/gsplat/compression/quantizer.rb +79 -0
  65. data/lib/gsplat/io/checkpoint.rb +145 -0
  66. data/lib/gsplat/io/colmap.rb +175 -0
  67. data/lib/gsplat/io/colmap_binary.rb +98 -0
  68. data/lib/gsplat/io/colmap_text.rb +84 -0
  69. data/lib/gsplat/io/image.rb +63 -0
  70. data/lib/gsplat/io/image_backends.rb +81 -0
  71. data/lib/gsplat/io/npy.rb +189 -0
  72. data/lib/gsplat/io/ply.rb +185 -0
  73. data/lib/gsplat/io/ply_reader.rb +142 -0
  74. data/lib/gsplat/io/zip_archive.rb +183 -0
  75. data/lib/gsplat/math/camera_distortion.rb +123 -0
  76. data/lib/gsplat/math/camera_projection.rb +202 -0
  77. data/lib/gsplat/math/mat.rb +114 -0
  78. data/lib/gsplat/math/quaternion.rb +175 -0
  79. data/lib/gsplat/math/small_matrix_primitives.rb +112 -0
  80. data/lib/gsplat/math/spherical_harmonic_basis.rb +148 -0
  81. data/lib/gsplat/math/ssim.rb +153 -0
  82. data/lib/gsplat/native.rb +30 -0
  83. data/lib/gsplat/native_ops.rb +148 -0
  84. data/lib/gsplat/native_raster_ops.rb +76 -0
  85. data/lib/gsplat/ops/accumulate.rb +68 -0
  86. data/lib/gsplat/ops/eval3d_rasterize.rb +62 -0
  87. data/lib/gsplat/ops/isect_tiles.rb +38 -0
  88. data/lib/gsplat/ops/projection.rb +154 -0
  89. data/lib/gsplat/ops/quat_scale_to_covar_preci.rb +118 -0
  90. data/lib/gsplat/ops/rasterize_to_indices_in_range.rb +38 -0
  91. data/lib/gsplat/ops/rasterize_to_pixels.rb +105 -0
  92. data/lib/gsplat/ops/relocation.rb +94 -0
  93. data/lib/gsplat/ops/spherical_harmonics.rb +71 -0
  94. data/lib/gsplat/ops/tensor_shape_ops.rb +173 -0
  95. data/lib/gsplat/ops/tensor_value_ops.rb +150 -0
  96. data/lib/gsplat/optim/adam.rb +212 -0
  97. data/lib/gsplat/optim/lr_scheduler.rb +36 -0
  98. data/lib/gsplat/optim/selective_adam.rb +68 -0
  99. data/lib/gsplat/rasterization.rb +130 -0
  100. data/lib/gsplat/rasterization_2dgs.rb +140 -0
  101. data/lib/gsplat/rasterization_helpers.rb +162 -0
  102. data/lib/gsplat/rasterization_validation.rb +99 -0
  103. data/lib/gsplat/strategy/base.rb +49 -0
  104. data/lib/gsplat/strategy/default.rb +188 -0
  105. data/lib/gsplat/strategy/mcmc.rb +103 -0
  106. data/lib/gsplat/strategy/mcmc_ops.rb +143 -0
  107. data/lib/gsplat/strategy/ops.rb +165 -0
  108. data/lib/gsplat/training/config.rb +91 -0
  109. data/lib/gsplat/training/image_fitter.rb +158 -0
  110. data/lib/gsplat/training/losses.rb +191 -0
  111. data/lib/gsplat/training/scene.rb +116 -0
  112. data/lib/gsplat/training/trainer.rb +236 -0
  113. data/lib/gsplat/utils.rb +110 -0
  114. data/lib/gsplat/version.rb +6 -0
  115. data/lib/gsplat.rb +98 -0
  116. metadata +181 -0
@@ -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
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gsplat
4
+ # Semantic package version.
5
+ VERSION = "1.0.0"
6
+ 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: []