Mean Curvature Shader for Unity
Sample output. Max curvature mapped to (255,255,255); min curvature mapped to (0,0,0); exponent of 3.5 used.
Once applied to a material, this shader leverages Unity’s shader graph system
and GPU differentiation to generate a heat map of game object’s mean curvature
everywhere along its surface. This robust tool works with most opaque models and
prefabs out of the box. Target game objects do require valid
data, however. When working with procedurally-generated or broken meshes, the
Mesh.RecalculateNormals() is recommended.
Place Mean Curvature.shadergraph
from this repo’s
Assets/Shaders folder into any
project using Unity’s High-Definition Render Pipeline (HDRP) or Lightweight Render
(LWRP). Apply the mean curvature shader to a target material. In its current
form, this shader does not interact with Unity’s lighting models. This can be
remedied by copying the contents of
Mean Curvature.shadergraph into a lit
shader graph (guide).
For color selection, curvatures are mapped to values between 0 and 1 using a modified sigmoid curve:
where k is the value of
Exponent Base within the shader. Higher values result in
positive and negative curvatures getting mapped closer to
MinColor respectively. When
ApplyHighlight is enabled, curvatures (before
sigmoid is applied) equal to
HighlightValue are mapped to
(See paper for more information)
Some amount of data is lost due to screen-space transformations. We advise against using this for numerical applications
The coloration of objects is dependent on camera position; moving the camera will slightly change the color of any target
Whenever multiple vertices of a game object lie on the same pixel, visual artifacts are introduced into the final render
The resolution of the user’s monitor dramatically affects the behavior of this shader
DynamicMesh: When in play mode, this shader is applied to a continuously-deforming mesh. Standard WASD controls are used for player movement. Camera sensitivity and movement speed are controlled by the
main cameragame object.
Sandbox: A scene showing the shader applied to various standard test models and a collection of rocks that can be found here.
ScreenSpaceDistortion: Each object is colored according to its normal data, but half of the included objects are also sent to and from screen space. Moving the camera in edit mode reveals the loss of information and bizarre behavior that can occur when moving between spaces.