Seems like that thread is so old none of the links still work.

Here is prob the most valuable part of that thread, here is the bare bones of the **skybox** shader with a simple color for sky, simple color for ground and a simple fog area at the join.

*Edited to fix the colors*

#line 2

â#define SKYCOLOR vec3(0.29, 0.68, 0.98)â

â#define FOGCOLOR vec3(0.68, 0.85, 0.98)â

â#define OCEANCOLOR vec3(0.07, 0.05, 0.98)â

//Resolution X, Y, Z (ratio , by default 1.0)

//vec3 iResolution = vec3(iWorldScale.xz, 1.0);

// We set the seconds (iDate.w) of iDate to iGlobalTime, which contains the current date in seconds

//vec4 iDate = vec4(0, 0, 0, iGlobalTime);

vec3 getSkyboxColor()

{

vec3 rayDir = normalize(_normal);

float pos = rayDir.y;

vec3 col = SKYCOLOR;

float r = sqrt( dot(pos,pos) ); //vector length = radius

float smooth_to_fog = 0.0;

```
/***** Calculate Sky *****/
if( pos > 0.0 )
{
col = SKYCOLOR;
smooth_to_fog = 1.0 - smoothstep(0.025, 0.2, r);
}
/***** Calculate Ocean *****/
else if( pos <= 0.0 )
{
col = OCEANCOLOR;
smooth_to_fog = 1.0 - smoothstep(0.01, 0.02, r);
}
/***** Mix sky or ocean with fog *****/
col = mix( col, FOGCOLOR, smooth_to_fog);
return col;
```

}

Here is the code for the 2D water shader modded for Hifi by Summer4me

#line 2

// Found this on GLSL sandbox. I really liked it, changed a few things and made it tileable.

//

// by David Hoskins.

// Water turbulence effect by joltz0r 2013-07-04, improved 2013-07-07

// Redefine below to see the tilingâŚ

//#define SHOW_TILING

// by summer4meâŚ

// I have found the script here https://www.shadertoy.com/view/MdlXz8

// and have adapted it for procedural entities in Highfidelity

#define TAU 6.28318530718

#define MAX_ITER 5

void mainImage( out vec4 fragColor, in vec2 fragCoord )

{ vec2 iResolution;

iResolution.x=7.0;

iResolution.y=7.0;

float time = iGlobalTime * .5+23.0;

// uv should be the 0-1 uv of textureâŚ

vec2 uv = fragCoord.xy / iResolution.xy;

#ifdef SHOW_TILING

vec2 p = mod(uv*TAU*2.0, TAU)-250.0;

#else

vec2 p = mod(uv*TAU, TAU)-250.0;

#endif

vec2 i = vec2Â§;

float c = 1.0;

float inten = .005;

```
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 colour = vec3(pow(abs(c), 8.0));
colour = clamp(colour + vec3(0.0, 0.35, 0.5), 0.0, 1.0);
```

#ifdef SHOW_TILING

// Flash tile bordersâŚ

vec2 pixel = 2.0/ iResolution.xy;

uv *= 2.0;

```
float f = floor(mod(iGlobalTime*.5, 2.0)); // Flash value.
vec2 first = step(pixel, uv) * f; // Rule out first screen pixels and flash.
uv = step(fract(uv), pixel); // Add one line of pixels per tile.
colour = mix(colour, vec3(1.0, 1.0, 0.0), (uv.x + uv.y) * first.x * first.y); // Yellow line
```

#endif

fragColor = vec4(colour, 1.0);

}

// This is the function that is being called by us

vec4 getProceduralColor() {

// retrieve the position to get the color

vec2 position = _position.xz;

// add a half to all the axes to adjust them to our method

position += 0.5;

// invert the y axis

position.y = 1.0 - position.y;

// initialize the result value

vec4 result;

// We call shadertoy their entry point here, which is mainImage for normal viewports

// This function writes to the result value, as input we enter the position multiplied by the current worldscale

mainImage(result, position * iWorldScale.xz);

// Return the colour vector to our renderer in Interface

return result;

}

If you believe the problem with the water shader might be the hosting or marketplace intrusions then host this file as water.fs or something and call it into your own object via the userData field.

userData:

{

âProceduralEntityâ: {

âversionâ: 2,

âshaderUrlâ: âhttp://www.your_ip/folders/water.fsâ

}

}