perlin
This commit is contained in:
parent
42d87fc2a3
commit
e3d0af56e2
2 changed files with 23 additions and 4 deletions
|
|
@ -12,11 +12,13 @@ struct Settings {
|
||||||
@group(0) @binding(0) var<uniform> settings: Settings;
|
@group(0) @binding(0) var<uniform> settings: Settings;
|
||||||
@group(0) @binding(1) var Sampler: sampler;
|
@group(0) @binding(1) var Sampler: sampler;
|
||||||
@group(0) @binding(2) var trailMap: texture_2d<f32>;
|
@group(0) @binding(2) var trailMap: texture_2d<f32>;
|
||||||
|
@group(0) @binding(3) var noise: texture_2d<f32>;
|
||||||
|
|
||||||
@fragment
|
@fragment
|
||||||
fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
||||||
var current = textureSample(trailMap, Sampler, uv);
|
var current = textureSample(trailMap, Sampler, uv);
|
||||||
|
let noise = textureSample(noise, Sampler, uv);
|
||||||
|
|
||||||
let neighbours: vec4<f32> = (
|
let neighbours: vec4<f32> = (
|
||||||
textureSample(trailMap, Sampler, uv + vec2<f32>(0, 1) / settings.size)
|
textureSample(trailMap, Sampler, uv + vec2<f32>(0, 1) / settings.size)
|
||||||
+ textureSample(trailMap, Sampler, uv + vec2<f32>(0, -1) / settings.size)
|
+ textureSample(trailMap, Sampler, uv + vec2<f32>(0, -1) / settings.size)
|
||||||
|
|
@ -27,14 +29,15 @@ fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
|
||||||
let mixedTrails = mix(
|
let mixedTrails = mix(
|
||||||
current.rgb,
|
current.rgb,
|
||||||
neighbours.rgb,
|
neighbours.rgb,
|
||||||
settings.diffusionRateTrails
|
settings.diffusionRateTrails + (noise.rgb - vec3(0.5)) * 0.1
|
||||||
) * (1.0 - settings.decayRateTrails);
|
) * (1.0 - settings.decayRateTrails);
|
||||||
|
|
||||||
let mixedBrush = mix(
|
let mixedBrush = mix(
|
||||||
current.a,
|
current.a,
|
||||||
neighbours.a,
|
neighbours.a,
|
||||||
settings.diffusionRateBrush
|
settings.diffusionRateBrush + (noise.a - 0.5) * 0.5
|
||||||
) * (1.0 - settings.decayRateBrush);
|
) * (1.0 - settings.decayRateBrush - (noise.a - 0.5) * 0.1);
|
||||||
|
|
||||||
|
|
||||||
return clamp(vec4(mixedTrails, mixedBrush), vec4(0), vec4(1));
|
return clamp(vec4(mixedTrails, mixedBrush), vec4(0), vec4(1));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { setUpFullScreenQuad } from '../../utils/graphics/full-screen-quad/full-screen-quad';
|
import { setUpFullScreenQuad } from '../../utils/graphics/full-screen-quad/full-screen-quad';
|
||||||
|
import { generateNoise } from '../../utils/graphics/noise/noise';
|
||||||
import { smartCompile } from '../../utils/smart-compile';
|
import { smartCompile } from '../../utils/smart-compile';
|
||||||
import { CommonParameters } from '../common-parameters';
|
import { CommonParameters } from '../common-parameters';
|
||||||
import shader from './diffuse.wgsl';
|
import shader from './diffuse.wgsl';
|
||||||
|
|
@ -10,11 +11,22 @@ export class DiffusionPipeline {
|
||||||
private readonly pipeline: GPURenderPipeline;
|
private readonly pipeline: GPURenderPipeline;
|
||||||
private readonly uniforms: GPUBuffer;
|
private readonly uniforms: GPUBuffer;
|
||||||
private readonly quadVertexBuffer: GPUBuffer;
|
private readonly quadVertexBuffer: GPUBuffer;
|
||||||
|
private readonly noise: GPUTexture;
|
||||||
|
|
||||||
private bindGroup?: GPUBindGroup;
|
private bindGroup?: GPUBindGroup;
|
||||||
private previousTrailMapIn?: GPUTexture;
|
private previousTrailMapIn?: GPUTexture;
|
||||||
|
|
||||||
public constructor(private readonly device: GPUDevice) {
|
public constructor(private readonly device: GPUDevice) {
|
||||||
|
this.noise = generateNoise({
|
||||||
|
device,
|
||||||
|
width: 256,
|
||||||
|
height: 256,
|
||||||
|
octaves: 8,
|
||||||
|
amplitude: 0.12,
|
||||||
|
gain: 0.7,
|
||||||
|
lacunarity: 80,
|
||||||
|
});
|
||||||
|
|
||||||
const { buffer, vertex } = setUpFullScreenQuad(device);
|
const { buffer, vertex } = setUpFullScreenQuad(device);
|
||||||
this.quadVertexBuffer = buffer;
|
this.quadVertexBuffer = buffer;
|
||||||
|
|
||||||
|
|
@ -114,6 +126,10 @@ export class DiffusionPipeline {
|
||||||
binding: 2,
|
binding: 2,
|
||||||
resource: trailMapIn.createView(),
|
resource: trailMapIn.createView(),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
binding: 3,
|
||||||
|
resource: this.noise.createView(),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue