- Home /
Question by
Jay_Joy_Joy · Feb 26, 2021 at 01:28 PM ·
shadershadersshader programmingshaderlabshader-replacement
shadertoy to unity,Shadertoy to unity
https://www.shadertoy.com/view/wtSfDK# this shader convert to unity
Shader "Hidden/Gravity Racer X " { Properties { _MainTex("Texture", 2D) = "white" {} iResolution("iResolution",vector) = (1,1,1,1) iMouse("iMouse",vector) = (0,0,0,0) } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
float iTime;
float4 iMouse;
float4 iResolution;
#define PI 3.1415926
#define r2(a) float2x2(cos(a),sin(a),-sin(a),cos(a))
//http://mercury.sexy/hg_sdf/
// Sign function that doesn't return 0
float square(float x) { return x * x; }
float2 square(float2 x) { return x * x; }
float3 square(float3 x) { return x * x; }
float lengthSqr(float3 x) { return dot(x, x); }
// Maximum/minumum elements of a floattor
float vmax(float2 v) { return max(v.x, v.y); }
float vmax(float3 v) { return max(max(v.x, v.y), v.z); }
float vmax(float4 v) { return max(max(v.x, v.y), max(v.z, v.w)); }
float vmin(float2 v) { return min(v.x, v.y); }
float vmin(float3 v) { return min(min(v.x, v.y), v.z); }
float vmin(float4 v) { return min(min(v.x, v.y), min(v.z, v.w)); }
// Sign function that doesn't return 0
float sgn(float x) { return (x < 0.) ? -1. : 1.; }
float2 sgn(float2 v) { return float2((v.x < 0.) ? -1. : 1., (v.y < 0.) ? -1. : 1.); }
// Repeat space along one axis.
float pMod(inout float p, float size) {
float halfsize = size * 0.5;
float c = floor((p + halfsize) / size);
p = fmod(p + halfsize, size) - halfsize;
return c;
}
float2 pMod(inout float2 p, float2 size) {
float2 c = floor((p + size * 0.5) / size);
p = fmod(p + size * 0.5,size) - size * 0.5;
return c;
}
float3 pMod(inout float3 p, float3 size) {
float3 c = floor((p + size * 0.5) / size);
p = fmod(p + size * 0.5, size) - size * 0.5;
return c;
}
// Repeat around the origin by a fixed angle.
float pModPolar(inout float2 p, float repetitions) {
float angle = 2. * PI / repetitions;
float a = atan2(p.y, p.x) + angle / 2.;
float r = length(p);
float c = floor(a / angle);
a = fmod(a,angle) - angle / 2.;
p = float2(cos(a), sin(a)) * r;
// For an odd number of repetitions, fix cell index of the cell in -x direction
// (cell index would be e.g. -5 and 5 in the two halves of the cell):
if (abs(c) >= (repetitions / 2.)) c = abs(c);
return c;
}
// Mirror at an axis-aligned plane which is at a specified distance <dist> from the origin.
float pMirror(inout float p, float dist) {
float s = sgn(p);
p = abs(p) - dist;
return s;
}
// @pjkarlik Modified to have angle passed in for post rotation
float2 pMirrorOctant(inout float2 p, float2 dist, float r) {
float2 s = sgn(p);
pMirror(p.x, dist.x);
pMirror(p.y, dist.y);
p = mul(p,r2(r));
if (p.y > p.x) p.xy = p.yx;
return s;
}
#define R iResolution
#define M iMouse
#define T iTime
#define PI 3.1415926
#define MINDIST .001
#define MAXDIST 45.
#define r2(a) float2x2(cos(a),sin(a),-sin(a),cos(a))
#define hash(a, b) frac(sin(a*1.2664745 + b*.9560333 + 3.) * 14958.5453)
//@iq of hsv2rgb - updated
float3 hsv2rgb(float h) {
float3 c = float3(h,1.,.5);
float3 rgb = clamp(abs(fmod(c.x * 6.0 + float3(0.0,4.0,2.0),6.0) - 3.0) - 1.0, 0.0, 1.0);
return c.z * lerp(float3(1.0,1.0,1.0), rgb, c.y);
}
float3 getMouse(float3 ro) {
float x = M.xy == float2(0,0) ? 0. : -(M.y / R.y * 1. - .5) * PI;
float y = M.xy == float2(0,0) ? 0. : (M.x / R.x * 1. - .5) * PI;
ro.zy = mul(ro.zy,r2(x));
ro.xz = mul(ro.xz,r2(y));
return ro;
}
// path functions
float2 path(in float z) {
float2 p1 = float2(2.3 * sin(z * .15), 1.4 * cos(z * .25));
float2 p2 = float2(1.2 * sin(z * .39), 2.1 * sin(z * .15));
return p1 - p2;
}
float fBox(float3 p, float3 b) {
float3 d = abs(p) - b;
return length(max(d, float3(0,0,0))) + vmax(min(d, float3(0,0,0)));
}
float fBox2(float2 p, float2 b) {
float2 d = abs(p) - b;
return length(max(d, float2(0,0))) + vmax(min(d, float2(0,0)));
}
float time;
float2 fragtail(float3 pos, float z) {
float scale = 3.12;
float twave = 1.5 + 1.5 * sin(z * .5);
float3 cxz = float3(3.4,2.75,2. + twave);
float r = length(pos);
float t = 0.0;
float ss = .55;
for (int i = 0; i < 3; i++) {
pos = abs(pos);
if (pos.x - pos.y < 0.) pos.yx = pos.xy;
if (pos.x - pos.z < 0.) pos.zx = pos.xz;
if (pos.y - pos.z < 0.) pos.zy = pos.yz;
pos.x = scale * pos.x - cxz.x * (scale - 1.);
pos.y = scale * pos.y - cxz.y * (scale - 1.);
pos.z = scale * pos.z;
if (pos.z > 0.5 * cxz.z * (scale - 1.)) pos.z -= cxz.z * (scale - 1.);
r = fBox2(pos.xy,float2(scale,scale));
ss *= 1. / scale;
}
float rl = log2(ss * .255);
return float2(r * ss,rl);
}
float glow,iqd,travelSpeed,carWave;
float3 hp;
float2x2 tax,tay;
// float sg = toggle | to record or not change specfic
// values like hitpoint or glow. this prevents it from
// distorting items or textures for extra passes like
// ao or shadow
float2 map(in float3 pos, float sg) {
// map stuff
float3 p = pos - float3(0.,0.,0);
float2 res = float2(100.,-1.);
float msize = 4.;
// set path(s) floattor(s)
float2 tun = p.xy - path(p.z);
float3 px = float3(tun + float2(0.,-.1),pos.z + travelSpeed + carWave);
float3 q = float3(tun,p.z);
float3 s = q;
float3 r = float3(abs(q.x),abs(q.y),q.z);
// mods and floattors
pModPolar(q.xy,6.);
pModPolar(s.xy,3.);
pMod(s.z,msize);
float3 qid = pMod(q,float3(msize,msize,msize));
float twave = .15 + .15 * sin(qid.z * .5);
iqd = qid.z;
// panels
float d3 = fBox(s - float3(.75,0,0),float3(.001,.3,.75));
if (d3 < res.x) {
//sg prevents hp from changing for ao
if (sg > 0.) hp = s;
res = float2(d3,3.);
}
// stuff
float3 qr = float3(q.x,abs(q.y),abs(q.z));
float d6 = fBox(qr - float3(1.2,.25 - twave,1.25),float3(.05,.075,.45));
if (d6 < res.x) res = float2(d6,4.);
// fracal
float2 d1 = fragtail(q,qid.z);
if (d1.x < res.x) res = d1;
// beams
float d4 = length(r.xy - float2(.52,.33)) - .005 + .015 * sin(q.z * 3. - T * 3.5);
if (d4 < res.x && sg > 0.) res = float2(d4,12.);
// car
float3 ax = float3(abs(px.x),px.yz);
ax.xy = mul(ax.xy,tax);
ax.zy = mul(ax.zy,tay);
float d7 = fBox(ax - float3(0.3,.0,-.5),float3((frac(px.z - .245) * .4) - .09,.005,.25));
d7 = min(fBox(px + float3(0.,.22,.3),float3((frac(px.z - .25) * .5) - .15,.0175,.15)),d7);
if (d7 < res.x && sg > 0.) res = float2(d7,5.);
//sg prevents glow from changing for ao
if (sg > 0.) {
glow += .0001 / (.000025 + d4 * d4);
glow += .000085 / (.000025 + d7 * d7);
}
return res;
}
float2 marcher(float3 ro, float3 rd, float sg, int maxstep) {
float d = .0,
m = -1.;
int i = 0;
for (i = 0; i < maxstep; i++) {
float3 p = ro + rd * d;
float2 t = map(p, sg);
if (abs(t.x) < d * MINDIST)break;
d += t.x * .85;
m = t.y;
if (d > MAXDIST)break;
}
return float2(d,m);
}
// Tetrahedron technique @iq
// https://www.iquilezles.org/www/articles/normalsSDF/normalsSDF.htm
float3 getNormal(float3 p, float t) {
float e = (MINDIST + .0001) * t;
float2 h = float2(1.,-1.) * .5773;
return normalize(h.xyy * map(p + h.xyy * e, 0.).x +
h.yyx * map(p + h.yyx * e, 0.).x +
h.yxy * map(p + h.yxy * e, 0.).x +
h.xxx * map(p + h.xxx * e, 0.).x);
}
//camera setup
float3 camera(float3 lp, float3 ro, float2 uv) {
float3 f = normalize(lp - ro),//camera forward
r = normalize(cross(float3(0,1,0),f)),//camera right
u = normalize(cross(f,r)),//camera up
c = ro + f * .85,//zoom
i = c + uv.x * r + uv.y * u,//screen coords
rd = i - ro;//ray direction
return rd;
}
float3 get_stripes(float2 uv) {
uv.y -= tan(radians(45.)) * uv.x;
float sd = fmod(floor(uv.y * 2.5), 2.);
float3 background = (sd < 1.) ? float3(1.,1.,1.) : float3(0.,0.,0.);
return background;
}
float getDiff(float3 p, float3 n, float3 lpos) {
float3 l = normalize(lpos - p);
return clamp(dot(n,l),0. , 1.);
}
//@Shane low cost AO
float calcAO(in float3 p, in float3 n) {
float sca = 2., occ = 0.;
for (int i = 0; i < 5; i++) {
float hr = float(i + 1) * .17 / 5.;
// map(pos/dont record hit point)
float d = map(p + n * hr, 0.).x;
occ += (hr - d) * sca;
sca *= .9;
// Deliberately redundant line
// that may or may not stop the
// compiler from unrolling.
if (sca > 1e5) break;
}
return clamp(1. - occ, 0., 1.);
}
float iTimeDelta;
float3 getCol(float3 n) {
return hsv2rgb(float3(fmod(n.z * .5,1.0),0.8,0.8));
}
fixed4 frag(v2f i) : SV_Target
{
//mblur
float time = _Time.y + tex2D(_MainTex,i.uv / 8.).r * iTimeDelta;
// precal for ship
tax = r2(-45. * PI / 180.);
tay = r2(8. * PI / 180.);
travelSpeed = (time * 2.25);
carWave = sin(time * .3) + .75;
//
// pixel screen coordinates
float2 uv = (i.uv.xy - R.xy * 0.5) / R.y;
float3 C = float3(0.,0.,0.);//default color
float3 FC = float3(.8,.8,.8);//fade color
// ray origin / look at point based on path
float tm = travelSpeed;
float md = fmod(time * .1,2.);
float zoom = md < 1. ? .25 : -.25;
float3 lp = float3(0.,0.,0. - tm);
float3 ro = float3(0.,.01,zoom);
ro = getMouse(ro);
ro += lp;
lp.xy += path(lp.z);
ro.xy += path(ro.z);
// solve for Ray direction
float3 rd = camera(lp,ro,uv);
// trace scene (ro/rd/record hit point/steps)
float2 t = marcher(ro,rd,1.,192);
float d = t.x,
m = t.y;
// if visible
if (d < 45.) {
// step next point
float3 p = ro + rd * d;
float3 n = getNormal(p,d);
float3 lpos = float3(.0,0,0) + lp;
lpos.xy = path(lpos.z);
float dif = getDiff(p,n,lpos);
float ao = calcAO(p, n);
float3 h = lerp(hsv2rgb(iqd * .025),float3(.95,.95,.95),get_stripes(normalize(hp.yz) * .28));
if (m == 3.) {
hp.z += T * .75;
hp.y = abs(hp.y) - 1.5;
h = get_stripes(hp.yz * 4.) * float3(2.,2.,2.);
}
if (m == 4.) h = float3(.8,.7,.0);
if (m == 5.) h = float3(.75,.75,.75);
C += h * dif * ao;
}
C = lerp(FC,C, exp(-.00045 * t.x * t.x * t.x));
C += glow * .3;
return float4(pow(C, float3(0.4545,0.4545,0.4545)),1.0);
}
ENDCG
}
}
}
but color is missing.How can I solve the problem of color loss? ,https://www.shadertoy.com/view/wtSfDK# this shader convert to unity
Shader "Hidden/Gravity Racer X " { Properties { _MainTex("Texture", 2D) = "white" {} iResolution("iResolution",vector) = (1,1,1,1) iMouse("iMouse",vector) = (0,0,0,0) } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
float iTime;
float4 iMouse;
float4 iResolution;
#define PI 3.1415926
#define r2(a) float2x2(cos(a),sin(a),-sin(a),cos(a))
//http://mercury.sexy/hg_sdf/
// Sign function that doesn't return 0
float square(float x) { return x * x; }
float2 square(float2 x) { return x * x; }
float3 square(float3 x) { return x * x; }
float lengthSqr(float3 x) { return dot(x, x); }
// Maximum/minumum elements of a floattor
float vmax(float2 v) { return max(v.x, v.y); }
float vmax(float3 v) { return max(max(v.x, v.y), v.z); }
float vmax(float4 v) { return max(max(v.x, v.y), max(v.z, v.w)); }
float vmin(float2 v) { return min(v.x, v.y); }
float vmin(float3 v) { return min(min(v.x, v.y), v.z); }
float vmin(float4 v) { return min(min(v.x, v.y), min(v.z, v.w)); }
// Sign function that doesn't return 0
float sgn(float x) { return (x < 0.) ? -1. : 1.; }
float2 sgn(float2 v) { return float2((v.x < 0.) ? -1. : 1., (v.y < 0.) ? -1. : 1.); }
// Repeat space along one axis.
float pMod(inout float p, float size) {
float halfsize = size * 0.5;
float c = floor((p + halfsize) / size);
p = fmod(p + halfsize, size) - halfsize;
return c;
}
float2 pMod(inout float2 p, float2 size) {
float2 c = floor((p + size * 0.5) / size);
p = fmod(p + size * 0.5,size) - size * 0.5;
return c;
}
float3 pMod(inout float3 p, float3 size) {
float3 c = floor((p + size * 0.5) / size);
p = fmod(p + size * 0.5, size) - size * 0.5;
return c;
}
// Repeat around the origin by a fixed angle.
float pModPolar(inout float2 p, float repetitions) {
float angle = 2. * PI / repetitions;
float a = atan2(p.y, p.x) + angle / 2.;
float r = length(p);
float c = floor(a / angle);
a = fmod(a,angle) - angle / 2.;
p = float2(cos(a), sin(a)) * r;
// For an odd number of repetitions, fix cell index of the cell in -x direction
// (cell index would be e.g. -5 and 5 in the two halves of the cell):
if (abs(c) >= (repetitions / 2.)) c = abs(c);
return c;
}
// Mirror at an axis-aligned plane which is at a specified distance <dist> from the origin.
float pMirror(inout float p, float dist) {
float s = sgn(p);
p = abs(p) - dist;
return s;
}
// @pjkarlik Modified to have angle passed in for post rotation
float2 pMirrorOctant(inout float2 p, float2 dist, float r) {
float2 s = sgn(p);
pMirror(p.x, dist.x);
pMirror(p.y, dist.y);
p = mul(p,r2(r));
if (p.y > p.x) p.xy = p.yx;
return s;
}
#define R iResolution
#define M iMouse
#define T iTime
#define PI 3.1415926
#define MINDIST .001
#define MAXDIST 45.
#define r2(a) float2x2(cos(a),sin(a),-sin(a),cos(a))
#define hash(a, b) frac(sin(a*1.2664745 + b*.9560333 + 3.) * 14958.5453)
//@iq of hsv2rgb - updated
float3 hsv2rgb(float h) {
float3 c = float3(h,1.,.5);
float3 rgb = clamp(abs(fmod(c.x * 6.0 + float3(0.0,4.0,2.0),6.0) - 3.0) - 1.0, 0.0, 1.0);
return c.z * lerp(float3(1.0,1.0,1.0), rgb, c.y);
}
float3 getMouse(float3 ro) {
float x = M.xy == float2(0,0) ? 0. : -(M.y / R.y * 1. - .5) * PI;
float y = M.xy == float2(0,0) ? 0. : (M.x / R.x * 1. - .5) * PI;
ro.zy = mul(ro.zy,r2(x));
ro.xz = mul(ro.xz,r2(y));
return ro;
}
// path functions
float2 path(in float z) {
float2 p1 = float2(2.3 * sin(z * .15), 1.4 * cos(z * .25));
float2 p2 = float2(1.2 * sin(z * .39), 2.1 * sin(z * .15));
return p1 - p2;
}
float fBox(float3 p, float3 b) {
float3 d = abs(p) - b;
return length(max(d, float3(0,0,0))) + vmax(min(d, float3(0,0,0)));
}
float fBox2(float2 p, float2 b) {
float2 d = abs(p) - b;
return length(max(d, float2(0,0))) + vmax(min(d, float2(0,0)));
}
float time;
float2 fragtail(float3 pos, float z) {
float scale = 3.12;
float twave = 1.5 + 1.5 * sin(z * .5);
float3 cxz = float3(3.4,2.75,2. + twave);
float r = length(pos);
float t = 0.0;
float ss = .55;
for (int i = 0; i < 3; i++) {
pos = abs(pos);
if (pos.x - pos.y < 0.) pos.yx = pos.xy;
if (pos.x - pos.z < 0.) pos.zx = pos.xz;
if (pos.y - pos.z < 0.) pos.zy = pos.yz;
pos.x = scale * pos.x - cxz.x * (scale - 1.);
pos.y = scale * pos.y - cxz.y * (scale - 1.);
pos.z = scale * pos.z;
if (pos.z > 0.5 * cxz.z * (scale - 1.)) pos.z -= cxz.z * (scale - 1.);
r = fBox2(pos.xy,float2(scale,scale));
ss *= 1. / scale;
}
float rl = log2(ss * .255);
return float2(r * ss,rl);
}
float glow,iqd,travelSpeed,carWave;
float3 hp;
float2x2 tax,tay;
// float sg = toggle | to record or not change specfic
// values like hitpoint or glow. this prevents it from
// distorting items or textures for extra passes like
// ao or shadow
float2 map(in float3 pos, float sg) {
// map stuff
float3 p = pos - float3(0.,0.,0);
float2 res = float2(100.,-1.);
float msize = 4.;
// set path(s) floattor(s)
float2 tun = p.xy - path(p.z);
float3 px = float3(tun + float2(0.,-.1),pos.z + travelSpeed + carWave);
float3 q = float3(tun,p.z);
float3 s = q;
float3 r = float3(abs(q.x),abs(q.y),q.z);
// mods and floattors
pModPolar(q.xy,6.);
pModPolar(s.xy,3.);
pMod(s.z,msize);
float3 qid = pMod(q,float3(msize,msize,msize));
float twave = .15 + .15 * sin(qid.z * .5);
iqd = qid.z;
// panels
float d3 = fBox(s - float3(.75,0,0),float3(.001,.3,.75));
if (d3 < res.x) {
//sg prevents hp from changing for ao
if (sg > 0.) hp = s;
res = float2(d3,3.);
}
// stuff
float3 qr = float3(q.x,abs(q.y),abs(q.z));
float d6 = fBox(qr - float3(1.2,.25 - twave,1.25),float3(.05,.075,.45));
if (d6 < res.x) res = float2(d6,4.);
// fracal
float2 d1 = fragtail(q,qid.z);
if (d1.x < res.x) res = d1;
// beams
float d4 = length(r.xy - float2(.52,.33)) - .005 + .015 * sin(q.z * 3. - T * 3.5);
if (d4 < res.x && sg > 0.) res = float2(d4,12.);
// car
float3 ax = float3(abs(px.x),px.yz);
ax.xy = mul(ax.xy,tax);
ax.zy = mul(ax.zy,tay);
float d7 = fBox(ax - float3(0.3,.0,-.5),float3((frac(px.z - .245) * .4) - .09,.005,.25));
d7 = min(fBox(px + float3(0.,.22,.3),float3((frac(px.z - .25) * .5) - .15,.0175,.15)),d7);
if (d7 < res.x && sg > 0.) res = float2(d7,5.);
//sg prevents glow from changing for ao
if (sg > 0.) {
glow += .0001 / (.000025 + d4 * d4);
glow += .000085 / (.000025 + d7 * d7);
}
return res;
}
float2 marcher(float3 ro, float3 rd, float sg, int maxstep) {
float d = .0,
m = -1.;
int i = 0;
for (i = 0; i < maxstep; i++) {
float3 p = ro + rd * d;
float2 t = map(p, sg);
if (abs(t.x) < d * MINDIST)break;
d += t.x * .85;
m = t.y;
if (d > MAXDIST)break;
}
return float2(d,m);
}
// Tetrahedron technique @iq
// https://www.iquilezles.org/www/articles/normalsSDF/normalsSDF.htm
float3 getNormal(float3 p, float t) {
float e = (MINDIST + .0001) * t;
float2 h = float2(1.,-1.) * .5773;
return normalize(h.xyy * map(p + h.xyy * e, 0.).x +
h.yyx * map(p + h.yyx * e, 0.).x +
h.yxy * map(p + h.yxy * e, 0.).x +
h.xxx * map(p + h.xxx * e, 0.).x);
}
//camera setup
float3 camera(float3 lp, float3 ro, float2 uv) {
float3 f = normalize(lp - ro),//camera forward
r = normalize(cross(float3(0,1,0),f)),//camera right
u = normalize(cross(f,r)),//camera up
c = ro + f * .85,//zoom
i = c + uv.x * r + uv.y * u,//screen coords
rd = i - ro;//ray direction
return rd;
}
float3 get_stripes(float2 uv) {
uv.y -= tan(radians(45.)) * uv.x;
float sd = fmod(floor(uv.y * 2.5), 2.);
float3 background = (sd < 1.) ? float3(1.,1.,1.) : float3(0.,0.,0.);
return background;
}
float getDiff(float3 p, float3 n, float3 lpos) {
float3 l = normalize(lpos - p);
return clamp(dot(n,l),0. , 1.);
}
//@Shane low cost AO
float calcAO(in float3 p, in float3 n) {
float sca = 2., occ = 0.;
for (int i = 0; i < 5; i++) {
float hr = float(i + 1) * .17 / 5.;
// map(pos/dont record hit point)
float d = map(p + n * hr, 0.).x;
occ += (hr - d) * sca;
sca *= .9;
// Deliberately redundant line
// that may or may not stop the
// compiler from unrolling.
if (sca > 1e5) break;
}
return clamp(1. - occ, 0., 1.);
}
float iTimeDelta;
float3 getCol(float3 n) {
return hsv2rgb(float3(fmod(n.z * .5,1.0),0.8,0.8));
}
fixed4 frag(v2f i) : SV_Target
{
//mblur
float time = _Time.y + tex2D(_MainTex,i.uv / 8.).r * iTimeDelta;
// precal for ship
tax = r2(-45. * PI / 180.);
tay = r2(8. * PI / 180.);
travelSpeed = (time * 2.25);
carWave = sin(time * .3) + .75;
//
// pixel screen coordinates
float2 uv = (i.uv.xy - R.xy * 0.5) / R.y;
float3 C = float3(0.,0.,0.);//default color
float3 FC = float3(.8,.8,.8);//fade color
// ray origin / look at point based on path
float tm = travelSpeed;
float md = fmod(time * .1,2.);
float zoom = md < 1. ? .25 : -.25;
float3 lp = float3(0.,0.,0. - tm);
float3 ro = float3(0.,.01,zoom);
ro = getMouse(ro);
ro += lp;
lp.xy += path(lp.z);
ro.xy += path(ro.z);
// solve for Ray direction
float3 rd = camera(lp,ro,uv);
// trace scene (ro/rd/record hit point/steps)
float2 t = marcher(ro,rd,1.,192);
float d = t.x,
m = t.y;
// if visible
if (d < 45.) {
// step next point
float3 p = ro + rd * d;
float3 n = getNormal(p,d);
float3 lpos = float3(.0,0,0) + lp;
lpos.xy = path(lpos.z);
float dif = getDiff(p,n,lpos);
float ao = calcAO(p, n);
float3 h = lerp(hsv2rgb(iqd * .025),float3(.95,.95,.95),get_stripes(normalize(hp.yz) * .28));
if (m == 3.) {
hp.z += T * .75;
hp.y = abs(hp.y) - 1.5;
h = get_stripes(hp.yz * 4.) * float3(2.,2.,2.);
}
if (m == 4.) h = float3(.8,.7,.0);
if (m == 5.) h = float3(.75,.75,.75);
C += h * dif * ao;
}
C = lerp(FC,C, exp(-.00045 * t.x * t.x * t.x));
C += glow * .3;
return float4(pow(C, float3(0.4545,0.4545,0.4545)),1.0);
}
ENDCG
}
}
}
but color is misssing,How can I solve the problem of color loss?
Comment