Finished GradientEditor and improved preview

Now gradient editor can remove points.
Improved preview:
- added panorama to 3d preview (with panoramas from the godot material demo)
- texture preview can be maximized
This commit is contained in:
RodZill4 2018-07-28 21:21:05 +02:00
parent 10ea905090
commit dffc6fc790
19 changed files with 20742 additions and 267 deletions

View File

@ -1,12 +0,0 @@
tool
extends Viewport
var material = null
func _ready():
material = ShaderMaterial.new()
material.shader = Shader.new()
material.shader.set_code("shader_type spatial;\nvoid fragment() {\n ALBEDO=vec3(0.5);\n}\n")
$Objects/Cube.set_surface_material(0, material)
$Objects/Cylinder.set_surface_material(0, material)
$AnimationPlayer.play("rotate")

View File

@ -3,11 +3,12 @@ extends "res://addons/procedural_material/node_base.gd"
var amount = 0.0 var amount = 0.0
const blend_types = [
{ name="Normal", shortname="normal" }
]
func _ready(): func _ready():
set_slot(0, true, 0, Color(0.5, 0.5, 1), true, 0, Color(0.5, 0.5, 1)) initialize_properties([ $HBoxContainer/amount ])
set_slot(1, true, 0, Color(0.5, 0.5, 1), false, 0, Color(0.5, 0.5, 1))
set_slot(2, true, 0, Color(0.5, 0.5, 1), false, 0, Color(0.5, 0.5, 1))
initialize_properties([ $amount ])
func color_to_string(c): func color_to_string(c):
return "vec3("+str(c.r)+","+str(c.g)+","+str(c.b)+")" return "vec3("+str(c.r)+","+str(c.g)+","+str(c.b)+")"

View File

