Пример #1
0
    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);
    }
Пример #2
0
    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);
    }
Пример #3
0
    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);
         */
    }