Ejemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            GStylizedTerrain terrain = instance.Terrain;

            if (terrain.TerrainData == null)
            {
                return;
            }

            string label = "Vertex Count";
            string id    = "vertexcount" + instance.GetInstanceID();

            GEditorCommon.Foldout(label, false, id, () =>
            {
                EditorGUILayout.LabelField("Vertex Count");
                for (int i = 0; i < terrain.TerrainData.Geometry.LODCount; ++i)
                {
                    Mesh m = terrain.TerrainData.GeometryData.GetMesh(GTerrainChunk.GetChunkMeshName(instance.Index, i));
                    if (m != null)
                    {
                        EditorGUILayout.LabelField(string.Format("LOD {0}", i.ToString()), m.vertexCount.ToString());
                    }
                    else
                    {
                        EditorGUILayout.LabelField(string.Format("LOD {0}", i.ToString()), "null");
                    }
                }
            });
        }
        public void Process(GTerrainChunk chunk, ref GPolygon p)
        {
            Texture2D albedo = chunk.Terrain.TerrainData.Shading.AlbedoMap;
            Color     c0     = albedo.GetPixelBilinear(p.Uvs[0].x, p.Uvs[0].y);
            Color     c1     = albedo.GetPixelBilinear(p.Uvs[1].x, p.Uvs[1].y);
            Color     c2     = albedo.GetPixelBilinear(p.Uvs[2].x, p.Uvs[2].y);

            p.VertexColors = new List <Color32>(3);
            p.VertexColors.Add(c0);
            p.VertexColors.Add(c1);
            p.VertexColors.Add(c2);
        }
Ejemplo n.º 3
0
        public void Process(GTerrainChunk chunk, ref GPolygon p)
        {
            Texture2D albedo = chunk.Terrain.TerrainData.Shading.AlbedoMap;
            Vector2   uv     = (p.Uvs[0] + p.Uvs[1] + p.Uvs[2]) / 3;

            Color c = albedo.GetPixelBilinear(uv.x, uv.y);

            p.VertexColors = new List <Color32>(3);
            p.VertexColors.Add(c);
            p.VertexColors.Add(c);
            p.VertexColors.Add(c);
        }
        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);
                    }
                }
            }
        }
        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);
                        }
                    }
                }
            }
        }
        public void Process(GTerrainChunk chunk, ref GPolygon p)
        {
            Vector2 uv0  = p.Uvs[0];
            Vector2 uv1  = p.Uvs[1];
            Vector2 uv2  = p.Uvs[2];
            Vector2 uv01 = (uv0 + uv1) * 0.5f;
            Vector2 uv12 = (uv1 + uv2) * 0.5f;
            Vector2 uv20 = (uv2 + uv0) * 0.5f;

            Vector3 v0  = p.Vertices[0];
            Vector3 v1  = p.Vertices[1];
            Vector3 v2  = p.Vertices[2];
            Vector3 v01 = (v0 + v1) * 0.5f;
            Vector3 v12 = (v1 + v2) * 0.5f;
            Vector3 v20 = (v2 + v0) * 0.5f;

            v01.y = chunk.Terrain.GetInterpolatedHeightMapSample(uv01).x *chunk.Terrain.TerrainData.Geometry.Height;
            v12.y = chunk.Terrain.GetInterpolatedHeightMapSample(uv12).x *chunk.Terrain.TerrainData.Geometry.Height;
            v20.y = chunk.Terrain.GetInterpolatedHeightMapSample(uv20).x *chunk.Terrain.TerrainData.Geometry.Height;

            p.Vertices.Clear();
            p.Vertices.Add(v0); p.Vertices.Add(v01); p.Vertices.Add(v20);
            p.Vertices.Add(v1); p.Vertices.Add(v12); p.Vertices.Add(v01);
            p.Vertices.Add(v2); p.Vertices.Add(v20); p.Vertices.Add(v12);
            p.Vertices.Add(v01); p.Vertices.Add(v12); p.Vertices.Add(v20);

            p.Uvs.Clear();
            p.Uvs.Add(uv0); p.Uvs.Add(uv01); p.Uvs.Add(uv20);
            p.Uvs.Add(uv1); p.Uvs.Add(uv12); p.Uvs.Add(uv01);
            p.Uvs.Add(uv2); p.Uvs.Add(uv20); p.Uvs.Add(uv12);
            p.Uvs.Add(uv01); p.Uvs.Add(uv12); p.Uvs.Add(uv20);

            p.Triangles.Clear();
            p.Triangles.Add(0); p.Triangles.Add(1); p.Triangles.Add(2);
            p.Triangles.Add(3); p.Triangles.Add(4); p.Triangles.Add(5);
            p.Triangles.Add(6); p.Triangles.Add(7); p.Triangles.Add(8);
            p.Triangles.Add(9); p.Triangles.Add(10); p.Triangles.Add(11);
        }
Ejemplo n.º 7
0
 public void OnEnable()
 {
     instance = target as GTerrainChunk;
 }