Gamestudio Links
Zorro Links
Newest Posts
New FXCM FIX Plugin
by flink. 06/04/24 07:30
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 1,493 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
AemStones, LucasJoshua, Baklazhan, Hanky27, firatv
19058 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Postprocessing und Auflösungswechsel #374494
06/19/11 12:32
06/19/11 12:32
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Folgende Situation: Ich habe eine View-stage-Kette mit 2 oder mehr stages, in etwa wie folgt:
Code:
bmp_camera = bmap_createblack(screen_size.x,screen_size.y,32);
camera.bmap = bmp_camera;
camera.stage = view_bloom;
view_bloom.stage = view_combine;


Dabei hat letzterer View folgenden Effekt:
Code:
sampler CameraSampler = sampler_state { texture = <bmp_camera_bmap>; };
sampler BloomSampler = sampler_state { texture = <TargetMap>; };

float4 pp_combine( float2 Tex : TEXCOORD0 ) : COLOR0 
{
   float4 Color = 0.5*tex2D( BloomSampler, Tex) + tex2D( CameraSampler, Tex);

	 return Color;
}


Ändere ich die Auflösung (per default.c und F5) in eine höhere, so gibt es kein Problem. Ist die neue Auflösung jedoch kleiner als die vorherige (bzw. kleiner als die größte, die bisher bei Laufzeit gewählt worden ist), so wird "CameraSampler" inkorrekt gelesen. "bmp_camera" wird stets an die aktuelle Bildschirmauflösung angepasst, daher sollte diese Bitmap zudem die gleiche Auflösung wie "TargetMap" besitzen. Es sieht aber aus, als wäre "Tex.xy" bei dieser Bitmap fälschlicherweise zu klein, weshalb nur ein Ausschnitt aus jener gerendert wird.

Code:
DEBUG_VAR(screen_size.x,20);
DEBUG_VAR(bmp_camera->width,40);
if(render_target) DEBUG_VAR(render_target->width,60);


Zudem lässt sich beobachten, dass "render_target->width" beim Übergang in eine höhere Auflösung größer wird, jedoch niemals kleiner.


Hier ein lauffähiges Minimalbeispiel: http://www.superku.de/bloom_problem.zip

Ich danke im Voraus!


EDIT: Verwendete Version: 8.20.1

Last edited by Superku; 06/19/11 12:39.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Postprocessing und Auflösungswechsel [Re: Superku] #374561
06/20/11 08:41
06/20/11 08:41
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Think about it: If the standard render buffer between view stages would change its size for every stage, you had to reallocate it many times per frame in a view chain with different stage sizes. You would not be happy with the frame rate.

The standard render buffer has a fixed size, only determined by the largest stage in all your chains. This is why you observe that it grows when the view resolution grows, but it never shrinks. If you need a stage buffer of a smaller size, just use an individual buffer for that stage, as you already did with the camera view buffer.

Re: Postprocessing und Auflösungswechsel [Re: jcl] #374596
06/20/11 14:08
06/20/11 14:08
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Ok, nehme ich zur Kenntnis.
Aber erklärt das denn auch, warum obiger Code den "CameraSampler" anscheinend inkorrekt liest?
Zudem sind oder sollten alle stages gleich groß sein, von unterschiedlichen Größen zwischen stages war nie die Rede.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Postprocessing und Auflösungswechsel [Re: Superku] #374604
06/20/11 14:46
06/20/11 14:46
Joined: Mar 2006
Posts: 2,252
Hummel Offline
Expert
Hummel  Offline
Expert

Joined: Mar 2006
Posts: 2,252
Ich glaub hier liegt ein Missverständnis vor, Superku ging einfach nur darum, dass wenn die Auflösungen vom backbuffer verändert wird, dann auch die render targets aller stages von pp-effect Ketten angepasst werden. Und das eben nicht nur wenn die Auflösung vergrößert wird.

Re: Postprocessing und Auflösungswechsel [Re: Hummel] #374609
06/20/11 15:02
06/20/11 15:02
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Nein, Stages sind oft verschieden groß. Z.B. enthält der HDR Shader Stages, die sich um den Größenfaktor 1/4 unterscheiden. Auch bei Bloom-Effekten ist in der Regel die Bloom-Stage wesentlich kleiner als die Screen Stage.

Im Pixel-Shader müssen Sie dann die verschiedenen Größen berücksichtigen. Hierzu multiplizieren Sie die Texturkoordinaten mit dem Größenfaktor, also z.B.:

Color = 0.5*tex2D( BloomSampler, factor*Tex) + tex2D( CameraSampler, Tex);

Sonst bekommen Sie falsche Koordinaten, sobald Ihr BloomSampler und Ihr CameraSampler unterschiedlich groß sind.

Re: Postprocessing und Auflösungswechsel [Re: jcl] #374613
06/20/11 15:16
06/20/11 15:16
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Code:
sobald Ihr BloomSampler und Ihr CameraSampler unterschiedlich groß sind.


Aber das sind sie ja nicht, die bmap von camera ist stets so groß wie die Auflösung des Bildschirms, Bloom läuft (momentan) auch noch über den ganzen Screen. Dennoch wird CameraSampler falsch gelesen, ich verstehe nicht, warum.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Postprocessing und Auflösungswechsel [Re: jcl] #374614
06/20/11 15:20
06/20/11 15:20
Joined: Mar 2006
Posts: 2,252
Hummel Offline
Expert
Hummel  Offline
Expert

Joined: Mar 2006
Posts: 2,252
Laut Superku werden die Größen der Stage aber nich angepasst wenn die Auflösung vom Backbuffer verringert wird. Zum Beispiel wäre ein RT, welches 1/4 so groß wie der Backbuffer vor dem Ändern der Auflösung war, nach dem Verringern der Auflösung um ein Viertel, dann plötzlich genau so groß wie der Backbuffer.

Re: Postprocessing und Auflösungswechsel [Re: Superku] #374616
06/20/11 15:28
06/20/11 15:28
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Originally Posted By: Superku
die bmap von camera ist stets so groß wie die Auflösung des Bildschirms, Bloom läuft (momentan) auch noch über den ganzen Screen. Dennoch wird CameraSampler falsch gelesen, ich verstehe nicht, warum.

Weil beide Bitmaps verschieden gross sind. Ein Pixelshader weiß nichts von der Größe des Bildschirms. Er kennt nur die Größe des Rendertargets und läuft über dessen X/Y-Koordinatenbereich. Da das Rendertarget normalerweise viel größer als der Bildschirm ist, entspricht eine Rendertarget-Koordinate nicht der gleichen Bildschirm-Koordinate. Deshalbt können Sie nicht einfach Werte von den gleichen Koordinaten aus verschiedenen Bitmaps addieren. Ich hoffe, das ist nun verständlich.

Sie müssen entweder Bitmaps gleicher Größe verwenden, oder Ihr Shader-Code muss die unterschiedliche Größe berücksichtigen. Sehen Sie sich Beispielshader an, z.B. HDR - da werden individuelle Größen für die einzelnen Stages verwendet.

Re: Postprocessing und Auflösungswechsel [Re: jcl] #374618
06/20/11 15:32
06/20/11 15:32
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Quote:
Sie müssen entweder die Größe des Rendertargets anpassen

Das klappt wunderbar, danke! Problem gelöst.

EDIT: Falls folgendes legitim ist:

if(old_screen_size_x != screen_size.x) {
old_screen_size_x = screen_size.x;
if(render_target) ptr_remove(render_target);
render_target = bmap_createblack(screen_size.x,screen_size.y,32);
}

Last edited by Superku; 06/20/11 15:33.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Postprocessing und Auflösungswechsel [Re: Superku] #374620
06/20/11 15:35
06/20/11 15:35
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Das ist nicht ganz legitim, denn am render_target sollen Sie nichts ändern. Legitim wäre folgendes:

if(old_screen_size_x != screen_size.x) {
if(bloom_view.bmap) ptr_remove(bloom_view.bmap);
bloom_view.bmap = bmap_createblack(screen_size.x,screen_size.y,32);
}

Page 1 of 2 1 2

Moderated by  Blink, Hummel, Superku 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1