Revision control
Copy as Markdown
{
"QEN": {
"description": "Adds lava effect to the source. The effect is based on texture so it is easy to adjust to different needs.",
"fragmentCode": [
"@main",
"{",
" vec4 lavaTexture = texture(lavaImage, lavaTexturePos);",
" vec4 lava = lavaTexture * lavaTextureColor;",
" fragColor = mix(fragColor, lava * fragColor.a, lavaColor.a);",
"}"
],
"name": "Lava",
"properties": [
{
"defaultValue": "../images/lava.png",
"description": "Lava texture image.",
"name": "lavaImage",
"type": "image"
},
{
"defaultValue": "1, 1, 0.5, 0.5",
"description": "Color used as multiplier for the texture image. The alpha channel defines opacity for the effect.",
"name": "lavaColor",
"type": "color"
},
{
"defaultValue": "0.5",
"description": "Speed how fast the effect animates.",
"maxValue": "5",
"minValue": "0.1",
"name": "lavaAnimationSpeed",
"type": "float"
},
{
"defaultValue": "0.2",
"description": "The amount of movement used in the animation.",
"maxValue": "1",
"minValue": "0.01",
"name": "lavaWaveAmount",
"type": "float"
}
],
"version": 1,
"vertexCode": [
"@mesh 16, 16",
"out vec2 lavaTexturePos;",
"out vec4 lavaTextureColor;",
"@main",
"{",
" float time = iTime * lavaAnimationSpeed;",
" lavaTexturePos = texCoord;",
" lavaTexturePos.x += texCoord.x * (1.0 - texCoord.x) * lavaWaveAmount * sin((texCoord.y + sin(time * 0.3)) * 2.0);",
" lavaTexturePos.y += texCoord.y * (1.0 - texCoord.y) * lavaWaveAmount * sin((texCoord.x + sin(time * 0.2)) * 3.0);",
" float colorHighlights = 0.2 * (cos(texCoord.x * 16.0 + time) * cos(texCoord.y * 16.0));",
" float colorHighlights2 = 0.4 * (cos(texCoord.x * 4.0+ time * 0.2) * cos(texCoord.y * 3.0 + time * 0.5));",
" lavaTextureColor = lavaColor * (1.0 + colorHighlights + colorHighlights2);",
"}",
""
]
}
}