using System.Collections; using System.Collections.Generic; using Godot; using System; using System.Threading.Tasks; namespace Rokojori { /** A FoliageSource that loads the foliage from a MeshInstance reference in the scene. */ [Tool] [GlobalClass] public partial class MeshInstanceFoliageSource:FoliageSource { [Export] public NodePath meshInstanceReference; public override void SetupFoliageDrawPass( FoliageRenderLayer renderLayer ) { // var particles = renderLayer.renderer.CreateChild(); // renderLayer.gpuParticles3D = particles; // var processMaterial = new GPUFoliageShaderMaterial(); // particles.ProcessMaterial = processMaterial; // particles.Lifetime = 0.01f; // particles.Explosiveness = 1f; // particles.FixedFps = 0; // particles.Interpolate = false; // particles.FractDelta = false; // particles.CustomAabb = Box3.WithSize( 10000 ); // processMaterial.positionVariance.Set( renderLayer.renderer.noise ); // processMaterial.rotationVariance.Set( renderLayer.renderer.noise ); // processMaterial.scaleVariance.Set( renderLayer.renderer.noise ); // processMaterial.occupancyVariance.Set( renderLayer.renderer.noise ); // renderLayer.gpuFoliageShaderMaterial = processMaterial; var particles = renderLayer.gpuParticles3D; var meshInstance = renderLayer.renderer.GetNode( meshInstanceReference ) as MeshInstance3D; particles.DrawPasses = 1; particles.DrawPass1 = meshInstance.Mesh; // particles.CastShadow = renderLayer.data.shadows ? GeometryInstance3D.ShadowCastingSetting.On : GeometryInstance3D.ShadowCastingSetting.Off; } } }