From f3979f1ba43e61464125b73630d4479a4332a3d3 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Thu, 21 May 2026 06:07:13 +0200 Subject: [PATCH] Add structure and types for wind simulation in foliage renderer --- src/foliage/foliage-instanced-renderer.ts | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/foliage/foliage-instanced-renderer.ts b/src/foliage/foliage-instanced-renderer.ts index 4c59910f..6d6b1759 100644 --- a/src/foliage/foliage-instanced-renderer.ts +++ b/src/foliage/foliage-instanced-renderer.ts @@ -3,12 +3,16 @@ import { Color, Frustum, Group, + InstancedBufferAttribute, InstancedMesh, Matrix4, Mesh, + MeshStandardMaterial, Sphere, + Vector2, Vector3, type BufferGeometry, + type IUniform, type Material } from "three"; @@ -61,6 +65,28 @@ interface FoliageTemplateSourceMesh { } const VIEW_SIGNATURE_PRECISION = 100; +const FOLIAGE_WIND_ATTRIBUTE_NAME = "foliageWind"; +const FOLIAGE_WIND_SHADER_KEY = "foliage-wind-v1"; + +type FoliageWindCompileShader = Parameters< + MeshStandardMaterial["onBeforeCompile"] +>[0]; +type FoliageWindCompileRenderer = Parameters< + MeshStandardMaterial["onBeforeCompile"] +>[1]; + +interface FoliageWindUniformSet { + time: IUniform; + strength: IUniform; + speed: IUniform; + direction: IUniform; +} + +interface FoliageWindMaterialOptions { + getSettings: () => FoliageQualitySettings; + getTime: () => number; + registerUniforms: (uniforms: FoliageWindUniformSet) => void; +} function stableStringify(value: unknown): string { if (