mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-18 01:06:47 +01:00
sdf3d_render and sdf3d_sphere nodes.
This commit is contained in:
parent
577e9d705a
commit
e42a25a53b
@ -1,4 +1,4 @@
|
|||||||
[gd_resource type="Resource" load_steps=107 format=2]
|
[gd_resource type="Resource" load_steps=116 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
|
[ext_resource path="res://addons/mat_maker_gd/nodes/mm_material.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=2]
|
[ext_resource path="res://addons/mat_maker_gd/nodes/noise/noise.gd" type="Script" id=2]
|
||||||
@ -28,6 +28,8 @@
|
|||||||
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd" type="Script" id=26]
|
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf2d/sd_op_circle_repeat.gd" type="Script" id=26]
|
||||||
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd" type="Script" id=27]
|
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf2d/sd_op_morph.gd" type="Script" id=27]
|
||||||
[ext_resource path="res://addons/mat_maker_gd/nodes/simple/curve.gd" type="Script" id=28]
|
[ext_resource path="res://addons/mat_maker_gd/nodes/simple/curve.gd" type="Script" id=28]
|
||||||
|
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd" type="Script" id=29]
|
||||||
|
[ext_resource path="res://addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd" type="Script" id=30]
|
||||||
|
|
||||||
[sub_resource type="Resource" id=3]
|
[sub_resource type="Resource" id=3]
|
||||||
script = ExtResource( 5 )
|
script = ExtResource( 5 )
|
||||||
@ -65,7 +67,7 @@ sides = 11
|
|||||||
radius = SubResource( 4 )
|
radius = SubResource( 4 )
|
||||||
edge = SubResource( 3 )
|
edge = SubResource( 3 )
|
||||||
|
|
||||||
[sub_resource type="Resource" id=101]
|
[sub_resource type="Resource" id=103]
|
||||||
script = ExtResource( 5 )
|
script = ExtResource( 5 )
|
||||||
default_type = 5
|
default_type = 5
|
||||||
default_int = 0
|
default_int = 0
|
||||||
@ -77,7 +79,7 @@ default_color = Color( 0, 0, 0, 1 )
|
|||||||
[sub_resource type="Resource" id=6]
|
[sub_resource type="Resource" id=6]
|
||||||
script = ExtResource( 6 )
|
script = ExtResource( 6 )
|
||||||
graph_position = Vector2( 300, -400 )
|
graph_position = Vector2( 300, -400 )
|
||||||
image = SubResource( 101 )
|
image = SubResource( 103 )
|
||||||
postfix = "-test"
|
postfix = "-test"
|
||||||
|
|
||||||
[sub_resource type="Resource" id=9]
|
[sub_resource type="Resource" id=9]
|
||||||
@ -708,7 +710,67 @@ c = Vector2( 0.35, -0.2 )
|
|||||||
width = 0.24
|
width = 0.24
|
||||||
repeat = 5
|
repeat = 5
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=109]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
default_type = 2
|
||||||
|
default_int = 0
|
||||||
|
default_float = 0.0
|
||||||
|
default_vector2 = Vector2( 0, 0 )
|
||||||
|
default_vector3 = Vector3( 0, 0, 0 )
|
||||||
|
default_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=104]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
default_type = 2
|
||||||
|
default_int = 0
|
||||||
|
default_float = 0.0
|
||||||
|
default_vector2 = Vector2( 0, 0 )
|
||||||
|
default_vector3 = Vector3( 0, 0, 0 )
|
||||||
|
default_color = Color( 0, 0, 0, 1 )
|
||||||
|
input_property = SubResource( 109 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=105]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
default_type = 5
|
||||||
|
default_int = 0
|
||||||
|
default_float = 0.0
|
||||||
|
default_vector2 = Vector2( 0, 0 )
|
||||||
|
default_vector3 = Vector3( 0, 0, 0 )
|
||||||
|
default_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=106]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
default_type = 5
|
||||||
|
default_int = 0
|
||||||
|
default_float = 0.0
|
||||||
|
default_vector2 = Vector2( 0, 0 )
|
||||||
|
default_vector3 = Vector3( 0, 0, 0 )
|
||||||
|
default_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=107]
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
default_type = 5
|
||||||
|
default_int = 0
|
||||||
|
default_float = 0.0
|
||||||
|
default_vector2 = Vector2( 0, 0 )
|
||||||
|
default_vector3 = Vector3( 0, 0, 0 )
|
||||||
|
default_color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=108]
|
||||||
|
script = ExtResource( 29 )
|
||||||
|
graph_position = Vector2( -660, 420 )
|
||||||
|
input = SubResource( 104 )
|
||||||
|
out_height_map = SubResource( 106 )
|
||||||
|
out_normal_map = SubResource( 107 )
|
||||||
|
out_color_map = SubResource( 105 )
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id=110]
|
||||||
|
script = ExtResource( 30 )
|
||||||
|
graph_position = Vector2( -1040, 500 )
|
||||||
|
output = SubResource( 109 )
|
||||||
|
radius = 0.5
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
image_size = Vector2( 128, 128 )
|
image_size = Vector2( 128, 128 )
|
||||||
nodes = [ SubResource( 5 ), SubResource( 6 ), SubResource( 12 ), SubResource( 15 ), SubResource( 18 ), SubResource( 21 ), SubResource( 24 ), SubResource( 27 ), SubResource( 39 ), SubResource( 42 ), SubResource( 45 ), SubResource( 49 ), SubResource( 54 ), SubResource( 58 ), SubResource( 60 ), SubResource( 63 ), SubResource( 66 ), SubResource( 69 ), SubResource( 71 ), SubResource( 73 ), SubResource( 78 ), SubResource( 82 ), SubResource( 85 ), SubResource( 88 ), SubResource( 90 ), SubResource( 92 ), SubResource( 96 ), SubResource( 100 ) ]
|
nodes = [ SubResource( 5 ), SubResource( 6 ), SubResource( 12 ), SubResource( 15 ), SubResource( 18 ), SubResource( 21 ), SubResource( 24 ), SubResource( 27 ), SubResource( 39 ), SubResource( 42 ), SubResource( 45 ), SubResource( 49 ), SubResource( 54 ), SubResource( 58 ), SubResource( 60 ), SubResource( 63 ), SubResource( 66 ), SubResource( 69 ), SubResource( 71 ), SubResource( 73 ), SubResource( 78 ), SubResource( 82 ), SubResource( 85 ), SubResource( 88 ), SubResource( 90 ), SubResource( 92 ), SubResource( 96 ), SubResource( 100 ), SubResource( 108 ), SubResource( 110 ) ]
|
||||||
|
@ -519,7 +519,8 @@ static func sdf3d_torus_z(p : Vector3, R : float, r : float) -> Vector2:
|
|||||||
#vec2 raymarch_$name(vec2 uv) {
|
#vec2 raymarch_$name(vec2 uv) {
|
||||||
# vec3 ro = vec3(uv-vec2(0.5), 1.0);
|
# vec3 ro = vec3(uv-vec2(0.5), 1.0);
|
||||||
# vec3 rd = vec3(0.0, 0.0, -1.0);
|
# vec3 rd = vec3(0.0, 0.0, -1.0);
|
||||||
# float dO = 0.0;float c = 0.0;
|
# float dO = 0.0;
|
||||||
|
# float c = 0.0;
|
||||||
#
|
#
|
||||||
# for (int i=0; i < 100; i++) {
|
# for (int i=0; i < 100; i++) {
|
||||||
# vec3 p = ro + rd*dO;
|
# vec3 p = ro + rd*dO;
|
||||||
|
@ -91,6 +91,14 @@ func get_owner_value(uv : Vector2):
|
|||||||
elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
|
elif default_type == MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE:
|
||||||
return to_color(owner.get_property_value(uv))
|
return to_color(owner.get_property_value(uv))
|
||||||
|
|
||||||
|
func get_value_sdf3d(uv3 : Vector3, skip_owner_val : bool = false) -> Vector2:
|
||||||
|
if get_value_from_owner && !skip_owner_val:
|
||||||
|
return owner.get_property_value_sdf3d(uv3)
|
||||||
|
|
||||||
|
if !input_property:
|
||||||
|
return default_vector2
|
||||||
|
|
||||||
|
return input_property.get_value_sdf3d(uv3)
|
||||||
|
|
||||||
func to_int(val) -> int:
|
func to_int(val) -> int:
|
||||||
if val is int:
|
if val is int:
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
tool
|
|
||||||
extends MMNode
|
|
||||||
|
|
||||||
var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
|
|
||||||
|
|
||||||
var image : Image
|
|
||||||
var tex : ImageTexture
|
|
||||||
|
|
||||||
export(Vector2) var bmin : Vector2 = Vector2(0.1, 0.1)
|
|
||||||
export(Vector2) var bmax : Vector2 = Vector2(1, 1)
|
|
||||||
|
|
||||||
export(bool) var refresh setget reff,reffg
|
|
||||||
|
|
||||||
func _ready():
|
|
||||||
if !Engine.editor_hint:
|
|
||||||
gen()
|
|
||||||
|
|
||||||
func gen() -> void:
|
|
||||||
if !image:
|
|
||||||
image = Image.new()
|
|
||||||
image.create(300, 300, false, Image.FORMAT_RGBA8)
|
|
||||||
|
|
||||||
if !tex:
|
|
||||||
tex = ImageTexture.new()
|
|
||||||
|
|
||||||
# var bmin : Vector2 = Vector2(0.1, 0.1)
|
|
||||||
# var bmax : Vector2 = Vector2(1, 1)
|
|
||||||
|
|
||||||
image.lock()
|
|
||||||
|
|
||||||
var w : float = image.get_width()
|
|
||||||
var h : float = image.get_width()
|
|
||||||
|
|
||||||
var pseed : float = randf() + randi()
|
|
||||||
|
|
||||||
for x in range(image.get_width()):
|
|
||||||
for y in range(image.get_height()):
|
|
||||||
var v : Vector2 = Vector2(x / w, y / h)
|
|
||||||
|
|
||||||
var col : Color = SDF3D.raymarch(v)
|
|
||||||
# var col : Color = SDF3D.raymarch2(v)
|
|
||||||
# var col : Color = SDF3D.raymarch3(v)
|
|
||||||
|
|
||||||
image.set_pixel(x, y, col)
|
|
||||||
|
|
||||||
|
|
||||||
image.unlock()
|
|
||||||
|
|
||||||
tex.create_from_image(image)
|
|
||||||
# texture = tex
|
|
||||||
|
|
||||||
func reffg():
|
|
||||||
return false
|
|
||||||
|
|
||||||
func reff(bb):
|
|
||||||
if bb:
|
|
||||||
gen()
|
|
||||||
|
|
179
game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd
Normal file
179
game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_render.gd
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
tool
|
||||||
|
extends MMNode
|
||||||
|
|
||||||
|
const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
|
||||||
|
var SDF2D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
|
||||||
|
|
||||||
|
export(Resource) var input : Resource
|
||||||
|
|
||||||
|
export(Resource) var out_height_map : Resource
|
||||||
|
export(Resource) var out_normal_map : Resource
|
||||||
|
export(Resource) var out_color_map : Resource
|
||||||
|
|
||||||
|
func _init_properties():
|
||||||
|
if !input:
|
||||||
|
input = MMNodeUniversalProperty.new()
|
||||||
|
input.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
|
||||||
|
|
||||||
|
#for some reason this doesn't work, todo check
|
||||||
|
# input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
|
||||||
|
input.input_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_UNIVERSAL
|
||||||
|
input.slot_name = "Input"
|
||||||
|
|
||||||
|
if !out_height_map:
|
||||||
|
out_height_map = MMNodeUniversalProperty.new()
|
||||||
|
out_height_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
|
||||||
|
|
||||||
|
out_height_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
|
||||||
|
|
||||||
|
if !out_normal_map:
|
||||||
|
out_normal_map = MMNodeUniversalProperty.new()
|
||||||
|
out_normal_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
|
||||||
|
|
||||||
|
out_normal_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
|
||||||
|
|
||||||
|
if !out_color_map:
|
||||||
|
out_color_map = MMNodeUniversalProperty.new()
|
||||||
|
out_color_map.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_IMAGE
|
||||||
|
|
||||||
|
out_color_map.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_IMAGE
|
||||||
|
|
||||||
|
register_output_property(out_height_map)
|
||||||
|
register_output_property(out_normal_map)
|
||||||
|
register_output_property(out_color_map)
|
||||||
|
register_input_property(input)
|
||||||
|
|
||||||
|
func _register_methods(mm_graph_node) -> void:
|
||||||
|
mm_graph_node.add_slot_label_universal(input)
|
||||||
|
mm_graph_node.add_slot_texture_universal(out_height_map)
|
||||||
|
mm_graph_node.add_slot_texture_universal(out_normal_map)
|
||||||
|
mm_graph_node.add_slot_texture_universal(out_color_map)
|
||||||
|
|
||||||
|
|
||||||
|
func _render(material) -> void:
|
||||||
|
var height_map : Image = Image.new()
|
||||||
|
var normal_map : Image = Image.new()
|
||||||
|
var color_map : Image = Image.new()
|
||||||
|
|
||||||
|
height_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
|
||||||
|
normal_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
|
||||||
|
color_map.create(material.image_size.x, material.image_size.y, false, Image.FORMAT_RGBA8)
|
||||||
|
|
||||||
|
height_map.lock()
|
||||||
|
normal_map.lock()
|
||||||
|
color_map.lock()
|
||||||
|
|
||||||
|
var w : float = material.image_size.x
|
||||||
|
var h : float = material.image_size.y
|
||||||
|
|
||||||
|
var pseed : float = randf() + randi()
|
||||||
|
|
||||||
|
for x in range(material.image_size.x):
|
||||||
|
for y in range(material.image_size.y):
|
||||||
|
var uv : Vector2 = Vector2(x / w, y / h)
|
||||||
|
|
||||||
|
var raymarch : Vector2 = sdf3d_raymarch(uv)
|
||||||
|
|
||||||
|
#HeightMap - float - The generated height map
|
||||||
|
#1.0-$(name_uv)_d.x
|
||||||
|
var hmf : float = 1.0 - raymarch.x
|
||||||
|
var height_map_col : Color = Color(hmf, hmf, hmf, 1)
|
||||||
|
|
||||||
|
#NormalMap - rgb - The generated normal map
|
||||||
|
#vec3(0.5) + 0.5* normal_$name(vec3($uv-vec2(0.5), 1.0-$(name_uv)_d.x))
|
||||||
|
var nuv : Vector2 = uv - Vector2(0.5, 0.5)
|
||||||
|
var n : Vector3 = sdf3d_normal(Vector3(nuv.x, nuv.y, 1.0 - raymarch.x))
|
||||||
|
var nn : Vector3 = Vector3(0.5, 0.5, 0.5) + 0.5 * n
|
||||||
|
|
||||||
|
var normal_map_col : Color = Color(nn.x, nn.y, nn.z, 1)
|
||||||
|
|
||||||
|
#ColorMap - float - The generated color index map
|
||||||
|
#$(name_uv)_d.y
|
||||||
|
var color_map_col : Color = Color(raymarch.y, raymarch.y, raymarch.y, 1)
|
||||||
|
|
||||||
|
height_map.set_pixel(x, y, height_map_col)
|
||||||
|
normal_map.set_pixel(x, y, normal_map_col)
|
||||||
|
color_map.set_pixel(x, y, color_map_col)
|
||||||
|
|
||||||
|
height_map.unlock()
|
||||||
|
normal_map.unlock()
|
||||||
|
color_map.unlock()
|
||||||
|
|
||||||
|
out_height_map.set_value(height_map)
|
||||||
|
out_normal_map.set_value(normal_map)
|
||||||
|
out_color_map.set_value(color_map)
|
||||||
|
|
||||||
|
func get_value_for(uv : Vector2, pseed : int) -> Color:
|
||||||
|
return Color()
|
||||||
|
|
||||||
|
#vec2 raymarch_$name(vec2 uv) {
|
||||||
|
# vec3 ro = vec3(uv-vec2(0.5), 1.0);
|
||||||
|
# vec3 rd = vec3(0.0, 0.0, -1.0);
|
||||||
|
# float dO = 0.0;
|
||||||
|
# float c = 0.0;
|
||||||
|
#
|
||||||
|
# for (int i=0; i < 100; i++) {
|
||||||
|
# vec3 p = ro + rd*dO;
|
||||||
|
# vec2 dS = $sdf(p);
|
||||||
|
# dO += dS.x;
|
||||||
|
#
|
||||||
|
# if (dO >= 1.0) {
|
||||||
|
# break;
|
||||||
|
# } else if (dS.x < 0.0001) {
|
||||||
|
# c = dS.y;
|
||||||
|
# break;
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# return vec2(dO, c);
|
||||||
|
#}
|
||||||
|
|
||||||
|
func sdf3d_raymarch(uv : Vector2) -> Vector2:
|
||||||
|
var ro : Vector3 = Vector3(uv.x - 0.5, uv.y - 0.5, 1.0);
|
||||||
|
var rd : Vector3 = Vector3(0.0, 0.0, -1.0);
|
||||||
|
var dO : float = 0.0;
|
||||||
|
var c : float = 0.0;
|
||||||
|
|
||||||
|
for i in range(100):
|
||||||
|
var p : Vector3 = ro + rd * dO;
|
||||||
|
var dS : Vector2 = input.get_value_sdf3d(p)
|
||||||
|
|
||||||
|
dO += dS.x;
|
||||||
|
|
||||||
|
if (dO >= 1.0):
|
||||||
|
break;
|
||||||
|
elif (dS.x < 0.0001):
|
||||||
|
c = dS.y;
|
||||||
|
break;
|
||||||
|
|
||||||
|
return Vector2(dO, c);
|
||||||
|
|
||||||
|
#vec3 normal_$name(vec3 p) {
|
||||||
|
# if (p.z <= 0.0) {
|
||||||
|
# return vec3(0.0, 0.0, 1.0);
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# float d = $sdf(p).x;
|
||||||
|
# float e = .001;
|
||||||
|
# vec3 n = d - vec3(
|
||||||
|
# $sdf(p-vec3(e, 0.0, 0.0)).x,
|
||||||
|
# $sdf(p-vec3(0.0, e, 0.0)).x,
|
||||||
|
# $sdf(p-vec3(0.0, 0.0, e)).x);
|
||||||
|
#
|
||||||
|
# return vec3(-1.0, -1.0, -1.0)*normalize(n);
|
||||||
|
#}
|
||||||
|
|
||||||
|
func sdf3d_normal(p : Vector3) -> Vector3:
|
||||||
|
if (p.z <= 0.0):
|
||||||
|
return Vector3(0.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
var d : float = input.get_value_sdf3d(p).x
|
||||||
|
var e : float = .001;
|
||||||
|
|
||||||
|
var n : Vector3 = Vector3(
|
||||||
|
d - input.get_value_sdf3d(p - Vector3(e, 0.0, 0.0)).x,
|
||||||
|
d - input.get_value_sdf3d(p - Vector3(0.0, e, 0.0)).x,
|
||||||
|
d - input.get_value_sdf3d(p - Vector3(0.0, 0.0, e)).x)
|
||||||
|
|
||||||
|
return Vector3(-1.0, -1.0, -1.0) * n.normalized()
|
||||||
|
|
37
game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd
Normal file
37
game/addons/mat_maker_gd/nodes/sdf3d/sdf3d_shape_sphere.gd
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
tool
|
||||||
|
extends MMNode
|
||||||
|
|
||||||
|
const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
|
||||||
|
var SDF3D = preload("res://addons/mat_maker_gd/nodes/common/sdf3d.gd")
|
||||||
|
|
||||||
|
export(Resource) var output : Resource
|
||||||
|
export(float) var radius : float = 0.5
|
||||||
|
|
||||||
|
func _init_properties():
|
||||||
|
if !output:
|
||||||
|
output = MMNodeUniversalProperty.new()
|
||||||
|
output.default_type = MMNodeUniversalProperty.MMNodeUniversalPropertyDefaultType.DEFAULT_TYPE_VECTOR2
|
||||||
|
|
||||||
|
output.output_slot_type = MMNodeUniversalProperty.SlotTypes.SLOT_TYPE_FLOAT
|
||||||
|
output.slot_name = ">>> Output >>>"
|
||||||
|
output.get_value_from_owner = true
|
||||||
|
|
||||||
|
register_output_property(output)
|
||||||
|
|
||||||
|
func _register_methods(mm_graph_node) -> void:
|
||||||
|
mm_graph_node.add_slot_label_universal(output)
|
||||||
|
|
||||||
|
mm_graph_node.add_slot_float("get_radius", "set_radius", "Radius", 0.01)
|
||||||
|
|
||||||
|
func get_property_value_sdf3d(uv3 : Vector3) -> Vector2:
|
||||||
|
return SDF3D.sdf3d_sphere(uv3, radius)
|
||||||
|
|
||||||
|
#radius
|
||||||
|
func get_radius() -> float:
|
||||||
|
return radius
|
||||||
|
|
||||||
|
func set_radius(val : float) -> void:
|
||||||
|
radius = val
|
||||||
|
|
||||||
|
emit_changed()
|
||||||
|
output.emit_changed()
|
Loading…
Reference in New Issue
Block a user