Xna 4.0 – Podstawowe shadery zgodne z WP7 - BasicEffect

BasicEffect nie jest w Xna nowością, za pomocą tego efektu możemy dodać do obiektu przezroczystość oraz podstawowe efekty świetlne i mgłę.

Przykład zastosowania poniżej:

BasicEffect effect = new BasicEffect(GraphicsDevice);
effect.EnableDefaultLighting();

effect.Alpha = 0.75f;
effect.LightingEnabled = true;
effect.AmbientLightColor = new Vector3(0.0f, 0.0f, .2f); //niebieski
effect.EmissiveColor = new Vector3(0.0f, .3f, 0.0f); //zieleń
effect.SpecularColor = new Vector3(1.0f, 0.0f, 0.0f); //czerwień
effect.SpecularPower = 1.2f;

Spowodowało następujący efekt:

BasicEffect_WeakSpecularPower

Podniesienie siły Specular czyli zdolności odbicia światła dało lekką korektę obrazu

BasicEffect_StrongSpecular

Zdefiniowanie Diffuse

effect.DiffuseColor = new Vector3(0.5f, 0.2f, 0.0f);

poprawiło kontraksty

BasicEffect_WeakSpecularWithDarkDiffuse

Jednak zawsze to nasze światełko gdzieś tam z tyło, jakby zachodziło. Zdefiniujmy je zatem do końca:

effect.DirectionalLight0.Enabled = true;
effect.DirectionalLight0.DiffuseColor = Vector3.One;
effect.DirectionalLight0.Direction = Vector3.Normalize(new Vector3(2.0f, -1.0f, 1.0f));
effect.DirectionalLight0.SpecularColor = Vector3.One;
effect.DirectionalLight1.Enabled = true;
effect.DirectionalLight1.DiffuseColor = Vector3.One;
effect.DirectionalLight1.Direction = Vector3.Normalize(new Vector3(-2.0f, 1.0f, 1.0f));
effect.DirectionalLight1.SpecularColor = new Vector3(1.5f, 0.0f, 0.0f);

I oto efekt naszych dwóch światełek w różnych kolorach:

BasicEffect_2DirectionalLights

Trochę lepiej. Polecam zabawę tymi parametrami. Aby nie zgadywać garść informacji teoretycznych na temat modelu oświetlenia i cieniowania znajdziecie tutaj:

https://en.wikipedia.org/wiki/Lighting_model
https://en.wikipedia.org/wiki/Phong_shading