public GrassTuftEntitySplatGenerator(GrassTuftGenerator grassTuftGenerator, IEntityPositionProvider grassTuftPositionProvider, GrassTuftAbstractSettingGenerator grassTuftAbstractSettingGenerator, IGrassInstanceContainer grassInstanceContainer, GrassMeshGenerator meshGenerator, Material grassTuftMaterial) { _grassTuftGenerator = grassTuftGenerator; _grassTuftPositionProvider = grassTuftPositionProvider; _grassTuftAbstractSettingGenerator = grassTuftAbstractSettingGenerator; _grassInstanceContainer = grassInstanceContainer; _meshGenerator = meshGenerator; _grassTuftMaterial = grassTuftMaterial; }
public SingleGrassLodEntitySplatGenerator(GrassSingleGenerator grassSingleGenerator, IEntityPositionProvider singleGrassUniformPositionProvider, GrassSingleAbstractSettingGenerator grassSingleAbstractSettingGenerator, IGrassInstanceContainer grassInstanceContainer, GrassMeshGenerator meshGenerator, Material grassMaterial) { _grassSingleGenerator = grassSingleGenerator; _singleGrassUniformPositionProvider = singleGrassUniformPositionProvider; _grassSingleAbstractSettingGenerator = grassSingleAbstractSettingGenerator; _grassInstanceContainer = grassInstanceContainer; _meshGenerator = meshGenerator; _grassMaterial = grassMaterial; }
public SingleGrassEntitySplatGenerator(GrassSingleGenerator entityGenerator, IEntityPositionProvider positionProvider, GrassSingleAbstractSettingGenerator grassSingleAbstractSettingGenerator, IGrassInstanceContainer grassInstanceContainer, GrassMeshGenerator meshGenerator, Material material) { this._entityGenerator = entityGenerator; this._positionProvider = positionProvider; this._grassSingleAbstractSettingGenerator = grassSingleAbstractSettingGenerator; this._grassInstanceContainer = grassInstanceContainer; _meshGenerator = meshGenerator; this._material = material; }
private void Start() { UnityEngine.Random.InitState(DateTime.Now.Second); //todo to provider GpuInstancingGrassInstanceContainer gpuInstancingGrassContainer = new GpuInstancingGrassInstanceContainer(); GameObjectGrassInstanceContainer gameObjectContainer = new GameObjectGrassInstanceContainer(); _rootInstanceContainer = new RootInstanceContainer(gameObjectContainer, gpuInstancingGrassContainer); _grassInstanceContainer = _rootInstanceContainer; Material grassMaterial = new Material(Shader.Find("Custom/Vegetation/Grass.Instanced")); var meshGenerator = new GrassMeshGenerator(); var singleGrassMeshProvider = new SingleGrassMeshProvider(meshGenerator); var singleGrassUpdater = new SingleGrassEntitySplatUpdater(singleGrassMeshProvider); var grassTuftLodEntitySplatGenerator = new GenericEntitySplatGenerator((position) => new LodEntitySplat(position, new SingleGrassLodResolver(), new GpuInstancingEntitySplatGenerator(new GrassTuftGenerator(), new SingleGrassUniformPositionProvider(), new GrassTuftAbstractSettingGenerator(), grassMaterial, new ConstantCount(20), singleGrassMeshProvider, gpuInstancingGrassContainer, new GpuInstancingGrassInstanceGenerator()), singleGrassUpdater)); var singleGrassLodEntitySplatGenerator = new GenericEntitySplatGenerator((position) => new LodEntitySplat(position, new SingleGrassLodResolver(), new GpuInstancingEntitySplatGenerator(new GrassSingleGenerator(), new SingleGrassUniformPositionProvider(), new GrassSingleAbstractSettingGenerator(), grassMaterial, new ConstantCount(20), singleGrassMeshProvider, gpuInstancingGrassContainer, new GpuInstancingGrassInstanceGenerator()), singleGrassUpdater)); var lodGroupProvider = new LodGroupsProvider(new List <ILodEntitySplatGenerator> { singleGrassLodEntitySplatGenerator, grassTuftLodEntitySplatGenerator }); var mapSize = new Vector2(100, 100); var splatSize = mapSize / 10; var singleLevelDistance = (int)splatSize.x * 2; var singleLevelMargin = 0.1f; var lodMarginPowCoef = 0.8f; _grassLodManager = new GrassLodManager(new LodLevelResolver(7, singleLevelDistance, singleLevelMargin, lodMarginPowCoef), new GrassLodManager.MultithreadLodGroupsActioner(lodGroupProvider), mapSize, splatSize); _grassLodManager.InitializeGroups(new Vector3(0, 0, 0)); _grassLodManager.UpdateLod(new Vector3(0, 0, 0)); }