Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Classic Kuwahara filter node #661

Merged
merged 9 commits into from
Apr 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
311 changes: 311 additions & 0 deletions addons/material_maker/nodes/classic_kuwahara.mmg
Original file line number Diff line number Diff line change
@@ -0,0 +1,311 @@
{
"connections": [
{
"from": "gen_inputs",
"from_port": 0,
"to": "switch",
"to_port": 0
},
{
"from": "gen_inputs",
"from_port": 0,
"to": "buffer_2",
"to_port": 0
},
{
"from": "buffer_2",
"from_port": 0,
"to": "switch",
"to_port": 1
},
{
"from": "switch",
"from_port": 0,
"to": "shader_1",
"to_port": 0
},
{
"from": "shader_1",
"from_port": 0,
"to": "gen_outputs",
"to_port": 0
}
],
"label": "Classic Kuwahara",
"longdesc": "Simple edge-preserving smoothing filter",
"name": "classic_kuwahara",
"node_position": {
"x": 0,
"y": 0
},
"nodes": [
{
"name": "gen_parameters",
"node_position": {
"x": -723.910156,
"y": -199.916687
},
"parameters": {
"buffer": 0,
"resolution": 10,
"size": 6
},
"seed": 56582,
"type": "remote",
"widgets": [
{
"label": "",
"linked_widgets": [
{
"node": "buffer_2",
"widget": "size"
},
{
"node": "shader_1",
"widget": "s"
}
],
"longdesc": "Resolution used to sample the input",
"name": "resolution",
"shortdesc": "Resolution",
"type": "linked_control"
},
{
"label": "Size",
"linked_widgets": [
{
"node": "shader_1",
"widget": "size"
}
],
"longdesc": "Size of the filter",
"name": "size",
"shortdesc": "Size",
"type": "linked_control"
},
{
"configurations": {
"False": [
{
"node": "switch",
"value": 0,
"widget": "source"
}
],
"True": [
{
"node": "switch",
"value": 1,
"widget": "source"
}
]
},
"label": "Buffer",
"linked_widgets": [
{
"node": "switch",
"widget": "source"
}
],
"longdesc": "When set, a buffer is used to sample the input before the kuwahara filter",
"name": "buffer",
"shortdesc": "Buffer",
"type": "config_control"
}
]
},
{
"name": "gen_outputs",
"node_position": {
"x": -379.663818,
"y": 17.047363
},
"parameters": {

},
"ports": [
{
"group_size": 0,
"longdesc": "Filtered Image",
"name": "out",
"shortdesc": "Output",
"type": "rgb"
}
],
"seed": -6314,
"type": "ios"
},
{
"name": "gen_inputs",
"node_position": {
"x": -981.910156,
"y": 31.047363
},
"parameters": {

},
"ports": [
{
"group_size": 0,
"longdesc": "Input image",
"name": "in",
"shortdesc": "Input",
"type": "rgb"
}
],
"seed": 12483,
"seed_locked": true,
"type": "ios"
},
{
"name": "switch",
"node_position": {
"x": -621.5,
"y": 133.297363
},
"parameters": {
"choices": 2,
"outputs": 1,
"source": 0
},
"seed": -53264,
"type": "switch"
},
{
"name": "shader_1",
"node_position": {
"x": -599.996094,
"y": 16.618835
},
"parameters": {
"s": 10,
"size": 6
},
"seed_int": 0,
"shader_model": {
"code": "",
"global": "",
"inputs": [
{
"default": "vec3(0.0)",
"function": true,
"label": "",
"name": "in",
"type": "rgb"
}
],
"instance": [
"// License: GPLv3 / Jan Eric Kyprianidis <www.kyprianidis.com>",
"// Source: https://code.google.com/archive/p/gpuakf/",
"vec3 $(name)_classic_kuwahara(vec2 uv, int radius) {",
"\tfloat n = float((radius + 1) * (radius + 1));",
"\tvec3 col = vec3(0.0);",
"",
"\tvec3 m[4];",
"\tvec3 s[4];",
"\tfor (int k = 0; k < 4; ++k) {",
"\t m[k] = vec3(0.0);",
"\t s[k] = vec3(0.0);",
"\t}",
"",
"\tfor (int j = -radius; j <= 0; ++j) {",
"\t\tfor (int i = -radius; i <= 0; ++i) {",
"\t\t vec3 c = $in(uv + vec2(float(i),float(j)) * 1.0/$s).rgb;",
"\t\t m[0] += c;",
"\t\t s[0] += c * c;",
"\t\t}",
"\t}",
"",
"\tfor (int j = -radius; j <= 0; ++j) {",
"\t\tfor (int i = 0; i <= radius; ++i) {",
"\t\t\tvec3 c = $in(uv + vec2(float(i),float(j)) * 1.0/$s).rgb;",
"\t\t\tm[1] += c;",
"\t\t\ts[1] += c * c;",
"\t\t}",
"\t}",
"",
"\tfor (int j = 0; j <= radius; ++j) {",
"\t\tfor (int i = 0; i <= radius; ++i) {",
"\t\t vec3 c = $in(uv + vec2(float(i),float(j)) * 1.0/$s).rgb;",
"\t\t m[2] += c;",
"\t\t s[2] += c * c;",
"\t\t}",
"\t}",
"",
"\tfor (int j = 0; j <= radius; ++j) {",
"\t\tfor (int i = -radius; i <= 0; ++i) {",
"\t\t\tvec3 c = $in(uv + vec2(float(i),float(j)) * 1.0/$s).rgb;",
"\t\t\tm[3] += c;",
"\t\t\ts[3] += c * c;",
"\t\t}",
"\t}",
"",
"\tfloat min_sigma2 = 1e+2;",
"\tfor (int k = 0; k < 4; ++k) {",
"\t\tm[k] /= n;",
"\t\ts[k] = abs(s[k] / n - m[k] * m[k]);",
"",
"\t\tfloat sigma2 = s[k].r + s[k].g + s[k].b;",
"\t\tif (sigma2 < min_sigma2) {",
"\t\t\tmin_sigma2 = sigma2;",
"\t\t\tcol = m[k];",
"\t\t}",
"\t}",
"\treturn col;",
"}"
],
"name": "classic_kuwahara",
"outputs": [
{
"rgb": "$(name)_classic_kuwahara($uv, int(max($size,0.0)))",
"type": "rgb"
}
],
"parameters": [
{
"default": 10,
"first": 4,
"label": "",
"last": 13,
"name": "s",
"type": "size"
},
{
"control": "None",
"default": 6,
"label": "Size",
"longdesc": "Size of the filter",
"max": 100,
"min": 1,
"name": "size",
"shortdesc": "Size",
"step": 1,
"type": "float"
}
]
},
"type": "shader"
},
{
"name": "buffer_2",
"node_position": {
"x": -878.496094,
"y": 140.618835
},
"parameters": {
"size": 10
},
"seed_int": 0,
"type": "buffer",
"version": 1
}
],
"parameters": {
"buffer": 0,
"resolution": 10,
"size": 6
},
"seed_int": 0,
"shortdesc": "Classic Kuwahara Filter",
"type": "graph"
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions material_maker/doc/node_filter_classic_kuwahara.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Classic Kuwahara node
~~~~~~~~~~~~~~~~~~~~~

The **Classic Kuwahara** node applies a simple edge-preserving smoothing filter to its input.

.. image:: images/node_filter_classic_kuwahara.png
:align: center

Inputs
++++++

The **Classic Kuwahara** node has a single input.

Outputs
+++++++

The **Classic Kuwahara** node outputs the result of the smoothing filter.

Parameters
++++++++++

The **Classic Kuwahara** node accepts the following parameters:

* **Resolution** used to sample the input.

* **Size** of the filter.

* Whether a **Buffer** is used to sample the input before the filter.

Example images
++++++++++++++

.. image:: images/node_classic_kuwahara_samples.png
:align: center
1 change: 1 addition & 0 deletions material_maker/doc/nodes_filter.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,5 @@ The filter nodes accept one or several inputs and generate one or several images
node_filter_color_conversion
node_filter_normal_to_height
node_filter_colorspace_roundtrip
node_filter_classic_kuwahara
node_filter_generalized_kuwahara
12 changes: 12 additions & 0 deletions material_maker/library/base.json
Original file line number Diff line number Diff line change
Expand Up @@ -7042,6 +7042,18 @@
"tree_item": "Miscellaneous/Mesh Map",
"type": "meshmap"
},
{
"icon_data": "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",
"name": "classic_kuwahara",
"parameters": {
"buffer": 1,
"resolution": 10,
"size": 6
},
"seed_int": 0,
"tree_item": "Filter/Classic Kuwahara",
"type": "classic_kuwahara"
},
{
"icon_data": "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAoZJREFUeJztm11ywyAMhHFPBifDN8M3cx9ad1wHgrSsZJLJ95hJ9LMWAstxCB/8yTnnvUPOOXvEsng42fd9Z9hZloUer5kArKRbsMSgC2Cd+JVRIWgCeCd+BRWCIsDdyR8gInyNOCyllFmSD+HnQpRSiuY3cAXMlHgNaTVAAsye/IFEBPUS0JbYndAvVIwx9k5wLTx8IL5VS0CTSAicw4rWpzYOcYCaQCyOrKNCtGIS9QDNjYlF8gy7QzdXknUWY4wjAUrx6EP/mCn5A1QEqAp6RrXb4nF6bMGyM2pflLzGoPaqseIzFUBqx+pqoUtBFHRvbCVNfvRg07NvYVNkWCoAEqDGF2Lv3Aybe+szx9I9WSPUM3r+ED+HzepBiBE4c2u0nBBXlZ3p6kv80itgFHbyPZBj8hGjSoCUUtI6mp0H5UbL3+rqWzVCkyXwSogFWNd17X3HalxmdYtd3amQw0jvt6NIfEseuNaYfglYN15xE7RoQhI05Y/EMHUFWK39MyIBtm3bjON4wCP5EEgCsMsfEZx2v4B0Yai1PwGJGx26iJqgZwNESx+NYeom6AH9wcgId9xsTVUB6G4zMnyhHIRYPcB7/VcFb3XTXgAMkCRG/IegGInNWgEjvl9+HsAQXiyAx06gSYhWdRoHrRJlBVPjPIiRDGWkdJebpkmhw4g76SrUSkoj2Mz8VUKvCq6f3bEM2JxzeNoEa2uuleg7PjMIIdRLu3X09CtgHJoImu/OAryVX//koBVrFqDkz0gVvDvRGq1YX/adIQ2Uv8oizCBC78RnPnq+UwST9wWQILyfK6SUkukbIyge1aCdKbjOA5Zf2BWxrut62GbadQG9k/SaVH94d74BHMNiVElabAQAAAAASUVORK5CYII=",
"name": "splines",
Expand Down
Loading