fixed the script

This commit is contained in:
Matthias Puchstein (s0wlz)
2025-12-13 18:02:07 +01:00
parent 7007145f81
commit 03bc3a2229
11 changed files with 388 additions and 228 deletions

View File

@@ -1,178 +1,338 @@
using System;
using System.Globalization;
using System.IO;
using UnityEditor;
using UnityEngine;
public class GeoTileImporter : EditorWindow
{
// Default paths (your desired layout)
private string tilesCsvPath = "Assets/GeoData/tile_index.csv";
private string heightmapsDir = "Assets/GeoData/height_png16";
// Terrain settings
private float tileSizeMeters = 1000f;
private int heightmapResolution = 1025;
private string parentName = "Geo_Terrain_Tiles";
private bool deleteExisting = false;
[MenuItem("Tools/Geo Tiles/Import Terrain Tiles (PNG16)")]
public static void ShowWindow()
{
var win = GetWindow<GeoTileImporter>("Geo Tile Importer");
win.minSize = new Vector2(560, 260);
}
private void OnGUI()
{
GUILayout.Label("Inputs", EditorStyles.boldLabel);
tilesCsvPath = EditorGUILayout.TextField("tile_index.csv", tilesCsvPath);
heightmapsDir = EditorGUILayout.TextField("height_png16 dir", heightmapsDir);
GUILayout.Space(10);
GUILayout.Label("Terrain", EditorStyles.boldLabel);
tileSizeMeters = EditorGUILayout.FloatField("Tile size (m)", tileSizeMeters);
heightmapResolution = EditorGUILayout.IntField("Heightmap resolution", heightmapResolution);
parentName = EditorGUILayout.TextField("Parent object name", parentName);
deleteExisting = EditorGUILayout.ToggleLeft("Delete existing terrains under parent", deleteExisting);
GUILayout.Space(10);
if (GUILayout.Button("Import / Rebuild"))
ImportTiles();
EditorGUILayout.HelpBox(
"Creates one Unity Terrain per CSV row and positions tiles on a meter grid.\n" +
"Y-offset is set to global_min and Terrain height to (global_max-global_min) for real elevations.",
MessageType.Info);
}
private void ImportTiles()
{
if (!File.Exists(tilesCsvPath))
{
Debug.LogError($"CSV not found: {tilesCsvPath}");
return;
}
if (!Directory.Exists(heightmapsDir))
{
Debug.LogError($"Heightmap dir not found: {heightmapsDir}");
return;
}
var parent = GameObject.Find(parentName);
if (parent == null) parent = new GameObject(parentName);
if (deleteExisting)
{
for (int i = parent.transform.childCount - 1; i >= 0; i--)
{
DestroyImmediate(parent.transform.GetChild(i).gameObject);
}
}
var ci = CultureInfo.InvariantCulture;
var lines = File.ReadAllLines(tilesCsvPath);
if (lines.Length < 2)
{
Debug.LogError("CSV has no data rows.");
return;
}
// Determine origin from min xmin/ymin so SW-most tile starts at (0,0)
double originX = double.PositiveInfinity;
double originY = double.PositiveInfinity;
for (int i = 1; i < lines.Length; i++)
{
var parts = lines[i].Split(',');
if (parts.Length < 9) continue;
originX = Math.Min(originX, double.Parse(parts[1], ci));
originY = Math.Min(originY, double.Parse(parts[2], ci));
}
int imported = 0;
for (int i = 1; i < lines.Length; i++)
{
var parts = lines[i].Split(',');
if (parts.Length < 9) continue;
string tileId = parts[0];
double xmin = double.Parse(parts[1], ci);
double ymin = double.Parse(parts[2], ci);
double globalMin = double.Parse(parts[5], ci);
double globalMax = double.Parse(parts[6], ci);
int outRes = int.Parse(parts[7], ci);
if (outRes != heightmapResolution)
Debug.LogWarning($"Tile {tileId}: CSV out_res={outRes}, importer expects {heightmapResolution}.");
float heightRange = (float)(globalMax - globalMin);
string pngPath = Path.Combine(heightmapsDir, $"{tileId}.png").Replace("\\", "/");
var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(pngPath);
if (tex == null)
{
Debug.LogError($"Missing heightmap for {tileId}: {pngPath}");
continue;
}
// Ensure readable + uncompressed + linear for height usage
var texImporter = (TextureImporter)AssetImporter.GetAtPath(pngPath);
if (texImporter != null)
{
bool changed = false;
if (!texImporter.isReadable) { texImporter.isReadable = true; changed = true; }
if (texImporter.textureCompression != TextureImporterCompression.Uncompressed)
{
texImporter.textureCompression = TextureImporterCompression.Uncompressed;
changed = true;
}
if (texImporter.sRGBTexture) { texImporter.sRGBTexture = false; changed = true; }
if (changed) texImporter.SaveAndReimport();
}
var terrainData = new TerrainData
{
heightmapResolution = heightmapResolution,
size = new Vector3(tileSizeMeters, heightRange, tileSizeMeters),
};
var pixels = tex.GetPixels();
int w = tex.width;
int h = tex.height;
if (w != heightmapResolution || h != heightmapResolution)
Debug.LogWarning($"Tile {tileId}: PNG is {w}x{h}, expected {heightmapResolution}x{heightmapResolution}.");
var heights = new float[h, w];
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
heights[y, x] = pixels[y * w + x].r;
terrainData.SetHeights(0, 0, heights);
var go = Terrain.CreateTerrainGameObject(terrainData);
go.name = tileId;
go.transform.parent = parent.transform;
float ux = (float)(xmin - originX);
float uz = (float)(ymin - originY);
go.transform.position = new Vector3(ux, (float)globalMin, uz);
// Reasonable default (also helpful later on Quest)
var terrain = go.GetComponent<Terrain>();
terrain.drawInstanced = true;
imported++;
}
Debug.Log($"Imported {imported} terrain tiles under '{parentName}'.");
}
}
// Assets/Editor/GeoTileImporter.cs
// Robust terrain tile importer for Unity (URP or Built-in).
// - Parses CSV header -> column name mapping (order-independent)
// - Validates required columns exist
// - Imports 16-bit PNG heightmaps (tries Single Channel R16 + ushort pixel read; falls back safely)
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using UnityEditor;
using UnityEngine;
public class GeoTileImporter : EditorWindow
{
private string tilesCsvPath = "Assets/GeoData/tile_index.csv";
private string heightmapsDir = "Assets/GeoData/height_png16";
private float tileSizeMeters = 1000f;
private int heightmapResolution = 1025;
private string parentName = "Geo_Terrain_Tiles";
private bool deleteExisting = false;
[MenuItem("Tools/Geo Tiles/Import Terrain Tiles (PNG16)")]
public static void ShowWindow()
{
var win = GetWindow<GeoTileImporter>("Geo Tile Importer");
win.minSize = new Vector2(620, 300);
}
private void OnGUI()
{
GUILayout.Label("Inputs", EditorStyles.boldLabel);
tilesCsvPath = EditorGUILayout.TextField("tile_index.csv", tilesCsvPath);
heightmapsDir = EditorGUILayout.TextField("height_png16 dir", heightmapsDir);
GUILayout.Space(10);
GUILayout.Label("Terrain", EditorStyles.boldLabel);
tileSizeMeters = EditorGUILayout.FloatField("Tile size (m)", tileSizeMeters);
heightmapResolution = EditorGUILayout.IntField("Heightmap resolution", heightmapResolution);
GUILayout.Space(10);
GUILayout.Label("Scene", EditorStyles.boldLabel);
parentName = EditorGUILayout.TextField("Parent object name", parentName);
deleteExisting = EditorGUILayout.ToggleLeft("Delete existing terrains under parent", deleteExisting);
GUILayout.Space(12);
if (GUILayout.Button("Import / Rebuild"))
ImportTiles();
EditorGUILayout.HelpBox(
"Creates one Unity Terrain per CSV row and positions tiles on a meter grid.\n" +
"Absolute elevation mapping: Terrain Y = global_min, Terrain height = (global_max - global_min).\n" +
"CSV is header-driven (order-independent).",
MessageType.Info);
}
private static void EnsureHeightmapImportSettings(string assetPath)
{
var ti = (TextureImporter)AssetImporter.GetAtPath(assetPath);
if (ti == null) return;
bool changed = false;
if (!ti.isReadable) { ti.isReadable = true; changed = true; }
if (ti.sRGBTexture) { ti.sRGBTexture = false; changed = true; }
if (ti.textureCompression != TextureImporterCompression.Uncompressed)
{
ti.textureCompression = TextureImporterCompression.Uncompressed;
changed = true;
}
if (ti.textureType != TextureImporterType.SingleChannel)
{
ti.textureType = TextureImporterType.SingleChannel;
changed = true;
}
var ps = ti.GetDefaultPlatformTextureSettings();
if (ps.format != TextureImporterFormat.R16)
{
ps.format = TextureImporterFormat.R16;
ti.SetPlatformTextureSettings(ps);
changed = true;
}
if (changed) ti.SaveAndReimport();
}
private static string NormalizeHeader(string s)
=> (s ?? "").Trim().ToLowerInvariant();
private static Dictionary<string, int> BuildHeaderMap(string headerLine)
{
var map = new Dictionary<string, int>();
var cols = headerLine.Split(',');
for (int i = 0; i < cols.Length; i++)
{
var key = NormalizeHeader(cols[i]);
if (string.IsNullOrEmpty(key)) continue;
if (!map.ContainsKey(key))
map[key] = i;
}
return map;
}
private static bool HasAll(Dictionary<string, int> map, params string[] required)
{
foreach (var r in required)
if (!map.ContainsKey(NormalizeHeader(r)))
return false;
return true;
}
private void ImportTiles()
{
Debug.Log($"[GeoTileImporter] START\n csv={tilesCsvPath}\n pngDir={heightmapsDir}");
if (!File.Exists(tilesCsvPath))
{
Debug.LogError($"[GeoTileImporter] CSV not found: {tilesCsvPath}");
return;
}
if (!Directory.Exists(heightmapsDir))
{
Debug.LogError($"[GeoTileImporter] Heightmap dir not found: {heightmapsDir}");
return;
}
var parent = GameObject.Find(parentName);
if (parent == null) parent = new GameObject(parentName);
if (deleteExisting)
{
for (int i = parent.transform.childCount - 1; i >= 0; i--)
DestroyImmediate(parent.transform.GetChild(i).gameObject);
}
var ci = CultureInfo.InvariantCulture;
var lines = File.ReadAllLines(tilesCsvPath);
Debug.Log($"[GeoTileImporter] Read {lines.Length} lines.");
if (lines.Length < 2)
{
Debug.LogError("[GeoTileImporter] CSV has no data rows (need header + at least 1 row).");
return;
}
var headerLine = lines[0].Trim();
var headerMap = BuildHeaderMap(headerLine);
Debug.Log($"[GeoTileImporter] Header: {headerLine}");
Debug.Log($"[GeoTileImporter] Header columns mapped: {string.Join(", ", headerMap.Keys)}");
// Required columns (order-independent)
string[] required = { "tile_id", "xmin", "ymin", "global_min", "global_max", "out_res" };
if (!HasAll(headerMap, required))
{
Debug.LogError("[GeoTileImporter] CSV missing required columns. Required: " +
string.Join(", ", required) +
"\nFound: " + string.Join(", ", headerMap.Keys));
return;
}
int IDX_TILE = headerMap["tile_id"];
int IDX_XMIN = headerMap["xmin"];
int IDX_YMIN = headerMap["ymin"];
int IDX_GMIN = headerMap["global_min"];
int IDX_GMAX = headerMap["global_max"];
int IDX_RES = headerMap["out_res"];
// Compute origin from min xmin/ymin
double originX = double.PositiveInfinity;
double originY = double.PositiveInfinity;
int validRowsForOrigin = 0;
for (int i = 1; i < lines.Length; i++)
{
var line = lines[i].Trim();
if (string.IsNullOrWhiteSpace(line)) continue;
var parts = line.Split(',');
// Robust: just ensure indices exist in this row
int needMaxIndex = Math.Max(Math.Max(Math.Max(Math.Max(IDX_TILE, IDX_XMIN), IDX_YMIN), IDX_GMIN), Math.Max(IDX_GMAX, IDX_RES));
if (parts.Length <= needMaxIndex)
{
Debug.LogWarning($"[GeoTileImporter] Origin scan: skipping line {i + 1} (too few columns: {parts.Length}). Line: '{line}'");
continue;
}
try
{
double xmin = double.Parse(parts[IDX_XMIN], ci);
double ymin = double.Parse(parts[IDX_YMIN], ci);
originX = Math.Min(originX, xmin);
originY = Math.Min(originY, ymin);
validRowsForOrigin++;
}
catch (Exception e)
{
Debug.LogWarning($"[GeoTileImporter] Origin scan parse failed line {i + 1}: '{line}'\n{e.Message}");
}
}
if (validRowsForOrigin == 0 || double.IsInfinity(originX) || double.IsInfinity(originY))
{
Debug.LogError("[GeoTileImporter] Could not compute origin (no valid rows parsed). Check CSV numeric format.");
return;
}
Debug.Log($"[GeoTileImporter] Origin: ({originX}, {originY}) from {validRowsForOrigin} valid rows.");
int imported = 0, skipped = 0;
for (int i = 1; i < lines.Length; i++)
{
var line = lines[i].Trim();
if (string.IsNullOrWhiteSpace(line)) continue;
var parts = line.Split(',');
int needMaxIndex = Math.Max(Math.Max(Math.Max(Math.Max(IDX_TILE, IDX_XMIN), IDX_YMIN), IDX_GMIN), Math.Max(IDX_GMAX, IDX_RES));
if (parts.Length <= needMaxIndex)
{
skipped++;
Debug.LogWarning($"[GeoTileImporter] Skipping line {i + 1} (too few columns: {parts.Length}). Line: '{line}'");
continue;
}
string tileId = parts[IDX_TILE].Trim();
double xmin, ymin, gmin, gmax;
int outRes;
try
{
xmin = double.Parse(parts[IDX_XMIN], ci);
ymin = double.Parse(parts[IDX_YMIN], ci);
gmin = double.Parse(parts[IDX_GMIN], ci);
gmax = double.Parse(parts[IDX_GMAX], ci);
outRes = int.Parse(parts[IDX_RES], ci);
}
catch (Exception e)
{
skipped++;
Debug.LogWarning($"[GeoTileImporter] Parse failed line {i + 1} tile '{tileId}': {e.Message}\nLine: '{line}'");
continue;
}
if (outRes != heightmapResolution)
Debug.LogWarning($"[GeoTileImporter] Tile {tileId}: out_res={outRes} but importer expects {heightmapResolution}.");
float heightRange = (float)(gmax - gmin);
if (heightRange <= 0.0001f)
{
skipped++;
Debug.LogWarning($"[GeoTileImporter] Tile {tileId}: invalid height range (global_max <= global_min). Skipping.");
continue;
}
string pngPath = Path.Combine(heightmapsDir, $"{tileId}.png").Replace("\\", "/");
if (!File.Exists(pngPath))
{
skipped++;
Debug.LogError($"[GeoTileImporter] Missing PNG for {tileId}: {pngPath}");
continue;
}
EnsureHeightmapImportSettings(pngPath);
var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(pngPath);
if (tex == null)
{
skipped++;
Debug.LogError($"[GeoTileImporter] Could not load Texture2D asset: {pngPath}");
continue;
}
if (tex.width != heightmapResolution || tex.height != heightmapResolution)
Debug.LogWarning($"[GeoTileImporter] Tile {tileId}: PNG {tex.width}x{tex.height}, expected {heightmapResolution}x{heightmapResolution}.");
var terrainData = new TerrainData
{
heightmapResolution = heightmapResolution,
size = new Vector3(tileSizeMeters, heightRange, tileSizeMeters),
};
int w = tex.width;
int h = tex.height;
var heights = new float[h, w];
bool usedU16 = false;
try
{
var raw = tex.GetPixelData<ushort>(0);
if (raw.Length == w * h)
{
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
heights[y, x] = raw[y * w + x] / 65535f;
usedU16 = true;
}
}
catch
{
// fallback below
}
if (!usedU16)
{
var pixels = tex.GetPixels();
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
heights[y, x] = pixels[y * w + x].r;
}
terrainData.SetHeights(0, 0, heights);
var go = Terrain.CreateTerrainGameObject(terrainData);
go.name = tileId;
go.transform.parent = parent.transform;
float ux = (float)(xmin - originX);
float uz = (float)(ymin - originY);
go.transform.position = new Vector3(ux, (float)gmin, uz);
var terrain = go.GetComponent<Terrain>();
terrain.drawInstanced = true;
Debug.Log($"[GeoTileImporter] Imported {tileId} @ XZ=({ux},{uz}) Y={gmin} heightRange={heightRange} usedU16={usedU16}");
imported++;
}
Debug.Log($"[GeoTileImporter] DONE. Imported={imported}, Skipped={skipped} under '{parentName}'.");
if (imported == 0)
Debug.LogError("[GeoTileImporter] Imported 0 tiles. Scroll up for warnings/errors (missing columns, parse issues, missing PNGs).");
}
}

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0

View File

@@ -7,7 +7,7 @@ TextureImporter:
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
@@ -21,7 +21,7 @@ TextureImporter:
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 10
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -71,8 +71,8 @@ TextureImporter:
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
textureFormat: 9
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0