Shader Problematik Multiple Texturen ...



  • Hallo,

    Ich kenn mich mit Shader Programmierung noch nicht sooo aus ... hab aber nen Problem zu lösen.

    Ich hab ein einfaches, aber recht großes Objekt ....
    Das wird mit N Texturen bepflastert.
    N ist dabei momentan eine Konstante ...
    DIe Texturen überlappen sich, und werden in dem überlappenden bereich via alphablending kombiniert. DIe texturen können unterschiedliches format (höhe Breite) haben
    Das ganze passiert in nem Fragment Shader, die Texturen werden dabei als Texture2D parameter und auch ganze Menge an Koordinaten fürs blending.

    Da N definiert ist, ist das kein Problem, der Shader ist eben z.b. für 8 Texturen definiert, die Parameter sind dann auch immer mit Zahl (0-7) benannt und werden entsprechend vom CPU Code befüllt.

    Jetzt soll aber N dynamisch werden ....
    das heisst zur Laufzeit soll da die anzahl der Parameter variieren.

    Das auch wieder in etappen ... zuerst quasi laufzeit Konstant ... also Anzahl aus ini lesen, alles initialisieren Anzeigen gut.

    Nächste Etappe ist aber laufzeit dynamisch, also es kann zur laufzaut ne Texture hinzukommen. passiert dann ned haeufig aber eben doch an und ab.
    DIe max menge an Texturen bleibt überschaubar (<16)

    Jetzt tue ich mich irgendwie schwer, dynamische strukturen im shader selber zu verwenden. Gibt ja keine Zeiger ... und erst recht keine arrays auf Texturen oder so.
    Gibts da auf der Ebene einen Lösungsansatz ?

    der Ansatz Warum das auf einem Object mit einer Texture gerendert wurde, war sicherer das AlphaBlending ... das geht halt in einem FragmentShader einfach und performant ....

    Wenn ich aber das Object Trenne ... also für jede Texture nen eigenes Object baue, denk ich, bekomme ich probleme mit dem Alphablending ... und evtl der Performance ...

    Plan B und C wär dann die Shader zur Laufzeit zu generieren und compilieren, und dann dem Object-Material zuzuweissen, aber irgendwie schön wär das auch ned ....

    Hat wer schon mal sowas machen müssen/dürfen ?

    Ciao ...



  • Eine Moeglichkeit waere, Deine Maps per GL_TEXTURE_2D_ARRAY als Array zu organisieren.
    Dann kannst Du im Shader eine Schleife machen und brauchst nur noch ein Integer-Uniform reinreichen, das sagt, wie oft die Schleife laufen soll.



  • In dem Zusammenhang hab ich auch noch nen Knoten Im Gehirn ...
    Ich brauch noch mehrere Dynamische strukturen ...

    Ich muss/darf Ogre verwenden ...
    Wie schaufle ich daten in ein Sample1D .... (ist doch das richtige für PixelBuffer)

    Wenn ich eine Texture erstelle kann ich die doch nur ueber ein TextureUnitState an eine TexturVariable im (Fragment)Shader binden ?
    Der will aber auch gleich Textur-Coordinaten haben und bestimmen, was für werte man erhält wenn man ausserhalb von 1-/1 ist ...
    Kann man das irgendwie Unterdrücken ?

    Ciao ...


Log in to reply