@ -12,8 +12,8 @@ anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 1.0 margin_left = 1.0
margin_right = 91.0 margin_right = 160.0
margin_bottom = 83.0 margin_bottom = 104.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 1 mouse_filter = 1
@ -28,7 +28,7 @@ resizable = false
selected = false selected = false
comment = false comment = false
overlay = 0 overlay = 0
slot/0/left_enabled = true slot/0/left_enabled = false
slot/0/left_type = 0 slot/0/left_type = 0
slot/0/left_color = Color( 0.5, 0.5, 1, 1 ) slot/0/left_color = Color( 0.5, 0.5, 1, 1 )
slot/0/right_enabled = true slot/0/right_enabled = true
@ -46,10 +46,16 @@ slot/2/left_color = Color( 0.5, 0.5, 1, 1 )
slot/2/right_enabled = false slot/2/right_enabled = false
slot/2/right_type = 0 slot/2/right_type = 0
slot/2/right_color = Color( 0.5, 0.5, 1, 1 ) slot/2/right_color = Color( 0.5, 0.5, 1, 1 )
slot/3/left_enabled = true
slot/3/left_type = 0
slot/3/left_color = Color( 0.5, 0.5, 1, 1 )
slot/3/right_enabled = false
slot/3/right_type = 0
slot/3/right_color = Color( 0.5, 0.5, 1, 1 )
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "Theme" ] _sections_unfolded = [ "Theme", "slot", "slot/1" ]
[node name="Label1" type="Label" parent="." index="0"] [node name="OptionButton" type="OptionButton" parent="." index="0"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -57,8 +63,36 @@ anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 16.0 margin_left = 16.0
margin_top = 24.0 margin_top = 24.0
margin_right = 74.0 margin_right = 143.0
margin_bottom = 38.0 margin_bottom = 44.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
focus_mode = 2
mouse_filter = 0
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
toggle_mode = false
action_mode = 0
enabled_focus_mode = 2
shortcut = null
group = null
text = "Normal"
flat = false
align = 0
items = [ "Normal", null, false, -1, null ]
selected = 0
[node name="Label1" type="Label" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 44.0
margin_right = 143.0
margin_bottom = 58.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 2 mouse_filter = 2
@ -70,16 +104,16 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 max_lines_visible = -1
[node name="Label2" type="Label" parent="." index="1"] [node name="Label2" type="Label" parent="." index="2"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 16.0 margin_left = 16.0
margin_top = 38.0 margin_top = 59.0
margin_right = 74.0 margin_right = 143.0
margin_bottom = 52.0 margin_bottom = 73.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 2 mouse_filter = 2
@ -91,30 +125,69 @@ percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 max_lines_visible = -1
[node name="amount" type="LineEdit" parent="." index="2"] [node name="HBoxContainer" type="HBoxContainer" parent="." index="3"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 16.0 margin_left = 16.0
margin_top = 53.0 margin_top = 74.0
margin_right = 74.0 margin_right = 143.0
margin_bottom = 77.0 margin_bottom = 98.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
focus_mode = 2 mouse_filter = 1
mouse_filter = 0 mouse_default_cursor_shape = 0
mouse_default_cursor_shape = 1
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
text = "0.5" alignment = 0
focus_mode = 2
context_menu_enabled = true [node name="Label3" type="Label" parent="HBoxContainer" index="0"]
placeholder_alpha = 0.6
caret_blink = false anchor_left = 0.0
caret_blink_speed = 0.65 anchor_top = 0.0
caret_position = 0 anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 5.0
margin_right = 49.0
margin_bottom = 19.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "Opacity"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="amount" type="SpinBox" parent="HBoxContainer" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 53.0
margin_right = 127.0
margin_bottom = 24.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 0
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
min_value = 0.0
max_value = 1.0
step = 0.05
page = 0.0
value = 0.5
exp_edit = false
rounded = false
editable = true
prefix = ""
suffix = ""
[connection signal="close_request" from="." to="." method="queue_free"] [connection signal="close_request" from="." to="." method="queue_free"]

Binary file not shown.

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/experiment.hdr-d18e99e31a5e03809d487620198f72b4.stex"
[deps]
source_file="res://addons/procedural_material/panoramas/experiment.hdr"
dest_files=[ "res://.import/experiment.hdr-d18e99e31a5e03809d487620198f72b4.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/lobby.hdr-6fc8fec9aa03ce8405278cd0e68f7a42.stex"
[deps]
source_file="res://addons/procedural_material/panoramas/lobby.hdr"
dest_files=[ "res://.import/lobby.hdr-6fc8fec9aa03ce8405278cd0e68f7a42.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/night.hdr-b83487dc308f39913d6b85bbf9e8feb0.stex"
[deps]
source_file="res://addons/procedural_material/panoramas/night.hdr"
dest_files=[ "res://.import/night.hdr-b83487dc308f39913d6b85bbf9e8feb0.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/park.hdr-1e56c84521c4230f03b191409247d136.stex"
[deps]
source_file="res://addons/procedural_material/panoramas/park.hdr"
dest_files=[ "res://.import/park.hdr-1e56c84521c4230f03b191409247d136.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/schelde.hdr-b680943616a80a290fb3e52fcaf638d7.stex"
[deps]
source_file="res://addons/procedural_material/panoramas/schelde.hdr"
dest_files=[ "res://.import/schelde.hdr-b680943616a80a290fb3e52fcaf638d7.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@ -28,9 +28,9 @@ const MENU = [
func _ready(): func _ready():
# Duplicate the material we'll modify and store the shaders # Duplicate the material we'll modify and store the shaders
preview_material = $Preview/ViewportContainer/MaterialPreview.material preview_material = $Preview/Preview.preview_material
$Preview/ViewportContainer/SelectedPreview.material = $Preview/ViewportContainer/SelectedPreview.material.duplicate(true) $Preview/Preview/SelectedPreview.material = $Preview/Preview/SelectedPreview.material.duplicate(true)
texture_preview_material = $Preview/ViewportContainer/SelectedPreview.material texture_preview_material = $Preview/Preview/SelectedPreview.material
$GraphEdit.add_valid_connection_type(0, 0) $GraphEdit.add_valid_connection_type(0, 0)
# create or update popup menu # create or update popup menu
if popup_menu != null: if popup_menu != null:

View File

@ -3,149 +3,16 @@
[ext_resource path="res://addons/procedural_material/pm_editor.gd" type="Script" id=1] [ext_resource path="res://addons/procedural_material/pm_editor.gd" type="Script" id=1]
[ext_resource path="res://addons/procedural_material/graph_edit.gd" type="Script" id=2] [ext_resource path="res://addons/procedural_material/graph_edit.gd" type="Script" id=2]
[ext_resource path="res://addons/procedural_material/nodes/material.tscn" type="PackedScene" id=3] [ext_resource path="res://addons/procedural_material/nodes/material.tscn" type="PackedScene" id=3]
[ext_resource path="res://addons/procedural_material/material_preview.gd" type="Script" id=4] [ext_resource path="res://addons/procedural_material/preview.gd" type="Script" id=4]
[ext_resource path="res://addons/procedural_material/panoramas/experiment.hdr" type="Texture" id=5]
[sub_resource type="ProceduralSky" id=1] [sub_resource type="Animation" id=1]
radiance_size = 4
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
sky_curve = 0.25
sky_energy = 1.0
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
ground_curve = 0.01
ground_energy = 1.0
sun_color = Color( 1, 1, 1, 1 )
sun_latitude = 35.0
sun_longitude = 0.0
sun_angle_min = 1.0
sun_angle_max = 100.0
sun_curve = 0.05
sun_energy = 16.0
texture_size = 2
[sub_resource type="Environment" id=2]
background_mode = 2
background_sky = SubResource( 1 )
background_sky_custom_fov = 0.0
background_color = Color( 0, 0, 0, 1 )
background_energy = 1.0
background_canvas_max_layer = 0
ambient_light_color = Color( 0, 0, 0, 1 )
ambient_light_energy = 1.0
ambient_light_sky_contribution = 1.0
fog_enabled = false
fog_color = Color( 0.5, 0.6, 0.7, 1 )
fog_sun_color = Color( 1, 0.9, 0.7, 1 )
fog_sun_amount = 0.0
fog_depth_enabled = true
fog_depth_begin = 10.0
fog_depth_curve = 1.0
fog_transmit_enabled = false
fog_transmit_curve = 1.0
fog_height_enabled = false
fog_height_min = 0.0
fog_height_max = 100.0
fog_height_curve = 1.0
tonemap_mode = 0
tonemap_exposure = 1.0
tonemap_white = 1.0
auto_exposure_enabled = false
auto_exposure_scale = 0.4
auto_exposure_min_luma = 0.05
auto_exposure_max_luma = 8.0
auto_exposure_speed = 0.5
ss_reflections_enabled = false
ss_reflections_max_steps = 64
ss_reflections_fade_in = 0.15
ss_reflections_fade_out = 2.0
ss_reflections_depth_tolerance = 0.2
ss_reflections_roughness = true
ssao_enabled = false
ssao_radius = 1.0
ssao_intensity = 1.0
ssao_radius2 = 0.0
ssao_intensity2 = 1.0
ssao_bias = 0.01
ssao_light_affect = 0.0
ssao_color = Color( 0, 0, 0, 1 )
ssao_quality = 0
ssao_blur = 3
ssao_edge_sharpness = 4.0
dof_blur_far_enabled = false
dof_blur_far_distance = 10.0
dof_blur_far_transition = 5.0
dof_blur_far_amount = 0.1
dof_blur_far_quality = 1
dof_blur_near_enabled = false
dof_blur_near_distance = 2.0
dof_blur_near_transition = 1.0
dof_blur_near_amount = 0.1
dof_blur_near_quality = 1
glow_enabled = false
glow_levels/1 = false
glow_levels/2 = false
glow_levels/3 = true
glow_levels/4 = false
glow_levels/5 = true
glow_levels/6 = false
glow_levels/7 = false
glow_intensity = 0.8
glow_strength = 1.0
glow_bloom = 0.0
glow_blend_mode = 2
glow_hdr_threshold = 1.0
glow_hdr_scale = 2.0
glow_bicubic_upscale = false
adjustment_enabled = false
adjustment_brightness = 1.0
adjustment_contrast = 1.0
adjustment_saturation = 1.0
_sections_unfolded = [ "Background" ]
[sub_resource type="World" id=3]
environment = SubResource( 2 )
[sub_resource type="CubeMesh" id=4]
custom_aabb = AABB( 0, 0, 0, 0, 0, 0 )
size = Vector3( 2, 2, 2 )
subdivide_width = 0
subdivide_height = 0
subdivide_depth = 0
[sub_resource type="Shader" id=5]
code = "shader_type spatial;
void fragment() {
ALBEDO=vec3(0.5);
}
"
[sub_resource type="ShaderMaterial" id=6]
render_priority = 0
shader = SubResource( 5 )
[sub_resource type="CylinderMesh" id=7]
custom_aabb = AABB( 0, 0, 0, 0, 0, 0 )
top_radius = 1.0
bottom_radius = 1.0
height = 2.0
radial_segments = 64
rings = 4
[sub_resource type="Animation" id=8]
length = 1.0 length = 1.0
loop = true loop = true
step = 0.1 step = 0.1
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/path = NodePath("Objects:rotation_degrees") tracks/0/path = NodePath("MaterialPreview/Objects:rotation_degrees")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false tracks/0/imported = false
@ -157,31 +24,45 @@ tracks/0/keys = {
"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 360, 0 ) ] "values": [ Vector3( 0, 0, 0 ), Vector3( 0, 360, 0 ) ]
} }
[sub_resource type="ProceduralSky" id=9] [sub_resource type="CubeMesh" id=2]
radiance_size = 4 custom_aabb = AABB( 0, 0, 0, 0, 0, 0 )
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) size = Vector3( 2, 2, 2 )
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) subdivide_width = 0
sky_curve = 0.25 subdivide_height = 0
sky_energy = 1.0 subdivide_depth = 0
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
ground_curve = 0.01
ground_energy = 1.0
sun_color = Color( 1, 1, 1, 1 )
sun_latitude = 35.0
sun_longitude = 0.0
sun_angle_min = 1.0
sun_angle_max = 100.0
sun_curve = 0.05
sun_energy = 16.0
texture_size = 2
_sections_unfolded = [ "Sky" ]
[sub_resource type="Environment" id=10] [sub_resource type="Shader" id=3]
code = "shader_type spatial;
void fragment() {
ALBEDO=vec3(0.5);
}
"
[sub_resource type="ShaderMaterial" id=4]
render_priority = 0
shader = SubResource( 3 )
[sub_resource type="CylinderMesh" id=5]
custom_aabb = AABB( 0, 0, 0, 0, 0, 0 )
top_radius = 1.0
bottom_radius = 1.0
height = 2.0
radial_segments = 64
rings = 4
[sub_resource type="PanoramaSky" id=6]
radiance_size = 2
panorama = ExtResource( 5 )
[sub_resource type="Environment" id=7]
background_mode = 2 background_mode = 2
background_sky = SubResource( 9 ) background_sky = SubResource( 6 )
background_sky_custom_fov = 0.0 background_sky_custom_fov = 0.0
background_color = Color( 0, 0, 0, 1 ) background_color = Color( 0, 0, 0, 1 )
background_energy = 1.0 background_energy = 1.0
@ -258,7 +139,7 @@ adjustment_contrast = 1.0
adjustment_saturation = 1.0 adjustment_saturation = 1.0
_sections_unfolded = [ "Background" ] _sections_unfolded = [ "Background" ]
[sub_resource type="Shader" id=11] [sub_resource type="Shader" id=8]
code = "shader_type canvas_item; code = "shader_type canvas_item;
@ -268,12 +149,98 @@ void fragment() {
" "
_sections_unfolded = [ "Resource" ] _sections_unfolded = [ "Resource" ]
[sub_resource type="ShaderMaterial" id=12] [sub_resource type="ShaderMaterial" id=9]
render_priority = 0 render_priority = 0
shader = SubResource( 11 ) shader = SubResource( 8 )
[sub_resource type="Shader" id=13] [sub_resource type="Animation" id=10]
resource_name = "maximize"
length = 0.2
loop = false
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath("SelectedPreview:rect_position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.2 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 2, 194 ), Vector2( 2, 2 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("SelectedPreview:rect_size")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.2 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 64, 64 ), Vector2( 256, 256 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("MaterialPreview:render_target_update_mode")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0.2 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ 0 ]
}
[sub_resource type="Animation" id=11]
resource_name = "minimize"
length = 0.2
loop = false
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath("SelectedPreview:rect_position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.2 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 2, 2 ), Vector2( 2, 194 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("SelectedPreview:rect_size")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.2 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 256, 256 ), Vector2( 64, 64 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("MaterialPreview:render_target_update_mode")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ 3 ]
}
[sub_resource type="Shader" id=12]
code = "shader_type canvas_item; code = "shader_type canvas_item;
@ -394,12 +361,12 @@ COLOR = vec4(Colorize3_0_rgb, 1.0);
} }
" "
[sub_resource type="ShaderMaterial" id=14] [sub_resource type="ShaderMaterial" id=13]
render_priority = 0 render_priority = 0
shader = SubResource( 13 ) shader = SubResource( 12 )
[node name="ProceduralMaterialEditor" type="MarginContainer" index="0"] [node name="ProceduralMaterialEditor" type="MarginContainer"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -413,7 +380,6 @@ size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
custom_constants/margin_left = 0 custom_constants/margin_left = 0
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "custom_constants" ]
[node name="GraphEdit" type="GraphEdit" parent="." index="0"] [node name="GraphEdit" type="GraphEdit" parent="." index="0"]
@ -430,7 +396,7 @@ mouse_filter = 0
mouse_default_cursor_shape = 0 mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
right_disconnects = false right_disconnects = true
scroll_offset = Vector2( 0, 0 ) scroll_offset = Vector2( 0, 0 )
snap_distance = 20 snap_distance = 20
use_snap = false use_snap = false
@ -486,17 +452,17 @@ size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
_sections_unfolded = [ "Mouse" ] _sections_unfolded = [ "Mouse" ]
[node name="ViewportContainer" type="ViewportContainer" parent="Preview" index="0"] [node name="Preview" type="ViewportContainer" parent="Preview" index="0"]
anchor_left = 1.0 anchor_left = 1.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = -302.0 margin_left = -274.0
margin_top = 7.0 margin_top = 3.0
margin_right = -14.0 margin_right = -14.0
margin_bottom = 301.0 margin_bottom = 263.0
rect_min_size = Vector2( 256, 256 ) rect_min_size = Vector2( 260, 260 )
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 2 mouse_filter = 2
@ -505,14 +471,26 @@ size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
stretch = false stretch = false
stretch_shrink = 1 stretch_shrink = 1
script = ExtResource( 4 )
_sections_unfolded = [ "Anchor", "Grow Direction", "Margin", "Mouse", "Rect" ] _sections_unfolded = [ "Anchor", "Grow Direction", "Margin", "Mouse", "Rect" ]
[node name="MaterialPreview" type="Viewport" parent="Preview/ViewportContainer" index="0"] [node name="ObjectRotate" type="AnimationPlayer" parent="Preview/Preview" index="0"]
root_node = NodePath("..")
autoplay = "rotate"
playback_process_mode = 1
playback_default_blend_time = 0.0
playback_speed = 0.1
anims/rotate = SubResource( 1 )
blend_times = [ ]
_sections_unfolded = [ "Playback Options" ]
[node name="MaterialPreview" type="Viewport" parent="Preview/Preview" index="1"]
arvr = false arvr = false
size = Vector2( 288, 294 ) size = Vector2( 260, 260 )
own_world = true own_world = true
world = SubResource( 3 ) world = null
transparent_bg = false transparent_bg = false
msaa = 0 msaa = 0
hdr = true hdr = true
@ -520,7 +498,7 @@ disable_3d = false
usage = 2 usage = 2
debug_draw = 0 debug_draw = 0
render_target_v_flip = false render_target_v_flip = false
render_target_clear_mode = 0 render_target_clear_mode = 1
render_target_update_mode = 3 render_target_update_mode = 3
audio_listener_enable_2d = false audio_listener_enable_2d = false
audio_listener_enable_3d = false audio_listener_enable_3d = false
@ -532,15 +510,14 @@ shadow_atlas_quad_0 = 2
shadow_atlas_quad_1 = 2 shadow_atlas_quad_1 = 2
shadow_atlas_quad_2 = 3 shadow_atlas_quad_2 = 3
shadow_atlas_quad_3 = 4 shadow_atlas_quad_3 = 4
script = ExtResource( 4 ) _sections_unfolded = [ "GUI", "Render Target" ]
_sections_unfolded = [ "GUI", "Render Target", "Rendering" ]
[node name="Objects" type="Spatial" parent="Preview/ViewportContainer/MaterialPreview" index="0"] [node name="Objects" type="Spatial" parent="Preview/Preview/MaterialPreview" index="0"]
transform = Transform( -0.972392, 0, 0.233345, 0, 1, 0, -0.233345, 0, -0.972392, 0, 0, 0 ) transform = Transform( -0.0548036, 0, 0.998495, 0, 1, 0, -0.998495, 0, -0.0548036, 0, 0, 0 )
_sections_unfolded = [ "Transform" ] _sections_unfolded = [ "Transform" ]
[node name="Cube" type="MeshInstance" parent="Preview/ViewportContainer/MaterialPreview/Objects" index="0"] [node name="Cube" type="MeshInstance" parent="Preview/Preview/MaterialPreview/Objects" index="0"]
layers = 1 layers = 1
material_override = null material_override = null
@ -551,12 +528,12 @@ lod_min_distance = 0.0
lod_min_hysteresis = 0.0 lod_min_hysteresis = 0.0
lod_max_distance = 0.0 lod_max_distance = 0.0
lod_max_hysteresis = 0.0 lod_max_hysteresis = 0.0
mesh = SubResource( 4 ) mesh = SubResource( 2 )
skeleton = NodePath("..") skeleton = NodePath("..")
material/0 = SubResource( 6 ) material/0 = SubResource( 4 )
_sections_unfolded = [ "Geometry", "Transform", "material" ] _sections_unfolded = [ "Geometry", "Transform", "material" ]
[node name="Cylinder" type="MeshInstance" parent="Preview/ViewportContainer/MaterialPreview/Objects" index="1"] [node name="Cylinder" type="MeshInstance" parent="Preview/Preview/MaterialPreview/Objects" index="1"]
visible = false visible = false
layers = 1 layers = 1
@ -568,23 +545,12 @@ lod_min_distance = 0.0
lod_min_hysteresis = 0.0 lod_min_hysteresis = 0.0
lod_max_distance = 0.0 lod_max_distance = 0.0
lod_max_hysteresis = 0.0 lod_max_hysteresis = 0.0
mesh = SubResource( 7 ) mesh = SubResource( 5 )
skeleton = NodePath("..") skeleton = NodePath("..")
material/0 = SubResource( 6 ) material/0 = SubResource( 4 )
_sections_unfolded = [ "Geometry", "Transform", "material" ] _sections_unfolded = [ "Geometry", "Transform", "material" ]
[node name="AnimationPlayer" type="AnimationPlayer" parent="Preview/ViewportContainer/MaterialPreview" index="1"] [node name="OmniLight" type="OmniLight" parent="Preview/Preview/MaterialPreview" index="1"]
root_node = NodePath("..")
autoplay = "rotate"
playback_process_mode = 1
playback_default_blend_time = 0.0
playback_speed = 0.1
anims/rotate = SubResource( 8 )
blend_times = [ ]
_sections_unfolded = [ "Playback Options" ]
[node name="OmniLight" type="OmniLight" parent="Preview/ViewportContainer/MaterialPreview" index="2"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.04729, 1.80471, -2.51024 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.04729, 1.80471, -2.51024 )
layers = 1 layers = 1
@ -607,12 +573,12 @@ omni_shadow_mode = 1
omni_shadow_detail = 1 omni_shadow_detail = 1
_sections_unfolded = [ "Shadow" ] _sections_unfolded = [ "Shadow" ]
[node name="Camera" type="Camera" parent="Preview/ViewportContainer/MaterialPreview" index="3"] [node name="Camera" type="Camera" parent="Preview/Preview/MaterialPreview" index="2"]
transform = Transform( 1, 0, 0, 0, 0.766044, 0.642787, 0, -0.642787, 0.766044, 0, 1.83022, 2.2549 ) transform = Transform( 1, 0, 0, 0, 0.766044, 0.642787, 0, -0.642787, 0.766044, 0, 1.83022, 2.2549 )
keep_aspect = 1 keep_aspect = 1
cull_mask = 1048575 cull_mask = 1048575
environment = SubResource( 10 ) environment = SubResource( 7 )
h_offset = 0.0 h_offset = 0.0
v_offset = 0.0 v_offset = 0.0
doppler_tracking = 0 doppler_tracking = 0
@ -624,26 +590,69 @@ near = 0.05
far = 100.0 far = 100.0
_sections_unfolded = [ "Transform" ] _sections_unfolded = [ "Transform" ]
[node name="SelectedPreview" type="ColorRect" parent="Preview/ViewportContainer" index="1"] [node name="WorldEnvironment" type="WorldEnvironment" parent="Preview/Preview/MaterialPreview" index="3"]
material = SubResource( 12 ) environment = SubResource( 7 )
[node name="Environment" type="OptionButton" parent="Preview/Preview" index="2"]
anchor_left = 1.0
anchor_top = 0.0
anchor_right = 1.0
anchor_bottom = 0.0
margin_left = -112.0
margin_top = 2.0
margin_right = -2.0
margin_bottom = 22.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
focus_mode = 2
mouse_filter = 0
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
toggle_mode = false
action_mode = 0
enabled_focus_mode = 2
shortcut = null
group = null
text = "Park"
flat = false
align = 0
items = [ "Experiment", null, false, -1, null, "Lobby", null, false, -1, null, "Night", null, false, -1, null, "Park", null, false, -1, null, "Schelde", null, false, -1, null ]
selected = 3
[node name="SelectedPreview" type="ColorRect" parent="Preview/Preview" index="3"]
material = SubResource( 9 )
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 4.0 margin_left = 2.0
margin_top = 226.0 margin_top = 194.0
margin_right = 68.0 margin_right = 66.0
margin_bottom = 290.0 margin_bottom = 258.0
rect_min_size = Vector2( 64, 64 ) rect_min_size = Vector2( 64, 64 )
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 2 mouse_filter = 0
mouse_default_cursor_shape = 0 mouse_default_cursor_shape = 0
size_flags_horizontal = 8 size_flags_horizontal = 8
size_flags_vertical = 0 size_flags_vertical = 0
color = Color( 1, 1, 1, 1 ) color = Color( 1, 1, 1, 1 )
_sections_unfolded = [ "Material", "Mouse", "Rect" ] _sections_unfolded = [ "Material", "Mouse" ]
[node name="SelectedPreviewAnimation" type="AnimationPlayer" parent="Preview/Preview" index="4"]
root_node = NodePath("..")
autoplay = ""
playback_process_mode = 1
playback_default_blend_time = 0.0
playback_speed = 1.0
anims/maximize = SubResource( 10 )
anims/minimize = SubResource( 11 )
blend_times = [ ]
[node name="SaveViewport" type="Viewport" parent="." index="3"] [node name="SaveViewport" type="Viewport" parent="." index="3"]
@ -674,7 +683,7 @@ _sections_unfolded = [ "GUI", "Render Target" ]
[node name="ColorRect" type="ColorRect" parent="SaveViewport" index="0"] [node name="ColorRect" type="ColorRect" parent="SaveViewport" index="0"]
material = SubResource( 14 ) material = SubResource( 13 )
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
@ -707,4 +716,8 @@ autostart = false
[connection signal="timeout" from="GraphEdit/Timer" to="GraphEdit" method="do_send_changed_signal"] [connection signal="timeout" from="GraphEdit/Timer" to="GraphEdit" method="do_send_changed_signal"]
[connection signal="item_selected" from="Preview/Preview/Environment" to="Preview/Preview" method="_on_Environment_item_selected"]
[connection signal="gui_input" from="Preview/Preview/SelectedPreview" to="Preview/Preview" method="_on_SelectedPreview_gui_input"]

View File

@ -0,0 +1,28 @@
tool
extends ViewportContainer
var preview_material = null
var preview_maximized = false
const ENVIRONMENTS = [
"experiment", "lobby", "night", "park", "schelde"
]
func _ready():
preview_material = ShaderMaterial.new()
preview_material.shader = Shader.new()
preview_material.shader.set_code("shader_type spatial;\nvoid fragment() {\n ALBEDO=vec3(0.5);\n}\n")
$MaterialPreview/Objects/Cube.set_surface_material(0, preview_material)
$MaterialPreview/Objects/Cylinder.set_surface_material(0, preview_material)
$ObjectRotate.play("rotate")
func _on_SelectedPreview_gui_input(ev):
if ev is InputEventMouseButton && ev.button_index == 1 && ev.doubleclick:
if preview_maximized:
$SelectedPreviewAnimation.play("minimize")
else:
$SelectedPreviewAnimation.play("maximize")
preview_maximized = !preview_maximized
func _on_Environment_item_selected(id):
$MaterialPreview/WorldEnvironment.environment.background_sky.panorama = load("res://addons/procedural_material/panoramas/"+ENVIRONMENTS[id]+".hdr")

View File

@ -11,8 +11,14 @@ class GradientCursor:
rect_size = Vector2(WIDTH, 20) rect_size = Vector2(WIDTH, 20)
func _gui_input(ev): func _gui_input(ev):
if ev is InputEventMouseButton && ev.button_index == 1 && ev.doubleclick: if ev is InputEventMouseButton && ev.doubleclick:
if ev.button_index == 1:
get_parent().select_color(self) get_parent().select_color(self)
elif ev.button_index == 2 && get_parent().get_sorted_cursors().size() > 2:
var parent = get_parent()
parent.remove_child(self)
parent.update_shader()
queue_free()
elif ev is InputEventMouseMotion && (ev.button_mask & 1) != 0: elif ev is InputEventMouseMotion && (ev.button_mask & 1) != 0:
rect_position.x += ev.relative.x rect_position.x += ev.relative.x
rect_position.x = min(max(0, rect_position.x), get_parent().rect_size.x-rect_size.x) rect_position.x = min(max(0, rect_position.x), get_parent().rect_size.x-rect_size.x)
@ -46,7 +52,8 @@ func add_cursor(x, color):
func _gui_input(ev): func _gui_input(ev):
if ev is InputEventMouseButton && ev.button_index == 1 && ev.doubleclick && ev.position.y > 15: if ev is InputEventMouseButton && ev.button_index == 1 && ev.doubleclick && ev.position.y > 15:
add_cursor(ev.position.x, get_color(ev.position.x)) var p = max(0, min(ev.position.x, rect_size.x-GradientCursor.WIDTH))
add_cursor(p, get_color(p))
# Showing a color picker popup to change a cursor's color # Showing a color picker popup to change a cursor's color

View File

@ -5,18 +5,15 @@
[sub_resource type="Shader" id=1] [sub_resource type="Shader" id=1]
code = "shader_type canvas_item; code = "shader_type canvas_item;
vec3 gradient(float x) { vec3 gradient(float x) {
if (x < 0.2) { if (x < 0.000000000) {
return vec3(0.1); return vec3(0.000000000,0.000000000,0.000000000);
} else if (x < 0.8) { } else if (x < 1.000000000) {
return vec3(0.1)+(x-0.2)*vec3(0.7); return vec3(0.000000000,0.000000000,0.000000000)+x*vec3(1.000000000,1.000000000,1.000000000);
} }
return vec3(0.5); return vec3(1.000000000,1.000000000,1.000000000);
} }
void fragment() { COLOR = vec4(gradient((UV.x-0.041666667)*1.090909091), 1.0); }"
void fragment() { COLOR = vec4(gradient(UV.x), 1.0); }
"
[sub_resource type="ShaderMaterial" id=2] [sub_resource type="ShaderMaterial" id=2]

View File

@ -1 +1 @@
{"connections":[{"from":"Bricks","from_port":0,"to":"Warp","to_port":0},{"from":"Perlin","from_port":0,"to":"Warp","to_port":1},{"from":"Perlin2","from_port":0,"to":"Colorize2","to_port":0},{"from":"Perlin2","from_port":0,"to":"Colorize","to_port":0},{"from":"Colorize","from_port":0,"to":"Blend","to_port":0},{"from":"Colorize2","from_port":0,"to":"Blend","to_port":1},{"from":"Warp","from_port":0,"to":"Colorize3","to_port":0},{"from":"Colorize3","from_port":0,"to":"Blend","to_port":2},{"from":"Blend","from_port":0,"to":"Material","to_port":0},{"from":"Warp","from_port":0,"to":"NormalMap","to_port":0},{"from":"NormalMap","from_port":0,"to":"Material","to_port":1}],"nodes":[{"iterations":6,"name":"Perlin","node_position":{"x":254,"y":317},"persistance":0.35,"scale_x":4,"scale_y":4,"type":"perlin"},{"iterations":7,"name":"Perlin2","node_position":{"x":258,"y":-32},"persistance":0.9,"scale_x":8,"scale_y":8,"type":"perlin"},{"name":"Material","node_position":{"x":981,"y":-13},"type":"material"},{"amount":0.4,"name":"Blend","node_position":{"x":803,"y":-23.75},"type":"blend"},{"bevel":0.6,"columns":3,"mortar":0.05,"name":"Bricks","node_position":{"x":260,"y":132},"row_offset":0.5,"rows":6,"type":"bricks"},{"amount":0.5,"name":"Warp","node_position":{"x":504,"y":199.75},"type":"warp"},{"amount":0.5,"name":"NormalMap","node_position":{"x":820,"y":269},"type":"normal_map"},{"gradient":[{"b":0.001994,"g":0.150751,"pos":0,"r":0.382813},{"b":0.001994,"g":0.067447,"pos":1,"r":0.382813}],"name":"Colorize2","node_position":{"x":540,"y":46.25},"type":"colorize"},{"gradient":[{"b":0.299479,"g":0.299479,"pos":0,"r":0.299479},{"b":0.127604,"g":0.127604,"pos":1,"r":0.127604}],"name":"Colorize","node_position":{"x":540,"y":-18.75},"type":"colorize"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.072727,"r":1}],"name":"Colorize3","node_position":{"x":649,"y":136},"type":"colorize"}]} {"connections":[{"from":"Bricks","from_port":0,"to":"Warp","to_port":0},{"from":"Perlin","from_port":0,"to":"Warp","to_port":1},{"from":"Warp","from_port":0,"to":"NormalMap","to_port":0},{"from":"Perlin2","from_port":0,"to":"colorize_0","to_port":0},{"from":"Perlin2","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_1","from_port":0,"to":"blend_0","to_port":1},{"from":"Warp","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_0","to_port":2},{"from":"blend_0","from_port":0,"to":"transform_0","to_port":0},{"from":"transform_0","from_port":0,"to":"Material","to_port":0},{"from":"NormalMap","from_port":0,"to":"transform_1","to_port":0},{"from":"transform_1","from_port":0,"to":"Material","to_port":1}],"nodes":[{"iterations":7,"name":"Perlin2","node_position":{"x":258,"y":-32},"persistance":0.9,"scale_x":8,"scale_y":8,"type":"perlin"},{"bevel":0.6,"columns":6,"mortar":0.05,"name":"Bricks","node_position":{"x":260,"y":132},"row_offset":0.5,"rows":12,"type":"bricks"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":1,"r":1}],"name":"colorize_0","node_position":{"x":556.943665,"y":-32},"type":"colorize"},{"gradient":[{"b":0.002889,"g":0.102424,"pos":0,"r":0.184896},{"b":0,"g":0.19869,"pos":0.327273,"r":0.669271},{"b":0.019368,"g":0.060224,"pos":0.690909,"r":0.309896},{"b":0,"g":0.180135,"pos":1,"r":0.606771}],"name":"colorize_1","node_position":{"x":550.943665,"y":53},"type":"colorize"},{"amount":0.5,"name":"NormalMap","node_position":{"x":694,"y":297},"type":"normal_map"},{"iterations":6,"name":"Perlin","node_position":{"x":255,"y":322},"persistance":0.35,"scale_x":4,"scale_y":4,"type":"perlin"},{"amount":0.2,"name":"Warp","node_position":{"x":504,"y":199.75},"type":"warp"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.072727,"r":1}],"name":"colorize_2","node_position":{"x":639.943665,"y":152},"type":"colorize"},{"amount":0.5,"name":"blend_0","node_position":{"x":819.943726,"y":-33},"type":"blend"},{"name":"transform_0","node_position":{"x":938.779785,"y":129.75},"rotate":0,"scale":1,"type":"transform"},{"name":"transform_1","node_position":{"x":944.779785,"y":262.75},"rotate":0,"scale":1,"type":"transform"},{"name":"Material","node_position":{"x":1165,"y":171},"type":"material"}]}