Ich arbeite an der Silverlight App. Ich versuche, den Boden mit Fliesen zu bedecken. Obwohl ich Mip-Maps verwende, bekomme ich immer noch schreckliche Moire-Muster, wenn ich versuche, große Flächen zu rendern.
Ich erstelle einen Quader und bedecke ihn dann mit einer einzelnen Kachel:
In meinem Pixel-Shader multipliziere ich Texturkoordinaten, um einen Fliesenboden zu erstellen (andernfalls würde ich eine Fliese über meinen Quader spannen). Pixel-Shader-Code:
float Width : register(c3); //Width of cuboid
float Height : register(c4); //Height of cuboid
texture texTexture;
sampler textureSampler : register(s0) = sampler_state {
Texture = (texTexture);
};
struct VsOutput
{
float4 position : POSITION;
float3 dirLightPosition : COLOR;
float2 texCoord : TEXCOORD0;
float3 normal : TEXCOORD1;
float3 view : TEXCOORD2;
};
float4 main(VsOutput IN) : COLOR
{
float2 texCoord = float2(IN.texCoord.x * Width / 4.0f,
IN.texCoord.y * Height / 4.0f); //multiplying texture coordinates
float4 texColor = tex2D(textureSampler, texCoord);
return float4(color.r, color.g, color.b, 1.0f);
}
Meine Ausgabe ist:
Was kann ich noch tun, um zu verhindern, dass Moires-Muster auf Texturen erstellt werden?
rendering
texture
pixel-shader
artifacts
bartosz.baczek
quelle
quelle
Antworten:
Zwei Dinge fallen mir ein:
Wenn Ihre kleine mip Kartenebenen zu erzeugen versuchen , einen einfachen 2x2 Box - Filter zu vermeiden , mit , weil sie zwar billig und fröhlich, sie haben einen wirklich schlechten Job zu entfernen Hochfrequenzinformationen als auch (bei der die Nyquist - Grenze übersteigt) über Filterung einige der unteren Frequenzinformationen, die Sie aufbewahren müssen. (Nebenbei müssen Sie die MIP-Kartengenerierung im linearen Raum durchführen. Wenn Ihre Quelldaten sRGB sind, müssen Sie daher linear zu und von linear zuordnen.) FWIW, In Williams 'Originalarbeit über MIP-Mapping sagte er, er habe ein "Box (Fourier) -Fenster" verwendet, um die vorgefilterten Ebenen zu erzeugen, was eine wichtige Funktion im Bildraum wäre.
Durch die standardmäßige trilineare Filterung werden auch Teile der Textur über- und unterfiltert. Wenn Ihnen das Aliasing nicht gefällt, müssen Sie möglicherweise a) die Vorspannung anpassen, um die Filterung zu erhöhen (was die Unschärfe erhöht), und / oder b) versuchen, eine anisotrope Filterung zu verwenden.
quelle
LÖSUNG
Ich habe es geschafft, mein Problem zu lösen, indem ich die Größe der Textur 2048x2048px vergrößert habe, damit mehr Mipmaps generiert werden. Außerdem scheint es mir geholfen zu haben, meine SamplerState-Form anisotrop zu ändern.
Eigentlich weiß ich nicht, was TextureAdressMode.Mirror ist, aber es hat sehr geholfen, jetzt sieht es so aus:
quelle