// __multiversion__
// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
#include "fragmentVersionCentroid.h"
#if __VERSION__ >= 300
	#ifndef BYPASS_PIXEL_SHADER
		#if defined(TEXEL_AA) && defined(TEXEL_AA_FEATURE)
			_centroid in highp vec2 uv0;
			_centroid in highp vec2 uv1;
		#else
			_centroid in vec2 uv0;
			_centroid in vec2 uv1;
		#endif
	#endif
#else
	#ifndef BYPASS_PIXEL_SHADER
		varying vec2 uv0;
		varying vec2 uv1;
	#endif
#endif
varying vec4 color;
#ifdef FOG
varying vec4 fogColor;
#endif
varying highp vec3 fragment_pos; varying highp vec3 look_vector;
varying highp vec3 position; varying highp vec3 look; varying highp float sunfx; varying float cont; varying highp vec4 awn; varying vec4 cclr; varying float fray; varying float fog1; varying float rfog; varying float dfog; varying float atmos1; varying float atmos2; varying float atmos3;
#include "uniformShaderConstants.h"
#include "util.h"
#include ".renderchunks.h"
LAYOUT_BINDING(0) uniform sampler2D TEXTURE_0;
LAYOUT_BINDING(1) uniform sampler2D TEXTURE_1;
LAYOUT_BINDING(2) uniform sampler2D TEXTURE_2;
void main(){
#ifdef BYPASS_PIXEL_SHADER
	gl_FragColor = vec4(0, 0, 0, 0);
	return;
#else 
#if USE_TEXEL_AA
	vec4 diffuse = texture2D_AA(TEXTURE_0, uv0);
#else
	vec4 diffuse = texture2D(TEXTURE_0, uv0);
vec4 uvs = texture2D( TEXTURE_1,vec2(uv1.x*0.65,uv1.y));
#endif	
#ifdef SEASONS_FAR
	diffuse.a = 1.0;
#endif
#if USE_ALPHA_TEST
	#ifdef ALPHA_TO_COVERAGE
	#define ALPHA_THRESHOLD 0.05
	#else
	#define ALPHA_THRESHOLD 0.5
	#endif
	if(diffuse.a < ALPHA_THRESHOLD)
		discard;
#endif	
vec4 inColor = color; float wk = texture2D(TEXTURE_1, vec2(0., 1.)).r;
wk = clamp((wk-.5)*2., 0., 1.); float ng = 1.-wk*uv1.y; float sd = 0.7-abs(.6-wk)*uv1.y;
float rn = smoothstep(0.55,0.1,FOG_CONTROL.r)*uv1.y;
vec4 ch = texture2D( TEXTURE_1, vec2(0.0,1.0) ) ;
float siang = pow(min(max(1.1-pow(ch.r,10.0),0.0),1.0),3.0);
float malam = min(pow(1.0-ch.r,2.0)*2.0,1.0);
float sore = 0.7-abs(.6-wk)*uv1.y; float sray = 0.6-abs(.6-wk)*uv1.y;
vec3 c_siang = vec3(1.0)*FOG_COLOR.r*FOG_COLOR.b;
vec3 c_sore = vec3(.65,0.58,0.35); vec3 c_malam = vec3(0.78,.65,0.55)*0.75;
vec3 warna =mix(c_siang,c_sore, siang ); 
warna =mix(mix(warna,c_malam,malam),vec3(0.2),rn);
warna = mix(warna,mix(vec3(0.9,0.7,0.5),vec3(1.0)+uv1.x*0.25,0.1),1.0-uv1.y);
vec3 wtr = vec3(0.25,0.52,1.0)*0.5; vec3 wso = FOG_COLOR.rgb;
vec3 wma = vec3(0.25,0.52,1.0)*0.5; vec3 wt =mix(wtr,wso, siang );
wt =mix(wt,wma,malam); wt = mix(wt,FOG_COLOR.rgb*vec3(0.4,0.4,0.4),rn);
float cave = 1.0 - uv1.y; vec4 f1 = FOG_COLOR;
highp vec3 r = 1.0-ceil(fract(position.xyz)); vec3 trc = mix(vec3(1.0,0.05,-0.2)*0.2,vec3(0.8,0.33,0.04)*0.7,cave);
trc = mix(mix(trc,vec3(2.5,0.05,-2.7)*0.1,malam),vec3(1.0)+uv1.x*0.25,0.0); 
vec3 trc_air = vec3(0.0,1.0,0.9)*0.7;
#if defined(BLEND)
	diffuse.a *= inColor.a;
#endif
#if !defined(ALWAYS_LIT)
	diffuse *= texture2D( TEXTURE_1, uv1 );
#endif
float d_by = smoothstep(0.97, 0.67, uv1.y);
vec3 dirlek = normalize(cross(dFdx(position), dFdy(position)));
float dir_y = max(dirlek.y,-dirlek.y);
vec3 ref_u = mix((vec3(1.65, 1.65, 1.9) *0.6),(vec3(1.65, 1.65, 1.9) *0.3),malam);
vec3 refc = ref_u; float atas = dirlek.y*(1.-(-dirlek.y));
float wp = smoothstep(0.19,0.24,abs(diffuse.g)); wp *= atas;
float wh = smoothstep(0.16,0.23,abs(diffuse.g)); wh *= atas;
float tc = smoothstep( 0.14,0.19,diffuse.g)*(1.-dir_y);
float wetd = clamp(smoothstep(0.0, 0.9, length(-look)/RENDER_DISTANCE *2.0),0.0,.07) * (1.-d_by); diffuse.rgb *= mix(warna,vec3(1.0)+uv1.x*0.25,0.1);
if(color.g > color.b){ diffuse.rgb *= mix(vec3(1.0),vec3(0.32),sd);}
#ifndef SEASONS
	#if !USE_ALPHA_TEST && !defined(BLEND)
		diffuse.a = inColor.a;
	#endif	
	diffuse.rgb *= inColor.rgb;
#else
vec2 uv = inColor.xy;
diffuse.rgb *= mix(vec3(1.0,1.0,1.0), texture2D( TEXTURE_2, uv).rgb*2.0, inColor.b); diffuse.rgb *= inColor.aaa; diffuse.a = 1.0;
#endif
diffuse.rgb += trc*max(0.0,uv1.x-0.5); diffuse.rgb = Hyra(diffuse.rgb)*vec3(1.03);
highp vec2 ur = position.xz; ur = ur * 1.1; float val = wnoise(ur, TIME);
#if !defined(BLEND) && !defined(ALPHA_TEST)
vec3 crot = mix(diffuse.rgb, refc*tc, wetd); crot = mix(diffuse.rgb, refc*wh, wetd);
vec4 teles = texture2D(TEXTURE_0,diffuse.xz); diffuse.rgb =mix(diffuse.rgb, crot, rn);
diffuse += (teles*.15 * max(.0, uv1.y)*rn)*(vec4(warna.rgb*0.3,1.0)*malam);
#endif
vec3 origin_water_normal = vec3(0.3,0.35,0.8);
vec3 frag_water_normal = normalize(WaterNormalMap(position*2.0));
highp vec3 water_normal = mix(frag_water_normal, origin_water_normal, min(1.0, length(look_vector.xz) / max(100.0, abs(look_vector.z) * 4.0))); float noLight = 1.0;
highp float view_angle = acos(abs(cos_between_vecs(look_vector, water_normal))); highp float ref = view_angle; vec3 shdop = mix(vec3(0.3),vec3(0.1),sd); vec4 sz = color; shdop = mix(shdop,vec3(1.0)+uv1.x*0.25,0.71);
#ifdef FOGWATER
diffuse.rgb += trc_air*max(0.0,uv1.x-0.5);
diffuse.rgb += (mix(mix(vec3(0.5),vec3(.0),malam),vec3(0.0),.8-uv1.y) * val);
diffuse.rgb = mix( diffuse.rgb, vec3(0.2,0.95,0.67)*0.45, rfog); 
#endif
if(color.b + color.b  > color.r + color.g){
#if defined(BLEND)
vec4 cloud = mix(diffuse, sqrt(mix(cclr,vec4(0.9,.7,.25,1.0)*FOG_COLOR.r,sore)), fbm(((-look.xz * 0.1) / (look.y - length(look.xz) * 0.18)) * ref));
diffuse.rgb = mix( diffuse.rgb,mix(FOG_COLOR.rgb,vec3(0.2,.35,.9)*1.5,malam)*1.0-rn, cont);
diffuse = mix(diffuse, cloud, ((cloud.a*0.5)* uv1.y));
diffuse.rgb = mix( diffuse.rgb,((sray*(raySun(look,diffuse.rgb)*(((3.0*FOG_COLOR.r)*sray)))*(0.8-malam))*(0.8-rn))*(1.0-cave),0.025);
diffuse.rgb += pow(view_angle / 2., 1.4)*FOGw(wt*FOG_COLOR.rgb);
diffuse.a *= 1.0*(length(-look) / RENDER_DISTANCE);
diffuse.a += inColor.a*dot(clamp(length(-look) / RENDER_DISTANCE*1.75,0.0,0.6),2.0); diffuse.a += 0.35;
#endif 
}else{
vec3 shdw = mix(shdop,vec3(1.0),rn); shdw = mix(shdw,vec3(1.0),ng);
if(uv1.y<0.875 || (sz.g+1.7*(sz.g-sz.b)<0.65 && sz.a!=0.0)){ diffuse.rgb *=  shdw;}
if(uv1.y<0.874 || (sz.g+1.7*(sz.g-sz.b)<0.64 && sz.a!=0.0)){ diffuse.rgb *=  shdw;}
if(uv1.y<0.873 || (sz.g+1.7*(sz.g-sz.b)<0.63 && sz.a!=0.0)){ diffuse.rgb *=  shdw;}
if(uv1.y<0.872 || (sz.g+1.7*(sz.g-sz.b)<0.62 && sz.a!=0.0)){ diffuse.rgb *=  shdw;}
if(uv1.y<0.871 || (sz.g+1.7*(sz.g-sz.b)<0.61 && sz.a!=0.0)){ diffuse.rgb *= shdw;} }
vec3 df = mix( diffuse.rgb, FOG_COLOR.rgb*vec3(0.6,0.8,1.0), atmos1*mix(1.0,0.1,rn) );
vec3 dr = mix( diffuse.rgb, vec3(1.0)*FOG_COLOR.rgb, mix(rfog,0.0,ng) );
vec3 ds = mix( diffuse.rgb,FOG_COLOR.r*(vec3(1.0,0.75,0.35)*1.5*FOG_COLOR.r), fray); vec3 fgo = mix(df,dr,rn); diffuse.rgb = mix(fgo,ds,sray);

#ifdef FOG
diffuse.rgb = mix( diffuse.rgb,mix(fogColor.rgb,FOG_COLOR.r*(vec3(1.0,0.75,0.45)*1.6*FOG_COLOR.r),sray), fogColor.a );
#endif
	gl_FragColor = diffuse;	
#endif // BYPASS_PIXEL_SHADER 
}