Texture Caustic Field
Texture Caustic Field renders the ripples procedurally
- image
- mask
- caustic_info
Nothing says "this is underwater" like caustics - those shifting webs of light on the pool floor. Doing them right usually means a photon-mapping sim in a 3D package, or hunting for stock video loops. x1TextureCausticField just generates the pattern: pure procedural caustic light, fully tileable, in whatever resolution you need. It's one of the pack's generator nodes, which means it takes no image input at all - just a settings blob - and spits out a texture.
How it works
It's a layered noise composition that fakes caustics the way game textures always have: a fine web of bright cells over a soft pool of light, warped so it looks like light through rippling water. pattern_mode picks the flavor - web (the default, classic interlocking caustic mesh), pool (broader, softer pools of light), or flare (longer, more directional streaks). The underlying field is seeded by caustic_scale_px (148px, the size of the caustic cells) and seed, so you can regenerate variations until one matches your scene.
Three knobs do the character work. focus (0.58) controls how crisp the cell edges are - low focus gives that soft, dappled shallow-water look, high focus makes sharp, shattered-light pattern you see on a bright pool floor. shimmer (0.34) adds the moving-light shimmer to the web, and warp_strength (0.26) bends the whole field with a secondary distortion so the cells aren't a clean grid. contrast (1.18) and balance push the light-to-dark ratio. Outputs include both image (the caustics as a grayscale texture) and mask (the same field as a MASK you can multiply into an existing render).
The inputs that matter
Everything is in a settings_json string, prefilled:
width/height(1024) - output size. Match your target resolution.pattern_mode-web,pool, orflare.caustic_scale_px(148) - cell size.focus(0.58) - crisp vs dappled.shimmer(0.34) /warp_strength(0.26) - the animated-feeling variation.seed(137) - variation control. Change it to reroll the pattern.invert- flip for caustic shadow instead of light.
Outputs are image, mask, and caustic_info (a log with the mode, size, and seed).
Installing it
Part of the MKRShift Nodes pack. ComfyUI Manager: search "MKRShift", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart after. No models - this is pure procedural math, instant even at 2048px.
Gotchas
Two honest notes. First, it's a still texture - if you need animated caustics, you'll have to re-run it with different seeds per frame and accept the pop, or use it as a static overlay pass on a subtle loop. Second, because there's no image input, nothing anchors the pattern to your geometry; if you overlay it on a render, multiply it (via the mask output) rather than hard-blending, so the caustics brighten the scene instead of painting white lines over it. It pairs well with the pack's x1TextureContourLines for a stylized water edge, but on its own it's a solid underwater ambience generator.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| settings_json | STRING | {"width":1024,"height":1024,"pattern_mode":"web","caustic_scale_px":148.0,"focus":0.58,"shimmer":0.34,"warp_strength":0.26,"contrast":1.18,"balance":0.0,"invert":false,"seed":137} | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| caustic_info | STRING | — |