private void InitializeWaterSurfaceReflectiveBuffers() { waterQuadStrokesCBufferLrg = new ComputeBuffer(numWaterQuadStrokesPerDimensionLrg * numWaterQuadStrokesPerDimensionLrg, sizeof(float) * 9 + sizeof(int) * 2); WaterQuadData[] waterQuadStrokesArrayLrg = new WaterQuadData[waterQuadStrokesCBufferLrg.count]; float waterQuadStrokesBounds = SimulationManager._MapSize; for (int x = 0; x < numWaterQuadStrokesPerDimensionLrg; x++) { for (int y = 0; y < numWaterQuadStrokesPerDimensionLrg; y++) { int index = x * numWaterQuadStrokesPerDimensionLrg + y; float xPos = (float)x / (float)(numWaterQuadStrokesPerDimensionLrg - 1) * waterQuadStrokesBounds; float yPos = (float)y / (float)(numWaterQuadStrokesPerDimensionLrg - 1) * waterQuadStrokesBounds; Vector2 offset = new Vector2(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); Vector3 pos = new Vector3(xPos + offset.x, yPos + offset.y, 0f); waterQuadStrokesArrayLrg[index].worldPos = pos; waterQuadStrokesArrayLrg[index].localScale = 3f * new Vector2(UnityEngine.Random.Range(0.5f, 0.75f), UnityEngine.Random.Range(2.1f, 3.5f)) * UnityEngine.Random.Range(0.75f, 1.33f); // Y is forward, along stroke waterQuadStrokesArrayLrg[index].heading = new Vector2(Mathf.Round(UnityEngine.Random.Range(0f, 1f)) * 2f - 1f, UnityEngine.Random.Range(-0.15f, 0.15f)).normalized; waterQuadStrokesArrayLrg[index].brushType = UnityEngine.Random.Range(0, 4); waterQuadStrokesArrayLrg[index].age = UnityEngine.Random.Range(1f, 2f); } } waterQuadStrokesCBufferLrg.SetData(waterQuadStrokesArrayLrg); waterQuadStrokesCBufferSml = new ComputeBuffer(numWaterQuadStrokesPerDimensionSml * numWaterQuadStrokesPerDimensionSml, sizeof(float) * 9 + sizeof(int) * 2); WaterQuadData[] waterQuadStrokesArraySml = new WaterQuadData[waterQuadStrokesCBufferSml.count]; for (int x = 0; x < numWaterQuadStrokesPerDimensionSml; x++) { for (int y = 0; y < numWaterQuadStrokesPerDimensionSml; y++) { int index = x * numWaterQuadStrokesPerDimensionSml + y; float xPos = (float)x / (float)(numWaterQuadStrokesPerDimensionSml - 1) * 64f + 128f; float yPos = (float)y / (float)(numWaterQuadStrokesPerDimensionSml - 1) * 64f + 128f; Vector2 offset = new Vector2(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); Vector3 pos = new Vector3(xPos + offset.x, yPos + offset.y, 0f); waterQuadStrokesArraySml[index].worldPos = pos; waterQuadStrokesArraySml[index].localScale = 0.08f * new Vector2(UnityEngine.Random.Range(0.5f, 0.75f), UnityEngine.Random.Range(2.1f, 3.5f)) * UnityEngine.Random.Range(0.75f, 1.33f); // Y is forward, along stroke waterQuadStrokesArraySml[index].heading = new Vector2(Mathf.Round(UnityEngine.Random.Range(0f, 1f)) * 2f - 1f, UnityEngine.Random.Range(-0.15f, 0.15f)).normalized; waterQuadStrokesArraySml[index].brushType = UnityEngine.Random.Range(0, 4); waterQuadStrokesArraySml[index].age = UnityEngine.Random.Range(1f, 2f); } } waterQuadStrokesCBufferSml.SetData(waterQuadStrokesArraySml); }
private void InitializeWaterNutrientsBits() { waterNutrientsBitsCBuffer = new ComputeBuffer(numNutrientsBits, sizeof(float) * 9 + sizeof(int) * 2); WaterQuadData[] waterNutrientsBitsArray = new WaterQuadData[waterNutrientsBitsCBuffer.count]; for (int x = 0; x < numNutrientsBits; x++) { float xPos = 0f; // (float)x / (float)(numNutrientsBits - 1) * waterNutrientsBitsBounds; float yPos = 0f; // (float)y / (float)(numwaterNutrientsBitsPerDimension - 1) * waterNutrientsBitsBounds; Vector2 offset = new Vector2(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); Vector3 pos = new Vector3(xPos + offset.x, yPos + offset.y, 0f); waterNutrientsBitsArray[x].worldPos = pos; waterNutrientsBitsArray[x].localScale = 0.035f * new Vector2(UnityEngine.Random.Range(0.75f, 1.5f), UnityEngine.Random.Range(2f, 3.5f)) * UnityEngine.Random.Range(0.4f, 0.7f); // Y is forward, along stroke waterNutrientsBitsArray[x].heading = new Vector2(UnityEngine.Random.Range(-3f, 3f), UnityEngine.Random.Range(-0.5f, 0.5f)).normalized; waterNutrientsBitsArray[x].brushType = UnityEngine.Random.Range(0, 4); waterNutrientsBitsArray[x].age = UnityEngine.Random.Range(1f, 2f); } waterNutrientsBitsCBuffer.SetData(waterNutrientsBitsArray); }
private void InitializeWaterSurfaceBits() { waterSurfaceBitsCBuffer = new ComputeBuffer(numSurfaceBits, sizeof(float) * 9 + sizeof(int) * 2); WaterQuadData[] waterSurfaceBitsArray = new WaterQuadData[waterSurfaceBitsCBuffer.count]; for (int x = 0; x < numSurfaceBits; x++) { float xPos = 128f; // (float)x / (float)(numSurfaceBits - 1) * waterSurfaceBitsBounds; float yPos = 128f; // (float)y / (float)(numwaterSurfaceBitsPerDimension - 1) * waterSurfaceBitsBounds; Vector2 offset = new Vector2(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); Vector3 pos = new Vector3(xPos + offset.x, yPos + offset.y, 0f); waterSurfaceBitsArray[x].worldPos = pos; waterSurfaceBitsArray[x].localScale = new Vector2(UnityEngine.Random.Range(0.6f, 1.6f), UnityEngine.Random.Range(0.67f, 1.5f)) * UnityEngine.Random.Range(0.49f, 0.66f); // Y is forward, along stroke waterSurfaceBitsArray[x].heading = new Vector2(UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f)).normalized; waterSurfaceBitsArray[x].brushType = UnityEngine.Random.Range(0, 4); waterSurfaceBitsArray[x].age = UnityEngine.Random.Range(1f, 2f); } waterSurfaceBitsCBuffer.SetData(waterSurfaceBitsArray); /*waterSurfaceBitsShadowsCBuffer = new ComputeBuffer(numSurfaceBits, sizeof(float) * 9 + sizeof(int) * 2); * WaterQuadData[] waterSurfaceBitsShadowsArray = new WaterQuadData[waterSurfaceBitsShadowsCBuffer.count]; * * for (int x = 0; x < numSurfaceBits; x++) * { * * float xPos = 128f; // (float)x / (float)(numSurfaceShadowsBits - 1) * waterSurfaceShadowsBitsBounds; * float yPos = 128f; // (float)y / (float)(numwaterSurfaceShadowsBitsPerDimension - 1) * waterSurfaceShadowsBitsBounds; * Vector2 offset = new Vector2(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)); * Vector3 pos = new Vector3(xPos + offset.x, yPos + offset.y, 0f); * waterSurfaceBitsShadowsArray[x].worldPos = pos; * waterSurfaceBitsShadowsArray[x].localScale = new Vector2(UnityEngine.Random.Range(0.9f, 1.5f), UnityEngine.Random.Range(1.1f, 2.5f)) * UnityEngine.Random.Range(0.36f, 0.65f); // Y is forward, along stroke * waterSurfaceBitsShadowsArray[x].heading = new Vector2(UnityEngine.Random.Range(-3f, 3f), UnityEngine.Random.Range(-0.5f, 0.5f)).normalized; * waterSurfaceBitsShadowsArray[x].brushType = UnityEngine.Random.Range(0, 4); * waterSurfaceBitsShadowsArray[x].age = UnityEngine.Random.Range(1f, 2f); * * * } * waterSurfaceBitsShadowsCBuffer.SetData(waterSurfaceBitsShadowsArray); */ }