mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
26720e74e9
Updated Transform so it accepts a greyscale input per parameter. For each pixel, the parameter is multiplied by 2*v-1 (v being the value of the input's pixel) which makes it possible to affect the strength of each transform using an input image. New effects such as whirl and color guided offsets are now possible. Added Decompose node (does the opposite of combine). Used another color for inputs/outputs that expect/generate a greyscale image.
36 lines
1.5 KiB
GDScript
36 lines
1.5 KiB
GDScript
tool
|
|
extends "res://addons/procedural_material/node_base.gd"
|
|
|
|
var amount = 0.0
|
|
|
|
func _ready():
|
|
set_slot(0, true, 0, Color(0.5, 0.5, 1), true, 0, Color(0.5, 0.5, 1))
|
|
set_slot(1, true, 0, Color(0.5, 0.5, 1), false, 0, Color(0.5, 0.5, 1))
|
|
initialize_properties([ $amount ])
|
|
|
|
func _get_shader_code(uv):
|
|
var rv = { defs="", code="" }
|
|
var src0 = get_source(0)
|
|
var src1 = get_source(1)
|
|
if src0 == null || src1 == null:
|
|
return rv
|
|
var variant_index = generated_variants.find(uv)
|
|
if variant_index == -1:
|
|
variant_index = generated_variants.size()
|
|
generated_variants.append(uv)
|
|
var src1_code0 = src1.get_shader_code("fract(%s+vec2(0.01, 0.0))" % uv)
|
|
var src1_code1 = src1.get_shader_code("fract(%s-vec2(0.01, 0.0))" % uv)
|
|
var src1_code2 = src1.get_shader_code("fract(%s+vec2(0.0, 0.01))" % uv)
|
|
var src1_code3 = src1.get_shader_code("fract(%s-vec2(0.0, 0.01))" % uv)
|
|
rv.defs = src1_code0.defs
|
|
rv.code = src1_code0.code+src1_code1.code+src1_code2.code+src1_code3.code
|
|
rv.code += "vec2 %s_%d_uv = %s+%.9f*vec2((%s)-(%s), (%s)-(%s));\n" % [ name, variant_index, uv, amount, src1_code0.f, src1_code1.f, src1_code2.f, src1_code3.f ]
|
|
var src0_code = src0.get_shader_code("%s_%d_uv" % [ name, variant_index ])
|
|
rv.defs += src0_code.defs
|
|
rv.code += src0_code.code
|
|
rv.code += "vec3 %s_%d_rgb = %s;\n" % [ name, variant_index, src0_code.rgb ]
|
|
rv.code += "float %s_%d_f = %s;\n" % [ name, variant_index, src0_code.f ]
|
|
rv.rgb = "%s_%d_rgb" % [ name, variant_index ]
|
|
rv.f = "%s_%d_f" % [ name, variant_index ]
|
|
return rv
|