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.
Material Maker Discussion and Showcase
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.
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.
Awesome. Did they say what caused it ?
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.
Here is the finished brick wall.
And here is the Shadow Warrior remake study.
- Edited
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:
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.
Oh nice! It looks like there is a little too much depth, and it could use more dirt / detail, but it's getting there.
- Edited
cybereality 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!
Jummit If someone wants them I can drop them here.
Probably would have come in handy.
- Edited
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:
- Edited
Tomcat 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"
}
My latest render in Godot 4.0. Made with Blender and Material Maker.