Nodes/MKRShift_Nodes/Texture Caustic Field
ComfyUI Node

Texture Caustic Field

Texture Caustic Field renders the ripples procedurally

By criskb·Created 7 months ago·Updated 5 months ago· 0
Texture Caustic Field
    • image
    • mask
    • caustic_info
    settings_json{"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}

    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, or flare.
    • 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.

    CategoryMKRShift Nodes/Surface/Texture

    Inputs (1)

    NameTypeDefaultDescription
    settings_jsonSTRING{"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)

    NameTypeDescription
    imageIMAGE
    maskMASK
    caustic_infoSTRING