i was in holiday and skiing. Before my holiday i work on a new command MP_ParticleAcceleration(Entity, VarVelocity.f) ; Acceleration of particle , a new help file with a nice translation from Peter and some bug fixes.
website (14 000 open gl shader) i have translated them with my new Shaderconverter program. The program translated GLSL to HLSL for mp3d dx9 shader functions. You can test the shader with my shadereditore ...
Code: Select all
float4x4 worldViewProjI; float postfx;
#ifdef GL_ES
// precision mediump float;
#endif
// Rainbow Dash rendered by mapping signs of improper equations of graphic primitives,
// mainly lines, circles, and ellipses.
// (c) mniip 2014
uniform float time;
uniform float2 mouse;
uniform float2 resolution = float2(933,511) ; // Screensize;
static float2 m;
float3 COLOR_LINE = float3(0x77, 0xB0, 0xE0) / 255.0;
float3 COLOR_MANELINE = float3(0x1E, 0x98, 0xD3) / 255.0;
float3 COLOR_BODY = float3(0x9E, 0xDB, 0xF9) / 255.0;
float3 COLOR_MANE1 = float3(0xEE, 0x41, 0x44) / 255.0;
float3 COLOR_MANE2 = float3(0xF3, 0x70, 0x33) / 255.0;
float3 COLOR_MANE3 = float3(0xFD, 0xF6, 0xAF) / 255.0;
float3 COLOR_MANE4 = float3(0x62, 0xBC, 0x4D) / 255.0;
float3 COLOR_MANE5 = float3(0x67, 0x2F, 0x89) / 255.0;
float3 COLOR_EYEBROW = float3(0x00, 0x00, 0x00) / 255.0;
float3 COLOR_IRIS1 = float3(0xC6, 0x00, 0x6F) / 255.0;
float3 COLOR_IRIS2 = float3(0x46, 0x00, 0x25) / 255.0;
float3 COLOR_BLACK = float3(0x00, 0x00, 0x00) / 255.0;
float3 COLOR_WHITE = float3(0xFF, 0xFF, 0xFF) / 255.0;
bool linee(float2 p, float2 a, float2 b)
{
return (p.x - a.x) * (a.y - b.y) > (p.y - a.y) * (a.x - b.x);
}
bool circle(float2 p, float2 a, float r)
{
return (p.x - a.x) * (p.x - a.x) + (p.y - a.y) * (p.y - a .y) > r * r;
}
bool ellipse(float2 p, float2 a, float2 r)
{
return (p.x - a.x) * (p.x - a.x) / r.x / r.x + (p.y - a.y) * (p.y - a .y) / r.y / r.y > 1.0;
}
bool ear(inout float3 c, float2 p)
{
bool A = circle(p, float2(638, 664), 362.);
bool B = circle(p, float2(1075, 641), 323.);
bool C = circle(p, float2(646, 708), 378.);
if(!A && !B && !C)
{
bool D = circle(p, float2(637, 662), 345.);
bool E = circle(p, float2(1109, 588), 363.);
bool F = circle(p, float2(651, 692), 269.);
bool G = circle(p, float2(395, 732), 516.);
if(D || E || (!F && G))
c = COLOR_LINE;
else
c = COLOR_BODY;
return true;
}
return false;
}
bool mane(inout float3 c, float2 p)
{
bool A = circle(p, float2(434, 460), 514.);
bool B = circle(p, float2(254, 110), 903.);
bool C = circle(p, float2(384, 228), 668.);
bool D = circle(p, float2(475, 505), 425.);
bool E = circle(p, float2(513, 281), 536.);
bool F = circle(p, float2(777, 435), 360.);
bool G = circle(p, float2(915, 174), 554.);
bool H = circle(p, float2(659, 444), 536.);
bool I = circle(p, float2(-201, 601), 337.);
bool J = linee(p, float2(-253, 218), float2(176, 590));
bool K = circle(p, float2(-164, 1212), 882.);
bool L = circle(p, float2(650, 764), 80.); // lol weird
if(!A && !B && (C || (!D && E) || (!F && G) || (!H || (I && !J)) && !K) || !L)
{
bool M = circle(p, float2(422, 434), 518.);
bool N = circle(p, float2(372, 261), 647.);
bool O = circle(p, float2(491, 499), 425.);
bool P = circle(p, float2(395, 377), 402.);
bool Q = circle(p, float2(790, 454), 352.);
bool R = circle(p, float2(891, 216), 527.);
bool S = circle(p, float2(680, 453), 536.);
bool T = circle(p, float2(-217, 1332), 992.);
bool U = circle(p, float2(-150, 586), 305.);
bool V = linee(p, float2(280, 404), float2(119, 566));
if((!M && N) || ((!O && P || !Q && !M) && R) || (!S && !M && !T) || (U && !T && V))
{
if(circle(p, float2(491, 84), 764.))
c = COLOR_MANE1;
else
if(circle(p, float2(686, 204), 576.))
c = COLOR_MANE2;
else
c = COLOR_MANE3;
}
else
c = COLOR_MANELINE;
return true;
}
return false;
}
bool mane2(inout float3 c, float2 p)
{
bool A = circle(p, float2(607, 464), 306.);
bool B = circle(p, float2(777, 485), 339.);
bool C = circle(p, float2(1181, -127), 463.);
bool D = circle(p, float2(-433, 198), 1442.);
bool E = linee(p, float2(554, -80), float2(1055, -80));
if((A && !B || !C) && !D && E)
{
bool F = circle(p, float2(613, 461), 319.);
bool G = circle(p, float2(769, 486), 323.);
bool H = circle(p, float2(1195, -123), 454.);
bool I = circle(p, float2(288, 485), 691.);
bool J = circle(p, float2(122, 278), 864.);
if((F && !G || !H) && !I && !J)
c = COLOR_MANE4;
else
{
bool K = circle(p, float2(388, 235), 607.);
bool L = circle(p, float2(416, 87), 570.);
if(K && !L)
c = COLOR_MANE5;
else
c = COLOR_MANELINE;
}
return true;
}
return false;
}
bool face(inout float3 c, float2 p)
{
bool A = circle(p, float2(588, 396), 357.);
bool B = linee(p, float2(325, 74), float2(887, 122));
bool C = ellipse(p, float2(489, 237), float2(287, 166));
bool D = circle(p, float2(209, 437), 163.);
if(!A && B || !C && D)
{
bool E = ellipse(p, float2(536, 253), float2(315, 170));
bool F = circle(p, float2(500, 921), 828.);
bool G = circle(p, float2(220, 367), 110.);
bool H = linee(p, float2(201, 454), float2(658, 108));
bool I = linee(p, float2(237, 115), float2(363, 238));
bool J = ellipse(p, float2(283, 204), float2(68, 57));
bool K = ellipse(p, float2(253, 192), float2(102, 70));
bool L = circle(p, float2(285, 228), 19.);
bool M = circle(p, float2(281, 236), 19.);
if((!E && !F && G || H) && (I || !J || K) && (L || !M))
c = COLOR_BODY;
else
c = COLOR_LINE;
return true;
}
return false;
}
bool eye1(inout float3 c, float2 p)
{
// skewed ellipse please ignore
#define SQR(q) ((q) * (q))
bool A = SQR((p.x - 590.0) / 150.0 - (p.y - 378.0) / 900.0) + SQR((p.y - 378.0) / 180.0) < 1.0;
if(A)
{
bool B = SQR((p.x - 593.0) / 149.0 - (p.y - 382.0) / 900.0) + SQR((p.y - 361.0) / 180.0) < 1.0;
if(B)
{
float2 d = m - float2(580, 360);
if(length(d) > 60.0)
d = d / length(d) * 60.0;
bool C = ellipse(p, float2(580, 360) + d, float2(112, 162));
if(C)
c = COLOR_WHITE;
else
{
bool D = ellipse(p, float2(551, 305) + d, float2(19, 26));
bool E = ellipse(p, float2(601, 410) + d, float2(35, 57));
if(D && E)
{
bool F = ellipse(p, float2(580, 360) + d * 1.3, float2(71, 126));
if(F)
c = lerp(COLOR_IRIS1, COLOR_IRIS2, SQR((p.y - 360.0 - d.y) / 252.0 + 0.5));
else
c = COLOR_BLACK;
}
else
c = COLOR_WHITE;
}
}
else
c = COLOR_EYEBROW;
return true;
}
// rotating ellipses hacks, nothing to see here
bool G = ellipse(p, float2(757, 430), float2(40, 5));
bool H = ellipse(float2(p.x + p.y * 0.3, p.x * -0.3 + p.y), float2(890, 260), float2(40, 6));
bool I = ellipse(float2(p.x + p.y * 0.5, p.x * -0.5 + p.y), float2(990, 175), float2(40, 7));
if(!G || !H || !I)
{
c = COLOR_BLACK;
return true;
}
return false;
}
bool eye2(inout float3 c, float2 p)
{
bool A = linee(p, float2(207, 460), float2(323, 265));
bool B = circle(p, float2(213, 434), 158.);
bool C = circle(p, float2(739, 417), 500.);
bool D = ellipse(p, float2(289, 444), float2(50, 144));
if(!A && !B && !C || !D)
{
bool E = ellipse(p, float2(285, 390), float2(47, 184));
if(!E)
{
float2 d = m - float2(290, 360);
if(length(d) > 60.0)
d = d / length(d) * 60.0;
d *= float2(0.33, 1.0);
bool F = ellipse(p, float2(290, 360) + d, float2(50, 162));
if(F)
c = COLOR_WHITE;
else
{
bool D = ellipse(p, float2(304, 446) + d, float2(17, 41));
bool E = ellipse(p, float2(278, 354) + d, float2(11, 24));
if(D && E)
{
bool F = ellipse(p, float2(290, 360) + d * 1.3, float2(42, 126));
if(F)
c = lerp(COLOR_IRIS1, COLOR_IRIS2, SQR((p.y - 360.0 - d.y) / 252.0 + 0.5));
else
c = COLOR_BLACK;
}
else
c = COLOR_WHITE;
}
}
else
c = COLOR_EYEBROW;
return true;
}
return false;
}
bool neck(inout float3 c, float2 p)
{
bool A = circle(p, float2(1247, -28), 638.);
bool B = circle(p, float2(353, 258), 638.);
bool C = linee(p, float2(554, -80), float2(1055, -80));
if(!A && !B && C)
{
bool D = circle(p, float2(1235, -21), 606.);
if(D)
c = COLOR_LINE;
else
c = COLOR_BODY;
return true;
}
return false;
}
float2 transform(float2 x)
{
return (x - resolution / 2.0) / resolution.y * 1000.0 + 500.0;
}
float4 main(float2 gl_FragCoord: TEXCOORD0, float4 gl_FragColor: COLOR ) : COLOR
{
if (postfx == 1) gl_FragCoord.x = gl_FragCoord.x + 0.23;
gl_FragCoord.y = 1 - gl_FragCoord.y; gl_FragCoord = gl_FragCoord * resolution;
m = transform(mouse * resolution);
float2 p = transform(gl_FragCoord.xy);
float3 c = float3(1, 1, 1);
// ear(c, p) || mane(c, p) || mane2(c, p) || eye1(c, p) || eye2(c, p) || face(c, p) || neck(c, p);
neck(c, p) || face(c, p) || eye2(c, p) ||eye1(c, p) ||mane2(c, p) || mane(c, p) ||ear(c, p); return float4(c, 1);
}
// Vertex Shader
struct VS_INPUT
{
float3 position : POSITION;
float2 texture0 : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 hposition : POSITION;
float2 texture0 : TEXCOORD0;
};
VS_OUTPUT myvs( VS_INPUT IN )
{
VS_OUTPUT OUT;
if (postfx == 0) {
OUT.hposition = mul( worldViewProjI, float4(IN.position.x ,IN.position.y ,IN.position.z, 1) );
} else {
OUT.hposition = float4(IN.position.x ,IN.position.y ,IN.position.z, 1);
}
OUT.texture0 = IN.texture0;
return OUT;
}
// ---------------------------------------------
technique Start
{
pass p1
{
VertexShader = compile vs_3_0 myvs();
PixelShader = compile ps_3_0 main();
}
}
Code: Select all
float4x4 worldViewProjI; float postfx;
#ifdef GL_ES
// precision mediump float;
#endif
uniform float time;
uniform float2 mouse;
uniform float2 resolution = float2(933,511) ; // Screensize;
float2 hash( float2 p )
{
p = float2( dot(p,float2(127.1,311.7)), dot(p,float2(269.5,183.3)));
return -1.0 + 2.0*frac(sin(p)*43758.5453123);
}
float noise( in float2 p )
{
float2 i = floor( p );
float2 f = frac( p );
float2 u = f*f*f*(6.0*f*f - 15.0*f + 10.0);
return lerp( lerp( dot( hash( i + float2(0.0,0.0) ), f - float2(0.0,0.0) ),
dot( hash( i + float2(1.0,0.0) ), f - float2(1.0,0.0) ), u.x),
lerp( dot( hash( i + float2(0.0,1.0) ), f - float2(0.0,1.0) ),
dot( hash( i + float2(1.0,1.0) ), f - float2(1.0,1.0) ), u.x), u.y) * 0.5 + 0.5;
}
float fbm( in float2 p )
{
float ret = 0.0;
ret += noise( p * 1.0 ) * 1.0;
ret += noise( p * 2.0 ) * 0.5;
ret += noise( p * 4.0 ) * 0.25;
ret += noise( p * 8.0 ) * 0.125;
ret *= 0.533333;
return ret;
}
float4 main(float2 gl_FragCoord: TEXCOORD0, float4 gl_FragColor: COLOR ) : COLOR {
if (postfx == 1) gl_FragCoord.x = gl_FragCoord.x + 0.23;
gl_FragCoord.y = 1 - gl_FragCoord.y; gl_FragCoord = gl_FragCoord * resolution;
float2 uv = gl_FragCoord.xy / resolution.xy * 2.0 - 1.0;
uv.x *= resolution.x / resolution.y;
float2 m = mouse * 2.0 - 1.0;
m.x *= resolution.x / resolution.y;
float2 p = floor(uv);
float2 f = frac(uv);
float3 normal;
float offset = 0.0001;
float mult = 10.0;
float2 vl = float2(uv.x - offset, uv.y) * mult;
float2 vr = float2(uv.x + offset, uv.y) * mult;
float2 vu = float2(uv.x, uv.y - offset) * mult;
float2 vd = float2(uv.x, uv.y + offset) * mult;
float hl = fbm(vl);
float hr = fbm(vr);
float hu = fbm(vu);
float hd = fbm(vd);
float3 vlh = float3(vl.x, vl.y, hl);
float3 vrh = float3(vr.x, vr.y, hr);
float3 vuh = float3(vu.x, vu.y, hu);
float3 vdh = float3(vd.x, vd.y, hd);
normal = normalize(cross(vlh - vrh, vuh - vdh));
float3 color;
float3 lightDir = normalize(-float3(uv.x - m.x, uv.y - m.y, -0.4));
float3 eye = float3(0.0, 0.0, -1.0);
float3 view = normalize(float3(uv.x, uv.y, 0.0) - eye);
float3 ref = reflect(view, normal);
float3 d = max(float3(0,0,0), dot(normal, lightDir));
float3 s = pow(d, float3(7,7,7));
color = d*0.5 + s;
gl_FragColor = float4(float3(pow(color, float3(1.0, 0.8, 0.7))), 1.0);
return gl_FragColor;
}
// Vertex Shader
struct VS_INPUT
{
float3 position : POSITION;
float2 texture0 : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 hposition : POSITION;
float2 texture0 : TEXCOORD0;
};
VS_OUTPUT myvs( VS_INPUT IN )
{
VS_OUTPUT OUT;
if (postfx == 0) {
OUT.hposition = mul( worldViewProjI, float4(IN.position.x ,IN.position.y ,IN.position.z, 1) );
} else {
OUT.hposition = float4(IN.position.x ,IN.position.y ,IN.position.z, 1);
}
OUT.texture0 = IN.texture0;
return OUT;
}
// ---------------------------------------------
technique Start
{
pass p1
{
VertexShader = compile vs_3_0 myvs();
PixelShader = compile ps_3_0 main();
}
}