A nice texture
This commit is contained in:
parent
61d3a90c7c
commit
5e97ff8eca
|
|
@ -22,37 +22,69 @@ fn on_vertex(in: Vertex) -> Varying {
|
|||
|
||||
@fragment
|
||||
fn on_fragment(in: Varying) -> @location(0) vec4f {
|
||||
let point = in.world;
|
||||
// let point = 10. * normalize(in.world - vec3f(0., 0., -10.));
|
||||
let sharp_area = perlin_noise(Params(1, 3, 0.9, 2.0), 0.1 * in.world);
|
||||
let sharp_base = perlin_noise(Params(1, 6, 0.9, 2.0), 0.1 * in.world);
|
||||
let cloud_base = perlin_noise(Params(2, 8, 0.6, 2.0), 0.1 * in.world);
|
||||
let sharp_detail = structured_noise(Params(11, 8, 3.0, 2.0), in.world);
|
||||
let cloud_detail1 = perlin_noise(Params(12, 8, 0.7, 2.0), in.world);
|
||||
let cloud_detail2 = perlin_noise(Params(13, 8, 0.7, 2.0), in.world);
|
||||
let dust = sharp_noise(Params(21, 8, 0.9, 2.0), in.world);
|
||||
let stars = sharp_noise(Params(22, 8, 2.7, 2.0), in.world);
|
||||
|
||||
let cloud = exp(5.0 * (cloud_base - 1.0));
|
||||
let cloud1 = cloud * (2.0 + cloud_detail1);
|
||||
let cloud2 = cloud * (2.0 + cloud_detail2);
|
||||
let tint = clamp(sharp_area - 0.2, 0.0, 0.3) / 0.3 * max(0.0, sharp_base - 0.3) * max(0.0, cloud_base + 0.3) * max(0.0, sharp_detail);
|
||||
return vec4(
|
||||
// dust * vec3(0.0, 0.3, 0.0) +
|
||||
// max(0.0, sin(stars - 1.5) * vec3(0.3, 0.2, 0.1) +
|
||||
// max(0.0, stars - 2.0) * vec3(0.3, 0.5, 2.0) +
|
||||
cloud1 * vec3(0.1, 0.2, 1.0) +
|
||||
cloud2 * vec3(0.1, 0.3, 0.7) +
|
||||
tint * vec3(4.0, 0.0, 0.4) +
|
||||
max(0.0, tint - 0.1) * vec3(0.0, 4.0, 0.0),
|
||||
1.0);
|
||||
}
|
||||
|
||||
fn sharp_noise(params: Params, point: vec3f) -> f32 {
|
||||
var result = 1.0;
|
||||
var hscale = 1.0;
|
||||
var seed = params.seed;
|
||||
for (var layer = 0u; layer < params.layers; layer++) {
|
||||
result *= pow(4.0 * abs(perlin_layer(seed, hscale * point)), params.roughness);
|
||||
hscale *= params.scale;
|
||||
seed = hash(seed);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
fn structured_noise(params: Params, point: vec3f) -> f32 {
|
||||
var result = 1.0;
|
||||
var hscale = 1.0;
|
||||
var seed = params.seed;
|
||||
for (var layer = 0u; layer < params.layers; layer++) {
|
||||
result *= pow(clamp(1. + perlin_layer(seed, hscale * point), 0., 1.), params.roughness);
|
||||
hscale *= params.scale;
|
||||
seed = hash(seed);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
fn perlin_noise(params: Params, point: vec3f) -> f32 {
|
||||
var result = 0.0;
|
||||
var hscale = 1.0;
|
||||
var vscale = 1.0;
|
||||
var seed = params.seed;
|
||||
for (var layer = 0u; layer < params.layers; layer++) {
|
||||
result += vscale * noise(seed, hscale * point);
|
||||
result += vscale * perlin_layer(seed, hscale * point);
|
||||
hscale *= params.scale;
|
||||
vscale *= params.roughness;
|
||||
seed = hash(seed);
|
||||
}
|
||||
return vec4(0.5 + 0.25 * result);
|
||||
return result;
|
||||
}
|
||||
|
||||
// @fragment
|
||||
// fn on_fragment(in: Varying) -> @location(0) vec4f {
|
||||
// let point = in.world;
|
||||
// var result = 1.0;
|
||||
// var hscale = 1.0;
|
||||
// var seed = params.seed;
|
||||
// for (var layer = 0u; layer < params.layers; layer++) {
|
||||
// result *= pow(4.0 * abs(noise(seed, hscale * point)), 0.2);
|
||||
// result *= pow(clamp(1. + noise(seed, hscale * point), 0., 1.), 3.0);
|
||||
// hscale *= params.scale;
|
||||
// seed = hash(seed);
|
||||
// }
|
||||
// return vec4(result);
|
||||
// }
|
||||
|
||||
fn noise(seed: u32, coords: vec3f) -> f32 {
|
||||
fn perlin_layer(seed: u32, coords: vec3f) -> f32 {
|
||||
let s = split(coords);
|
||||
var ret = 0.0;
|
||||
for (var i = 0u; i < 2; i++) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user