Super Parallax

by in Materials, Shaders, Textures

What is Super Parallax?

Super Parallax is a set of node groups you can use in your Blender materials that give the illusion of a 3D displacement, without the cost of excessively high-polygon meshes. This saves memory and time in comparison to traditional displacement techniques, enabling high detail displacements on regular machines. It works in the Cycles and Eevee render engines. 

Version 0.2 almost ready!

Some of the exciting upcoming features:

  • Vast improvement in quality and performance via a new binary search algorithm.
  • Accurate silhouettes on curved surfaces using a cutting edge curved-relief mapping algorithm.
  • A new interface in the node editor which will provide easy usage of the parallax nodes.
  • Support for an arbitrary number of iterations on nodes for complete control over quality and performance.
  • Multiple parallax algorithms available to suite different scenarios.


Estimated release date is mid-August!

Features

  • Works in Cycles and Eevee

  • Step interpolation (more continuous results)

  • In depth 10-page documentation/guide on effective usage

  • Various quality settings available for high/low detail surfaces

  • Edge masking & depth masking

  • Generated normals with smoothing

  • Works with virtually all shading effects (normals, roughness, specular, ambient occlusion, etc)

  • Works with image textures and procedural textures

  • Fast & optimised for Blender’s Shader Virtual Machine (SVM)

  • By purchasing Super Parallax through Blender Market, a small cut of profits is dontated to the Blender Development fund. The rest allows me to improve this shader (updates coming!) and make more future products.

 

When should I use it?

Super Parallax is most effective when you need to add surface displacement detail to a part of your scene, but don’t want the memory overhead or time-slow down that high-polygon meshes and large surfaces introduce.

It works best on flatter/non-manifold meshes, such as floors, walls, terrain, etc.


How does it work?

Like any Blender node group, you can see the inside of all the nodes. I’ve tried to be as neat as possible, however the mechanism of nodes can make things look quite messy. Most main elements are labelled with purpose and many are also quite maths-heavy.

The general algorithm used is called Parallax Occlusion Mapping. It essentially traces rays against the displacement height field using a form of ray-marching. While this technique is simple in principle, the constraints of the Blender node system make it complicated to implement in Blender, making the node setup much more complicated than the equivalent code. Thus, shader compilation may take a little longer when in Eevee, but not in Cycles.


Limitations

Currently, any surface intersecting a parallax surface will not intersect with the heightfield, so the intersection will only show meshes crossing over. This could be achieved in Eevee if the node was hard-coded (which is something I may look into), however in general this can’t be supported in Cycles without overhauling the Cycles engine.

This version was developed and tested in Blender 2.82a so might not be backwards compatible.

This version does not support projected shadowing, though that is a planned feature in the next version.


A Note on Texture Coordinates

The super parallax nodes are designed to specifically work with UV texture coordinates. This is due to how Blender provides mesh surface information.

Non-UV texture coordinates such as Generated and Object may work on simple meshes, however in general your mesh will need to have some form of a UV unwrap applied. Blender primitives (cubes, spheres, etc) can be automatically unwrapped on creation. For more complex meshes, I recommend using Smart UV Project to apply this very quickly.


If you have any issues or reccomendations, please don't hesitate to contact me via Blender Market.

Happy Blendering :)



Textures courtesy of TextureHaven.com and cc0textures.com, licensed under CC0.

Icons courtesy of entypo.com licensed under CC0.