D3D11 Font Rendering



  • Ich seh zwar auf die Schnelle kein Problem, aber evtl. stimmt bei deiner Berechnung irgendwo was nicht von wegen x + width bzw. y + height ist nicht der letzte Pixel, sondern der erste Pixel nach dem letzten. Denk dir das vielleicht nochmal genau durch, auch ob Breite und Höhe der Textur bzw. des Viewport die richtige Normalisierung bringen...



  • Was uns wieder dazu führt dass die exakt identischen (!) Artefakte auftauchen wenn ich die Textur als ganzes zeichne. Hier mal Bilder:
    Original: http://imgur.com/rOM8Dl2
    Gerendert: http://imgur.com/ownboyI



  • Und dabei setzt du die Texcoords manuell direkt auf {0,1}2\in \{0, 1\}^2 und dein Quad liegt an ganzzahligen Koordinaten und hat exakt die Abmessungen der Textur!?



  • Jap, ich rendere exakt mit

    float vertices []=
    {
    	0.f, 0.f, 0.f, 0.f, 
    	width, 0.f, 1.f, 0.f, 
    	0.f, height, 0.f, 1.f, 
    	width, height, 1.f, 1.f, 
    };
    

    Edit: Aha, wenn ich das hier im Pixel Shader mache

    return float4(tex.Sample(samp, input.tc).a, 0.0, 0.0, 1.0);
    

    verschwinden die Artefakte! Es muss also irgendwie am Alpha-Blending liegen.



  • Achja, aber dein BackBuffer hatte ja kein SRGB Format. Mach deine SwapChain mal mit DXGI_FORMAT_R8G8B8A8_UNORM_SRGB... 😉



  • Scheint nichts zu ändern. (Siehe Edit von meinem letzten Beitrag)



  • Ich nehme an, du renderst direkt in den BackBuffer? Hast du es auch an allen relevanten Stellen geändert (CreateSwapChain als auch ResizeBuffers)?



  • Ja, wie gesagt, siehe mein edit. Ich sehe nicht mehr wirklich wie es etwas anderes als das Alpha-Blending sein kann, wenn die Artefakte verschwinden sobald ich den Wert direkt als Farbe nehme.
    Edit: Man könnte jetzt auch denken das hier sollte funktionieren

    float4 ps_main(ps_input input) : SV_TARGET
    {
    	float a = tex.Sample(samp, input.tc).a;
    	return float4(color.r * a, color.g * a, color.b * a, color.a);
    }
    

    Und ja, die Artefakte verschwinden, aber letztlich ist das leider unbrauchbar, weil die Quads überlappen.



  • blend_desc.AlphaToCoverageEnable = FALSE;
    

    Fixed 😃



  • lol, ok, das hätt mir auch auffallen können, damit ist alles klar 😃



  • Zumindest steht hier jetzt ne halbe Anleitung zu glyph fonts drin, falls mal wieder jemand fragt. 🤡


  • Mod

    quasi alphatest (den teil hast du doch heimlcih dazu editiert :P)

    dennoch bleibt das problem was dot sagte, beim richtigen 1:1 mappen muss point und bilinear gleiche resultate liefern.



  • rapso schrieb:

    quasi alphatest (den teil hast du doch heimlcih dazu editiert :P)

    Das stimmt - allerdings bereits nach meinem 2. Post hier, in dem ich auch darauf hingewiesen hab. 😉

    rapso schrieb:

    dennoch bleibt das problem was dot sagte, beim richtigen 1:1 mappen muss point und bilinear gleiche resultate liefern.

    Das sieht mittlerweile eigentlich auch ziemlich gleich aus. Hm. Vielleicht habe ich mir das beim ersten mal auch nur eingebildet, auch wenn es eigentlich recht deutlich war. Die kleineren Schriftarten (consolas 14) sind allerdings schon am Rand des Lesbaren, das dürfte wohl aber einfach daran liegen, dass ich kein sub-pixel-AA verwende. (Danke dot für den Hinweis btw.)


  • Mod

    cooky451 schrieb:

    rapso schrieb:

    quasi alphatest (den teil hast du doch heimlcih dazu editiert :P)

    Das stimmt - allerdings bereits nach meinem 2. Post hier, in dem ich auch darauf hingewiesen hab. 😉

    lange nach meiner antwort ;), waere zum debuggen von dir nuetzlich gewesen 🤡


Anmelden zum Antworten