skog, mjuka skuggor, jämnare övergång vatten på av avstånd
This commit is contained in:
31
src/Universe.App/Graphics/Shaders/biomes.glsl
Normal file
31
src/Universe.App/Graphics/Shaders/biomes.glsl
Normal file
@@ -0,0 +1,31 @@
|
||||
uniform int uBiomesEnabled;
|
||||
uniform int uBiomeHasTexture;
|
||||
uniform sampler2D uBiomeTexture;
|
||||
uniform sampler2DArray uBiomeColors;
|
||||
uniform vec3 uBiomeTargets[4];
|
||||
uniform float uBiomeTolerances[4];
|
||||
uniform float uForestScale;
|
||||
vec4 biomeWeights(vec3 direction){
|
||||
vec3 color;
|
||||
if(uBiomeHasTexture!=0)color=texture(uBiomeTexture,planetUv(direction)).rgb;
|
||||
else {
|
||||
float n=noise3(direction*5.0+uNoiseOffset);
|
||||
color=abs(direction.y)>.91?vec3(235,238,240)/255.0:n<-.2&&abs(direction.y)<.6?vec3(205,181,120)/255.0:n<.1?vec3(145,150,80)/255.0:vec3(45,80,35)/255.0;
|
||||
}
|
||||
vec4 weights=vec4(0);
|
||||
for(int i=0;i<4;i++){
|
||||
float d=length(color-uBiomeTargets[i])*57.7350269;
|
||||
float t=uBiomeTolerances[i];weights[i]=t<=0.0?(d<.00001?1.0:0.0):1.0-smoothstep(t*.8,t,d);
|
||||
}
|
||||
return weights/max(1.0,dot(weights,vec4(1)));
|
||||
}
|
||||
vec4 biomeTriColor(float layer,vec3 p,vec3 weights){
|
||||
vec4 color=texture(uBiomeColors,vec3(p.yz,layer))*weights.x+texture(uBiomeColors,vec3(p.xz,layer))*weights.y+texture(uBiomeColors,vec3(p.xy,layer))*weights.z;
|
||||
color.rgb=pow(color.rgb,vec3(2.2));return color;
|
||||
}
|
||||
vec3 biomeTriNormal(float layer,vec3 p,vec3 n,vec3 weights){
|
||||
vec3 x=texture(uBiomeColors,vec3(p.yz,layer+4.0)).xyz*2.0-1.0;
|
||||
vec3 y=texture(uBiomeColors,vec3(p.xz,layer+4.0)).xyz*2.0-1.0;
|
||||
vec3 z=texture(uBiomeColors,vec3(p.xy,layer+4.0)).xyz*2.0-1.0;
|
||||
return normalize(vec3(sign(n.x)*x.z,x.x,x.y)*weights.x+vec3(y.x,sign(n.y)*y.z,y.y)*weights.y+vec3(z.x,z.y,sign(n.z)*z.z)*weights.z);
|
||||
}
|
||||
Reference in New Issue
Block a user