Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

20.03.2013, 18:23

Verschiebung bei Gaussian Blur

Ich habe ein Problem mit meinem Gaussian-Blur Shader (HLSL). Im Anhang sind zwei Bilder. Man sieht sehr deutlich, dass nach dem Weichzeichnen alles nach unten-rechts verschoben wurde. Wieso?
Vorgehensweise für Blur:
Texture Downsamplen (auf kleineres Quadrat rendern 128x128 )
8 mal Blur V und Blur H
Neues rendertarget setzen (mit Bildschirmgröße), und kleine Textur darauf render->Upsample

Code für den Blur Shader:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
texture RenderedScene;
sampler PostProcess = sampler_state{ texture = <RenderedScene> ; }; // Der Textursampler

float texelSize = 1.0f / 128.0f;

float PixelKernel[13] =
{
    -6,
    -5,
    -4,
    -3,
    -2,
    -1,
     0,
     1,
     2,
     3,
     4,
     5,
     6,
};

static const float BlurWeights[13] = 
{
    0.002216,
    0.008764,
    0.026995,
    0.064759,
    0.120985,
    0.176033,
    0.199471,
    0.176033,
    0.120985,
    0.064759,
    0.026995,
    0.008764,
    0.002216,
};

struct VS_OUTPUT
{
    float4 Pos      : POSITION;
    float2 TexCoord : TEXCOORD0;
};

//*****************************************************
// Vertexshader
VS_OUTPUT vs_main(in float4 pos      : POSITION,
                     in float2 texCoord : TEXCOORD0)
{
    VS_OUTPUT Out;
   
    Out.Pos      = pos;
    Out.TexCoord = texCoord;
   
    return Out;
}

//*****************************************************
// Horizontal
float4 ps_mainH(VS_OUTPUT input) : SV_Target
{
    float4 color = 0.0f;
    float2 samp = input.TexCoord;
    samp.y = input.TexCoord.y;

    for (int i = 0; i < 13; i++)
    {
        samp.x = input.TexCoord.x + PixelKernel[i] * texelSize;
        samp.x = saturate(samp.x);
        color += tex2D(PostProcess, samp.xy) * BlurWeights[i];
    }

    return color;
}

//*****************************************************
// Vertical
float4 ps_mainV(VS_OUTPUT input) : SV_Target
{
    float4 color = 0.0f;
    float2 samp = input.TexCoord;
    samp.x = input.TexCoord.x;

    for (int i = 0; i < 13; i++)
    {
        samp.y = input.TexCoord.y + PixelKernel[i] * texelSize;
        samp.y = saturate(samp.y);
        color += tex2D(PostProcess, samp.xy) * BlurWeights[i];
    }

    return color;
}


//*****************************************************
// Nothing
VS_OUTPUT vs_tex(in float4 pos      : POSITION,
                     in float2 texCoord : TEXCOORD0)
{
    VS_OUTPUT Out;
   
    Out.Pos      = pos;
    Out.TexCoord = texCoord;
   
    return Out;
}

float4 ps_tex(VS_OUTPUT input) : SV_Target
{
    return tex2D(PostProcess, input.TexCoord);
}

//Technique Calls
technique blurH
{ 
   pass p0 
   { 
      VertexShader = compile vs_3_0 vs_main(); 
      PixelShader = compile ps_3_0 ps_mainH(); 
   } 
}

technique blurV
{ 
   pass p0 
   { 
      VertexShader = compile vs_3_0 vs_main(); 
      PixelShader = compile ps_3_0 ps_mainV(); 
   } 
}

technique tex
{ 
   pass p0 
   { 
      VertexShader = compile vs_3_0 vs_tex(); 
      PixelShader = compile ps_3_0 ps_tex(); 
   } 
}
»FSA« hat folgende Bilder angehängt:
  • Original.jpg
  • Blur.jpg

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

20.03.2013, 19:20

Der ganze Testcase ist ja schon verschoben. Wie siehts denn aus wenn du ein Rechteck genau zentriert im Bild zeichnest?
@D13_Dreinig

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

20.03.2013, 20:07

Genau gleich. Es ist immer ein Stück nach unten rechts verschoben.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

4

21.03.2013, 18:01

Keiner einer Idee?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

21.03.2013, 18:08

Sieht mir aus als ob da evtl. mit der Interpolation der Texcoords was nicht hinhaut. Gib doch mal nur die Texturkoordinaten aus...

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

6

25.03.2013, 17:32

Es lag am Upsampler. Ich schreibe mir jetzt einen eigenen Algorithmus zum Up-Samplen. Melde mich dann nochmal.
Danke ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige