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; }
private GrassEntitiesWithMaterials generateTurf(GrassBillboardGenerator billboardGenerator) { var meshGenerator = new GrassMeshGenerator(); var mesh = meshGenerator.GetGrassBillboardMesh(0, 1); var xgenerateTriangleTurf = billboardGenerator.GenerateTriangleTurf(); //todo : use grass entities set and rotate //xgenerateTriangleTurf.Rotation = (MyMathUtils.DegToRad(new Vector3(0, 90, 0))); //xgenerateTriangleTurf.Position = new Vector3(2,2,2); return(new GrassEntitiesWithMaterials(xgenerateTriangleTurf.EntitiesAfterTransform, BillboardMaterial, mesh, ContainerType.GameObject)); }
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)); }
public GrassEntitiesWithMaterials GenerateUniformRectangeBillboardGrass(Material material, IGrassPlacer placer, int lodLevel) { List <GrassEntity> createdEntities = new List <GrassEntity>(); var billboardGenerator = new GrassBillboardGenerator(); var meshGenerator = new GrassMeshGenerator(); var mesh = meshGenerator.GetGrassBillboardMesh(0, 1); for (int i = 0; i < 75; i++) { var triangleTurf = billboardGenerator.GenerateTriangleTurf(); //todo : use grass entities set and rotate triangleTurf.Rotation = (MyMathUtils.DegToRad(new Vector3(0, UnityEngine.Random.Range(0, 360), 0))); placer.Set(triangleTurf); createdEntities.AddRange(triangleTurf.EntitiesAfterTransform); } return(null); // new GrassEntitiesWithMaterials(createdEntities, material, mesh); }
private void Start() { Random.InitState(DateTime.Now.Second); _rootInstanceContainer = new RootInstanceContainer(); Material grassMaterial = new Material(Shader.Find("Custom/testSurfaceShader23.Instanced")); var meshGenerator = new GrassMeshGenerator(); var grassTuftLodEntitySplatGenerator = new GrassTuftLodEntitySplatGenerator( new GrassTuftGenerator(), new SingleGrassUniformPositionProvider(), new GrassTuftAbstractSettingGenerator(), _rootInstanceContainer, meshGenerator, grassMaterial); var singleGrassLodEntitySplatGenerator = new SingleGrassLodEntitySplatGenerator( new GrassSingleGenerator(), new SingleGrassUniformPositionProvider(), new GrassSingleAbstractSettingGenerator(), _rootInstanceContainer, meshGenerator, grassMaterial); 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), lodGroupProvider, mapSize, splatSize); _grassLodManager.UpdateLod(new Vector3(0, 0, 0)); }