Exemplo n.º 1
0
        public static void DrawMask4ChannelsLivePreview(GStylizedTerrain t, Camera cam, Texture masks, Rect dirtyRect)
        {
            Material mat = GInternalMaterials.Mask4ChannelsMaterial;

            if (mat == null)
            {
                return;
            }

            previewPropertyBlock.Clear();
            GTerrainChunk[] chunks = t.GetChunks();
            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                if (uvRange.Overlaps(dirtyRect))
                {
                    Mesh chunkMesh = chunks[i].GetMesh(0);
                    if (chunkMesh != null)
                    {
                        previewPropertyBlock.SetTexture("_MainTex", masks);
                        Graphics.DrawMesh(
                            chunkMesh,
                            chunks[i].transform.localToWorldMatrix * Matrix4x4.Translate(Vector3.up * 0.05f),
                            mat,
                            chunks[i].gameObject.layer,
                            cam,
                            0,
                            previewPropertyBlock,
                            t.TerrainData.Rendering.CastShadow,
                            t.TerrainData.Rendering.ReceiveShadow);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void DrawCursorProjected(GStylizedTerrain t)
        {
            for (int i = 0; i < normalizedPoints.Length; ++i)
            {
                normalizedPoints[i] = t.WorldPointToUV(worldPoints[i]);
            }

            Rect dirtyRect = GUtilities.GetRectContainsPoints(normalizedPoints);

            GTerrainChunk[] chunks = t.GetChunks();
            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRect = chunks[i].GetUvRange();
                if (!uvRect.Overlaps(dirtyRect))
                {
                    continue;
                }
                Mesh m = chunks[i].MeshFilterComponent.sharedMesh;
                if (m == null)
                {
                    continue;
                }
                Graphics.DrawMeshNow(
                    m,
                    Matrix4x4.TRS(chunks[i].transform.position, chunks[i].transform.rotation, chunks[i].transform.lossyScale));
            }
        }
        public static void DrawSplatLivePreview(GStylizedTerrain t, Camera cam, Texture[] newControlMaps, Rect dirtyRect)
        {
            Material mat = t.TerrainData.Shading.MaterialToRender;

            if (mat == null)
            {
                return;
            }
            int controlMapResolution = t.TerrainData.Shading.SplatControlResolution;
            int controlMapCount      = t.TerrainData.Shading.SplatControlMapCount;

            if (controlMapCount == 0)
            {
                return;
            }

            previewPropertyBlock.Clear();
            for (int i = 0; i < controlMapCount; ++i)
            {
                if (!string.IsNullOrEmpty(t.TerrainData.Shading.SplatControlMapPropertyName))
                {
                    previewPropertyBlock.SetTexture(t.TerrainData.Shading.SplatControlMapPropertyName + i, newControlMaps[i]);
                }
            }

            GTerrainChunk[] chunks = t.GetChunks();
            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                if (uvRange.Overlaps(dirtyRect))
                {
                    string chunkMeshName = GTerrainChunk.GetChunkMeshName(chunks[i].Index, 0);
                    Mesh   chunkMesh     = t.TerrainData.GeometryData.GetMesh(chunkMeshName);
                    if (chunkMesh != null)
                    {
                        Graphics.DrawMesh(
                            chunkMesh,
                            chunks[i].transform.localToWorldMatrix * Matrix4x4.Translate(Vector3.up * 0.01f),
                            mat,
                            chunks[i].gameObject.layer,
                            cam,
                            0,
                            previewPropertyBlock,
                            t.TerrainData.Rendering.CastShadow,
                            t.TerrainData.Rendering.ReceiveShadow);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public static void DrawAMSLivePreview(GStylizedTerrain t, Camera cam, Texture newAlbedo, Texture newMetallicMap, Rect dirtyRect)
        {
            Material mat = t.TerrainData.Shading.MaterialToRender;

            if (mat == null)
            {
                return;
            }

            previewPropertyBlock.Clear();
            if (!string.IsNullOrEmpty(t.TerrainData.Shading.AlbedoMapPropertyName))
            {
                previewPropertyBlock.SetTexture(t.TerrainData.Shading.AlbedoMapPropertyName, newAlbedo);
            }
            if (!string.IsNullOrEmpty(t.TerrainData.Shading.MetallicMapPropertyName))
            {
                previewPropertyBlock.SetTexture(t.TerrainData.Shading.MetallicMapPropertyName, newMetallicMap);
            }


            GTerrainChunk[] chunks = t.GetChunks();
            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                if (uvRange.Overlaps(dirtyRect))
                {
                    Mesh chunkMesh = chunks[i].GetMesh(0);
                    if (chunkMesh != null)
                    {
                        Graphics.DrawMesh(
                            chunkMesh,
                            chunks[i].transform.localToWorldMatrix * Matrix4x4.Translate(Vector3.up * 0.01f),
                            mat,
                            chunks[i].gameObject.layer,
                            cam,
                            0,
                            previewPropertyBlock,
                            t.TerrainData.Rendering.CastShadow,
                            t.TerrainData.Rendering.ReceiveShadow);
                    }
                }
            }
        }
Exemplo n.º 5
0
        private void DrawTerrainMeshPreview(GStylizedTerrain t, Camera cam)
        {
            Material mat = t.TerrainData.Shading.MaterialToRender;

            if (mat == null)
            {
                return;
            }

            GTerrainChunk[] chunks = t.GetChunks();
            instance.GetQuad(worldPoints);
            for (int i = 0; i < normalizedPoints.Length; ++i)
            {
                normalizedPoints[i] = t.WorldPointToUV(worldPoints[i]);
            }

            Rect dirtyRect = GUtilities.GetRectContainsPoints(normalizedPoints);

            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                if (uvRange.Overlaps(dirtyRect))
                {
                    string chunkMeshName = GTerrainChunk.GetChunkMeshName(chunks[i].Index, 0);
                    Mesh   chunkMesh     = t.TerrainData.GeometryData.GetMesh(chunkMeshName);
                    if (chunkMesh != null)
                    {
                        Graphics.DrawMesh(
                            chunkMesh,
                            chunks[i].transform.localToWorldMatrix,
                            mat,
                            chunks[i].gameObject.layer,
                            cam,
                            0,
                            previewPropertyBlock,
                            t.TerrainData.Rendering.CastShadow,
                            t.TerrainData.Rendering.ReceiveShadow);
                    }
                }
            }
        }
        public static void DrawMasksLivePreview(GStylizedTerrain t, Camera cam, Texture[] masks, Color[] colors, Rect dirtyRect)
        {
            Material mat = GInternalMaterials.MaskVisualizerMaterial;

            if (mat == null)
            {
                return;
            }

            previewPropertyBlock.Clear();
            previewPropertyBlock.SetVector("_Dimension", new Vector4(t.TerrainData.Geometry.Width, t.TerrainData.Geometry.Height, t.TerrainData.Geometry.Length));

            GTerrainChunk[] chunks = t.GetChunks();
            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                if (uvRange.Overlaps(dirtyRect))
                {
                    string chunkMeshName = GTerrainChunk.GetChunkMeshName(chunks[i].Index, 0);
                    Mesh   chunkMesh     = t.TerrainData.GeometryData.GetMesh(chunkMeshName);
                    if (chunkMesh != null)
                    {
                        for (int j = 0; j < masks.Length; ++j)
                        {
                            previewPropertyBlock.SetColor("_Color", colors[j]);
                            previewPropertyBlock.SetTexture("_MainTex", masks[j]);
                            Graphics.DrawMesh(
                                chunkMesh,
                                chunks[i].transform.localToWorldMatrix * Matrix4x4.Translate(Vector3.up * 0.01f * j),
                                mat,
                                chunks[i].gameObject.layer,
                                cam,
                                0,
                                previewPropertyBlock,
                                t.TerrainData.Rendering.CastShadow,
                                t.TerrainData.Rendering.ReceiveShadow);
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        private void DrawTerrainMeshPreview(GStylizedTerrain t, Camera cam)
        {
            Material mat = t.TerrainData.Shading.MaterialToRender;

            if (mat == null)
            {
                return;
            }

            GTerrainChunk[] chunks        = t.GetChunks();
            List <Rect>     dirtyRects    = new List <Rect>(instance.SplineCreator.SweepDirtyRect(t));
            int             chunkGridSize = t.TerrainData.Geometry.ChunkGridSize;

            for (int i = 0; i < chunks.Length; ++i)
            {
                Rect uvRange = chunks[i].GetUvRange();
                for (int r = 0; r < dirtyRects.Count; ++r)
                {
                    if (uvRange.Overlaps(dirtyRects[r]))
                    {
                        string chunkMeshName = GTerrainChunk.GetChunkMeshName(chunks[i].Index, 0);
                        Mesh   chunkMesh     = t.TerrainData.GeometryData.GetMesh(chunkMeshName);
                        if (chunkMesh != null)
                        {
                            Graphics.DrawMesh(
                                chunkMesh,
                                chunks[i].transform.localToWorldMatrix,
                                mat,
                                chunks[i].gameObject.layer,
                                cam,
                                0,
                                previewPropertyBlock,
                                t.TerrainData.Rendering.CastShadow,
                                t.TerrainData.Rendering.ReceiveShadow);
                        }
                        break;
                    }
                }
            }
        }