<?xml version='1.0' encoding='utf-8'?>
<MNPreset formatVersion="1"><metadata name="Fire - Living Flame" description="Heat lengthens the flame; Wind bends its rising shape. The shader layers four noise octaves, a tapered flame mask and a hot core. Read the separate Code node and try changing the three fire colours." author="MNodes" category="Scene Studio" pluginVersion="1.1.5" createdAt="1790467200000" modifiedAt="1790467200000" type="Utility" preferredOpenMode="perform" tags="scene, visual, interface" /><state><marionietoworld.MNodes_State gridActive="0" gridSize="20" viewOffsetX="0" viewOffsetY="48" zoom="0.80" didInitView="1" toolbarExpanded="0" pv="1.1.5"><nodes nextId="6"><node id="1" type="visual.shadercode" title="Read and edit the drawing" expanded="1" x="32" y="200" w="310" h="240"><state file="" textsize="13.0" out="0.0" code="&#10;// No CPU animation loop or image assets. Speed controls time; zones are native.&#10;float hash21(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}&#10;float noise2(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);&#10; return mix(mix(hash21(i),hash21(i+vec2(1,0)),f.x),mix(hash21(i+vec2(0,1)),hash21(i+1.),f.x),f.y);}&#10;float cloud(vec2 p){float v=0.,a=.55;for(int i=0;i&lt;4;i++){v+=a*noise2(p);p=p*2.03+7.1;a*=.48;}return v;}&#10;void rail(inout vec3 c,vec2 uv,float x,float value){&#10; float track=(1.-smoothstep(.001,.003,abs(uv.y-.067)))*step(x,uv.x)*step(uv.x,x+.36);&#10; c=mix(c,vec3(.17,.24,.30),track);&#10; c=mix(c,vec3(.64,.86,.94),track*step(uv.x,x+.36*value));&#10; float dotMask=1.-smoothstep(.005,.008,length((uv-vec2(x+.36*value,.067))*vec2(iResolution.x/iResolution.y,1.)));&#10; c=mix(c,vec3(.92,.97,1.),dotMask);&#10;}&#10;void mainImage(out vec4 frag,in vec2 pixel){&#10; vec2 uv=pixel/iResolution.xy;&#10; vec2 p=(pixel-.5*iResolution.xy)/iResolution.y;&#10; float a=zoneValue(0),b=zoneValue(1),t=iTime;&#10; vec3 col=vec3(.014,.022,.04);&#10; &#10; float y=(uv.y-.19)/.73;&#10; vec2 q=vec2(p.x-(b-.5)*y*.65,y);&#10; float turbulence=cloud(vec2(q.x*5.,y*4.-t*1.45));&#10; float taper=max(.015,(1.-y)*(.22+.13*a));&#10; float field=1.-abs(q.x+(turbulence-.5)*.19*y)/taper-y*(.55+.6*(1.-a));&#10; float flame=smoothstep(.04,.32,field)*smoothstep(0.,.07,y)*(1.-smoothstep(.9,1.,y));&#10; vec3 fire=mix(vec3(.95,.075,.009),vec3(1.,.57,.055),smoothstep(.15,.62,field));&#10; fire=mix(fire,vec3(1.,.94,.55),smoothstep(.62,.98,field));&#10; col+=fire*flame+vec3(.18,.032,.005)*exp(-dot(q*vec2(2.,1.),q*vec2(2.,1.))*8.);&#10; for(int k=0;k&lt;12;k++){float id=float(k),life=fract(t*(.13+hash21(vec2(id))*.18)+id*.19);&#10; vec2 ember=vec2((hash21(vec2(id,3.))-.5)*(.25+life*.6)+(b-.5)*life*.5,.18+life*.72);&#10; col+=vec3(1.,.3,.045)*exp(-length((uv-vec2(.5+ember.x,ember.y))*vec2(iResolution.x/iResolution.y,1.))*750.)*(1.-life);}&#10; &#10; rail(col,uv,.08,a);rail(col,uv,.56,b);&#10; col=mix(col,vec3(.64,.77,.84),labelText(pixel,0,vec2(.08,.11)*iResolution.xy,12.,0.));&#10; col=mix(col,vec3(.64,.77,.84),labelText(pixel,1,vec2(.56,.11)*iResolution.xy,12.,0.));&#10; frag=vec4(clamp(col,0.,1.),1.);&#10;}&#10;" live="1" ui_only="1" hide_unconnected="1" /></node><node id="2" type="visual.gpucanvas" title="Scene" expanded="1" x="754" y="200" w="600" h="420"><state in="0.0" inb="0.0" codein="0.0" zonesin="0.0" setrow="0.0" scriptin="0.0" editObjects="0" appearanceRow="0.0" pcount="8" speed="1.0" p1="0.0" p2="0.0" p3="0.0" p4="0.0" p5="0.0" p6="0.0" p7="0.0" p8="0.0" mousex="0.5" mousey="0.5" wheel="0.0" dragx="0.0" dragy="0.0" imouse="0 0 0 0" code="" zones="[{&quot;id&quot;: 1, &quot;name&quot;: &quot;Heat&quot;, &quot;type&quot;: &quot;slider&quot;, &quot;shape&quot;: &quot;rect&quot;, &quot;x&quot;: 0.08, &quot;y&quot;: 0.025, &quot;w&quot;: 0.36, &quot;h&quot;: 0.08, &quot;default&quot;: 0.5, &quot;tooltip&quot;: &quot;Heat: drag left or right. Shift makes fine adjustments.&quot;}, {&quot;id&quot;: 2, &quot;name&quot;: &quot;Wind&quot;, &quot;type&quot;: &quot;slider&quot;, &quot;shape&quot;: &quot;rect&quot;, &quot;x&quot;: 0.56, &quot;y&quot;: 0.025, &quot;w&quot;: 0.36, &quot;h&quot;: 0.08, &quot;default&quot;: 0.5, &quot;tooltip&quot;: &quot;Wind: drag left or right. Shift makes fine adjustments.&quot;}]" zonevalues="" labels="Heat&#10;Wind" image1="" image2="" fontFile="" preserveBuffers="0" resolution="0" framerate="0" transparent="0" background="FF0F131A" keyboard="0" zoneinputs="1" showOrientation="0" showObjectAxes="0" visible="1" ignoreClicks="0" panelX="0.0" panelY="0.0" panelW="0.0" panelH="0.0" tooltipStyle="" exposeToDAW="0" ui_only="1" hide_unconnected="1" /></node><node id="3" type="comment" title="Comment" expanded="0" x="24" y="18" w="1320" h="48"><state text="Fire - Living Flame" fontSize="32" fontWeight="3" align="0" textColour="ffe5ecee" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="4" type="comment" title="Comment" expanded="0" x="24" y="78" w="1320" h="94"><state text="Heat lengthens the flame; Wind bends its rising shape. The shader layers four noise octaves, a tapered flame mask and a hot core. Read the separate Code node and try changing the three fire colours." fontSize="20" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="5" type="comment" title="Comment" expanded="0" x="754" y="654" w="580" h="116"><state text="Select a node for its settings. Open the separate Code or Script to change the drawing. Show Zones reveals interaction areas." fontSize="20" fontWeight="1" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node></nodes><edges><e fn="1" fp="0" tn="2" tp="2" /></edges><panel width="960" height="640" locked="1" zoom="1" performScale="1" gridEnabled="0" toolbarExpanded="0" panelBgColour="ff101820"><entry nodeId="2" x="0" y="0" w="960" h="640" z="0" auto="0" /></panel></marionietoworld.MNodes_State></state></MNPreset>