public static class TerrainHeightmapPngSixteen-bit greyscale PNG, which is what every terrain generator writes and what Vixen.Core.Imaging deliberately does not read.
Remarks
[docs/plan/31 § T3]'s owed import and export. Raw .r16 has been wired since T1 and is lossless, but it carries no header — so a person importing one has to know its size and its endianness, and getting either wrong produces a terrain that looks like static. A PNG says both.
⚠ Here rather than in Vixen.Core.Imaging, and the split is the bit depth. That library's decoder reads eight bits a channel, which is the right answer for a texture and the wrong one for a heightfield: a terrain quantised to 256 heights is a faint terrace on every slope, and it gets attributed to the generator rather than to the import. This reads sixteen and refuses everything else rather than narrowing it.
⚠ Greyscale only, and a colour PNG is refused rather than averaged. There is no defensible way to turn three channels into one height — a luminance weighting is a photographic convention and a heightfield is not a photograph — and averaging silently would make a terrain that is subtly wrong everywhere.
⚠ Every filter type is decoded and only one is encoded. A file this writes is one we control; a file it reads came from World Machine, Gaea or Photoshop, and each picks filters per row. Refusing a filter would refuse most real files.
⚠ PNG is big-endian and always has been. Sixteen-bit samples are stored high byte first whatever the machine is, which is the one place a heightmap import cannot be asked about endianness — and the one place a raw .r16 always must be.
Fields and properties (3)
public const int BytesPerSampleHow many bytes one sample is.
public const int MaximumSizeThe largest heightmap this will decode, on either axis.
public const int MaximumExpansionThe most the image data may expand to, as a multiple of the IDAT bytes present.
Methods (3)
public static TerrainHeightmapImage Decode(ReadOnlySpan<byte> data)Reads a sixteen-bit greyscale PNG.
public static byte[] Encode(Terrain terrain)Writes a terrain's composited heights as a sixteen-bit greyscale PNG.
public static byte[] Encode(int width, int height, ReadOnlySpan<ushort> samples)Writes samples as a sixteen-bit greyscale PNG.
Used by (5)
- HeightmapPngTargetVixen.Fuzz
- MalformedHeightmapPngTestsVixen.Terrain.Tests
- TerrainHeightmapPngTestsVixen.Terrain.Tests
- HeightmapImporterVixen.Editor.Assets
- TerrainAssetImporterTestsVixen.Editor.Assets.Tests