Emulation HDR/Bloom effect sur Radeon 9x00

Voilà je viens de trouver sur un forum anglosaxon la possibilité d’activer en quelque sorte l’effet HDR (High Dynamic Range) sur les Radeon 9x00 (qui comprend les 9000, 9200, 9600, 9500, 9700, 9800).
Il vous faut 2 fichiers :
Entries.zip et pssControl2.zip
http://www.beyond3d.com/downloads/smartshader/

Pour en profiter activer le mode HDRish.

entries : http://www.beyond3d.com/downloads/smartshader/entries.zip
pssControl2 : http://www.beyond3d.com/downloads/smartsha…pssControl2.zip

Si vous avez un doute , regardez les images qui suivent :

AVANT

APRES

Autres exemples :
UT 99 : http://server2.uploadit.org/files/MikeEx-ut99mblur.jpg
Call of Duty : http://server3.uploadit.org/files/pilsner-Clipboard01.jpg

Riddick :
Avec HDR :
http://nanjing.51tuangou.com/bbs/file_uplo…/313672_010.jpg

Sans HDR :
http://nanjing.51tuangou.com/bbs/file_uplo…/313673_011.jpg

Doom 3 :
Avec HDR :
http://nanjing.51tuangou.com/bbs/file_uplo…/315149_022.jpg

Sans HDR :
http://nanjing.51tuangou.com/bbs/file_uplo…/315146_019.jpg

PS : il semblerait que cet émulateur de HDR/Bloom Effect ne fonctionne que sur les jeux tournant sur OpenGL.

Ca a l’air plutôt pas mal. Mais, au niveau de la stabilité, c’est comment ? Ca ne fait pas planter les jeux ?

Autre chose, pour activer le mode HDRish, on fait comment ? C’est dans le panel des drivers ou dans l’écran de config des jeux ?

[quote name=‘aristidi’ date=’ 6 Jan 2005, 19:07’]Ca a l’air plutôt pas mal. Mais, au niveau de la stabilité, c’est comment ? Ca ne fait pas planter les jeux ?

Autre chose, pour activer le mode HDRish, on fait comment ? C’est dans le panel des drivers ou dans l’écran de config des jeux ?
[right][post=“319682”]<{POST_SNAPBACK}>[/post][/right][/quote]

Tu lance l’executable du zip pssControl2, tu vas sélectionner un des fichier .pss du zip entries.zip. Le fichier à choisir se nomme HDRish.pss ensuite tu ne ferme pas l’application pssControl2 et tu lance le jeu en question.

Tu trouve d’autres effets dans le entries.zip tel émulation du motion blur, le gauss radial, etc…

Ça marche vraiment sur les 9000 et 9200 ? Car c’est quand même des dérivés des 8500, optimisées pour DirectX8.0… après ouais, c’est du DX9, mais bon, j’ai un doute sur les premières…

En tout cas si ça marche vraiment c’est bien joli quand même…

T’as un lien ?

[quote name=‘Yoryze’ date=’ 6 Jan 2005, 19:43’]Ça marche vraiment sur les 9000 et 9200 ? Car c’est quand même des dérivés des 8500, optimisées pour DirectX8.0… après ouais, c’est du DX9, mais bon, j’ai un doute sur les premières…

En tout cas si ça marche vraiment c’est bien joli quand même…

T’as un lien ?
[right][post=“319695”]<{POST_SNAPBACK}>[/post][/right][/quote]

Forum en question : http://rage3d.com/board/showthread.php?t=3…85&page=1&pp=30

[quote name=‘MetalDestroyer’ date=’ 6 Jan 2005, 20:05’]Forum en question : http://rage3d.com/board/showthread.php?t=3…85&page=1&pp=30
[right][post=“319705”]<{POST_SNAPBACK}>[/post][/right][/quote]
Ca doit ramer mais d’une force

Deja sur les 6800 …

Edit : je parle de Farcry hein.

Re Edit: Ah putin je lis pas les posts en entier ce soir. C’est Open Gl only. Bon ben j’attends la version DX puisque j’arrive pas a mettre FC en OPen GL de toute facon

je trouve étonnant que l’on doive se tourner vers des “bénévoles” pour faire le taffe des studios .
de plus, si eux y arrivent c’est que ça doit pas être si sorcier à implémenter… pourquoi ne l’on t’ils pas fait alors ?

si je languedeputisais je dirais qu’ils ont reçu un chèque d’une certaines société pour mettre leurs cartes gaphiques en avant

Je n’ai pas encore regardé de près le truc mais ca m’a l’air assez intéressant. Ca utilise les possibilités de smartshaders des drivers ATI, vous savez les trucs qu’on trouvait tous inutiles jusque là. Je vais tester ca soon pour voir l’impact sur les perfs.

Edit pour titi : juste pour rapeller que smartshaders a la base c’est un truc pour rendre les vieux jeux plus jolis, sauf qu’ATI n’a jamais sorti de shader vraiment smart (les trucs matrix like et compagnie, ils se sont pas foulés).

[quote name=‘C_Wizard’ date=’ 7 Jan 2005, 01:06’]Je n’ai pas encore regardé de près le truc mais ca m’a l’air assez intéressant. Ca utilise les possibilités de smartshaders des drivers ATI, vous savez les trucs qu’on trouvait tous inutiles jusque là. Je vais tester ca soon pour voir l’impact sur les perfs.

Edit pour titi : juste pour rapeller que smartshaders a la base c’est un truc pour rendre les vieux jeux plus jolis, sauf qu’ATI n’a jamais sorti de shader vraiment smart (les trucs matrix like et compagnie, ils se sont pas foulés).
[right][post=“319809”]<{POST_SNAPBACK}>[/post][/right][/quote]

J’ai fait plusieur test sur le HDRish.pss et apparemment il marche imppec que si seulement on possède les Cat 4.12. Avec les version Antérieur ca marche une fois sur 2, tout dépend du jeux Open GL en question. Sur Freespace 2 en Open GL j’avais eu droit à un big écran blanc dès que j’arrive au choix des profiles.

Sinon sur le tenebrae (Quake 1 + jeu de lumière à la Doom 3) ca marche imppec.

Bon, je n’ai pas encore tester les autres fichier SmartShader tel le motion blur, et etc…
J’espère tout de même que ces autres fichiers fonctionnes sur les jeux D3D.

C’est currieux quand meme, implanter un machin qui active le HDR, alors que sur des jeux (1 en fait que je connais Farcry) il suffit de rajouter une ligne de commande pour l’avoir.

“r_hdrrendering 7” “e_vegetation_sprites_distance_ratio 100.000000” <-- pour optimiser le rendu de FC a rajouter apres le .exe

http://img70.exs.cx/img70/7320/farcry00013oj.jpg

ImageShack™ hosting

[quote name=‘MetalDestroyer’ date=’ 7 Jan 2005, 01:19’]J’espère tout de même que ces autres fichiers fonctionnes sur les jeux D3D.
[right][post=“319811”]<{POST_SNAPBACK}>[/post][/right][/quote]
AFAIK les smartshaders c’est openGL only

