Vertically stratified noise function for ALS
This commit is contained in:
parent
27438ea54c
commit
17799e8450
5 changed files with 146 additions and 18 deletions
Effects
Materials/regions
Shaders
|
@ -92,6 +92,7 @@
|
|||
<dot_density>1.0</dot_density>
|
||||
<dot_size>1.0</dot_size>
|
||||
<dust_resistance>1.0</dust_resistance>
|
||||
<rock_strata>0</rock_strata>
|
||||
<visibility><use>/environment/ground-visibility-m</use></visibility>
|
||||
<avisibility><use>/environment/visibility-m</use></avisibility>
|
||||
<lthickness><use>/environment/ground-haze-thickness-m</use></lthickness>
|
||||
|
@ -658,6 +659,11 @@
|
|||
<type>int</type>
|
||||
<value><use>cloud_shadow_flag</use></value>
|
||||
</uniform>
|
||||
<uniform>
|
||||
<name>rock_strata</name>
|
||||
<type>int</type>
|
||||
<value><use>rock_strata</use></value>
|
||||
</uniform>
|
||||
<uniform>
|
||||
<name>texture</name>
|
||||
<type>sampler-2d</type>
|
||||
|
|
|
@ -3076,6 +3076,7 @@
|
|||
</texture-set>
|
||||
<parameters>
|
||||
<transition_model>0.5</transition_model>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
|
@ -3100,6 +3101,7 @@
|
|||
</texture-set>
|
||||
<parameters>
|
||||
<transition_model>0.5</transition_model>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
|
@ -3124,6 +3126,7 @@
|
|||
</texture-set>
|
||||
<parameters>
|
||||
<transition_model>0.5</transition_model>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
|
@ -3148,6 +3151,7 @@
|
|||
</texture-set>
|
||||
<parameters>
|
||||
<dot_size>10.0</dot_size>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<object-mask>Terrain/drycrop1.mask.png</object-mask>
|
||||
<object-mask>Terrain/drycrop2.mask.png</object-mask>
|
||||
|
@ -3169,6 +3173,78 @@
|
|||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<material include="Materials/regions/south_africa.xml">
|
||||
<name>DryCropPastureCover</name>
|
||||
<name>DryCrop</name>
|
||||
<texture-set>
|
||||
<texture>Terrain/dry_pasture4.png</texture>
|
||||
<texture n="12">Terrain/dirtrock.png</texture>
|
||||
<texture n="15">Terrain/tundra-hawaii-green.png</texture>
|
||||
</texture-set>
|
||||
<parameters>
|
||||
<dot_size>10.0</dot_size>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<object-mask>Terrain/drycrop1.mask.png</object-mask>
|
||||
<object-mask>Terrain/drycrop2.mask.png</object-mask>
|
||||
<object-mask>Terrain/drycrop3.mask.png</object-mask>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.9</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.6</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<object-group include="Materials/base/farm-buildings.xml"/>
|
||||
<wood-coverage>10000.0</wood-coverage>
|
||||
<tree-texture>Trees/mixed.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
|
||||
<material include="Materials/regions/south_africa.xml">
|
||||
<effect>Effects/cropgrass</effect>
|
||||
<name>Grassland</name>
|
||||
<texture-set>
|
||||
<texture>Terrain/dry_pasture4.png</texture>
|
||||
<texture n="12">Terrain/tundra-hawaii-green.png</texture>
|
||||
</texture-set>
|
||||
<parameters>
|
||||
<rock_strata>1</rock_strata>
|
||||
</parameters>
|
||||
<xsize>2000</xsize>
|
||||
<ysize>2000</ysize>
|
||||
<light-coverage>2000000.0</light-coverage>
|
||||
<diffuse>
|
||||
<r>0.93</r>
|
||||
<g>0.95</g>
|
||||
<b>0.93</b>
|
||||
<a>1.0</a>
|
||||
</diffuse>
|
||||
<specular>
|
||||
<r>0.1</r>
|
||||
<g>0.12</g>
|
||||
<b>0.1</b>
|
||||
<a>1.0</a>
|
||||
</specular>
|
||||
<shininess>1.2</shininess>
|
||||
<solid>1</solid>
|
||||
<friction-factor>0.7</friction-factor>
|
||||
<rolling-friction>0.1</rolling-friction>
|
||||
<bumpiness>0.3</bumpiness>
|
||||
<load-resistance>1e30</load-resistance>
|
||||
<wood-coverage>150000.0</wood-coverage>
|
||||
<tree-texture>Trees/mixed.png</tree-texture>
|
||||
<tree-varieties>8</tree-varieties>
|
||||
<tree-range-m alias="/params/forest/tree-range-m"/>
|
||||
<tree-height-m>20.0</tree-height-m>
|
||||
<tree-width-m>12.0</tree-width-m>
|
||||
</material>
|
||||
|
||||
<!-- REGIONAL DEFINITIONS - ASIA -->
|
||||
|
||||
<!-- Regional Asian irrigated crops -->
|
||||
|
|
|
@ -70,7 +70,7 @@ float shadow_func (in float x, in float y, in float noise, in float dist);
|
|||
float Noise2D(in vec2 coord, in float wavelength);
|
||||
float Noise3D(in vec3 coord, in float wavelength);
|
||||
float VoronoiNoise2D(in vec2 coord, in float wavelength, in float xrand, in float yrand);
|
||||
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
|
||||
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
|
||||
|
||||
|
||||
|
||||
|
@ -235,8 +235,8 @@ float vnoise_rotation = VoronoiNoise2D(rawPos.xy, rotation_scale, distortion_fac
|
|||
|
||||
// slope noise
|
||||
|
||||
float slopenoise_50m = slopeLines2D(rawPos, grad_dir, 50.0, steepness);
|
||||
float slopenoise_100m = slopeLines2D(rawPos, grad_dir, 100.0, steepness);
|
||||
float slopenoise_50m = SlopeLines2D(rawPos, grad_dir, 50.0, steepness);
|
||||
float slopenoise_100m = SlopeLines2D(rawPos, grad_dir, 100.0, steepness);
|
||||
|
||||
float snownoise_25m = mix(noise_25m, slopenoise_50m, clamp(3.0*(1.0-steepness),0.0,1.0));
|
||||
float snownoise_50m = mix(noise_50m, slopenoise_100m, clamp(3.0*(1.0-steepness),0.0,1.0));
|
||||
|
|
|
@ -10,9 +10,11 @@
|
|||
// * VoronoiNoise2D(in vec2 coord, in float wavelength, in float xrand, in float yrand)
|
||||
// is a function mapping the terrain into random domains, based on Voronoi tiling of a regular grid
|
||||
// distorted with xrand and yrand
|
||||
// * slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
|
||||
// * SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
|
||||
// computes a semi-random set of lines along the direction of steepest descent, allowing to
|
||||
// simulate e.g. water erosion patterns
|
||||
// * Strata3D(in vec3 coord, in float wavelength, in float variation)
|
||||
// computers a vertically stratified random pattern, appropriate e.g. for rock textures
|
||||
|
||||
// Thorsten Renk 2014
|
||||
|
||||
|
@ -218,7 +220,35 @@ float slopeLines2D(in float x, in float y, in float sx, in float sy, in float st
|
|||
}
|
||||
|
||||
|
||||
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
|
||||
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness)
|
||||
{
|
||||
return slopeLines2D(coord.x/wavelength, coord.y/wavelength, gradDir.x, gradDir.y, steepness);
|
||||
}
|
||||
|
||||
|
||||
float strata3D(in float x, in float y, in float z, in float variation)
|
||||
{
|
||||
float integer_x = x - fract(x);
|
||||
float fractional_x = x - integer_x;
|
||||
|
||||
float integer_y = y - fract(y);
|
||||
float fractional_y = y - integer_y;
|
||||
|
||||
float integer_z = z - fract(z);
|
||||
float fractional_z = z - integer_z;
|
||||
|
||||
float rand_value_low = rand3D(vec3(0.0, 0.0, integer_z));
|
||||
float rand_value_high = rand3D(vec3(0.0, 0.0, integer_z+1));
|
||||
|
||||
float rand_var = 0.5 - variation + 2.0 * variation * rand3D(vec3(integer_x, integer_y, integer_z));
|
||||
|
||||
|
||||
return (1.0 - smoothstep(rand_var -0.15, rand_var + 0.15, fract(z))) * rand_value_low + smoothstep(rand_var-0.15, rand_var + 0.15, fract(z)) * rand_value_high;
|
||||
|
||||
}
|
||||
|
||||
|
||||
float Strata3D(in vec3 coord, in float wavelength, in float variation)
|
||||
{
|
||||
return strata3D(coord.x/wavelength, coord.y/wavelength, coord.z/wavelength, variation);
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ uniform int quality_level;
|
|||
uniform int tquality_level;
|
||||
uniform int wind_effects;
|
||||
uniform int cloud_shadow_flag;
|
||||
uniform int rock_strata;
|
||||
|
||||
const float EarthRadius = 5800000.0;
|
||||
const float terminator_width = 200000.0;
|
||||
|
@ -70,8 +71,8 @@ float shadow_func (in float x, in float y, in float noise, in float dist);
|
|||
float DotNoise2D(in vec2 coord, in float wavelength, in float fractionalMaxDotSize, in float dot_density);
|
||||
float Noise2D(in vec2 coord, in float wavelength);
|
||||
float Noise3D(in vec3 coord, in float wavelength);
|
||||
float slopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
|
||||
|
||||
float SlopeLines2D(in vec2 coord, in vec2 gradDir, in float wavelength, in float steepness);
|
||||
float Strata3D(in vec3 coord, in float wavelength, in float variation);
|
||||
|
||||
|
||||
|
||||
|
@ -237,8 +238,8 @@ float dotnoisegrad_10m;
|
|||
|
||||
// slope noise
|
||||
|
||||
float slopenoise_50m = slopeLines2D(rawPos, grad_dir, 50.0, steepness);
|
||||
float slopenoise_100m = slopeLines2D(rawPos, grad_dir, 100.0, steepness);
|
||||
float slopenoise_50m = SlopeLines2D(rawPos, grad_dir, 50.0, steepness);
|
||||
float slopenoise_100m = SlopeLines2D(rawPos, grad_dir, 100.0, steepness);
|
||||
|
||||
float snownoise_25m = mix(noise_25m, slopenoise_50m, clamp(3.0*(1.0-steepness),0.0,1.0));
|
||||
float snownoise_50m = mix(noise_50m, slopenoise_100m, clamp(3.0*(1.0-steepness),0.0,1.0));
|
||||
|
@ -349,6 +350,21 @@ float mix_factor;
|
|||
local_autumn_factor = texel.a;
|
||||
}
|
||||
|
||||
|
||||
// strata noise
|
||||
|
||||
float stratnoise_50m;
|
||||
float stratnoise_10m;
|
||||
|
||||
if (rock_strata==1)
|
||||
{
|
||||
stratnoise_50m = Strata3D(vec3 (rawPos.x, rawPos.y, msl_altitude), 50.0, 0.2);
|
||||
stratnoise_10m = Strata3D(vec3 (rawPos.x, rawPos.y, msl_altitude), 10.0, 0.2);
|
||||
stratnoise_50m = mix(stratnoise_50m, 1.0, smoothstep(0.8,0.9, steepness));
|
||||
stratnoise_10m = mix(stratnoise_10m, 1.0, smoothstep(0.8,0.9, steepness));
|
||||
texel *= (0.4 + 0.4 * stratnoise_50m + 0.2 * stratnoise_10m);
|
||||
}
|
||||
|
||||
// the dot vegetation texture overlay
|
||||
|
||||
texel.rgb = mix(texel.rgb, dot_texel.rgb, dot_texel.a * (dotnoise_10m + dotnoise_15m) * detail_fade(1.0 * (dot_size * (1.0 +0.1*dot_size)), view_angle,dist));
|
||||
|
|
Loading…
Add table
Reference in a new issue