This blog post will detail my experience utilizing Shader Graph to randomize 16×16 pixel textures on a grid structure.

Step 1: Import Textures as Texture2DArray

To begin, the texture should be imported as a Texture2DArray via the inspector.

Step 2: Create a Shader Graph

Create a new Lit Shader Graph (URP) and open it.

Step 3: Create a procedural checkerboard structure

Next, a checkerboard structure needs to be generated to map a tile of the texture onto the mesh’s surface. I accomplished this by utilizing some basic math in Shader Graph.

unity shader graph procedural checkerboard

Step 4: Create a random value for each tile in the checkerboard

Once the checkerboard structure was established, I created a random value for each tile based on its location in world space.

Step 5: Use the random value to assign a texture to a checkerboard tile

This is where the magic happens. This random value was used to assign a texture to a checkerboard tile via the Sample Texture 2D Array node.

And this is the final product.

unity shader graph procedural checkerboard structure

Sounds rather complicated. Why go through all that hassle?

Well the thing was that I first tried to spawn one gameobject for each tile I would use and place them together in a random fashion. This netted about 50k gameobject just for the placement of the ground. As this is a far too large amount of gameobjects I decided to try other things and had the idea to populate one given large plane which led to this solution.

Bottom Line

In conclusion, using Unity Shader Graph to randomize textures is a great way to add variation and depth to game environments as well as optimize your game (as for my usecase). By combining procedural structures with predefined textures and assigning them in a random fashion to this structure one can create landscapes with minimal effort.

Previous post #1 art stuff | pixel art for no art skills
Next post #2 art stuff | pixel art tiles