Kojote Geschrieben 23. Juni 2022 Melden Share Geschrieben 23. Juni 2022 Hi! Ich habe ein Frage zur URP. Ich bin gerade dabei die Settings zu schreiben, aber die Settings werden nicht übernommen. Zum Beispiel der Code: switch((int)shadowsDropdown.value) { case 0: QualitySettings.shadows = ShadowQuality.Disable; break; case 1: QualitySettings.shadows = ShadowQuality.HardOnly; break; case 2: QualitySettings.shadows = ShadowQuality.All; break; } Die Methode wird gestartet, der Switch ist auch aktiv. Case 0, 1 und 2 werden auch ausgeführt, jedoch ändert sich an den Schatteneinstellungen nichts. Hat jemand eine Idee woran das liegt? Ich habe jetzt nichts gefunden das man dies anders schreiben muss, wenn man auf URP umsteigt. Grüße von Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 23. Juni 2022 Melden Share Geschrieben 23. Juni 2022 Das Ganze ist nicht mehr so freundlich gestaltet und an manches kommt man zuer Laufzeit nicht heran. Aber ich hänge dir hier mal ein Testscript rein und unten drunter erkläre ich es dir. using UnityEngine.Rendering; // brauchst du um Rendersettings anzusprechen using UnityEngine.Rendering.Universal; // brauchst du für den ganzen Rest public class Shadowtest : MonoBehaviour { UniversalAdditionalCameraData AdditionalData; // für den Schatten an sich UniversalRenderPipelineAsset HardShadowRenderer; // ein Asset ohne softShadow UniversalRenderPipelineAsset SoftShadowRenderer; // ein Kopie vom Asset mit softShadow an [SerializeField] Volume MyGlobalVolume; // Ein Global Volume, was in der Szene sein muss // Testfelder [SerializeField] bool ShadowsOn; [SerializeField] bool shadowsOff; [SerializeField] bool makeSoft; [SerializeField] bool makeHard; [SerializeField] bool bloomOn; [SerializeField] bool bloomOff; private Bloom bloom; void Start() { AdditionalData = Camera.main.GetComponent<UniversalAdditionalCameraData>(); // ich hols mir direkt von der Camera. Du kannst natürlich anders machen AdditionalData.antialiasing = AntialiasingMode.FastApproximateAntialiasing; // oder andere Einstellungen } void Update() { if (ShadowsOn) { ShadowsOn = false; AdditionalData.renderShadows = true; } if (shadowsOff) { shadowsOff = false; AdditionalData.renderShadows = false; } if (makeSoft) { makeSoft = false; GraphicsSettings.renderPipelineAsset = SoftShadowRenderer; // nimm das Asset mit softshadows } if (makeHard) { makeHard = false; GraphicsSettings.renderPipelineAsset = HardShadowRenderer; // nimm das Asset ohne softshadows } if (bloomOn) { bloomOn = false; bloom.active = true; // bloom setzen MyGlobalVolume.profile.TryGet(out bloom); // und übergeben } if (bloomOff) { bloomOff = false; bloom.active = false; MyGlobalVolume.profile.TryGet(out bloom); } } } Also. In diesem Script ist nicht nur der Schatten, sondern auch Antialiasing und ein Bereich aus dem GlobalVolume, nämlich das Bloom. Ich habe mir gedacht, dass du da auch die Augenbrauen heben wirst. Deswegen hab ich es mal mit eingebaut. Den Schatten selbst schaltest du nicht mehr in irgendwelchen Qualitysettings ein, sondern bei den AdditionalCameraData. Das ist mit deiner Kamera verbunden. Du musst ne Referenz zu dem Teil bilden und kannst dann ganz einfach über .RenderShadows die Schatten ein und ausschalten. Siehst du ja im Script. Die Qualität der Schatten ist komplizierter. Die werden in dem UniversalRenderpipelineAsset verwaltet. Und das tolle daran ist, dass nicht alle Felder zur Laufzeit gesetzt werden können. SoftShadow ist so ein Feld. Das kannst du zur Laufzeit nur auslesen. Ander Dinge, wie zum Beispiel die Schattenweite kann man direkt einstellen. Na ja. Du musst also ein 2tes RenderAsset erzeugen in dem du das vorhandene einfach duplizierst. Dann benennst du es um, damit du weißt was welches ist, und stellst in einem von beiden den Schatten auf Soft. Auch die beiden Assets musst du Referenzieren und kannst sie dann einfach zur Laufzeit den GraphicSettings übergeben. Es werden also einfach die beiden Assets ausgewechselt. AntiAliasing ist wieder bei den AdditionalCameraData zu finden. Das kannst du einfach wechseln. Eines hab ich dir in der Start vorgegeben. Die anderen Optionen siehst du ja wenn du den Punkt setzt. Bloon ist auch son Dingen. Das würde ja als Posteffekt in den GlobalSettings eingestellt. Hier kannst du aber nicht einfach auf true oder False setzen, sondern du musst das BloomObjekt (Keine Ahnung was das ist) über .active=true setzen und dann dem Global Volume komplett übergeben. Warum man das mit TryGet(Out xxx) machen muss, weiß ich nicht. Das hab ich selber aus dem Netz, denn ich bin da auch fast dran verzweifelt. Vielleicht weiß der @Sascha mehr über die Notwendigkeit es so anzusprechen. Also. Versuch mal das Testscript. Sollte alles funktionieren, wenn du alle Referenzen gebildet hast. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Juni 2022 Melden Share Geschrieben 23. Juni 2022 vor einer Stunde schrieb malzbie: Vielleicht weiß der @Sascha mehr über die Notwendigkeit es so anzusprechen. Öh... ich würde jetzt einfach mal raten und sagen: Die Priorität lag auf dem Setup im Editor, damit Designer da schön alles anlegen können. Deshalb packt man ja auch nicht mehr einen Haufen Komponenten auf die Kamera, sondern erstellt PostProcessing-Profile, die man Volumen zuweist. Damit man situationsabhängig PostProcessing einstellen kann. Dass bei so einem System dann die API etwas komplexer wird und man definieren muss, wo genau man bestimmte Änderungen haben will (weil es ja nicht mehr mehr nur ein globales PostProcessing gibt), wundert mich wenig. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.