protected override void CaptureInternal(Terrain terrain, Bounds bounds) { SplatData.Clear(); var min = terrain.WorldToSplatCoord(bounds.min); var max = terrain.WorldToSplatCoord(bounds.max); int width = max.x - min.x; int height = max.z - min.z; var prototypes = terrain.terrainData.splatPrototypes; var wrappers = MMTerrainLayerUtilities.ResolvePrototypes(prototypes); var sampleSplats = terrain.terrainData.GetAlphamaps(min.x, min.z, width, height); for (var i = 0; i < prototypes.Length; ++i) { SplatPrototypeWrapper wrapper; wrappers.TryGetValue(prototypes[i], out wrapper); /*if (IgnoredSplats.Contains(wrapper)) * { * continue; * }*/ var data = new byte[width, height]; float sum = 0; for (var dx = 0; dx < width; ++dx) { for (var dz = 0; dz < height; ++dz) { var val = sampleSplats[dz, dx, i]; data[dx, dz] = (byte)Mathf.Clamp(val * 255f, 0, 255); sum += val; } } if (sum < 0.01f) { Debug.Log(string.Format("WorldStamp Splat Capture: Ignored splat layer {0} as it appeared to be empty.", wrapper != null ? wrapper.name : "Unresolved Splat")); continue; } SplatData.Add(new CompressedSplatData { Wrapper = wrapper, Data = new Serializable2DByteArray(data) }); } }
protected override void CaptureInternal(Terrain terrain, Bounds bounds) { DetailData.Clear(); var min = terrain.WorldToDetailCoord(bounds.min); var max = terrain.WorldToDetailCoord(bounds.max); int width = max.x - min.x; int height = max.z - min.z; var prototypes = terrain.terrainData.detailPrototypes; var wrappers = MMTerrainLayerUtilities.ResolvePrototypes(prototypes); for (var i = 0; i < prototypes.Length; ++i) { DetailPrototypeWrapper wrapper; wrappers.TryGetValue(prototypes[i], out wrapper); var sample = terrain.terrainData.GetDetailLayer(min.x, min.z, width, height, i); var data = new byte[width, height]; int sum = 0; for (var dx = 0; dx < width; ++dx) { for (var dz = 0; dz < height; ++dz) { var sampleData = sample[dz, dx]; data[dx, dz] = (byte)sampleData; sum += sampleData; } } if (sum < 0.01f) { Debug.Log(string.Format("WorldStamp Splat Capture: Ignored splat layer {0} as it appeared to be empty.", wrapper != null ? wrapper.name : "Unresolved Splat")); continue; } DetailData.Add(new CompressedDetailData { Wrapper = wrapper, Data = new Serializable2DByteArray(data) }); } }