DirectX 11: Texturfarbe schwarz, wenn Alphawert == 0



  • Hi Leute,

    ich schreibe in DirectX11 mein Displacementmapping, indem ich in eine Bumptexture bei RGB den Normalvektor, und bei Alpha den Höhenwert speichere. Wenn Alpha == 0 ist, dann gibt dieser HLSL-Pixelshader hier die Farbe Schwarz aus:

    float3 hh = Texture1.Sample(stateLinear, input.tex).rgb;
    return saturate(float4(hh.xyz, 0));

    SamplerState stateLinear
    {
    Filter = MIN_LINEAR_MAG_MIP_POINT;
    AddressU = Wrap;
    AddressV = Wrap;
    };

    Ich möchte gerne, dass ich den richtigen RGB-Wert bekomme, selbst wenn Alpha != 1 ist. Blending habe ich mit:

    blendDesc.RenderTargets[0].BlendEnable = false;

    Disabled. Was mache ich falsch?


  • Mod

    speicher die texture als DXT5 statt DXT1



  • Ich hab das mit DXT5 jetzt nicht so hinbekommen da ich nicht genau wußte wie ich das unter DirectX machen muss.

    Dafür habe ich aber eine Lösung für Arme gefunden:

    float acol = Texture1.Sample(stateLinear, input.tex).a;
    float rcol = Texture1.Sample(stateLinear, input.tex).r / acol;
    float gcol = Texture1.Sample(stateLinear, input.tex).g / acol;
    float bcol = Texture1.Sample(stateLinear, input.tex).b / acol;

    Geht das so Herr Rapso?


  • Mod

    XMAMan schrieb:

    Ich hab das mit DXT5 jetzt nicht so hinbekommen da ich nicht genau wußte wie ich das unter DirectX machen muss.

    ich denke du musst irgendwo die texture speichern, vielleicht mit einem tool als .dds? dort muestest du das format auswaehlen. (natuerlich solltest du das orginal bild oeffnen udn speichern, das .dds was schon dxt1 kann nicht mehr zu dxt5 (BC3) aufgewertet werden.

    es kann natuerlich sein dass es an was anderem liegt, aber ohne source und genauere beschreibung ist es raten ins blinde 😉

    Dafür habe ich aber eine Lösung für Arme gefunden:

    float acol = Texture1.Sample(stateLinear, input.tex).a;
    float rcol = Texture1.Sample(stateLinear, input.tex).r / acol;
    float gcol = Texture1.Sample(stateLinear, input.tex).g / acol;
    float bcol = Texture1.Sample(stateLinear, input.tex).b / acol;

    Geht das so

    das geht zu einem gewissen grad, wenn alpha 0 ist, geht das natuerlich schief und wenn alpha sehr klein ist, koennte es sein dass rgb sehr ungenau wird. aber an sich ein exzellenter hack 😉

    Herr Rapso?

    Herr XMAMan, machen sie mich nicht so alt 😉


Anmelden zum Antworten