Material Maker Discussion and Showcase
Asked Answered
C

17

0

Figured we should be talking about Material Maker, since they reached 1.0 recently. It's a free open source tool made in Godot for creating procedural materials and textures. You can find it on Itch for free (or donate if you want to support the project).

https://www.materialmaker.org/

Here is some of the stuff I've been able to make in a couple days with Material Maker and Godot 4.0.

Cristobal answered 20/9, 2022 at 13:34 Comment(0)
L
0

Cristobal

Good idea :-) The first one still doesn't look very plausible to me (as far as that's a criterion) because of the light bleeding, the specular reflection and the shadow, that don't quite fit the environment, which seems to me a band of indirect light alongside de left wall.

The second one (Matrix-style subway charm :-)) is more like it, imo.

Lesko answered 20/9, 2022 at 14:36 Comment(0)
C
0

Yeah, for sure. The wood one was made quickly in about 4 hours, and was the first thing I finished in Material Maker. The new one I spent 3 days on. Also, I only did the material in the foreground. The background is not 3D, it's an HDRI skybox. So the lighting doesn't exactly match, I just rotated it to get a good angle.

Cristobal answered 20/9, 2022 at 15:3 Comment(0)
B
0

I played with Material Maker a while ago. Just messing around and got good simple result, enough for my need so I plan to use it in the future. But your results blew me away.

Brunhilda answered 20/9, 2022 at 15:38 Comment(0)
C
0

Brunhilda But your results blew me away.

Thanks so much. I'm actually impressed it worked so well. It ended up looking nicer than the tutorial.

Cristobal answered 20/9, 2022 at 15:40 Comment(0)
C
0

I've decided to release the tile material to the community with CC-BY license. It's available on the Material Maker website or through the app. Just search for "Dirty Cracked Tiles". Also exported a 4K screenshot from Godot 4.0 to better show the quality.

Cristobal answered 21/9, 2022 at 12:11 Comment(0)
C
0

Made a brick wall. This was done on my own, so not quite as good as the first, but it looks pretty close to the reference photo I was using.

Cristobal answered 23/9, 2022 at 16:57 Comment(0)
C
0

Been working with the Material Maker devs to get this crash fixed, been locking up my system all day (not just an app crash, a GPU crash, black screen, artifacts, etc.). Thankfully they fixed it, available on the nightly builds and will be in Material Maker 1.1. This is the update I did on the brick to get it more rounded and add some depth.

Cristobal answered 24/9, 2022 at 8:37 Comment(0)
L
0

Awesome. Did they say what caused it ?

Lesko answered 24/9, 2022 at 9:30 Comment(0)
C
0

Yeah, I guess Godot can crash if you provide non-noramlized values to the height property on the material (less than zero or greater than 1). Seems strange that a user input could crash a video card (device context lost) but they fixed it by sanitizing the data.

Cristobal answered 24/9, 2022 at 22:41 Comment(0)
C
0

Here is the finished brick wall.

And here is the Shadow Warrior remake study.

Cristobal answered 7/10, 2022 at 6:4 Comment(0)
L
0

Oh, there is a thread for sharing MaterialMaker stuff! Here is a WIP i'm working on right now:

I'm trying to recreate this: Artstation bricks with leaves

For the bricks I made two reusable nodes, one that generates UVs / Instance colors for circular instancing and one that creates the scale-like tiling. If someone wants them I can drop them here.

Luana answered 7/10, 2022 at 9:20 Comment(0)
C
0

Oh nice! It looks like there is a little too much depth, and it could use more dirt / detail, but it's getting there.

Cristobal answered 7/10, 2022 at 10:35 Comment(0)
G
0

Cristobal It looks like there is a little too much depth, and it could use more dirt / detail, but it's getting there.

There's nothing wrong with depth here just very realistic, but with dirt can be given a few alternatives.

Great job!

Luana If someone wants them I can drop them here.

