Files
music-spinner/Sky/sky_sphere_spinner.gd
2026-02-10 06:09:33 +01:00

53 lines
1.7 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
extends Node3D
@export var base_spin_speed := 0.05 # Slow ambient rotation
@export var beat_boost := 0.2 # How much faster it spins with bass
@export var smoothness := 0.05 # Controls smoothing of the beat signal
@export var music_bus := "MusicBus" # Audio bus with the SpectrumAnalyzer
@onready var analyzer = AudioServer.get_bus_effect_instance(
AudioServer.get_bus_index(music_bus), 0
)
# Reference to your mesh
@onready var mesh: MeshInstance3D = $Sketchfab_model/SphereTest_fbx/RootNode/pSphere1/pSphere1_lambert2_0
var smoothed_bass := 0.0
var mat: Material = null
func _ready() -> void:
if mesh:
# Duplicate the material so its safe to modify
var original_mat = mesh.get_active_material(0)
if original_mat:
mat = original_mat.duplicate()
mesh.set_surface_override_material(0, mat)
else:
push_warning("Mesh has no material!")
else:
push_error("Mesh path is incorrect!")
func _process(delta: float) -> void:
if not analyzer:
return
# Measure low frequencies for the "beat"
var bass = analyzer.get_magnitude_for_frequency_range(20, 200)
var bass_strength = bass.length() * 5.0
# Smooth out the data
smoothed_bass = lerp(smoothed_bass, bass_strength, smoothness)
# Determine final spin speed
var spin_speed = base_spin_speed + smoothed_bass * beat_boost
# Apply slow rotation around Y axis (typical for skyboxes)
rotation.y += spin_speed * delta
# Optionally, adjust shader/material color or parameter
if mat and mat is StandardMaterial3D:
var brightness = 0.6 + smoothed_bass * 0.3
mat.albedo_color = Color(brightness, brightness, brightness)
elif mat and mat is ShaderMaterial:
mat.set_shader_parameter("intensity", 1.0 + smoothed_bass * 0.5)