An extensible, layer-based shader material system for Three.js, enabling declarative creation of complex visual effects.
Lamina is an extensible, layer-based shader material system for Three.js. It enables developers to create complex visual materials by stacking and blending multiple effect layers—such as gradients, noise, and depth—using a declarative API. It abstracts away low-level shader programming, making it easier to build sophisticated graphics in WebGL.
Three.js developers and creative coders who need to create advanced visual materials without writing custom shaders from scratch, particularly those working in interactive 3D web experiences or data visualizations.
Lamina offers a high-level, composable layer system that drastically simplifies shader material creation, providing a declarative alternative to manual shader coding while maintaining flexibility through custom layer extensions.
🍰 An extensible, layer based shader material for ThreeJS
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Enables building complex shader materials by stacking layers like Depth and Noise with a clean API, eliminating the need for manual shader code, as shown in the example with LayerMaterial and Depth components.
Features DebugLayerMaterial for interactive tweaking and configuration copying, accelerating the design and iteration process directly in the browser.
Includes a variety of pre-built layers for effects such as Fresnel, Gradient, and Texture, plus the ability to create custom layers via class extension, reducing initial development time.
Supports multiple blend modes like multiply, add, and overlay, allowing for sophisticated visual compositing directly in the material stack, as listed in the BlendMode section.
Officially archived as of April 2023 with no active maintainers, making it a risky choice for any serious development due to lack of updates and support, as stated in the notice.
The creator describes Lamina as 'hacky,' 'unreliable,' and 'slow,' with inherent unpredictability that can lead to bugs and suboptimal runtime behavior, especially compared to three-custom-shader-material.
Advanced usage requires manual shader code injection and non-uniform parameter handling via the onParse callback, adding complexity beyond the basic declarative approach.
In vanilla Three.js, colors must be explicitly converted to linear encoding using convertSRGBToLinear(), introducing an extra step and potential for visual discrepancies.