Probably would have come in handy.

Gemeinschaft answered 7/10, 2022 at 10:55 Comment(0)
L
0

Also, node graphs get pretty messy after a while, so I hacked together a "tunnel" node that can be used to store a result which can be used elsewhere without a connection:

Luana answered 7/10, 2022 at 11:19 Comment(0)
L
0

Gemeinschaft Probably would have come in handy.

Here you go:

{
	"name": "circular_bricks",
	"node_position": {
		"x": 0,
		"y": 0
	},
	"parameters": {
		"columns": 7,
		"rows": 17
	},
	"seed": 0,
	"seed_locked": false,
	"shader_model": {
		"code": "float d = distance($uv, vec2(.5));\nfloat cols = $columns * 2.0;\nfloat stepped = steps(d, cols);\nfloat y = split(d, cols);\nfloat offset = ($rows - 5.0) * (6.283 * stepped);\nfloat gradient = circular_gradient($uv - vec2(.5));\nfloat x = split(gradient, offset);\nvec3 $(name_uv) = vec3(vec2(x, y), 0);\nfloat $(name_uv)_mask = step(d, 0.5);\nvec3 $(name_uv)_id = col(vec2(stepped, steps(gradient, offset)));\n",
		"global": "float circular_gradient(vec2 uv) {\n\treturn fract(0.15915494309 * atan(uv.x, uv.y));\n}\n\nfloat bricks(vec2 uv) {\n\tif (any(greaterThan(uv, vec2(.9))) || any(lessThan(uv, vec2(.1)))) {\n\t\treturn 0.0;\n\t}\n\treturn 1.0;\n}\n\nfloat steps(float a, float num) {\n\treturn ceil(a * (num)) / (num);\n}\n\nfloat split(float a, float num) {\n\treturn mod(a * num, 1.0);\n}\n\nvec3 col(vec2 a) {\n\treturn rand3(a);\n}\n\n",
		"inputs": [

		],
		"instance": "",
		"longdesc": "Create a circular array of squares that stay the same size.\n\nMade by Jummit.",
		"name": "Circular Bricks",
		"outputs": [
			{
				"rgb": "$(name_uv)",
				"shortdesc": "UVs",
				"type": "rgb"
			},
			{
				"f": "$(name_uv)_mask",
				"shortdesc": "Mask",
				"type": "f"
			},
			{
				"rgb": "$(name_uv)_id",
				"shortdesc": "ID",
				"type": "rgb"
			}
		],
		"parameters": [
			{
				"control": "None",
				"default": 8,
				"label": "Rows",
				"max": 30,
				"min": 0,
				"name": "rows",
				"step": 1,
				"type": "float"
			},
			{
				"control": "None",
				"default": 18,
				"label": "Columns",
				"max": 40,
				"min": 0,
				"name": "columns",
				"step": 1,
				"type": "float"
			}
		],
		"shortdesc": "Circular Bricks"
	},
	"type": "shader"
}
{
	"connections": [
		{
			"from": "graph",
			"from_port": 0,
			"to": "blend_5",
			"to_port": 1
		},
		{
			"from": "tiler_4",
			"from_port": 2,
			"to": "custom_uv_2",
			"to_port": 1
		},
		{
			"from": "translate_3",
			"from_port": 0,
			"to": "tiler_4",
			"to_port": 0
		},
		{
			"from": "translate_4",
			"from_port": 0,
			"to": "custom_uv_2",
			"to_port": 0
		},
		{
			"from": "graph",
			"from_port": 0,
			"to": "translate_3",
			"to_port": 0
		},
		{
			"from": "blend_5",
			"from_port": 0,
			"to": "translate_4",
			"to_port": 0
		},
		{
			"from": "gen_inputs",
			"from_port": 0,
			"to": "blend_5",
			"to_port": 0
		},
		{
			"from": "custom_uv_2",
			"from_port": 0,
			"to": "gen_outputs",
			"to_port": 0
		}
	],
	"label": "Tile Scales",
	"longdesc": "This can be used for roofs, stone patterns or other interesting shapes.\n\nMade by Jummit.",
	"name": "scales",
	"node_position": {
		"x": 0,
		"y": 0
	},
	"nodes": [
		{
			"name": "tiler_4",
			"node_position": {
				"x": 641.931946,
				"y": 290.662415
			},
			"parameters": {
				"fixed_offset": 0.5,
				"inputs": 0,
				"offset": 0,
				"overlap": 2,
				"rotate": 0,
				"scale": 0,
				"scale_x": 1,
				"scale_y": 1,
				"tx": 1,
				"ty": 6,
				"value": 0,
				"variations": false
			},
			"seed": 0,
			"seed_locked": false,
			"type": "tiler"
		},
		{
			"name": "blend_5",
			"node_position": {
				"x": 385,
				"y": 92
			},
			"parameters": {
				"amount": 1,
				"blend_type": 10
			},
			"seed": 0,
			"seed_locked": false,
			"type": "blend"
		},
		{
			"name": "translate_4",
			"node_position": {
				"x": 648.5,
				"y": 94
			},
			"parameters": {
				"translate_x": 0,
				"translate_y": 0.5
			},
			"seed": 0,
			"seed_locked": false,
			"type": "translate"
		},
		{
			"connections": [
				{
					"from": "translate",
					"from_port": 0,
					"to": "mirror",
					"to_port": 0
				},
				{
					"from": "shape_3",
					"from_port": 0,
					"to": "translate_2",
					"to_port": 0
				},
				{
					"from": "blend_3",
					"from_port": 0,
					"to": "blend_2",
					"to_port": 1
				},
				{
					"from": "mirror",
					"from_port": 0,
					"to": "invert_2",
					"to_port": 0
				},
				{
					"from": "invert_2",
					"from_port": 0,
					"to": "blend_2",
					"to_port": 0
				},
				{
					"from": "translate_2",
					"from_port": 0,
					"to": "invert_3",
					"to_port": 0
				},
				{
					"from": "invert_3",
					"from_port": 0,
					"to": "blend_3",
					"to_port": 1
				},
				{
					"from": "shape_3",
					"from_port": 0,
					"to": "blend_3",
					"to_port": 0
				},
				{
					"from": "shape_3",
					"from_port": 0,
					"to": "translate",
					"to_port": 0
				},
				{
					"from": "blend_2",
					"from_port": 0,
					"to": "gen_outputs",
					"to_port": 0
				}
			],
			"label": "Scale",
			"longdesc": "",
			"name": "graph",
			"node_position": {
				"x": 107.019791,
				"y": 282.835144
			},
			"nodes": [
				{
					"name": "shape_3",
					"node_position": {
						"x": -794,
						"y": 317
					},
					"parameters": {
						"edge": 0,
						"radius": 1,
						"shape": 0,
						"sides": 4
					},
					"seed": 0,
					"seed_locked": false,
					"type": "shape"
				},
				{
					"name": "translate",
					"node_position": {
						"x": -593,
						"y": 248
					},
					"parameters": {
						"translate_x": -0.5,
						"translate_y": 0.175
					},
					"seed": 0,
					"seed_locked": false,
					"type": "translate"
				},
				{
					"name": "mirror",
					"node_position": {
						"x": -339,
						"y": 240
					},
					"parameters": {
						"direction": 0,
						"flip_sides": true,
						"offset": 0
					},
					"seed": 0,
					"seed_locked": false,
					"type": "mirror"
				},
				{
					"name": "invert_2",
					"node_position": {
						"x": -135,
						"y": 240
					},
					"parameters": {

					},
					"seed": 0,
					"seed_locked": false,
					"type": "invert"
				},
				{
					"name": "translate_2",
					"node_position": {
						"x": -616.5,
						"y": 393
					},
					"parameters": {
						"translate_x": 0,
						"translate_y": 0.45
					},
					"seed": 0,
					"seed_locked": false,
					"type": "translate"
				},
				{
					"name": "invert_3",
					"node_position": {
						"x": -348,
						"y": 397
					},
					"parameters": {

					},
					"seed": 0,
					"seed_locked": false,
					"type": "invert"
				},
				{
					"name": "blend_3",
					"node_position": {
						"x": -153,
						"y": 325
					},
					"parameters": {
						"amount": 1,
						"blend_type": 10
					},
					"seed": 0,
					"seed_locked": false,
					"type": "blend"
				},
				{
					"name": "blend_2",
					"node_position": {
						"x": 85,
						"y": 240
					},
					"parameters": {
						"amount": 1,
						"blend_type": 10
					},
					"seed": 0,
					"seed_locked": false,
					"type": "blend"
				},
				{
					"name": "gen_inputs",
					"node_position": {
						"x": -1060,
						"y": 309.926392
					},
					"parameters": {

					},
					"ports": [

					],
					"seed": 0,
					"seed_locked": false,
					"type": "ios"
				},
				{
					"name": "gen_outputs",
					"node_position": {
						"x": 336.926422,
						"y": 238.718369
					},
					"parameters": {

					},
					"ports": [
						{
							"name": "port0",
							"type": "rgba"
						}
					],
					"seed": 0,
					"seed_locked": false,
					"type": "ios"
				},
				{
					"name": "gen_parameters",
					"node_position": {
						"x": -285.6875,
						"y": 95
					},
					"parameters": {

					},
					"seed": 0,
					"seed_locked": false,
					"type": "remote",
					"widgets": [

					]
				}
			],
			"parameters": {

			},
			"seed": 0,
			"seed_locked": false,
			"shortdesc": "",
			"type": "graph"
		},
		{
			"name": "translate_3",
			"node_position": {
				"x": 367.431946,
				"y": 299.662384
			},
			"parameters": {
				"translate_x": 0,
				"translate_y": 0.5
			},
			"seed": 0,
			"seed_locked": false,
			"type": "translate"
		},
		{
			"name": "custom_uv_2",
			"node_position": {
				"x": 950.211121,
				"y": 94.632004
			},
			"parameters": {
				"inputs": 0,
				"rotate": 0,
				"scale": 0,
				"sx": 1,
				"sy": 1,
				"variations": false
			},
			"seed": 0,
			"seed_locked": false,
			"type": "custom_uv"
		},
		{
			"name": "gen_inputs",
			"node_position": {
				"x": -60,
				"y": 90.865761
			},
			"parameters": {

			},
			"ports": [
				{
					"name": "Color",
					"type": "rgb"
				}
			],
			"seed": 0,
			"seed_locked": false,
			"type": "ios"
		},
		{
			"name": "gen_outputs",
			"node_position": {
				"x": 1274.211182,
				"y": 95.865753
			},
			"parameters": {

			},
			"ports": [
				{
					"name": "Color",
					"type": "rgb"
				}
			],
			"seed": 0,
			"seed_locked": false,
			"type": "ios"
		},
		{
			"name": "gen_parameters",
			"node_position": {
				"x": 68.677216,
				"y": -377
			},
			"parameters": {

			},
			"seed": 0,
			"seed_locked": false,
			"type": "remote",
			"widgets": [

			]
		}
	],
	"parameters": {

	},
	"seed": 0,
	"seed_locked": false,
	"shortdesc": "Tile in the shape of scales",
	"type": "graph"
}
Luana answered 7/10, 2022 at 11:27 Comment(0)
F
0

Material Maker 1.2 has been released.

Finch answered 24/1, 2023 at 18:15 Comment(0)
C
0

My latest render in Godot 4.0. Made with Blender and Material Maker.

Cristobal answered 28/3, 2023 at 2:0 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.