Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
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
Add comment
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

186 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

For a glass shader: How to "Fallback" completely 100% transparent that works in all device or that it do not render at all? 0 Answers

How do I get local object position param in particle system for shader? 0 Answers

Fog not working in my Shader~ 0 Answers

Header for material properties in inspector? 2 Answers

Help me understand stencil shader logic 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges