2016-05-26 23 views
4

Ich komme gerade in Beleuchtung mit Unity 3d und habe gerade eine Funktion, die hier die Beleuchtung meiner Szene progressiv vertieft. Ich habe dies über Render getan Einstellungen und haben 3 verschiedene Ansätze mit Beleuchtung versucht, habe ich das gleiche Ergebnis mit allen von ihnen erhalten:Einheit und C#: Wie verändert man die globale Weltbeleuchtung nicht nur am Boden? Andere Objekte, die nicht mit RenderSettings beleuchtet sind?

   RenderSettings.ambientLight = Color.Lerp (RenderSettings.ambientLight, colors2 [currentColor], changeTime * Time.deltaTime); 
       RenderSettings.ambientSkyColor = Color.Lerp (RenderSettings.ambientSkyColor, colors [currentColor], changeTime * Time.deltaTime); 
       RenderSettings.ambientGroundColor = Color.Lerp (RenderSettings.ambientGroundColor, colors2[currentColor], changeTime*Time.deltaTime); 

Ich bin nicht ganz den Unterschied zwischen all diesen zu verstehen und habe ein Problem die Welt beleuchten - wenn sich die Farbe ändert, ändert sich die Farbe des Himmels UND der Boden (der das gleiche Material wie andere Spielobjektblöcke hat, die auf ihm sitzen) ändert sich entsprechend der Beleuchtung. Mein weißer Boden wird orange.

Das Problem ist, dass die Blöcke auf meinem Boden (das gleiche Material mit Standard-Shader) nicht in gleichem Maße betroffen/beleuchtet sind. Sie bleiben im Allgemeinen weiß/unberührt, während mein Boden ganz orange ist. Egal, ob ich ambientGroundColor oder SkyColor ändere, das passiert.

Wie kann ich die ganze Szene gleichmäßig beleuchten? Was läuft hier falsch?

Problem:

enter image description here

+1

Ich warte eine Antwort für diese auch zu sehen. Die Beleuchtung in Unity war bei weitem meine größte Hürde. Vieles davon scheint nicht in irgendeiner Logik verwurzelt zu sein, in die ich mein Gehirn einwickeln kann. –

Antwort

0

Unity implementiert ein Beleuchtungssystem, das in der Regel in Echtzeit und vorberechnete Beleuchtung kombiniert. Das Umgebungslicht, das Sie auf den Boden treffen, ist wahrscheinlich vorausberechnet. Die Blöcke über dem Boden sind jedoch nicht in der vorausberechneten Beleuchtung enthalten. Wenn Sie diese Blöcke als static kennzeichnen, werden sie zur vorberechneten Beleuchtung hinzugefügt, aber sie können auch zur Laufzeit nicht bearbeitet werden. Überprüfen Sie den Link unten für weitere Informationen.

TL; DR:

nur statische Geometrie von Unity vorberechneten Lichtlösungen in Betracht gezogen wird. Um den Lichtvorberechnungsprozess zu beginnen, benötigen wir mindestens ein GameObject, das in unserer Szene als "statisch" gekennzeichnet ist. Dies kann entweder einzeln oder durch Verschieben mehrerer GameObjects aus dem Hierarchiefenster erfolgen.

Quoted from the unity 5 documentation about lighting and rendering

+0

Danke, aber ich denke nicht, dass das das Problem ist - der Boden war nicht als statisch markiert und ich konnte kein Gameobject finden, das war. Ich machte dann die Blöcke und Boden statisch ohne Unterschied. Ich habe meiner Frage ein Bild hinzugefügt - Gibt es eine Möglichkeit, nur eine gleichmäßige Beleuchtung zu erreichen oder nur die Farbe des Himmels zu ändern, nicht die darunter liegenden Objekte? Ich habe meine Szene übrigens in einem größeren Netz; Macht das einen Unterschied? – skyguy