diff --git a/Assets/Scripts/Debug/RuntimeBootProbe.cs b/Assets/Scripts/Debug/RuntimeBootProbe.cs index 156abdfe6..a3bbd72ce 100644 --- a/Assets/Scripts/Debug/RuntimeBootProbe.cs +++ b/Assets/Scripts/Debug/RuntimeBootProbe.cs @@ -3,6 +3,7 @@ using System.IO; using System.Reflection; using System.Text; using UnityEngine; +using UnityEngine.Rendering; using UnityEngine.SceneManagement; [DisallowMultipleComponent] @@ -73,6 +74,7 @@ public sealed class RuntimeBootProbe : MonoBehaviour if (geoTileLoader == null) { sb.Append("geoTileLoader=null "); + AppendRenderState(sb); Debug.Log(sb.ToString()); return; } @@ -103,9 +105,66 @@ public sealed class RuntimeBootProbe : MonoBehaviour else sb.Append("catalogExists=unknown "); + AppendRenderState(sb); Debug.Log(sb.ToString()); } + private static void AppendRenderState(StringBuilder sb) + { + var rp = GraphicsSettings.currentRenderPipeline; + string rpName = rp != null ? $"{rp.name} ({rp.GetType().Name})" : "BuiltInRenderPipeline"; + int qualityIndex = QualitySettings.GetQualityLevel(); + string qualityName = qualityIndex >= 0 && qualityIndex < QualitySettings.names.Length + ? QualitySettings.names[qualityIndex] + : ""; + + sb.Append("quality=").Append(qualityIndex).Append(":").Append(qualityName).Append(" "); + sb.Append("renderPipeline=").Append(rpName).Append(" "); + + var cam = Camera.main; + if (cam == null) + { + sb.Append("mainCamera= "); + } + else + { + sb.Append("mainCamera=").Append(cam.name).Append(" "); + sb.Append("mainCamera.farClip=").Append(cam.farClipPlane.ToString("F1")).Append(" "); + sb.Append("mainCamera.nearClip=").Append(cam.nearClipPlane.ToString("F3")).Append(" "); + sb.Append("mainCamera.cullingMask=0x").Append(cam.cullingMask.ToString("X")).Append(" "); + } + + AppendXrState(sb); + } + + private static void AppendXrState(StringBuilder sb) + { + try + { + Type xrSettingsType = Type.GetType("UnityEngine.XR.XRSettings, UnityEngine.XRModule"); + if (xrSettingsType == null) + { + sb.Append("xrEnabled= "); + return; + } + + var enabledProp = xrSettingsType.GetProperty("enabled", BindingFlags.Public | BindingFlags.Static); + bool xrEnabled = enabledProp != null && enabledProp.GetValue(null) is bool enabled && enabled; + sb.Append("xrEnabled=").Append(xrEnabled).Append(" "); + + if (!xrEnabled) + return; + + var stereoModeProp = xrSettingsType.GetProperty("stereoRenderingMode", BindingFlags.Public | BindingFlags.Static); + object stereoMode = stereoModeProp?.GetValue(null); + sb.Append("xrStereoMode=").Append(stereoMode != null ? stereoMode.ToString() : "").Append(" "); + } + catch + { + sb.Append("xrEnabled= "); + } + } + private static string ReadPrivateField(GeoTileAddressablesLoader loader, string fieldName, string fallback) { try @@ -149,17 +208,15 @@ public sealed class RuntimeBootProbe : MonoBehaviour { case RuntimePlatform.Android: return "Android"; - case RuntimePlatform.IPhonePlayer: - return "iOS"; case RuntimePlatform.WindowsPlayer: case RuntimePlatform.WindowsEditor: - return "Windows"; + return "StandaloneWindows64"; case RuntimePlatform.OSXPlayer: case RuntimePlatform.OSXEditor: - return "macOS"; + return "StandaloneOSX"; case RuntimePlatform.LinuxPlayer: case RuntimePlatform.LinuxEditor: - return "Linux"; + return "StandaloneLinux64"; default: return "Android"; } diff --git a/Assets/Scripts/GeoDataUtils/GeoTileAddressablesLoader.cs b/Assets/Scripts/GeoDataUtils/GeoTileAddressablesLoader.cs index 8d45ddbb1..f6214d0d0 100644 --- a/Assets/Scripts/GeoDataUtils/GeoTileAddressablesLoader.cs +++ b/Assets/Scripts/GeoDataUtils/GeoTileAddressablesLoader.cs @@ -5,6 +5,7 @@ using System.IO; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; +using UnityEngine.Rendering; public class GeoTileAddressablesLoader : MonoBehaviour { @@ -89,6 +90,7 @@ public class GeoTileAddressablesLoader : MonoBehaviour Debug.Log( $"[GeoTileAddressablesLoader] Startup: platform={Application.platform}, " + $"persistentDataPath={Application.persistentDataPath}, basePath={basePath}, manifestPath={manifestPath}"); + LogRuntimeRenderState(); Log($"Initializing loader. BasePath={basePath}"); Log($"ManifestPath={manifestPath}"); @@ -462,7 +464,10 @@ public class GeoTileAddressablesLoader : MonoBehaviour var terrain = instance.GetComponent(); if (terrain == null) { - Debug.LogWarning($"[GeoTileAddressablesLoader] Tile {tileKey}: no Terrain component on instance."); + int rendererCount = instance.GetComponentsInChildren(true).Length; + Debug.LogWarning( + $"[GeoTileAddressablesLoader] Tile {tileKey}: no Terrain component on instance, " + + $"rendererCount={rendererCount}, rootPos={FormatVec3(instance.transform.position)}"); return; } @@ -484,10 +489,22 @@ public class GeoTileAddressablesLoader : MonoBehaviour } string materialName = terrain.materialTemplate != null ? terrain.materialTemplate.name : ""; + string shaderName = terrain.materialTemplate != null && terrain.materialTemplate.shader != null + ? terrain.materialTemplate.shader.name + : ""; + bool shaderSupported = terrain.materialTemplate != null && + terrain.materialTemplate.shader != null && + terrain.materialTemplate.shader.isSupported; + Bounds localBounds = td.bounds; + Vector3 worldCenter = terrain.GetPosition() + localBounds.center; + Vector3 extents = localBounds.extents; Debug.Log( $"[GeoTileAddressablesLoader] Tile {tileKey}: terrain ok, " + - $"drawHeightmap={terrain.drawHeightmap}, layers={layerCount}, " + - $"hasDiffuse={hasDiffuse}, diffuse={diffuseName}, material={materialName}"); + $"enabled={terrain.enabled}, drawHeightmap={terrain.drawHeightmap}, " + + $"layers={layerCount}, hasDiffuse={hasDiffuse}, diffuse={diffuseName}, " + + $"material={materialName}, shader={shaderName}, shaderSupported={shaderSupported}, " + + $"worldCenter={FormatVec3(worldCenter)}, extents={FormatVec3(extents)}, " + + $"rootPos={FormatVec3(instance.transform.position)}"); } private void RemoveEmbeddedBuildings(GameObject tileInstance, string tileKey) @@ -679,4 +696,24 @@ public class GeoTileAddressablesLoader : MonoBehaviour if (verboseLogging) Debug.Log($"[GeoTileAddressablesLoader] {message}"); } + + private void LogRuntimeRenderState() + { + var rp = GraphicsSettings.currentRenderPipeline; + string rpName = rp != null ? $"{rp.name} ({rp.GetType().Name})" : "BuiltInRenderPipeline"; + int qualityIndex = QualitySettings.GetQualityLevel(); + string qualityName = qualityIndex >= 0 && qualityIndex < QualitySettings.names.Length + ? QualitySettings.names[qualityIndex] + : ""; + string cameraName = Camera.main != null ? Camera.main.name : ""; + + Debug.Log( + $"[GeoTileAddressablesLoader] RenderState: quality={qualityIndex}:{qualityName}, " + + $"renderPipeline={rpName}, mainCamera={cameraName}"); + } + + private static string FormatVec3(Vector3 v) + { + return $"({v.x:F2},{v.y:F2},{v.z:F2})"; + } }