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()); }
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); } }