Layered noise
This commit is contained in:
parent
b4b1805ce2
commit
f051b812f5
|
|
@ -37,8 +37,9 @@ fn main() {
|
|||
&queue,
|
||||
perlin::Params {
|
||||
seed: 42,
|
||||
layers: 4,
|
||||
persistence: 0.5,
|
||||
layers: 8,
|
||||
roughness: 0.9,
|
||||
scale: 1.7,
|
||||
},
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ use glam::{Vec2, Vec3};
|
|||
pub struct Params {
|
||||
pub seed: u32,
|
||||
pub layers: u32,
|
||||
pub persistence: f32,
|
||||
pub roughness: f32,
|
||||
pub scale: f32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
struct Params {
|
||||
seed: u32,
|
||||
layers: u32,
|
||||
persistence: f32,
|
||||
roughness: f32,
|
||||
scale: f32,
|
||||
}
|
||||
|
||||
struct Vertex {
|
||||
|
|
@ -23,16 +24,26 @@ fn on_vertex(in: Vertex) -> Varying {
|
|||
|
||||
@fragment
|
||||
fn on_fragment(in: Varying) -> @location(0) vec4f {
|
||||
return vec4(0.5 + 0.5 * noise(in.world));
|
||||
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 * in.world);
|
||||
hscale *= params.scale;
|
||||
vscale *= params.roughness;
|
||||
seed = hash(seed);
|
||||
}
|
||||
return vec4(0.5 + 0.25 * result);
|
||||
}
|
||||
|
||||
fn noise(coords: vec3f) -> f32 {
|
||||
fn noise(seed: u32, coords: vec3f) -> f32 {
|
||||
let s = split(coords);
|
||||
var ret = 0.0;
|
||||
for (var i = 0u; i < 2; i++) {
|
||||
for (var j = 0u; j < 2; j++) {
|
||||
for (var k = 0u; k < 2; k++) {
|
||||
ret += part(params.seed, s, vec3u(i, j, k));
|
||||
ret += part(seed, s, vec3u(i, j, k));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user