Git Product home page Git Product logo

yota_03_disco_hammerhead's Introduction

Year of Tech Art - March: Disco Hammerhead (Blender)

As with previous YoTA models, this was made with Blender and textured with Krita. Similar to my pumpkin toy, this work was based off of a cat toy. Apparently I'm working towards becoming a cat toy specialist.

I had been mesmerized by this thing for a few weeks, so it was an easy pick for trying to render. The 'skin' of the hammerhead has extremely interesting material properties. It appears to be a kind of holographic foil with a small random dot pattern that glitters in rainbow colors as you move around it. The underlying hatching/diamond pattern is matte by comparison, which provides a nice contrast. So the goal this month was to focus on replicating the material properties (a.k.a. figuring out shaders!), rather than worrying too much about the geometry, which is fairly simple.

Overall, I'm actually a bit disappointed with my result. When moving around the viewport in Blender, the holofoil effect is kinda-sorta close to correct, but something is clearly missing. In renders, the effect is even less impressive, since the glittery effect seems to be washed out. I assume this is down to a combination of me not understanding/modeling the physical (i.e. real-life) effect well enough, along with also implementing it incorrectly within Blender. I think I might try to come back to this, or something similar (rendering Opal?) in the future.

Notes for future reference

UV distortion when using the multiresolution modifier

The multiresolution modifier lets you subdivide a low polygon model, then sculpt on the resulting high density mesh without losing the underlying low-poly model. After sculpting, you can then bake the hi-res details into a normal map that can be applied to the low-poly mesh to mimic the surface details of the hi-res mesh. Pretty awesome trick!

Unfortunately, it turns out that if you start with a very low poly mesh, the process of subdividing can result in some wonky topology. This may or may not matter for sculpting, but in my case, it caused a bit of a headache with the UV map of the model, as some areas got very stretched due to weird curvature introduced at higher subdivisions. I couldn't find a way to introduce more structure to the low-poly mesh without seriously messing up the hi-res sculpt. Maybe there is a way to retroactively fix this problem, but otherwise, it's worth keeping in mind for future use: it's a good idea to check for UV distortion before doing any sculpting work at higher resolutions!

Diffraction coloring

The shader mimicking the holographic effect is modeled as if the surface behaves like a diffraction grating. This results in a rainbow pattern with the same ordering (i.e. blue at shallow viewing angles, transitioning to red at steeper angles) as seen on the real-life toy. Within the shader, the coloring is handled as an emission component, this is likely wrong, but it was the only way I could find to get vivid coloring like the real life toy.

The formula used for determining the reflected wavelength is:

Where d is the 'diffraction grating spacing' , m is the 'diffraction order' and θ is the viewing angle. The grating spacing can be adjusted to change the spread of the colors. The diffraction order must be an integer value of 1, 2, 3 etc. Technically the result from every order should be added together, but in practice it seemed fine to only use the first 1-3, since higher orders correspond to light bouncing at very steep angles.

The viewing angle was calculated using the surface normal of the model and the 'incoming' vector from Blender's geometry shader node (not to be confused with geometry nodes which are separate from shaders!). In reality, while the viewing angle does affect the result, it's clear that the position/angle of light sources also matters. For example, there is no holographic glittering on the shadowed side of the toy (in a darker room). This was hard to account for within Blender, and it's clearly something missing from my implementation.

Noise/Effect texturing

The bottom of the shark has a fabric similar to something called Bouclé (boo-clay). Since I was more focused on the shader work this time, I didn't want to manually try to re-create the texture appearance in Krita, so I ended up grabbing a random bouclé image and stitching stuff together to get the effect for the final model. This worked out quite nicely I think, and was a lot faster than what I've done in the past.

Similarly, I needed several noise/pattern textures to approximate the look of the shark skin. Mostly these were generated using Blender's built-in noise shader nodes (and baking them out), but I also needed a dot pattern for the holofoil effect, which I got by modifying an implementation I found on Jason Davies website.

The moral of the story here is that having quick/easy access to a good set of textures and procedural patterns is invaluable for quickly creating and iterating on shaders. It might be worth creating a go-to list of sources for these sorts of things!

yota_03_disco_hammerhead's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.