@tool class_name Quaker extends Node3D ## Screws with the scale of children. ## Scale all axes equally. Overrides `correlated`. @export var uniform := false ## Correlate axis scale. @export var correlated := false @export var intensity := 0.0 var _buffer := Vector3.ONE func rand_exp() -> float: return exp(randfn(0, intensity)) func rand_scale() -> Vector3: if uniform: return Vector3.ONE * rand_exp() if correlated: var v := Vector3(rand_exp(), _buffer.x, _buffer.y) _buffer.x = _buffer.y _buffer.y = _buffer.z _buffer.z = v.x return v return Vector3(rand_exp(), rand_exp(), rand_exp()) func _process(_delta: float) -> void: scale = rand_scale()