Kojote Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Grüße! Wie ich ein Objekt nun zur "Self-Illumination" bringe, versteh ich, wie ich ein Objekt eine Transparenzt verpasse, weis ich auch. Nun möchte ich mir gerne einen Kristall erstellen, der halb transparent ist und auf Befehl leuchten kann. Mit dem Standardshader wird das nix, die anderen sind auch ungeeignet. Habe nun schon eine ganze weile gelesen und eigentlich meinen alle, man braucht dazu einen speziellen Shader, ohne den ist das nicht möglich. Kennt ihr so einen Shader? Grüße Kojote Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Du musst "Fade" nehmen, dies blendet den Textur- bzw. Farbanteil des Emissive-Materials mit aus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. Februar 2018 Autor Melden Share Geschrieben 22. Februar 2018 Warum kann nicht einmal was funktionieren.^^ Klappt wie immer bei den ersten Anläufen nicht: Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Weils net so einfach ist Also Gelb als Emissionsfarbe setzen und bei der Albedofarbe den Alphawert herunterdrehen (bis gewünschte Durchsichtigkeit) Das Gelb beim Albedo sorgt für den optischen Look, das Gelb bei Emission sorgt für die abgegebene Lichtfarbe ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. Februar 2018 Autor Melden Share Geschrieben 22. Februar 2018 Hab ich gemacht, Problem ist, erst ab einer bestimmten Stärke der des Alphawertes bei Albedo, wird die Emission sichtbar. Blöderweise ist die Alphastärke dann wieder dermaßen hoch, dass keine Transparenz möglich ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Hier mal eine kleine Spielerei. Das emissive Material wird über Zeit heller und kehrt dann wieder auf die Ursprungsfarbe zurück. Ich habe 2 verschiedene Modi eingebaut (siehe keepColor) und man kann die Frequenz des Pulsing einstellen (siehe pulseSpeed). Die Texturen werden auch rotiert, daß kann man ausbauen, wenn man es nicht mag ... using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateAround : MonoBehaviour { public float maxBrightness = 2.0F; public float pulseSpeed = 2.0F; public bool keepColor = false; public float scrollSpeed = 0.5F; private Renderer m_Renderer; private Material m_Material; private float currentBrightness = 0; private Color startColor; void Start() { m_Renderer = GetComponent<Renderer>(); m_Material = m_Renderer.material; m_Material.globalIlluminationFlags = MaterialGlobalIlluminationFlags.RealtimeEmissive; startColor = m_Material.GetColor("_EmissionColor"); } void Update() { float offset = Time.time * scrollSpeed; float offset2 = Time.time * scrollSpeed*1.5f; m_Material.mainTextureOffset = new Vector2(offset, offset2); //material.doubleSidedGI = true; Color newColor; if (!keepColor) { newColor = new Color(Mathf.Clamp(startColor.r, startColor.r + currentBrightness, maxBrightness), Mathf.Clamp(startColor.g, startColor.g + currentBrightness, maxBrightness), Mathf.Clamp(startColor.b, startColor.b + currentBrightness, maxBrightness)); } else { newColor = new Color(Mathf.Clamp(startColor.r, startColor.r + startColor.r*currentBrightness, maxBrightness), Mathf.Clamp(startColor.g, startColor.g + startColor.g*currentBrightness, maxBrightness), Mathf.Clamp(startColor.b, startColor.b + startColor.b*currentBrightness, maxBrightness)); } m_Material.SetColor("_EmissionColor", newColor); m_Renderer.UpdateGIMaterials(); currentBrightness = Mathf.Abs(Mathf.Sin(Time.time * pulseSpeed)) * maxBrightness; } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 vor 13 Minuten schrieb Kojote: Hab ich gemacht, Problem ist, erst ab einer bestimmten Stärke der des Alphawertes bei Albedo, wird die Emission sichtbar. Blöderweise ist die Alphastärke dann wieder dermaßen hoch, dass keine Transparenz möglich ist. In dem Fall die Emission hochdrehen. Bei meinem Skript oben wäre das "maxBrightness". Allerdings, wenn das Objekt nicht sichtbar ist kann es auch kein Licht abgeben, also endlos kann man den Alpha nicht runterdrehen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. Februar 2018 Autor Melden Share Geschrieben 22. Februar 2018 Sehr cool! Aber was macht Scroll Speed? Hat irgendwie keinen Einfluss oder täusche ich mich? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Das scrollt die UVs des Materials, sieht man aber nur wenn das Material eine Textur hat Der Code kommt von meiner Polizeileuchte ^^ So hier mein Diamandtest mit Bloom. Man sieht leider keine Kanten, denke das liegt am Modell...https://streamable.com/wbqdi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. Februar 2018 Autor Melden Share Geschrieben 22. Februar 2018 Cool! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Hehe die Kanten sieht man nur, wenn man eine externe Lichtquelle hat. Ist irgendwo auch logisch, die Kanten entstehen über die Normals und die Flächen werden nur sichtbar, wenn sie von außen bestrahlt werden, scheinbar beleuchtet sich das Objekt nicht selbst ... Eigentlich sollte das Ambientlicht des Materials auf den Diamanten zurückstrahlen tut es aber offensichtlich nicht ... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Man muss wieder tricksen, damit man den Shape des Diamanten sieht: - ein Spotlight direkt vor dem Diamanten platzieren, kurze Range (3) und "Indirect Multiplier" auf 0 - Intensity realtiv hoch bei mir war's 16 - Ambient Material auf die Farbe in der die Facetten des Diamants zu sehen sein sollen Hier das Ergebnis:https://streamable.com/57g6h Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 So hier noch einmal mit Rotation und Bloom, die hat nur einen Effekt, wenn man auch den "Shape" des Diamanten sieht:https://streamable.com/pc0nm Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 22. Februar 2018 Autor Melden Share Geschrieben 22. Februar 2018 Tricksen muss man doch immer ein wenig, gehört glaube ich zu Unity dazu.^^ Dürfte ich das Script verwenden? Das passt eigentlich ziemlich gut zu meinem "Diamanten". Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. Februar 2018 Melden Share Geschrieben 22. Februar 2018 Ja klar, ich hab nur noch 1 Zeile mit der Rotation dazugebaut, ansonsten ist es das Skript von oben: using System.Collections; using System.Collections.Generic; using UnityEngine; public class RotateAround : MonoBehaviour { public float maxBrightness = 2.0F; public float pulseSpeed = 1.0F; public bool keepColor = false; public float scrollSpeed = 0.5F; private Renderer m_Renderer; private Material m_Material; private float currentBrightness = 0; private Color startColor; void Start() { m_Renderer = GetComponent<Renderer>(); m_Material = m_Renderer.material; m_Material.globalIlluminationFlags = MaterialGlobalIlluminationFlags.RealtimeEmissive; startColor = m_Material.GetColor("_EmissionColor"); } void Update() { float offset = Time.time * scrollSpeed; float offset2 = Time.time * scrollSpeed*1.5f; m_Material.mainTextureOffset = new Vector2(offset, offset2); transform.Rotate(0, Time.deltaTime * 50f, 0, Space.World); //material.doubleSidedGI = true; Color newColor; if (!keepColor) { newColor = new Color(Mathf.Clamp(startColor.r, startColor.r + currentBrightness, maxBrightness), Mathf.Clamp(startColor.g, startColor.g + currentBrightness, maxBrightness), Mathf.Clamp(startColor.b, startColor.b + currentBrightness, maxBrightness)); } else { newColor = new Color(Mathf.Clamp(startColor.r, startColor.r + startColor.r*currentBrightness, maxBrightness), Mathf.Clamp(startColor.g, startColor.g + startColor.g*currentBrightness, maxBrightness), Mathf.Clamp(startColor.b, startColor.b + startColor.b*currentBrightness, maxBrightness)); } m_Material.SetColor("_EmissionColor", newColor); m_Renderer.UpdateGIMaterials(); currentBrightness = Mathf.Abs(Mathf.Sin(Time.time * pulseSpeed)) * maxBrightness; } } 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.