Nastavte jas / kontrast / gamma scény DirectX?

hlasů
1

V Direct3D aplikace naplněné objekty Sprite z d3dx, chtěl bych být schopen globálně nastavit jas a kontrast. Kontrast je důležitý, pokud je to vůbec možné.

Viděl jsem tuto otázku zde o OpenGL: Tweak jasu / gama celou scénu v OpenGL

Ale to není mi dát to, co bych potřeboval v DirectX kontextu. Vím, že to je něco, co bych mohl pravděpodobně dělat s pixel shader taky, ale to vypadá jako natáčení mouchu s bazukou a já se bát zpětné kompatibility se staršími GPU, které by musely dělat žádné shaderů v softwaru. Vypadá to, že by to mělo být možné, vzpomínám si ještě mnohem starší hry jako původní Half Life, které mají nastavení, jako je to s dostatečným předstihem před dnů shaderů.

EDIT: Také upozorňujeme, že se nejedná o fullscreen aplikace, takže to bude muset být něco, co by jen mít vliv na jednu Direct3D zařízení a že není globální nastavení pro celkový monitor.

Položena 27/08/2009 v 02:22
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
4

Mnoho her se zvyšuje jas, a to doslova, nanesení na celou obrazovku poly přes obrazovku s aditivním míšením. tj

SRCBLEND = ONE
DESTBLEND = ONE

a pak aplikovat texturu s barvou (1, 1, 1, 1) zvýší jas (ish) každého pixelu o 1.

Chcete-li nastavit kontrast poté, co musíte udělat podobný, ale vynásobit konstantním faktorem. To bude vyžadovat nastavení prolnutí takto

SRCBLEND = DESTCOLOR
DESTBLEND = ZERO

Tímto způsobem, když se směs pixel s hodnotou (2, 2, 2, 2), pak budete měnit kontrast.

Gamma je mnohem komplikovanější šelma a nejsem si vědom způsob, jak můžete předstírat rád výše.

Ani jeden z těchto řešení je zcela přesné, ale oni vám dá výsledek, který vypadá „lehce“ správný. Jeho mnohem složitější dělat tak jako tak správně, ale pomocí těchto metod uvidíte efekty, které bude vypadat neuvěřitelně podobný různých hrách, které jste hráli, a to proto, že to je přesně to, co dělají;)

Odpovězeno 27/08/2009 v 22:05
zdroj uživatelem

hlasů
2

Pro hru jsem udělal v XNA, použil jsem pixel shader. Zde je kód. [disclaimer] Nejsem si úplně jistý, logika je správná a některá nastavení mohou mít podivné účinky (!) [/ 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(); }
}
Odpovězeno 28/08/2009 v 03:15
zdroj uživatelem

hlasů
1

Stačí použít shader. Cokoliv, který nemá alespoň podpořit SM 2.0 je starobylé v tomto bodě.

Odpovězeno 27/08/2009 v 23:13
zdroj uživatelem

hlasů
1

Další možností je upravovat všechny textury. Bylo by být v zásadě stejný přístup jako mapy gama, kromě použít nájezd ručně dat obrazových bodů v každém z vašich obrazových souborů ke generování textur.

Odpovězeno 27/08/2009 v 23:12
zdroj uživatelem

hlasů
1

Jste nezadali, jakou verzi rozhraní DirectX, který používáte, takže budu předpokládat, 9. Asi nejlepší, co můžete udělat, je použít funkci gamma-rampy . Posouvání rampy nahoru a dolů zvyšuje nebo snižuje jas. Zvýšením nebo snížením gradientu mění kontrast.

Odpovězeno 27/08/2009 v 10:03
zdroj uživatelem

hlasů
0

Odpovědi v této sekci mohou být nápomocné, protože jsem nikdy nezkoušel to.

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

Odpovězeno 27/08/2009 v 02:30
zdroj uživatelem

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