Exemplo n.º 1
0
    /// <summary>
    /// precompute atmosphere, normal and vertex data
    /// </summary>
    public void Precompute()
    {
        K        = Screen.width / (2f * Mathf.Tan((65f / 2f) * Mathf.Deg2Rad));
        m_perlin = new ImprovedPerlinNoise(0);
        m_perlin.LoadResourcesFor3DNoise();

        Texture2D perm = m_perlin.GetPermutationTable2D();
        Texture2D grad = m_perlin.GetGradient3D();

        VertexComputeShader.SetTexture(0, "_PermTable2D", perm);
        VertexComputeShader.SetTexture(0, "_Gradient3D", grad);

        mat.SetTexture(PermTable2D, perm);
        mat.SetTexture(Gradient3D, grad);

        VertexComputeBuffer    = new ComputeBuffer((ChunkSegments + 2) * (ChunkSegments + 2), 12);
        NormalComputeBuffer    = new ComputeBuffer((ChunkSegments + 2) * (ChunkSegments + 2), 12);
        PlanetMapCreatorBuffer = new ComputeBuffer(1024 * 1024, 32);

        VertexComputeShader.SetBuffer(0, "vertexBuffer", VertexComputeBuffer);
        VertexComputeShader.SetBuffer(0, "normalBuffer", NormalComputeBuffer);

        PlanetMapGeneratorShader.SetBuffer(0, "Output", PlanetMapCreatorBuffer);
        PlanetMapGeneratorShader.SetTexture(0, "_PermTable2D", perm);
        PlanetMapGeneratorShader.SetTexture(0, "_Gradient3D", grad);

        UpdateNoise();
    }
Exemplo n.º 2
0
    void Start()
    {
        m_perlin = new ImprovedPerlinNoise(m_seed);

        m_perlin.LoadResourcesFor3DNoise();

        GetComponent <Renderer>().material.SetTexture("_PermTable2D", m_perlin.GetPermutationTable2D());
        GetComponent <Renderer>().material.SetTexture("_Gradient3D", m_perlin.GetGradient3D());
    }
Exemplo n.º 3
0
    public void StartATL()
    {
        perlin = new ImprovedPerlinNoise(seed);

        perlin.LoadResourcesFor4DNoise();

        GetComponent <Renderer>().material.SetTexture("_PermTable1D", perlin.GetPermutationTable1D());
        GetComponent <Renderer>().material.SetTexture("_PermTable2D", perlin.GetPermutationTable2D());
        GetComponent <Renderer>().material.SetTexture("_Gradient4D", perlin.GetGradient4D());
    }
        public void Init()
        {
            DontDestroyOnLoad(this);

            noise = new ImprovedPerlinNoise(seed);
            noise.LoadResourcesFor3DNoise();
            renderer.material.SetTexture("_PermTable2D", noise.GetPermutationTable2D());
            renderer.material.SetTexture("_Gradient3D", noise.GetGradient3D());
            currentTime = 0;
            renderer.material.SetFloat("_Evolution", currentTime);
        }
Exemplo n.º 5
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);
        }
    }
Exemplo n.º 6
0
        protected override void Start()
        {
            base.Start();

            if (TerrainNode == null)
            {
                TerrainNode = transform.parent.GetComponent <TerrainNode>();
            }
            if (TerrainNode.Body == null)
            {
                TerrainNode.Body = transform.parent.GetComponentInParent <CelestialBody>();
            }

            var tileSize = GetTileSize(0);

            if ((tileSize - GetBorder() * 2 - 1) % (TerrainNode.Body.GridResolution - 1) != 0)
            {
                throw new InvalidParameterException("Tile size - border * 2 - 1 must be divisible by grid mesh resolution - 1" + string.Format(": {0}-{1}", tileSize, GetBorder()));
            }

            var storage = Cache.GetStorage(0) as GPUTileStorage;

            if (storage == null)
            {
                throw new InvalidStorageException("Storage must be a GPUTileStorage");
            }

            if (storage.FilterMode != FilterMode.Point)
            {
                throw new InvalidParameterException("GPUTileStorage filter must be point. There will be seams in the terrain otherwise");
            }

            uniforms = new Uniforms();

            Noise = new ImprovedPerlinNoise(UpsampleSettings.Seed);
            Noise.LoadResourcesFor3DNoise();
            UpSampleMaterial.SetTexture("_PermTable2D", Noise.GetPermutationTable2D());
            UpSampleMaterial.SetTexture("_Gradient3D", Noise.GetGradient3D());
        }
		public void Init()
		{
			DontDestroyOnLoad (this);

			noise = new ImprovedPerlinNoise (seed);
			noise.LoadResourcesFor3DNoise ();
			renderer.material.SetTexture ("_PermTable2D", noise.GetPermutationTable2D ());
			renderer.material.SetTexture ("_Gradient3D", noise.GetGradient3D ());
			currentTime = 0;
			renderer.material.SetFloat ("_Evolution", currentTime);
		}