Régler la luminosité / contraste / gamma de scène DirectX?

voix
1

Dans une application Direct3D rempli d'objets Sprite de D3DX, je voudrais pouvoir globalement ajuster la luminosité et le contraste. Le contraste est important, si possible.

Je l' ai vu ici cette question à propos de OpenGL: Tweak la luminosité / gamma de toute la scène en OpenGL

Mais cela ne me donne pas ce que je aurais besoin dans un contexte de DirectX. Je sais que c'est quelque chose que je pourrais probablement faire avec un pixel shader, aussi, mais cela semble tirer une mouche avec un bazooka et je me inquiète de la compatibilité ascendante avec les anciens processeurs graphiques qui auraient à faire des shaders dans le logiciel. Il semble que cela devrait être possible, je me souviens encore beaucoup plus anciens jeux comme les paramètres ayant Half Life d'origine comme celui-ci bien avant les jours de shaders.

EDIT: En outre, s'il vous plaît noter que ce n'est pas une application plein écran, donc ce devrait être quelque chose qui vient affecter l'un dispositif de Direct3D et qui n'est pas un paramètre global pour le moniteur d'ensemble.

Créé 27/08/2009 à 02:22
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
4

Un grand nombre de jeux n'augmentant la luminosité par, littéralement, l'application d'un plein écran sur l'écran poly avec un additif de mélange. c'est à dire

SRCBLEND = ONE
DESTBLEND = ONE

puis l'application d'une texture avec une couleur de (1, 1, 1, 1) va augmenter la luminosité (ish) de chaque pixel par une.

Pour régler le contraste, alors vous devez faire la même mais MULTIPLIER par un facteur constant. Cela nécessite des paramètres de mélange comme suit

SRCBLEND = DESTCOLOR
DESTBLEND = ZERO

De cette façon, si vous mélangez un pixel avec une valeur de (2, 2, 2, 2), alors vous allez changer le contraste.

Gamma est une bête beaucoup plus compliqué et je ne suis pas au courant d'une façon que vous pouvez faire semblant comme ci-dessus.

Aucune de ces solutions est tout à fait exact, mais ils vous donneront un résultat qui semble « légèrement » correcte. Son fait beaucoup plus compliqué de toute façon appropriée, mais en utilisant ces méthodes, vous verrez les effets qui se penchera INCROYABLEMENT semblable à divers jeux que vous avez joué, et c'est parce que ce EXACTEMENT ce qu'ils font;)

Créé 27/08/2009 à 22:05
source utilisateur

voix
2

Pour un jeu que j'ai fait XNA, j'ai utilisé un pixel shader. Voici le code. [Avertissement] Je ne suis pas tout à fait sûr que la logique est juste et certains paramètres peuvent avoir des effets étranges (!) [/ disclaimer]

float offsetBrightness = 0.0f;    //can be set from my C# code, [-1, 1]
float offsetContrast   = 0.0f;    //can be set from my C# code  [-1, 1]

sampler2D screen : register(s0);  //can be set from my C# code

float4 PSBrightnessContrast(float2 inCoord : TEXCOORD0) : COLOR0
{
    return (tex2D(screen, inCoord.xy) + offsetBrightness) * (1.0 + offsetContrast);
}

technique BrightnessContrast
{
    pass Pass1 { PixelShader = compile ps_2_0 PSBrightnessContrast(); }
}
Créé 28/08/2009 à 03:15
source utilisateur

voix
1

Il suffit d'utiliser un shader. Tout ce qui ne prend pas en charge au moins SM 2.0 est ancienne à ce stade.

Créé 27/08/2009 à 23:13
source utilisateur

voix
1

Une autre approche consiste à modifier toutes vos textures. Il serait essentiellement la même approche que la carte gamma, sauf que vous appliquez la rampe manuellement les données de pixels dans chacun de vos fichiers d'image pour générer les textures.

Créé 27/08/2009 à 23:12
source utilisateur

voix
1

Vous n'avez pas spécifié quelle version de DirectX que vous utilisez, donc je vais supposer 9. Probablement le meilleur que vous pouvez faire est d'utiliser la fonctionnalité gamma-rampe . Pousser la rampe vers le haut et vers le bas augmente ou diminue la luminosité. Augmenter ou diminuer le contraste de gradient modifie.

Créé 27/08/2009 à 10:03
source utilisateur

voix
0

Les réponses dans ce forum peut être utile, comme je l'ai jamais essayé.

http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/95df6912-1e44-471d-877f-5546be0eabf2

Créé 27/08/2009 à 02:30
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more