Module: Gsplat::Compression::GridSort
- Defined in:
- lib/gsplat/compression/grid_sort.rb
Overview
Deterministic Morton ordering for square Gaussian parameter grids.
Constant Summary collapse
- QUANTIZATION_MAX =
1023
Class Method Summary collapse
Class Method Details
.morton_order(means) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/gsplat/compression/grid_sort.rb', line 31 def morton_order(means) coordinates = means.to_a mins = 3.times.map { |axis| coordinates.map { |point| point[axis] }.min } maxs = 3.times.map { |axis| coordinates.map { |point| point[axis] }.max } (0...coordinates.length).sort_by do |index| quantized = 3.times.map do |axis| span = maxs[axis] - mins[axis] span.zero? ? 0 : (((coordinates[index][axis] - mins[axis]) / span) * QUANTIZATION_MAX).round end [morton3(*quantized), index] end end |
.prepare(parameters, use_sort: true) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/gsplat/compression/grid_sort.rb', line 11 def prepare(parameters, use_sort: true) values = parameters.to_h { |name, value| [name.to_s, data(value).dup] } validate_lengths!(values) side = ::Math.sqrt(values.fetch("means").shape[0]).floor raise ArgumentError, "at least one Gaussian is required" if side.zero? values = crop_to_square(values, side * side) values = reorder(values, morton_order(values.fetch("means"))) if use_sort [values, side] end |