Created
December 24, 2013 21:39
-
-
Save lcrs/8118031 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef GL_ES | |
precision mediump float; | |
#endif | |
uniform float adsk_time; | |
uniform float adsk_result_w, adsk_result_h; | |
uniform float Rotation; | |
uniform float pLeft; | |
uniform bool vignette; | |
vec2 resolution = vec2(adsk_result_w, adsk_result_h); | |
vec2 mouse = vec2(Rotation, pLeft); | |
float globalltime = adsk_time*.05; | |
uniform float time; | |
// Added for camera | |
uniform vec3 camera_position, camera_interest; | |
uniform float camera_roll, camera_fov; | |
uniform bool camera_use; | |
#define pi 3.1415926535897932384624433832795 | |
// Created by inigo quilez - iq/2013 | |
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. | |
// original here: https://www.shadertoy.com/view/MsXGRf - please preserve credits in downstream experiments. | |
// hash based 3d value noise | |
float hash( float n ) | |
{ | |
return fract(sin(n)*43758.5453); | |
} | |
float noise( in vec3 x ) | |
{ | |
vec3 p = floor(x); | |
vec3 f = fract(x); | |
f = f*f*(3.0-2.0*f); | |
float n = p.x + p.y*57.0 + 113.0*p.z; | |
return mix(mix(mix( hash(n+ 0.0), hash(n+ 1.0),f.x), | |
mix( hash(n+ 57.0), hash(n+ 58.0),f.x),f.y), | |
mix(mix( hash(n+113.0), hash(n+114.0),f.x), | |
mix( hash(n+170.0), hash(n+171.0),f.x),f.y),f.z); | |
} | |
vec4 map( vec3 p ) | |
{ | |
vec3 r = p; | |
float den = -0.6 - p.y; | |
// invert space | |
// p.y += 0.6; | |
p = -2.0*p/dot(p,p); | |
// twist space | |
float an = -1.0*sin(0.1*time*globalltime + 1.0*length(p.xz) + 1.0*p.y); | |
float co = cos(an); | |
float si = sin(an); | |
p.xz = mat2(co,-si,si,co)*p.xz; | |
// distort | |
p.xz += 1.0*(-1.0+2.0*noise( p*1.1 )); | |
// pattern | |
float f; | |
vec3 q = p*0.85 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
f = 0.50000*noise( q ); q = q*2.02 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
f += 0.25000*noise( q ); q = q*2.03 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
f += 0.12500*noise( q ); q = q*2.01 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
f += 0.06250*noise( q ); q = q*2.02 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
f += 0.04000*noise( q ); q = q*2.00 - vec3(0.0,1.0,0.0)*time*globalltime*0.12; | |
den = clamp( (den + 4.0*f)*1.2, 0.0, 1.0 ); | |
vec3 col = 1.2*mix( vec3(1.0,0.8,0.6), 0.9*vec3(0.3,0.2,0.35), den ) ; | |
col += 0.05*sin(0.05*q); | |
//col *= 1.0 - 0.8*smoothstep(0.6,1.0,sin(0.7*q.x)*sin(0.7*q.y)*sin(0.7*q.z))*vec3(0.6,1.0,0.8); | |
//col *= 1.0 + 1.0*smoothstep(0.5,1.0,1.0-length( (fract(q.xz*0.12)-0.5)/0.5 ))*vec3(1.0,0.9,0.8) ; | |
col = mix( vec3(0.8,0.3,0.2), col, clamp( (r.y+0.1)/1.5, 0.0, 1.0 ) ); | |
return vec4( col, den ); | |
} | |
vec3 raymarch( in vec3 ro, in vec3 rd ) | |
{ | |
vec4 sum = vec4( 0.0 ); | |
vec3 bg = vec3(0.4,0.5,0.5)*1.3; | |
float t = 0.0; | |
// dithering | |
// t += 0.05*texture2D( iChannel0, gl_FragCoord.xy/iChannelResolution[0].x ).x; | |
for( int i=0; i<128; i++ ) | |
{ | |
if( sum.a > 0.99 ) continue; | |
vec3 pos = ro + t*rd; | |
vec4 col = map( pos ); | |
col.xyz = mix( bg, col.xyz, exp(-0.002*t*t*t) ); | |
col.a *= 0.5; | |
col.rgb *= col.a; | |
sum = sum + col*(1.0 - sum.a); | |
t += 0.05; | |
} | |
sum.xyz = mix( bg, sum.xyz/(0.001+sum.w), sum.w ); | |
return clamp( sum.xyz, 0.0, 1.0 ); | |
} | |
// Added for camera. Returns a matrix that rotates about an axis | |
mat4 rot(vec3 axis, float angle) { | |
axis = normalize(axis); | |
float s = sin(angle); | |
float c = cos(angle); | |
float oc = 1.0 - c; | |
return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, | |
oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, | |
oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, | |
0.0, 0.0, 0.0, 1.0); | |
} | |
// Added for camera | |
float deg2rad(float angle) { | |
return(angle/(180.0/pi)); | |
} | |
void main(void) | |
{ | |
// inputs | |
vec2 q = gl_FragCoord.xy / resolution.xy; | |
vec2 p = -1.0 + 2.0*q; | |
p.x *= resolution.x/ resolution.y; | |
vec2 mo = mouse.xy / resolution.xy; | |
if( mouse.x<=0.00001 ) mo=vec2(0.0); | |
vec3 ro, rd; | |
if(camera_use) { | |
// ok. | |
vec3 camera_position_r = camera_position * vec3(-1.0, 1.0, 1.0); | |
vec3 camera_interest_r = camera_interest * vec3(-1.0, 1.0, 1.0); | |
vec3 camera_direction = camera_interest_r - camera_position_r; | |
camera_direction = normalize(camera_direction); | |
vec3 camera_up = (vec4(0.0, 1.0, 0.0, 0.0) * rot(camera_direction, deg2rad(camera_roll))).xyz; | |
vec3 camera_right = cross(camera_direction, camera_up); | |
camera_up = cross(camera_right, camera_direction); | |
p *= tan(deg2rad(camera_fov/2.0)); | |
vec3 image_point = -p.x * camera_right + p.y * camera_up + camera_position_r + camera_direction; | |
rd = normalize(image_point - camera_position_r); | |
ro = camera_position_r; | |
} else { | |
// camera | |
float an = -0.07*time*globalltime + 3.0*mo.x; | |
ro = 4.5*normalize(vec3(cos(an), 0.5, sin(an))); | |
ro.y += 1.0; | |
vec3 ta = vec3(0.0, 0.5, 0.0); | |
float cr = -0.4*cos(0.02*time*globalltime); | |
// build ray | |
vec3 ww = normalize( ta - ro); | |
vec3 uu = normalize(cross( vec3(sin(cr),cos(cr),0.0), ww )); | |
vec3 vv = normalize(cross(ww,uu)); | |
rd = normalize( p.x*uu + p.y*vv + 2.5*ww ); | |
} | |
// raymarch | |
vec3 col = raymarch( ro, rd ); | |
// contrast | |
col = col*col*(3.0-2.0*col)*1.4 - 0.4; | |
col.y *= 1.05; | |
// vignetting | |
if (vignette) | |
{ | |
col *= 0.25 + 0.75*pow( 16.0*q.x*q.y*(1.0-q.x)*(1.0-q.y), 0.1 ); | |
gl_FragColor = vec4( col, 1.0 ); | |
} | |
gl_FragColor = vec4( col, 1.0 ); | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<ShaderNodePreset SupportsAdaptiveDegradation="0" Description=" | |
This Matchbox shader simulates puffy noise. | |
Setup: | |
- Rotation : camera rotation around the puffy clouds | |
- Speed : speed of the noise animation (use negative values for backward playback) | |
Demo clip: https://vimeo.com/82495451 | |
Based on https://www.shadertoy.com/view/MsXGRf | |
License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. | |
[email protected]" Name="Crok Puffy Noise"> | |
<Shader OutputBitDepth="Output" Index="1"> | |
<Uniform ResDependent="None" Max="1000000.0" Min="0.0" Default="0.0" Inc="10.0" Tooltip="" Row="0" Col="0" Page="0" DisplayName="Rotation" Type="float" Name="Rotation"> | |
</Uniform> | |
<Uniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="5.0" Inc="0.01" Tooltip="" Row="1" Col="0" Page="0" DisplayName="Speed" Type="float" Name="time"> | |
</Uniform> | |
<Uniform Row="2" Col="0" Page="0" Default="False" Tooltip="" DisplayName="Vignette" Type="bool" Name="vignette"> | |
</Uniform> | |
<Uniform Row="0" Col="0" Page="1" Default="False" Tooltip="Use explicit camera controls instead of the default rotating camera. You can expression-link these to an Action camera's channels and plug this node into Action's Back input, then drive the camera about with Orbit, Dolly and friends" DisplayName="Use Camera" Type="bool" Name="camera_use"> | |
</Uniform> | |
<Uniform Inc="0.01" Tooltip="" Row="0" Col="1" Page="1" DisplayName="Position" ValueType="Position" Type="vec3" Name="camera_position"> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="-4.0"> | |
</SubUniform> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="3.0"> | |
</SubUniform> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="0.0"> | |
</SubUniform> | |
</Uniform> | |
<Uniform Inc="0.01" Tooltip="" Row="2" Col="1" Page="1" DisplayName="Interest" ValueType="Position" Type="vec3" Name="camera_interest"> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="0.0"> | |
</SubUniform> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="0.5"> | |
</SubUniform> | |
<SubUniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="0.0"> | |
</SubUniform> | |
</Uniform> | |
<Uniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="0.0" Inc="0.1" Tooltip="" Row="1" Col="2" Page="1" DisplayName="Roll" Type="float" Name="camera_roll"> | |
</Uniform> | |
<Uniform ResDependent="None" Max="1000000.0" Min="-1000000.0" Default="50.0" Inc="0.1" Tooltip="" Row="2" Col="2" Page="1" DisplayName="FOV" Type="float" Name="camera_fov"> | |
</Uniform> | |
</Shader> | |
<Page Name="Puffy Noise" Page="0"> | |
<Col Name="Setup" Col="0" Page="0"> | |
</Col> | |
</Page> | |
<Page Name="Camera" Page="1"> | |
<Col Name="" Col="0" Page="1"> | |
</Col> | |
<Col Name="" Col="1" Page="1"> | |
</Col> | |
<Col Name="" Col="2" Page="1"> | |
</Col> | |
</Page> | |
</ShaderNodePreset> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment