[ASSIMP] Transparenz

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
snoob741
Beiträge: 76
Registriert: 03.04.2012, 22:36

[ASSIMP] Transparenz

Beitrag von snoob741 »

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?
Benutzeravatar
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

Beitrag von xq »

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.
Benutzeravatar
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

Beitrag von Schrompf »

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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
snoob741
Beiträge: 76
Registriert: 03.04.2012, 22:36

Re: [ASSIMP] Transparenz

Beitrag von snoob741 »

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 ...
Antworten