Exemplo n.º 1
0
    public void PipeData(ComputeShader compute, CraterData craters)
    {
        compute.SetFloat("craterEffect", craters.craterEffect);
        compute.SetFloat("craterPoint", craters.craterPoint);
        compute.SetFloat("warpAmt", craters.warpAmount);

        compute.SetVector("craterComp", craters.comp);
        compute.SetFloat("craterMin", craters.craterMin);
        compute.SetFloat("craterMax", craters.craterMax);
        compute.SetFloat("craterLip", craters.craterLip);
        PipeData(compute, craters.noise);
    }
Exemplo n.º 2
0
        public static JsonArray Pack(CraterData c)
        {
            JsonArray a = new JsonArray(c.craterEffect,
                                        c.craterPoint,
                                        c.warpAmount);

            a.AddAll(Pack(c.noise));
            a.AddAll(Pack(c.comp));
            a.Add(c.craterMin);
            a.Add(c.craterMax);
            a.Add(c.craterLip);
            return(a);
        }
Exemplo n.º 3
0
    public static Mesh generateCraters(Mesh meshData, int craterDensity, float rimWidth, float rimHeight, float rimSteepness, float maxRadius)
    {
        Vector3[]    vertices    = meshData.vertices;
        CraterData[] craterDatas = new CraterData[craterDensity];

        // for each crater, creates and stores a centerpoint and a radius
        for (int i = 0; i < craterDensity; i++)
        {
            craterDatas[i] = new CraterData(
                meshData.vertices[Random.Range(0, meshData.vertices.Length)],
                Random.Range(1, maxRadius)
                );
        }

        for (int i = 0; i < meshData.vertices.Length; i++)
        {
            float craterHeight = 0;
            for (int c = 0; c < craterDensity; c++)
            {
                // get an x coordinate between -1 and 1
                float x = Vector3.Distance(meshData.vertices[i], craterDatas[c].center) / craterDatas[c].radius;

                //three functions that gives a rough crater shape
                float crater   = x * x - 1;
                float rim      = Mathf.Min(x - 1 - rimWidth, 0);
                float rimFinal = rim * rim * rimSteepness;

                //combine the functions
                float craterValue = Mathf.Max(crater, rimHeight);
                craterValue   = Mathf.Min(craterValue, rimFinal);
                craterHeight += craterValue * craterDatas[c].radius;
            }

            vertices[i] += meshData.normals[i] * craterHeight;
        }

        meshData.vertices = vertices;
        meshData.RecalculateNormals();
        return(meshData);
    }