Shell Texturing

I tried out Shell Texturing :)

Intro

Once again trying out new stuff, this time around Shell Texturing! So basically Shell Texturing is a way to fake fur in video games but it does have a few problems (like overdraw and it not working from every angle however we do not care about those right now).

Basically I saw this video of Acerola and thought I want to try this! In general this video as well as the blog by hecomi and the video by NMG helped me a lot with this.

Repository:
https://github.com/dmaerzendorfer/ShellTexturing


What I learnt

  • how Shell Texturing works, duh
  • how to write HLSL shaders for Unity URP
  • how to make shell texturing work with geometry shaders
  • lots of hands on knowledge on graphics topics such as shader stages, blending, shader passes, wavefronts, etc.
  • lighting and ShadowCaster Passes!

What problems I faced

  • making my shader work, lol
  • take for example the geometry shader, needed two tries and two different tutorials to make it work
  • also was thinking to port it into unity’s ShaderGraph but thats a big nono with geometry shaders as I found out
  • I wanted to add some emission to my fur, however I did not manage to make it look good, so i scrapped it

Since I followed hecomi's solution, my shader also allows for wind-physics (you can also see the problems of shell texturing really well here). I tried to also make a bouncy ball with it, tho it did not come out that well.
The shader supports different patterns and one can use any noise texture in order to define how the strands of the fur look like.
Whilst working on the shader I also toyed around with the blend options and I managed to get this weird pattern. Not quite sure why that happens but I shall keep note of it if I ever need some buggy looking textures!