[quote name=‹ C_Wizard › date=’ 7 Jan 2005, 02:22’]AFAIK les smartshaders c’est openGL only
[right][post=« 319824 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Damn it ! :stuck_out_tongue:

[EDIT] je viens de voir dans le control panel d’ATI que les SMartShader sont dispos à la fois dans OpenGL et D3D. Mais pas encore tester.

[EDIT 2] Je viens de tester ca marche aussi sur D3D :P, je n’ai tester que les SMartShader proposé par le control panel d’ATI.

[quote name=‹ MetalDestroyer › date=’ 7 Jan 2005, 10:34’]Damn it !  :stuck_out_tongue:
[EDIT] je viens de voir dans le control panel d’ATI que les SMartShader sont dispos à la fois dans OpenGL et D3D. Mais pas encore tester.

[EDIT 2] Je viens de tester ca marche aussi sur D3D :P, je n’ai tester que les SMartShader proposé par le control panel d’ATI.
[right][post=« 319859 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Escuze mon impertinence, mais le HDR=SmartShader ?

[quote name=‘Diehuman’ date=’ 7 Jan 2005, 12:17’]Escuze mon impertinence, mais le HDR=SmartShader ?
[right][post=“319887”]<{POST_SNAPBACK}>[/post][/right][/quote]

Pour l’émulation du HDR via les fichiers ci dessous, oui. Ils utilisent le SmartShader.

Il faudrait que je voie ça en mouvement, mais j’ai du mal à voir les différences entre avec et sans. Pourtant, je fais partie de ceux qui aiment bien avoir un bon coup d’Antialiasing et de filtrage anisotrope 4x (et voient la différence…).
C_Wizard, tu nous tiens au courant pour l’intérêt, les performances et ce genre d’amusements?

[quote name=‘LeBaronNoir’ date=’ 7 Jan 2005, 22:58’]Il faudrait que je voie ça en mouvement, mais j’ai du mal à voir les différences entre avec et sans. Pourtant, je fais partie de ceux qui aiment bien avoir un bon coup d’Antialiasing et de filtrage anisotrope 4x (et voient la différence…).
C_Wizard, tu nous tiens au courant pour l’intérêt, les performances et ce genre d’amusements?
[right][post=“320147”]<{POST_SNAPBACK}>[/post][/right][/quote]

Arf, attend je te fait un autre apercu du HDR.
Là j’ai sous la main 2 screen avec HDR activé (SmartShader) et sans.
A gauche c’est avec HDR et à droite sans HDR

Hmmm c’est choli tout ça! Surtout l’effet sur les nuages. Pour les sources de lumières aussi c’est sympa mais je trouve que c’est moins impressionant que le réalisme de la couche de nuages.
Et puis… 120FPS dans les deux cas, c’est sympa ça aussi :stuck_out_tongue:
Idem sur Doom3, 3 FPS en moins seulement c’est plutôt pas mal.

Moui. Je vois mieux la différence qu’avec le screen de KotOR. D’un autre côté, quand je vois ceux de Doom 3, je trouve que ça a tendance à éclaircir un peu trop l’image. Bon, je vais essayer pour me faire ma propre opinion.

C’est sacrément violent comme effet et on voit bien que KotOR par exemple, n’a pas été prévu pour en tirer parti. Le sol sur Taris est d’une blancheur éblouissante, les personnages dans les vaisseaux donnent l’impression d’être éclairés par une chaude lumière solaire. Bref, je trouve que c’est encore un peu excessif comme effet.

[quote name=‘LeBaronNoir’ date=’ 8 Jan 2005, 11:29’]Moui. Je vois mieux la différence qu’avec le screen de KotOR. D’un autre côté, quand je vois ceux de Doom 3, je trouve que ça a tendance à éclaircir un peu trop l’image. Bon, je vais essayer pour me faire ma propre opinion.

C’est sacrément violent comme effet et on voit bien que KotOR par exemple, n’a pas été prévu pour en tirer parti. Le sol sur Taris est d’une blancheur éblouissante, les personnages dans les vaisseaux donnent l’impression d’être éclairés par une chaude lumière solaire. Bref, je trouve que c’est encore un peu excessif comme effet.
[right][post=“320217”]<{POST_SNAPBACK}>[/post][/right][/quote]

Oups, j’ai utilisé une version modifié du HDRish. Une version moins tape à l’oeil.
Voici le tout nouveau HDR.

Alors il te faut créer un fichier txt, puis renomme le comme tu veux, (par exemple : HDRish_Light.pss ). Et ouvre ensuite ce fichier .pss que tu viens de créer avec le notepad et colle le code suivant.
Charge ce fichier sous le pssControl2.exe et lance un jeu.

[code]shader samplePixelShader =
"!!ARBfp1.0

TEMP Temp;

TEX result.color, fragment.texcoord[0], texture[0], 2D;

END";

shader gaussianXPixelShader =
"!!ARBfp1.0

PARAM Offset[11]={ program.local[0…10] };

PARAM Weight[3]=
{
{ 0.2, 0.1, 0.05, 0.02 },
{ 0.02, 0.01, 0.005, 0.002 },
{ 0.004, 0.002, 0.001, 0.00025 }
};

TEMP s0, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;

ADD r0,  -Offset[10], fragment.texcoord[0];
ADD r1,  -Offset[ 8], fragment.texcoord[0];
ADD r2,  -Offset[ 7], fragment.texcoord[0];
ADD r3,  -Offset[ 6], fragment.texcoord[0];
ADD r4,  -Offset[ 5], fragment.texcoord[0];
ADD r5,  -Offset[ 4], fragment.texcoord[0];
ADD r6,  -Offset[ 3], fragment.texcoord[0];
ADD r7,  -Offset[ 2], fragment.texcoord[0];
ADD r8,  -Offset[ 1], fragment.texcoord[0];
ADD r9,  -Offset[ 0], fragment.texcoord[0];
ADD r10, -Offset[ 0], fragment.texcoord[0];
MOV s0, fragment.texcoord[0];

TEX r0,  r0,  texture[0], 2D;
TEX r1,  r1,  texture[0], 2D;
TEX r2,  r2,  texture[0], 2D;
TEX r3,  r3,  texture[0], 2D;
TEX r4,  r4,  texture[0], 2D;
TEX r5,  r5,  texture[0], 2D;
TEX r6,  r6,  texture[0], 2D;
TEX r7,  r7,  texture[0], 2D;
TEX r8,  r8,  texture[0], 2D;
TEX r9,  r9,  texture[0], 2D;
TEX r10, r10, texture[0], 2D;

TEX s0,  s0,  texture[0], 2D;

MUL s0, s0,  Weight[0].x;
MAD s0, r0,  Weight[1].w, s0;
MAD s0, r1,  Weight[1].z, s0;
MAD s0, r2,  Weight[1].y, s0;
MAD s0, r3,  Weight[1].x, s0;
MAD s0, r4,  Weight[1].w, s0;
MAD s0, r5,  Weight[1].z, s0;
MAD s0, r6,  Weight[1].y, s0;
MAD s0, r7,  Weight[1].x, s0;
MAD s0, r8,  Weight[0].w, s0;
MAD s0, r9,  Weight[0].z, s0;
MAD s0, r10, Weight[0].y, s0;

ADD r0,  Offset[ 0], fragment.texcoord[0];
ADD r1,  Offset[ 1], fragment.texcoord[0];
ADD r2,  Offset[ 2], fragment.texcoord[0];
ADD r3,  Offset[ 3], fragment.texcoord[0];
ADD r4,  Offset[ 4], fragment.texcoord[0];
ADD r5,  Offset[ 5], fragment.texcoord[0];
ADD r6,  Offset[ 6], fragment.texcoord[0];
ADD r7,  Offset[ 7], fragment.texcoord[0];
ADD r8,  Offset[ 8], fragment.texcoord[0];
ADD r9,  Offset[ 9], fragment.texcoord[0];
ADD r10, Offset[10], fragment.texcoord[0];

TEX r0,  r0,  texture[0], 2D;
TEX r1,  r1,  texture[0], 2D;
TEX r2,  r2,  texture[0], 2D;
TEX r3,  r3,  texture[0], 2D;
TEX r4,  r4,  texture[0], 2D;
TEX r5,  r5,  texture[0], 2D;
TEX r6,  r6,  texture[0], 2D;
TEX r7,  r7,  texture[0], 2D;
TEX r8,  r8,  texture[0], 2D;
TEX r9,  r9,  texture[0], 2D;
TEX r10, r10, texture[0], 2D;

MAD s0, r0,  Weight[0].y, s0;
MAD s0, r1,  Weight[0].z, s0;
MAD s0, r2,  Weight[0].w, s0;
MAD s0, r3,  Weight[1].x, s0;
MAD s0, r4,  Weight[1].y, s0;
MAD s0, r5,  Weight[1].z, s0;
MAD s0, r6,  Weight[1].w, s0;
MAD s0, r7,  Weight[1].x, s0;
MAD s0, r8,  Weight[1].y, s0;
MAD s0, r9,  Weight[1].z, s0;
MAD s0, r10, Weight[1].w, s0;

MOV result.color, s0;

END";

shader gaussianYPixelShader =
"!!ARBfp1.0

PARAM Offset[11]={ program.local[0…10] };

PARAM Weight[3]=
{
{ 0.2, 0.1, 0.05, 0.02 },
{ 0.02, 0.01, 0.005, 0.002 },
{ 0.004, 0.002, 0.001, 0.00025 }
};

TEMP s0, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;

ADD r0,  -Offset[10], fragment.texcoord[0];
ADD r1,  -Offset[ 9], fragment.texcoord[0];
ADD r2,  -Offset[ 8], fragment.texcoord[0];
ADD r3,  -Offset[ 7], fragment.texcoord[0];
ADD r4,  -Offset[ 6], fragment.texcoord[0];
ADD r5,  -Offset[ 5], fragment.texcoord[0];
ADD r6,  -Offset[ 4], fragment.texcoord[0];
ADD r7,  -Offset[ 3], fragment.texcoord[0];
ADD r8,  -Offset[ 2], fragment.texcoord[0];
ADD r9,  -Offset[ 1], fragment.texcoord[0];
ADD r10, -Offset[ 0], fragment.texcoord[0];
MOV s0, fragment.texcoord[0];

TEX r0,  r0,  texture[0], 2D;
TEX r1,  r1,  texture[0], 2D;
TEX r2,  r2,  texture[0], 2D;
TEX r3,  r3,  texture[0], 2D;
TEX r4,  r4,  texture[0], 2D;
TEX r5,  r5,  texture[0], 2D;
TEX r6,  r6,  texture[0], 2D;
TEX r7,  r7,  texture[0], 2D;
TEX r8,  r8,  texture[0], 2D;
TEX r9,  r9,  texture[0], 2D;
TEX r10, r10, texture[0], 2D;

TEX s0,  s0,  texture[0], 2D;

MUL s0, s0,  Weight[0].x;
MAD s0, r0,  Weight[1].w, s0;
MAD s0, r1,  Weight[1].z, s0;
MAD s0, r2,  Weight[1].y, s0;
MAD s0, r3,  Weight[1].x, s0;
MAD s0, r4,  Weight[1].w, s0;
MAD s0, r5,  Weight[1].z, s0;
MAD s0, r6,  Weight[1].y, s0;
MAD s0, r7,  Weight[1].x, s0;
MAD s0, r8,  Weight[0].w, s0;
MAD s0, r9,  Weight[0].z, s0;
MAD s0, r10, Weight[0].y, s0;

ADD r0,  Offset[ 0], fragment.texcoord[0];
ADD r1,  Offset[ 0], fragment.texcoord[0];
ADD r2,  Offset[ 1], fragment.texcoord[0];
ADD r3,  Offset[ 2], fragment.texcoord[0];
ADD r4,  Offset[ 3], fragment.texcoord[0];
ADD r5,  Offset[ 4], fragment.texcoord[0];
ADD r6,  Offset[ 5], fragment.texcoord[0];
ADD r7,  Offset[ 6], fragment.texcoord[0];
ADD r8,  Offset[ 7], fragment.texcoord[0];
ADD r9,  Offset[ 8], fragment.texcoord[0];
ADD r10, Offset[10], fragment.texcoord[0];

TEX r0,  r0,  texture[0], 2D;
TEX r1,  r1,  texture[0], 2D;
TEX r2,  r2,  texture[0], 2D;
TEX r3,  r3,  texture[0], 2D;
TEX r4,  r4,  texture[0], 2D;
TEX r5,  r5,  texture[0], 2D;
TEX r6,  r6,  texture[0], 2D;
TEX r7,  r7,  texture[0], 2D;
TEX r8,  r8,  texture[0], 2D;
TEX r9,  r9,  texture[0], 2D;
TEX r10, r10, texture[0], 2D;

MAD s0, r0,  Weight[0].y, s0;
MAD s0, r1,  Weight[0].z, s0;
MAD s0, r2,  Weight[0].w, s0;
MAD s0, r3,  Weight[1].x, s0;
MAD s0, r4,  Weight[1].y, s0;
MAD s0, r5,  Weight[1].z, s0;
MAD s0, r6,  Weight[1].w, s0;
MAD s0, r7,  Weight[1].x, s0;
MAD s0, r8,  Weight[1].y, s0;
MAD s0, r9,  Weight[1].z, s0;
MAD s0, r10, Weight[1].w, s0;

MOV result.color, s0;

END";

shader outputPixelShader =
"!!ARBfp1.0

TEMP back, blur;

TEX blur, fragment.texcoord[0], texture[0], 2D;
TEX back, fragment.texcoord[0], texture[1], 2D;

ADD blur, blur, blur;
ADD result.color, back, blur;

END";

shader outputPixelShader2 =
"!!ARBfp1.0

threshold for tag shader (try different values)

PARAM thresh = {0.5, 0.5, 0.5, 0.5};

TEMP back, blur, temp;

TEX blur, fragment.texcoord[0], texture[0], 2D;
TEX back, fragment.texcoord[0], texture[1], 2D;

subtract threshold value from the ‘back’ value

SUB temp, back, thresh;

if temp value is smaller than threshold, kill fragment

KIL blur;

ADD result.color, back, blur;

END";

surface blur0 = allocsurf(width/8, height/8);
surface blur1 = allocsurf(width/8, height/8);

gaussianXPixelShader.constant[ 0] = { (4.0ds_dx) 1.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 1] = { (4.0ds_dx) 3.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 2] = { (4.0ds_dx) 5.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 3] = { (4.0ds_dx) 7.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 4] = { (4.0ds_dx) 9.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 5] = { (4.0*ds_dx)11.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 6] = { (4.0
ds_dx)13.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 7] = { (4.0
ds_dx)15.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 8] = { (4.0
ds_dx)17.45, 0, 0, 0 };
gaussianXPixelShader.constant[ 9] = { (4.0
ds_dx)19.45, 0, 0, 0 };
gaussianXPixelShader.constant[10] = { (4.0
ds_dx)*21.45, 0, 0, 0 };

gaussianYPixelShader.constant[ 0] = { 0, (4.0dt_dy) 1.45, 0, 0 };
gaussianYPixelShader.constant[ 1] = { 0, (4.0dt_dy) 3.45, 0, 0 };
gaussianYPixelShader.constant[ 2] = { 0, (4.0dt_dy) 5.45, 0, 0 };
gaussianYPixelShader.constant[ 3] = { 0, (4.0dt_dy) 7.45, 0, 0 };
gaussianYPixelShader.constant[ 4] = { 0, (4.0dt_dy) 9.45, 0, 0 };
gaussianYPixelShader.constant[ 5] = { 0, (4.0*dt_dy)11.45, 0, 0 };
gaussianYPixelShader.constant[ 6] = { 0, (4.0
dt_dy)13.45, 0, 0 };
gaussianYPixelShader.constant[ 7] = { 0, (4.0
dt_dy)15.45, 0, 0 };
gaussianYPixelShader.constant[ 8] = { 0, (4.0
dt_dy)17.45, 0, 0 };
gaussianYPixelShader.constant[ 9] = { 0, (4.0
dt_dy)19.45, 0, 0 };
gaussianYPixelShader.constant[10] = { 0, (4.0
dt_dy)*21.45, 0, 0 };

texture[0].magfilter = “linear”;

texture[0].source = backbuffer;
destination blur0;
apply samplePixelShader;

texture[0].source = blur0;
destination blur1;
apply gaussianXPixelShader;

texture[0].source = blur1;
destination blur0;
apply gaussianYPixelShader;

texture[0].source =  blur0;
texture[0].source =  blur1;
texture[1].source =  backbuffer;
destination backbuffer;
apply outputPixelShader2;[/code]

Même comme ça, c’est trop. C’est moins pire, mais les sols blancs du Temple Rakata sur la planète inconnue deviennent une bouillie blanchâtre assez horrible à voir. Ca me rappèle la fois où j’ai conduit sur une route pleine de flotte avec le soleil rasant qui provocquait une jolie réflection bien éblouissante…

Ca montre néanmoins quelques effets intéressants. Il n’y a plus qu’à attendre que Mr. Ati active cette fonctionnalité officiellement.