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); }
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); }
public void OnEnable() { instance = target as GTerrainChunk; }