Skip to content

Commit

Permalink
Start working on a noise generator node
Browse files Browse the repository at this point in the history
Used for shaders that need noise textures.

Still WIP. needs the nodes to set their appropriate values when setting a noise texture. Which means I'll probably have to re-write the whole thing, yay :D
  • Loading branch information
OverloadedOrama committed Dec 17, 2024
1 parent 618d5f4 commit 0f53fc3
Show file tree
Hide file tree
Showing 7 changed files with 710 additions and 26 deletions.
21 changes: 21 additions & 0 deletions src/Classes/ShaderLoader.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ extends RefCounted
const VALUE_SLIDER_V2_TSCN := preload("res://src/UI/Nodes/Sliders/ValueSliderV2.tscn")
const BASIS_SLIDERS_TSCN := preload("res://src/UI/Nodes/Sliders/BasisSliders.tscn")
const GRADIENT_EDIT_TSCN := preload("res://src/UI/Nodes/GradientEdit.tscn")
const NOISE_GENERATOR := preload("res://src/UI/Nodes/NoiseGeneratorDialog.tscn")


static func create_ui_for_shader_uniforms(
Expand Down Expand Up @@ -261,12 +262,32 @@ static func create_ui_for_shader_uniforms(
curve_edit.curve = params[u_name].curve
else:
curve_edit.set_default_curve()
params[u_name] = CurveEdit.to_texture(curve_edit.curve)
curve_edit.value_changed.connect(
func(curve: Curve): value_changed.call(CurveEdit.to_texture(curve), u_name)
)
hbox.add_child(curve_edit)
elif u_name.begins_with("noise_"):
var noise_generator_dialog := NOISE_GENERATOR.instantiate() as AcceptDialog
noise_generator_dialog.always_on_top = true
var noise_generator := noise_generator_dialog.get_child(0) as NoiseGenerator
if params.has(u_name) and params[u_name] is NoiseTexture2D:
noise_generator.noise_texture = params[u_name]
else:
params[u_name] = noise_generator.noise_texture
noise_generator.value_changed.connect(
func(noise_texture: NoiseTexture2D): value_changed.call(noise_texture, u_name)
)
parent_node.add_child(noise_generator_dialog)
var button := Button.new()
button.text = "Generate noise"
button.pressed.connect(noise_generator_dialog.popup_centered)
button.size_flags_horizontal = Control.SIZE_EXPAND_FILL
button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
hbox.add_child(button)
else: ## Simple texture
var file_dialog := FileDialog.new()
file_dialog.always_on_top = true
file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE
file_dialog.access = FileDialog.ACCESS_FILESYSTEM
file_dialog.size = Vector2(384, 281)
Expand Down
141 changes: 141 additions & 0 deletions src/UI/Nodes/NoiseGenerator.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
class_name NoiseGenerator
extends ScrollContainer

signal value_changed(noise_texture: NoiseTexture2D)

var noise_texture: NoiseTexture2D:
set(value):
noise_texture = value
if not is_instance_valid(noise_texture.noise):
noise_texture.noise = FastNoiseLite.new()
if not is_instance_valid(preview):
await ready
preview.texture = noise_texture
@onready var preview := %Preview as TextureRect


func _init() -> void:
noise_texture = NoiseTexture2D.new()


func _on_size_slider_value_changed(value: Vector2) -> void:
noise_texture.width = value.x
noise_texture.height = value.y
value_changed.emit(noise_texture)


func _on_invert_check_box_toggled(toggled_on: bool) -> void:
noise_texture.invert = toggled_on
value_changed.emit(noise_texture)


func _on_in_3d_space_check_box_toggled(toggled_on: bool) -> void:
noise_texture.in_3d_space = toggled_on
value_changed.emit(noise_texture)


func _on_seamless_check_box_toggled(toggled_on: bool) -> void:
noise_texture.seamless = toggled_on
value_changed.emit(noise_texture)


func _on_normal_map_check_box_toggled(toggled_on: bool) -> void:
noise_texture.as_normal_map = toggled_on
value_changed.emit(noise_texture)


func _on_normalize_check_box_toggled(toggled_on: bool) -> void:
noise_texture.normalize = toggled_on
value_changed.emit(noise_texture)


func _on_gradient_edit_updated(gradient: Gradient, _cc: bool) -> void:
noise_texture.color_ramp = gradient
value_changed.emit(noise_texture)


func _on_noise_type_option_button_item_selected(index: FastNoiseLite.NoiseType) -> void:
(noise_texture.noise as FastNoiseLite).noise_type = index
value_changed.emit(noise_texture)


func _on_seed_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).seed = value
value_changed.emit(noise_texture)


func _on_frequency_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).frequency = value
value_changed.emit(noise_texture)


func _on_offset_slider_value_changed(value: Vector3) -> void:
(noise_texture.noise as FastNoiseLite).offset = value
value_changed.emit(noise_texture)


func _on_fractal_type_option_button_item_selected(index: FastNoiseLite.FractalType) -> void:
(noise_texture.noise as FastNoiseLite).fractal_type = index
value_changed.emit(noise_texture)


func _on_fractal_octaves_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).fractal_octaves = value
value_changed.emit(noise_texture)


func _on_fractal_lacunarity_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).fractal_lacunarity = value
value_changed.emit(noise_texture)


func _on_fractal_gain_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).fractal_gain = value
value_changed.emit(noise_texture)


func _on_fractal_weighted_strength_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).fractal_weighted_strength = value
value_changed.emit(noise_texture)


func _on_domain_warp_enabled_check_box_toggled(toggled_on: bool) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_enabled = toggled_on
value_changed.emit(noise_texture)


func _on_domain_warp_type_option_button_item_selected(index: FastNoiseLite.DomainWarpType) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_type = index
value_changed.emit(noise_texture)


func _on_domain_warp_amplitude_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_amplitude = value
value_changed.emit(noise_texture)


func _on_domain_warp_frequency_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_frequency = value
value_changed.emit(noise_texture)


func _on_domain_warp_fractal_type_option_button_item_selected(
index: FastNoiseLite.DomainWarpFractalType
) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_fractal_type = index
value_changed.emit(noise_texture)


func _on_domain_warp_fractal_octaves_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_fractal_octaves = value
value_changed.emit(noise_texture)


func _on_domain_warp_fractal_lacunarity_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_fractal_lacunarity = value
value_changed.emit(noise_texture)


func _on_domain_warp_fractal_gain_slider_value_changed(value: float) -> void:
(noise_texture.noise as FastNoiseLite).domain_warp_fractal_gain = value
value_changed.emit(noise_texture)
Loading

0 comments on commit 0f53fc3

Please sign in to comment.