Ich baue mir aktuell ein Modelimporter auf Basis von ASSIMP. Erstmal ein Dickes Lob an die Entwickler! Hervorragende API, klappt soweit auch ganz gut und lädt inzwischen 90% der Daten so, wie ich sie
haben möchte. Allerdings hab ich mal eine Frage zur Transparenz. Es gibt zwei Ansätze für die Transparenz: Einmal den reinen Transparenz Wert AI_MATKEY_OPACITY und einmal die Alpha-Mask Textur Ermittlung mit aiTextureType_OPACITY. Soweit so gut, lese ich auch beides aus.
Nur wie wende ich das am Besten in meinem Alpha-Mask Shader an? Sollte ich den Alpha Wert generell auf den via AI_MATKEY_OPACITY ermittelten Transparenzwert setzen? Oder doch lieber auf Basis der Textur aus dem Alpha, bzw. RGB Kanal der Alpha-Mask auslesen? Wie ist das gedacht?
[ASSIMP] Transparenz
- xq
- Establishment
- Beiträge: 1590
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [ASSIMP] Transparenz
Wenn ich das Material-System richtig interpretiere, nimmst du normalerweise den Wert aus der Alpha-Mask-Textur und multiplizierst ihn mit der reinen Transparenz. Gleiches gilt auch für Texturen (afaik)
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in
Zig
und nervt Leute damit.
Programmiert viel in
- Schrompf
- Moderator
- Beiträge: 5153
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [ASSIMP] Transparenz
Da gibt es nach meinem Wissen keine generell gültige Vereinbarung, es ist also wie die allermeisten Materialwerte Interpretationssache.
Der TextureType "OPACITY" bedeutet, dass Du da eine Ein-Kanal-Textur bekommst, deren Werte die Undurchsichtigkeit angeben. Was der MATKEY_OPACITY macht, weiß ich nicht, aber ich würde rein intuitiv vermuten, dass man damit die Alphawerte skaliert.
Der TextureType "OPACITY" bedeutet, dass Du da eine Ein-Kanal-Textur bekommst, deren Werte die Undurchsichtigkeit angeben. Was der MATKEY_OPACITY macht, weiß ich nicht, aber ich würde rein intuitiv vermuten, dass man damit die Alphawerte skaliert.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [ASSIMP] Transparenz
Stimme Euch beiden zu und auch nicht ;) Hab jetzt diverse Modelle durchgetestet einen einheitlichen weg scheint es wirklich nicht zu geben.
Wenn ich mir die ASSIMP Daten anschaue dann wird der Textur Type Opacity gesetzt wenn ich in Blender und/oder 3dsMax das Transparenz Flag für eine Textur setze. Dabei kann es sich um eine AlphaMap mit s/w Werten aber auch um rgba Texturen handeln. Je nach dem muss ich dann entweder den Alpha oder Rot Wert für das Alpha Masking nehmen.
Unabhängig davon liefert ASSIMp immer den Opacity Key Value. Im Normalfall ist dieser 1.0 oder exakt der Wert den ich in Blender/Max für die Transpardnz setze. Einen Modulator für den Alphawert würde ich somit ausschliessen.
Aktuell teste ich ein Cockpitfenster. Hier ist es egal ob ich im Shader für das Alphamasking auf den Texturwert oder den Assimp Opacity Value gehe. Die Resultate sind gleich.
Die korrekte Anwendung ist mir daher schleierhaft ...
Wenn ich mir die ASSIMP Daten anschaue dann wird der Textur Type Opacity gesetzt wenn ich in Blender und/oder 3dsMax das Transparenz Flag für eine Textur setze. Dabei kann es sich um eine AlphaMap mit s/w Werten aber auch um rgba Texturen handeln. Je nach dem muss ich dann entweder den Alpha oder Rot Wert für das Alpha Masking nehmen.
Unabhängig davon liefert ASSIMp immer den Opacity Key Value. Im Normalfall ist dieser 1.0 oder exakt der Wert den ich in Blender/Max für die Transpardnz setze. Einen Modulator für den Alphawert würde ich somit ausschliessen.
Aktuell teste ich ein Cockpitfenster. Hier ist es egal ob ich im Shader für das Alphamasking auf den Texturwert oder den Assimp Opacity Value gehe. Die Resultate sind gleich.
Die korrekte Anwendung ist mir daher schleierhaft ...