Reproduzierbarer Export aus den Blender-Quellen der Godot-Referenz nach FBX, geprüft auf beiden Seiten; sechs repräsentative Assets vollständig in Unity verifiziert (normale Einheit g01, Einheit mit Skelett Funkenlanze, Turm Grenzwacht, Ancient, Schlundkrone, Vegetation/Kartenrequisiten), dazu Bastion, Kernwacht und Bossgrotte für die Szene. - tools/blender: Manifest mit Exportregeln je Asset, Exportskript mit Prüfungen (Einheiten, Maßstab, Achsen, Vorderseite, Mesh-Namen, Dreiecke, Materialslots, Normalen, Tangenten, Vertexfarben, Maße, Root Bone, Bone-Namen, Clips, Blend Shapes) gegen die Manifeste der Godot-GLBs, FBX-Rundreise, byteidentische Ausgabe (feste Uhrzeit, PYTHONHASHSEED). - Regeln wie beim GLB-Export: HIGH-RES-Modifikatoren weglassen, logische Namen, Skin-Teile zusammenfügen; 180°-Drehung, damit die Vorderseite nach Unitys Achsen-Bake auf +Z liegt (Unity = (-x, y, z) der Godot-Koordinaten). - Unity: Importregeln (Postprocessor), Verifier gegen das Blender-Protokoll, Vorschaubilder; URP-Asset, Linear-Farbraum, URP-Settings nach Assets/Luneraria/Settings/Rendering. - Ergebnis: 176/176 Blender-Prüfungen, 128/128 Unity-Prüfungen, Dreiecke gleich den Godot-GLBs, Maße auf 0,05 mm. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
80 lines
3.3 KiB
C#
80 lines
3.3 KiB
C#
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.Universal;
|
|
|
|
namespace Luneraria.EditorTools
|
|
{
|
|
/// <summary>
|
|
/// Rendering setup of the project (URP asset and renderer, linear colour space), idempotent.
|
|
/// Unity -batchmode -projectPath . -executeMethod Luneraria.EditorTools.LuneProjectSetup.ConfigureRendering
|
|
/// </summary>
|
|
public static class LuneProjectSetup
|
|
{
|
|
public const string SettingsFolder = "Assets/Luneraria/Settings/Rendering";
|
|
public const string PipelinePath = SettingsFolder + "/Luneraria_URP.asset";
|
|
public const string RendererPath = SettingsFolder + "/Luneraria_URP_Renderer.asset";
|
|
|
|
public static void ConfigureRendering()
|
|
{
|
|
int code = 0;
|
|
try
|
|
{
|
|
Configure();
|
|
}
|
|
catch (System.Exception error)
|
|
{
|
|
Debug.LogError("LUNE_SETUP failed: " + error);
|
|
code = 1;
|
|
}
|
|
EditorApplication.Exit(code);
|
|
}
|
|
|
|
public static UniversalRenderPipelineAsset Configure()
|
|
{
|
|
Directory.CreateDirectory(SettingsFolder);
|
|
AssetDatabase.Refresh();
|
|
var asset = AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineAsset>(PipelinePath);
|
|
if (asset == null)
|
|
{
|
|
var renderer = ScriptableObject.CreateInstance<UniversalRendererData>();
|
|
AssetDatabase.CreateAsset(renderer, RendererPath);
|
|
ResourceReloader.ReloadAllNullIn(renderer, UniversalRenderPipelineAsset.packagePath);
|
|
asset = UniversalRenderPipelineAsset.Create(renderer);
|
|
AssetDatabase.CreateAsset(asset, PipelinePath);
|
|
}
|
|
// The Godot sun reaches 190 m with four splits (scripts/luneraria/view/lune_world.gd).
|
|
asset.shadowDistance = 190f;
|
|
asset.shadowCascadeCount = 4;
|
|
asset.supportsHDR = true;
|
|
asset.msaaSampleCount = 4;
|
|
asset.useSRPBatcher = true;
|
|
EditorUtility.SetDirty(asset);
|
|
GraphicsSettings.defaultRenderPipeline = asset;
|
|
int current = QualitySettings.GetQualityLevel();
|
|
for (int level = 0; level < QualitySettings.names.Length; level++)
|
|
{
|
|
QualitySettings.SetQualityLevel(level, false);
|
|
QualitySettings.renderPipeline = asset;
|
|
}
|
|
QualitySettings.SetQualityLevel(current, false);
|
|
PlayerSettings.colorSpace = ColorSpace.Linear;
|
|
MoveInto("Assets/UniversalRenderPipelineGlobalSettings.asset", SettingsFolder + "/UniversalRenderPipelineGlobalSettings.asset");
|
|
MoveInto("Assets/DefaultVolumeProfile.asset", SettingsFolder + "/DefaultVolumeProfile.asset");
|
|
AssetDatabase.SaveAssets();
|
|
Debug.Log("LUNE_SETUP rendering: " + PipelinePath + ", colour space " + PlayerSettings.colorSpace);
|
|
return asset;
|
|
}
|
|
|
|
static void MoveInto(string from, string to)
|
|
{
|
|
if (File.Exists(from) && !File.Exists(to))
|
|
{
|
|
string error = AssetDatabase.MoveAsset(from, to);
|
|
if (!string.IsNullOrEmpty(error))
|
|
Debug.LogWarning("LUNE_SETUP move " + from + ": " + error);
|
|
}
|
|
}
|
|
}
|
|
}
|