Example #1
0
    void Start()
    {
        m_perlin = new ImprovedPerlinNoise(m_seed);

        m_perlin.LoadResourcesFor4DNoise();

        GetComponent <Renderer>().material.SetTexture("_PermTable1D", m_perlin.GetPermutationTable1D());
        GetComponent <Renderer>().material.SetTexture("_PermTable2D", m_perlin.GetPermutationTable2D());
        GetComponent <Renderer>().material.SetTexture("_Gradient4D", m_perlin.GetGradient4D());
    }
Example #2
0
    void Update()
    {
        //must reset mesh verts to 0 each frame.
        m_meshBuffer.SetData(new float[SIZE * 7]);

        //Make the voxels.
        m_perlinNoise.SetInt("_Width", N);
        m_perlinNoise.SetInt("_Height", N);
        m_perlinNoise.SetFloat("_Frequency", 0.02f);
        m_perlinNoise.SetFloat("_Lacunarity", 2.0f);
        m_perlinNoise.SetFloat("_Gain", 0.5f);
        m_perlinNoise.SetFloat("_Time", Time.time * m_speed);
        m_perlinNoise.SetTexture(0, "_PermTable1D", perlin.GetPermutationTable1D());
        m_perlinNoise.SetTexture(0, "_PermTable2D", perlin.GetPermutationTable2D());
        m_perlinNoise.SetTexture(0, "_Gradient4D", perlin.GetGradient4D());
        m_perlinNoise.SetBuffer(0, "_Result", m_noiseBuffer);

        m_perlinNoise.Dispatch(0, N / 8, N / 8, N / 8);

        //Make the voxel normals.
        m_normals.SetInt("_Width", N);
        m_normals.SetInt("_Height", N);
        m_normals.SetBuffer(0, "_Noise", m_noiseBuffer);
        m_normals.SetBuffer(0, "_Result", m_normalsBuffer);

        m_normals.Dispatch(0, N / 8, N / 8, N / 8);

        //Make the mesh verts
        m_marchingCubes.SetInt("_Width", N);
        m_marchingCubes.SetInt("_Height", N);
        m_marchingCubes.SetInt("_Depth", N);
        m_marchingCubes.SetInt("_Border", 1);
        m_marchingCubes.SetFloat("_Target", 0.0f);
        m_marchingCubes.SetBuffer(0, "_Voxels", m_noiseBuffer);
        m_marchingCubes.SetBuffer(0, "_Normals", m_normalsBuffer);
        m_marchingCubes.SetBuffer(0, "_Buffer", m_meshBuffer);
        m_marchingCubes.SetBuffer(0, "_CubeEdgeFlags", m_cubeEdgeFlags);
        m_marchingCubes.SetBuffer(0, "_TriangleConnectionTable", m_triangleConnectionTable);

        m_marchingCubes.Dispatch(0, N / 8, N / 8, N / 8);

        m_drawBuffer.SetBuffer("_Buffer", m_meshBuffer);
        m_drawBuffer.SetPass(0);

        var prop = new MaterialPropertyBlock();

        for (var i = 0; i < N; i++)
        {
            prop.SetFloat("_IdOffset", i * N * N * 3 * 5);
            Graphics.DrawMesh(m_mesh, transform.localToWorldMatrix, m_drawBuffer, 0, null, 0, prop);
        }
    }