WIP Seismic Integration

This commit is contained in:
Zoë Gidiere
2025-03-01 21:32:39 -07:00
parent 8366a5288b
commit 5892464a1d
239 changed files with 623 additions and 6195 deletions
@@ -15,8 +15,8 @@ import com.dfsek.terra.addons.image.config.colorsampler.mutate.RotateColorSample
import com.dfsek.terra.addons.image.config.colorsampler.mutate.TranslateColorSamplerTemplate;
import com.dfsek.terra.addons.image.config.image.ImageTemplate;
import com.dfsek.terra.addons.image.config.image.StitchedImageTemplate;
import com.dfsek.terra.addons.image.config.noisesampler.ChannelNoiseSamplerTemplate;
import com.dfsek.terra.addons.image.config.noisesampler.DistanceTransformNoiseSamplerTemplate;
import com.dfsek.terra.addons.image.config.sampler.ChannelSamplerTemplate;
import com.dfsek.terra.addons.image.config.sampler.DistanceTransformSamplerTemplate;
import com.dfsek.terra.addons.image.image.Image;
import com.dfsek.terra.addons.image.operator.DistanceTransform;
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
@@ -26,7 +26,7 @@ import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.inject.annotations.Inject;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.seismic.type.sampler.Sampler;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.util.reflection.TypeKey;
@@ -39,7 +39,7 @@ public class ImageLibraryAddon implements AddonInitializer {
public static final TypeKey<Supplier<ObjectTemplate<ColorSampler>>> COLOR_PICKER_REGISTRY_KEY = new TypeKey<>() {
};
public static final TypeKey<Supplier<ObjectTemplate<NoiseSampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {
public static final TypeKey<Supplier<ObjectTemplate<Sampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {
};
@Inject
private Platform platform;
@@ -71,10 +71,10 @@ public class ImageLibraryAddon implements AddonInitializer {
(type, o, loader, depthTracker) -> DistanceTransform.Normalization.valueOf((String) o))
.applyLoader(ColorString.class, new ColorLoader());
CheckedRegistry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(
CheckedRegistry<Supplier<ObjectTemplate<Sampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(
NOISE_SAMPLER_TOKEN);
noiseRegistry.register(addon.key("DISTANCE_TRANSFORM"), DistanceTransformNoiseSamplerTemplate::new);
noiseRegistry.register(addon.key("CHANNEL"), ChannelNoiseSamplerTemplate::new);
noiseRegistry.register(addon.key("DISTANCE_TRANSFORM"), DistanceTransformSamplerTemplate::new);
noiseRegistry.register(addon.key("CHANNEL"), ChannelSamplerTemplate::new);
})
.then(event -> {
CheckedRegistry<Supplier<ObjectTemplate<ColorSampler>>> colorSamplerRegistry = event.getPack().getOrCreateRegistry(
@@ -1,7 +1,8 @@
package com.dfsek.terra.addons.image.colorsampler.mutate;
import com.dfsek.seismic.math.trigonometry.TrigonometryFunctions;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.api.util.MathUtil;
public class RotateColorSampler implements ColorSampler {
@@ -39,14 +40,14 @@ public class RotateColorSampler implements ColorSampler {
case DEG_90 -> -z;
case DEG_180 -> -x;
case DEG_270 -> z;
case RAD_ANY -> (int) (x * MathUtil.cos(radians) - z * MathUtil.sin(radians));
case RAD_ANY -> (int) (x * TrigonometryFunctions.cos(radians) - z * TrigonometryFunctions.sin(radians));
};
int rz = switch(rotationMethod) {
case DEG_0 -> z;
case DEG_90 -> x;
case DEG_180 -> -z;
case DEG_270 -> -x;
case RAD_ANY -> (int) (z * MathUtil.cos(radians) + x * MathUtil.sin(radians));
case RAD_ANY -> (int) (z * TrigonometryFunctions.cos(radians) + x * TrigonometryFunctions.sin(radians));
};
return sampler.apply(rx, rz);
}
@@ -1,16 +1,16 @@
package com.dfsek.terra.addons.image.config.noisesampler;
package com.dfsek.terra.addons.image.config.sampler;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.noisesampler.ChannelNoiseSampler;
import com.dfsek.terra.addons.image.sampler.ChannelSampler;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.seismic.type.sampler.Sampler;
public class ChannelNoiseSamplerTemplate implements ObjectTemplate<NoiseSampler> {
public class ChannelSamplerTemplate implements ObjectTemplate<Sampler> {
@Value("color-sampler")
private ColorSampler colorSampler;
@@ -35,7 +35,7 @@ public class ChannelNoiseSamplerTemplate implements ObjectTemplate<NoiseSampler>
private boolean premultiply = false;
@Override
public NoiseSampler get() {
return new ChannelNoiseSampler(colorSampler, channel, normalize, premultiply);
public Sampler get() {
return new ChannelSampler(colorSampler, channel, normalize, premultiply);
}
}
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.image.config.noisesampler;
package com.dfsek.terra.addons.image.config.sampler;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
@@ -9,10 +9,10 @@ import com.dfsek.terra.addons.image.operator.DistanceTransform;
import com.dfsek.terra.addons.image.operator.DistanceTransform.CostFunction;
import com.dfsek.terra.addons.image.operator.DistanceTransform.Normalization;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.seismic.type.sampler.Sampler;
public class DistanceTransformNoiseSamplerTemplate implements ObjectTemplate<NoiseSampler> {
public class DistanceTransformSamplerTemplate implements ObjectTemplate<Sampler> {
@Value("image")
private Image image;
@@ -68,7 +68,7 @@ public class DistanceTransformNoiseSamplerTemplate implements ObjectTemplate<Noi
private Normalization normalization = Normalization.None;
@Override
public NoiseSampler get() {
public Sampler get() {
return new DistanceTransform.Noise(new DistanceTransform(image, channel, threshold, clampToEdge, costFunction, invertThreshold),
normalization);
}
@@ -3,7 +3,7 @@ package com.dfsek.terra.addons.image.operator;
import com.dfsek.terra.addons.image.image.Image;
import com.dfsek.terra.addons.image.util.ColorUtil;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.seismic.type.sampler.Sampler;
import static com.dfsek.terra.addons.image.util.MathUtil.lerp;
@@ -220,7 +220,7 @@ public class DistanceTransform {
}
public static class Noise implements NoiseSampler {
public static class Noise implements Sampler {
private final DistanceTransform transform;
@@ -230,14 +230,14 @@ public class DistanceTransform {
}
@Override
public double noise(long seed, double x, double y) {
public double getSample(long seed, double x, double y) {
if(x < 0 || y < 0 || x >= transform.width || y >= transform.height) return transform.minDistance;
return transform.distances[(int) Math.floor(x)][(int) Math.floor(y)];
}
@Override
public double noise(long seed, double x, double y, double z) {
return noise(seed, x, z);
public double getSample(long seed, double x, double y, double z) {
return getSample(seed, x, z);
}
}
}
@@ -1,14 +1,14 @@
package com.dfsek.terra.addons.image.noisesampler;
package com.dfsek.terra.addons.image.sampler;
import com.dfsek.terra.addons.image.colorsampler.ColorSampler;
import com.dfsek.terra.addons.image.util.ColorUtil;
import com.dfsek.terra.addons.image.util.ColorUtil.Channel;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.seismic.type.sampler.Sampler;
import static com.dfsek.terra.addons.image.util.MathUtil.lerp;
public class ChannelNoiseSampler implements NoiseSampler {
public class ChannelSampler implements Sampler {
private final ColorSampler colorSampler;
@@ -18,7 +18,7 @@ public class ChannelNoiseSampler implements NoiseSampler {
private final boolean premultiply;
public ChannelNoiseSampler(ColorSampler colorSampler, Channel channel, boolean normalize, boolean premultiply) {
public ChannelSampler(ColorSampler colorSampler, Channel channel, boolean normalize, boolean premultiply) {
this.colorSampler = colorSampler;
this.channel = channel;
this.normalize = normalize;
@@ -26,7 +26,7 @@ public class ChannelNoiseSampler implements NoiseSampler {
}
@Override
public double noise(long seed, double x, double y) {
public double getSample(long seed, double x, double y) {
int sample = colorSampler.apply((int) x, (int) y);
int premultiplied = premultiply ? ColorUtil.premultiply(sample) : sample;
double channelValue = channel.from(premultiplied);
@@ -34,7 +34,7 @@ public class ChannelNoiseSampler implements NoiseSampler {
}
@Override
public double noise(long seed, double x, double y, double z) {
return noise(seed, x, z);
public double getSample(long seed, double x, double y, double z) {
return getSample(seed, x, z);
}
}