This shader is based off of my old ice shader and it will be used to fake the shell technique for fur and moss.

First I'll start with the heart of the shader, panning textures towards the player in all directions.
We want to track the players position relative to the object, so we subtract the cameras position from the world position.
If you subtract every point on a grid (world position) by a value (camera position) then the offset would cause that value (camera position) to become the new origin (0,0).


Then you transform the value from world to tangent, effectively making every face on the object an X,Y plane for the cameras position to be tracked on. (if this doesn't make any sense then just make the graph and move around some objects, it took me a while to realize what it was doing).


We then split the X and Y from this and plug it into their own panner (for some reason you cant control the time X and Y individually so you'll need 2)


NOTE: in a panner +Y will cause a texture to move towards -Y same with X, negative values cause the reverse. Essentially in this shader everything moves towards 0.


As the value gets farther from 0, the strength of the pan will increase. This causes the scale effect.

By applying this to multiple checker nodes at different values and blending them together the illusion is created.


With that out of the way we are 90% of the way there, now it's all about setting up the nodes in the right order.

First and foremost let's put everything we made into a Material Function, this just helps us organize everything. Also we can then come back to this and change it instead of changing every instance of the network.

Lets keep is simple for now.
(Always remember to set the correct priority on your inputs and outputs)


Now we'll blend it. 9 TIMES!

NOTE: the top layer should not move so it will be multiplied by 0


since it worked with 8, let's do it with 16!!!


In order to make things faster I highly recommend making a Material Function for all the Lerps


So it looks like this.


With this you should be fine, you can create an input for the mask and plug in a texture, but...

So now lets go back to the base and add a few more inputs for roughness and normal, as well as a control to pick a mask from the RGBA of a texture.


For reference here is the 4 mask textures I'm using


The graph over all

NOTE: since we set the normal map and roughness we're using as the default, we don't have to plug it in again


Close up for reference (RGBA is picked with the values 0123)


and the material with final results.


NOTE: I'm eventually going to go back and add inputs for all necessary maps, but if you've gotten this far I'm going to assume that you (yes you specifically Katrina) can figure it out.

NOTE 2: I'm still figuring out the best way to handle the base colour since it needs to get darker the lower it is, you could probably add it with the normal and roughness as well as adding inputs for the layer number and the over all layers.