From 879389f312b6f7107a6221c2c8e2990972b920b3 Mon Sep 17 00:00:00 2001 From: LMW Date: Sun, 10 May 2026 23:25:45 +0800 Subject: [PATCH] Added 32 bit option for Morphology and Emboss node --- addons/material_maker/nodes/emboss2.mmg | 282 ++++++++ addons/material_maker/nodes/morphology3.mmg | 650 ++++++++++++++++++ material_maker/doc/node_filter_emboss.rst | 4 + .../doc/node_transform_morphology.rst | 4 + material_maker/library/base.json | 8 +- 5 files changed, 944 insertions(+), 4 deletions(-) create mode 100644 addons/material_maker/nodes/emboss2.mmg create mode 100644 addons/material_maker/nodes/morphology3.mmg diff --git a/addons/material_maker/nodes/emboss2.mmg b/addons/material_maker/nodes/emboss2.mmg new file mode 100644 index 000000000..17b3d0994 --- /dev/null +++ b/addons/material_maker/nodes/emboss2.mmg @@ -0,0 +1,282 @@ +{ + "connections": [ + { + "from": "598", + "from_port": 0, + "to": "gen_outputs", + "to_port": 0 + }, + { + "from": "gen_inputs", + "from_port": 0, + "to": "buffer_2", + "to_port": 0 + }, + { + "from": "buffer_2", + "from_port": 0, + "to": "598", + "to_port": 0 + } + ], + "label": "Emboss", + "longdesc": "Creates highlights and shadows from an input heightmap", + "name": "emboss2", + "node_position": { + "x": 0, + "y": 0 + }, + "nodes": [ + { + "name": "598", + "node_position": { + "x": -72.5796051025391, + "y": -454.73828125 + }, + "parameters": { + "amount": 5.0, + "angle": 0.0, + "size": 9.0, + "width": 1.0 + }, + "seed": 24130.0, + "shader_model": { + "code": "", + "global": "", + "includes": [ + "" + ], + "inputs": [ + { + "default": "0.0", + "function": true, + "label": "", + "name": "in", + "type": "f" + } + ], + "instance": [ + "float $(name)_fct(vec2 uv) {", + "\tfloat pixels = max(1.0, $width);", + "\tfloat e = 1.0/$size;", + "\tfloat rv = 0.0;", + "\tfor (float dx = -pixels; dx <= pixels; dx += 1.0) {", + "\t\tfor (float dy = -pixels; dy <= pixels; dy += 1.0) {", + "\t\t\tif (abs(dx) > 0.5 || abs(dy) > 0.5) {", + "\t\t\t\trv += $in(uv+e*vec2(dx, dy))*cos(atan(dy, dx)-$angle*3.14159265359/180.0)/length(vec2(dx, dy));", + "\t\t\t}", + "\t\t}", + "\t}", + "\treturn $amount*rv/pixels+0.5;", + "}" + ], + "name": "Emboss", + "outputs": [ + { + "f": "$(name)_fct($uv)", + "type": "f" + } + ], + "parameters": [ + { + "default": 9.0, + "first": 6.0, + "label": "Size", + "last": 12.0, + "name": "size", + "type": "size" + }, + { + "control": "None", + "default": 0.0, + "label": "Angle", + "max": 180.0, + "min": -180.0, + "name": "angle", + "step": 0.1, + "type": "float" + }, + { + "control": "None", + "default": 1.0, + "label": "Amount", + "max": 10.0, + "min": 0.0, + "name": "amount", + "step": 0.1, + "type": "float" + }, + { + "control": "None", + "default": 1.0, + "label": "Width", + "max": 5.0, + "min": 1.0, + "name": "width", + "step": 1.0, + "type": "float" + } + ] + }, + "type": "shader" + }, + { + "name": "gen_inputs", + "node_position": { + "x": -461.57958984375, + "y": -574.119140625 + }, + "parameters": { + + }, + "ports": [ + { + "group_size": 0.0, + "longdesc": "The input height map", + "name": "port0", + "shortdesc": "Input", + "type": "f" + } + ], + "seed": 2287.0, + "type": "ios" + }, + { + "name": "gen_outputs", + "node_position": { + "x": 187.506225585938, + "y": -557.119140625 + }, + "parameters": { + + }, + "ports": [ + { + "group_size": 0.0, + "longdesc": "The generated image", + "name": "port0", + "shortdesc": "Output", + "type": "f" + } + ], + "seed": -47498.0, + "type": "ios" + }, + { + "name": "gen_parameters", + "node_position": { + "x": -176.036682128906, + "y": -878.5 + }, + "parameters": { + "param0": 9.0, + "param1": 0.0, + "param2": 5.0, + "param3": 1.0, + "param4": null + }, + "seed": 32120.0, + "type": "remote", + "widgets": [ + { + "label": "Size", + "linked_widgets": [ + { + "node": "598", + "widget": "size" + }, + { + "node": "buffer_2", + "widget": "size" + } + ], + "longdesc": "The resolution of the input image", + "name": "param0", + "shortdesc": "Size", + "type": "linked_control" + }, + { + "label": "Angle", + "linked_widgets": [ + { + "node": "598", + "widget": "angle" + } + ], + "longdesc": "The angle of the simulated light", + "name": "param1", + "shortdesc": "Angle", + "type": "linked_control" + }, + { + "label": "Amount", + "linked_widgets": [ + { + "node": "598", + "widget": "amount" + } + ], + "longdesc": "The strength of the emboss effect", + "name": "param2", + "shortdesc": "Strength", + "type": "linked_control" + }, + { + "label": "Width", + "linked_widgets": [ + { + "node": "598", + "widget": "width" + } + ], + "longdesc": "The width (in pixels) of the area sampled for each pixel", + "name": "param3", + "shortdesc": "Width", + "type": "linked_control" + }, + { + "label": "32 Bits", + "linked_widgets": [ + { + "node": "buffer_2", + "widget": "f32" + } + ], + "longdesc": "Use 32-bit buffer when sampling the input. Reduces banding artifacts but could result in higher video memory usage.", + "name": "param4", + "type": "linked_control" + } + ] + }, + { + "name": "buffer_2", + "node_position": { + "x": -82.6366882324219, + "y": -637.0 + }, + "parameters": { + "f32": false, + "filter": true, + "mipmap": true, + "size": 9.0 + }, + "seed_int": 0, + "type": "buffer", + "version": 2 + } + ], + "parameters": { + "param0": 9.0, + "param1": 0.0, + "param2": 5.0, + "param3": 1.0, + "param4": null + }, + "scroll_offset": { + "x": -432.636688232422, + "y": -918.0 + }, + "seed_int": 0, + "shortdesc": "Emboss", + "type": "graph" +} \ No newline at end of file diff --git a/addons/material_maker/nodes/morphology3.mmg b/addons/material_maker/nodes/morphology3.mmg new file mode 100644 index 000000000..ed29e475f --- /dev/null +++ b/addons/material_maker/nodes/morphology3.mmg @@ -0,0 +1,650 @@ +{ + "connections": [ + { + "from": "buffer", + "from_port": 0, + "to": "invert", + "to_port": 0 + }, + { + "from": "buffer", + "from_port": 0, + "to": "switch", + "to_port": 0 + }, + { + "from": "invert", + "from_port": 0, + "to": "switch", + "to_port": 1 + }, + { + "from": "switch", + "from_port": 0, + "to": "shape_2", + "to_port": 0 + }, + { + "from": "shape_3", + "from_port": 0, + "to": "gen_outputs", + "to_port": 0 + }, + { + "from": "gen_inputs", + "from_port": 0, + "to": "buffer", + "to_port": 0 + }, + { + "from": "shape_2", + "from_port": 0, + "to": "uniform_greyscale", + "to_port": 0 + }, + { + "from": "buffer_3", + "from_port": 0, + "to": "uniform_greyscale_2", + "to_port": 0 + }, + { + "from": "uniform_greyscale", + "from_port": 0, + "to": "buffer_3", + "to_port": 0 + }, + { + "from": "uniform_greyscale_2", + "from_port": 0, + "to": "shape_3", + "to_port": 0 + }, + { + "from": "shape_4", + "from_port": 0, + "to": "uniform_greyscale_3", + "to_port": 0 + }, + { + "from": "buffer_2", + "from_port": 0, + "to": "uniform_greyscale_4", + "to_port": 0 + }, + { + "from": "uniform_greyscale_3", + "from_port": 0, + "to": "buffer_2", + "to_port": 0 + }, + { + "from": "switch", + "from_port": 0, + "to": "shape_4", + "to_port": 0 + }, + { + "from": "buffer", + "from_port": 0, + "to": "shape_3", + "to_port": 2 + }, + { + "from": "uniform_greyscale_4", + "from_port": 0, + "to": "shape_3", + "to_port": 1 + } + ], + "label": "Morphology", + "longdesc": "Applies a morphology dilation or erosion on its input", + "name": "morphology3", + "node_position": { + "x": 0, + "y": 0 + }, + "nodes": [ + { + "name": "buffer", + "node_position": { + "x": -800.0, + "y": 60.0 + }, + "parameters": { + "f32": false, + "filter": false, + "mipmap": false, + "size": 10.0 + }, + "seed_int": 0, + "type": "buffer", + "version": 2 + }, + { + "name": "invert", + "node_position": { + "x": -460.0, + "y": 60.0 + }, + "parameters": { + + }, + "seed_int": 0, + "type": "invert" + }, + { + "name": "shape_2", + "node_position": { + "x": -99.0, + "y": -45.0 + }, + "parameters": { + "d": 0.05, + "s": 10.0 + }, + "seed_int": 0, + "shader_model": { + "code": "", + "global": "", + "inputs": [ + { + "default": "0.0", + "function": true, + "label": "", + "name": "in", + "type": "f" + } + ], + "instance": [ + "vec2 $(name)_dilate(vec2 uv) {", + "\tfloat e = 1.0/$s;", + "\tfloat dx = floor($d/e)*e;", + "\tfloat v = 0.0;", + "\tfloat bestuv_x = uv.x;", + "\tfor (float x = 0.0; x < dx; x += e) {", + "\t\tfloat c = $in(uv+vec2(x, 0.0));", + "\t\tif (c > v) {", + "\t\t\tv = c;", + "\t\t\tbestuv_x = uv.x+x;", + "\t\t}", + "\t\tc = $in(uv-vec2(x, 0.0));", + "\t\tif (c > v) {", + "\t\t\tv = c;", + "\t\t\tbestuv_x = uv.x-x;", + "\t\t}", + "\t}", + "\treturn vec2(v, bestuv_x);", + "}" + ], + "name": "Morphology Dilation 1 X", + "outputs": [ + { + "rgb": "vec3($(name)_dilate($uv), 0.0)", + "type": "rgb" + } + ], + "parameters": [ + { + "default": 9.0, + "first": 6.0, + "label": "", + "last": 12.0, + "name": "s", + "type": "size" + }, + { + "control": "None", + "default": 0.1, + "label": "", + "max": 0.3, + "min": 0.0, + "name": "d", + "step": 0.01, + "type": "float" + } + ] + }, + "type": "shader" + }, + { + "name": "shape_3", + "node_position": { + "x": 37.0, + "y": 280.0 + }, + "parameters": { + "d": 0.05, + "s": 10.0 + }, + "seed_int": 0, + "shader_model": { + "code": "", + "global": "", + "inputs": [ + { + "default": "vec3(0.0)", + "function": true, + "label": "", + "name": "inx", + "type": "rgb" + }, + { + "default": "vec3(0.0)", + "function": true, + "label": "", + "name": "iny", + "type": "rgb" + }, + { + "default": "vec4(0.0)", + "label": "", + "name": "in2", + "type": "rgba" + } + ], + "instance": [ + "vec3 $(name)_dilate(vec2 uv) {", + "\tfloat e = 1.0/$s;", + "\tfloat dx = floor($d/e)*e;", + "\tfloat v = 0.0;", + "\tvec2 bestuv = uv;", + "\tfor (float x = 0.0; x < dx; x += e) {", + "\t\tvec2 input_dist = $inx(uv+vec2(0.0, x)).xy;", + "\t\tif (v < input_dist.x && $d >= length(vec2(input_dist.y-uv.x, x))) {", + "\t\t\tv = input_dist.x;", + "\t\t\tbestuv = vec2(input_dist.y, uv.y+x);", + "\t\t}", + "\t\tinput_dist = $inx(uv-vec2(0.0, x)).xy;", + "\t\tif (v < input_dist.x && $d >= length(vec2(input_dist.y-uv.x, x))) {", + "\t\t\tv = input_dist.x;", + "\t\t\tbestuv = vec2(input_dist.y, uv.y-x);", + "\t\t}", + "\t\tinput_dist = $iny(uv+vec2(x, 0.0)).xy;", + "\t\tif (v < input_dist.x && $d >= length(vec2(input_dist.y-uv.y, x))) {", + "\t\t\tv = input_dist.x;", + "\t\t\tbestuv = vec2(uv.x+x, input_dist.y);", + "\t\t}", + "\t\tinput_dist = $iny(uv-vec2(x, 0.0)).xy;", + "\t\tif (v < input_dist.x && $d >= length(vec2(input_dist.y-uv.y, x))) {", + "\t\t\tv = input_dist.x;", + "\t\t\tbestuv = vec2(uv.x-x, input_dist.y);", + "\t\t}", + "\t}", + "\treturn vec3(v, bestuv);", + "}" + ], + "name": "Morphology Dilation 2", + "outputs": [ + { + "rgba": "$in2(fract($(name)_dilate($uv).yz))", + "type": "rgba" + } + ], + "parameters": [ + { + "default": 9.0, + "first": 6.0, + "label": "", + "last": 12.0, + "name": "s", + "type": "size" + }, + { + "control": "None", + "default": 0.1, + "label": "", + "max": 0.3, + "min": 0.0, + "name": "d", + "step": 0.01, + "type": "float" + } + ] + }, + "type": "shader" + }, + { + "name": "uniform_greyscale", + "node_position": { + "x": -86.8777465820312, + "y": 39.6255493164062 + }, + "parameters": { + + }, + "seed_int": 0, + "type": "pack_2x32_to_4x16" + }, + { + "name": "buffer_3", + "node_position": { + "x": -86.0, + "y": 98.0 + }, + "parameters": { + "f32": false, + "filter": false, + "mipmap": false, + "size": 10.0 + }, + "seed_int": 0, + "type": "buffer", + "version": 2 + }, + { + "name": "uniform_greyscale_2", + "node_position": { + "x": -87.8777465820312, + "y": 212.625549316406 + }, + "parameters": { + + }, + "seed_int": 0, + "type": "pack_4x16_to_2x32" + }, + { + "name": "switch", + "node_position": { + "x": -300.0, + "y": -40.0 + }, + "parameters": { + "choices": 2.0, + "outputs": 1.0, + "source": 0.0 + }, + "seed_int": 0, + "type": "switch" + }, + { + "name": "gen_parameters", + "node_position": { + "x": -305.557006835938, + "y": -267.557006835938 + }, + "parameters": { + "distance": 0.05, + "f32": null, + "operation": 0.0, + "resolution": 10.0 + }, + "seed_int": 0, + "type": "remote", + "widgets": [ + { + "configurations": { + "Dilation": [ + { + "node": "switch", + "value": 0.0, + "widget": "source" + } + ], + "Erosion": [ + { + "node": "switch", + "value": 1.0, + "widget": "source" + } + ] + }, + "label": "", + "linked_widgets": [ + { + "node": "switch", + "widget": "source" + } + ], + "longdesc": "Morphology operation", + "name": "operation", + "shortdesc": "Operation", + "type": "config_control" + }, + { + "label": "", + "linked_widgets": [ + { + "node": "shape_2", + "widget": "s" + }, + { + "node": "shape_3", + "widget": "s" + }, + { + "node": "buffer", + "widget": "size" + }, + { + "node": "buffer_3", + "widget": "size" + }, + { + "node": "shape_4", + "widget": "s" + }, + { + "node": "buffer_2", + "widget": "size" + } + ], + "longdesc": "Resolution of the generated image", + "name": "resolution", + "shortdesc": "Resolution", + "type": "linked_control" + }, + { + "label": "", + "linked_widgets": [ + { + "node": "shape_2", + "widget": "d" + }, + { + "node": "shape_3", + "widget": "d" + }, + { + "node": "shape_4", + "widget": "d" + } + ], + "longdesc": "Distance of the operation", + "name": "distance", + "shortdesc": "Distance", + "type": "linked_control" + }, + { + "label": "32 Bits", + "linked_widgets": [ + { + "node": "buffer", + "widget": "f32" + }, + { + "node": "buffer_3", + "widget": "f32" + }, + { + "node": "buffer_2", + "widget": "f32" + } + ], + "longdesc": "Enable 32-bit buffers when sampling inputs. Reduces banding artifacts but could result in higher video memory usage.", + "name": "f32", + "shortdesc": "32 Bits", + "type": "linked_control" + } + ] + }, + { + "name": "gen_inputs", + "node_position": { + "x": -1221.203125, + "y": 65.2154541015625 + }, + "parameters": { + + }, + "ports": [ + { + "longdesc": "", + "name": "Input", + "shortdesc": "", + "type": "rgb" + } + ], + "seed_int": 0, + "type": "ios" + }, + { + "name": "gen_outputs", + "node_position": { + "x": 427.0, + "y": 80.5834579467773 + }, + "parameters": { + + }, + "ports": [ + { + "longdesc": "", + "name": "port0", + "shortdesc": "Output", + "type": "rgba" + } + ], + "seed_int": 0, + "type": "ios" + }, + { + "name": "uniform_greyscale_3", + "node_position": { + "x": 178.439910888672, + "y": 43.8627777099609 + }, + "parameters": { + + }, + "seed_int": 0, + "type": "pack_2x32_to_4x16" + }, + { + "name": "buffer_2", + "node_position": { + "x": 179.317657470703, + "y": 102.237228393555 + }, + "parameters": { + "f32": false, + "filter": false, + "mipmap": false, + "size": 10.0 + }, + "seed_int": 0, + "type": "buffer", + "version": 2 + }, + { + "name": "uniform_greyscale_4", + "node_position": { + "x": 178.439910888672, + "y": 215.862777709961 + }, + "parameters": { + + }, + "seed_int": 0, + "type": "pack_4x16_to_2x32" + }, + { + "name": "shape_4", + "node_position": { + "x": 166.317657470703, + "y": -40.7627716064453 + }, + "parameters": { + "d": 0.05, + "s": 10.0 + }, + "seed_int": 0, + "shader_model": { + "code": "", + "global": "", + "inputs": [ + { + "default": "0.0", + "function": true, + "label": "", + "name": "in", + "type": "f" + } + ], + "instance": [ + "vec2 $(name)_dilate(vec2 uv) {", + "\tfloat e = 1.0/$s;", + "\tfloat dy = floor($d/e)*e;", + "\tfloat v = 0.0;", + "\tfloat bestuv_y = uv.y;", + "\tfor (float y = 0.0; y < dy; y += e) {", + "\t\tfloat c = $in(uv+vec2(0.0, y));", + "\t\tif (c > v) {", + "\t\t\tv = c;", + "\t\t\tbestuv_y = uv.y+y;", + "\t\t}", + "\t\tc = $in(uv-vec2(0.0, y));", + "\t\tif (c > v) {", + "\t\t\tv = c;", + "\t\t\tbestuv_y = uv.y-y;", + "\t\t}", + "\t}", + "\treturn vec2(v, bestuv_y);", + "}" + ], + "name": "Morphology Dilation 1 Y", + "outputs": [ + { + "rgb": "vec3($(name)_dilate($uv), 0.0)", + "type": "rgb" + } + ], + "parameters": [ + { + "default": 9.0, + "first": 6.0, + "label": "", + "last": 12.0, + "name": "s", + "type": "size" + }, + { + "control": "None", + "default": 0.1, + "label": "", + "max": 0.3, + "min": 0.0, + "name": "d", + "step": 0.01, + "type": "float" + } + ] + }, + "type": "shader" + } + ], + "parameters": { + "distance": 0.05, + "f32": false, + "operation": 0.0, + "resolution": 10.0 + }, + "scroll_offset": { + "x": -314.431396484375, + "y": -458.824188232422 + }, + "seed_int": 0, + "shortdesc": "Morphology", + "type": "graph" +} diff --git a/material_maker/doc/node_filter_emboss.rst b/material_maker/doc/node_filter_emboss.rst index 3a2111010..636511f76 100644 --- a/material_maker/doc/node_filter_emboss.rst +++ b/material_maker/doc/node_filter_emboss.rst @@ -29,6 +29,10 @@ The **Emboss** node the following parameters: * the *width* of the emboss effect. +* whether *32 bit* buffer is used to sample the input. +Reduces banding artifacts but could result in higher video +memory usage. + Notes +++++ diff --git a/material_maker/doc/node_transform_morphology.rst b/material_maker/doc/node_transform_morphology.rst index dca497137..3c80818e7 100644 --- a/material_maker/doc/node_transform_morphology.rst +++ b/material_maker/doc/node_transform_morphology.rst @@ -29,6 +29,10 @@ The **Morphology** node has 3 parameters: * the *distance* by which (light or dark) areas are dilated. +* whether *32 Bit* buffers are enabled when sampling the input. +Reduces banding artifacts but could result in higher video +memory usage. + Example images ++++++++++++++ diff --git a/material_maker/library/base.json b/material_maker/library/base.json index ab9f0cd72..957e3e06b 100644 --- a/material_maker/library/base.json +++ b/material_maker/library/base.json @@ -2940,14 +2940,14 @@ "display_name": "Emboss", "icon": "filter_emboss", "icon_data": "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABLlJREFUeJztm8tS6kAQhv+EwyWGKi8LFFyQ7ERFd+rb+XrqTlFxl7BQvFSpVBHDRcJZWMOJMclMT4LxlHxVLoS59Z+eSc9MoxwfH0/xi1GzHkDWLATIegBZsxBgro2rKkzTlK5v2zam0/mu0X/m1XASw/10Oh0AgGEYqbQXJHUBarUaisXip89KpRIGgwGpneFw+Ol/27ZRLBZRrVYTj9FPalNA13WYpvnFeABSg+52u18+Gw6HsG0bb29vUmMMIxUPSMvdRXl8fASQzrRIJMB3Gx7Etm0AyYSQmgKVSoVs/NramnDZl5cXUtu2bePp6YlUh0EWoNlsQtd1ckfLy8vCZXu9Hrl9x3FweXlJrkcSoNFoQNd1lMtlckfzpt/vo9/v4+bmhlSPJAB7ij9NBGY8ALy+vpLqCgtwdHT06X8ZETY3N7ll7u7uSG36jWecnJwI108UB1BFKBQK3DKj0Ui4vTDjqQgJEHz6fkRFmE6nsCyLW84wDCiKwi3HM17UC7hxwMrKCrcR9laIGpCI4X7q9TqAf+/5IKJPvtfrcd8+XA/Y2tridgSEe0K32yUb78cwjC9hNMXt2+02t0ysAPv7+0IdMZgIruvCsizyBiiMYrEIwzCgaZrUnL+4uIj9PlYATdNInQGA53m4v78n1+Oxvr4OVaWv2byNU2SLcQtfHFdXV1L1RNje3paqF7cghgogozQAqVCUSrPZlKoXdbIUaunBwYFUJ0nfySLI7EMA4PT0NPTzUAE0TYOmaaGHG1FQoq+kUKbnaDTCYDCIXJBj4wBVVT8thOPxGO/v78KdzxNFUULdejKZYDweC7dDmuz5fH7mHZqmIZfLAfjep884PDwE8PHWYU94MBiQjAcSngiJxPbzJI04Y3ExkvUAsmYhQNYDyJqFAFkPIGt+vQCJ4oDRaITJZJLWWMiUSiV4nkc6RwxC8oDxeAzXdWd/zHjZrXMS2OZGVVWUSqXZXz6fJ7UT6wGe5325pv4pRG1vc7ncLEQHPrzU87zIdkI9gD1hivHf6QWUvUehUJh5RxihApydnUkN7DtuixzHkarHNk9BQgWIc5k4dnd3pepRaLVaUvWi7hoiF0HZLe7Ozo5UPRGur6+l6sVNz9i3gOu65M5UVcXGxga5Ho+Hhwcpz1xaWor9PlaA8/NzUmeO46Df70PTNJimGbnwUGB5Qa7rolwuk9eZvb292O+5cYDofTsz3k+1Wk2cJxhMlqKI0Gg0uGW4kaDIfXuY8X5M08R0Oo286wvS6XRiEySZALxTaJGsFKFIMG5B5BnPUBRFyBtEs0N5niAalyTaDIkazxCJ2SnnjDJrQhBhAYJeQDUeAG5vb7llarUaqc0wEShRKckDWPaWjPHzxC+CSD6DH5IA7Xb7xxnPYCKI5jMwyGtAq9WSiscpuX+UnEKGrutSobjUgQjL1aW845+fn4XLrq6ukgRLkiqb6ESIpb9klTOcebI0w7Is6LqOSqWSRnNcKpUKN8YXJbVDUcdxYFlW6CFKWO4/j7DfGLB8obSMB+bwixGW6emfFjKXmMHchP/mJzMMy7Kgquos50+Wer0ulDgpy9wEAD5OlpLmCc6bX38xshAg6wFkza8X4C9NK+UsnObysAAAAABJRU5ErkJggg==", - "name": "emboss_2", + "name": "emboss2", "parameters": { "param0": 9.0, "param1": 0.0, "param2": 5.0 }, "tree_item": "Filter/Emboss", - "type": "emboss" + "type": "emboss2" }, { "display_name": "Occlusion", @@ -7407,7 +7407,7 @@ "seed": 0.0, "seed_locked": false, "tree_item": "Transform/Morphology", - "type": "morphology2" + "type": "morphology3" }, { "display_name": "pack 1x32 to 2x16", @@ -8093,4 +8093,4 @@ } ], "name": "Base library" -} \ No newline at end of file +}