Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² nVidia, Π° Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ — ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΡΡΡΡ, ΠΎΡΠ΄Π°Π»ΡΡΡ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°ΡΡ, Π²ΡΠ±ΠΈΡΠ°Ρ Π»ΡΡΡΠΈΠΉ ΡΠ°ΠΊΡΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ 2D ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠ΅Π½ΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Save Viewport to File, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
Π Π΅ΡΠ΅ΡΠ°Ρ
ΠΡΡΡΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ½Π° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π·Π½Π°Π½ΠΈΠΉ ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΡ 3D ΠΈ 2D ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. Π Π²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Π½Π΅ Π² Ρ ΠΎΠ΄ΠΈΡ ΠΊΡΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ, ΡΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅. Π Π°Π±ΠΎΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΊΠΎΠ΄ ΡΠ΅ΠΉΠ΄Π΅ΡΠ° (ΡΠΌ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅), ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ².
ΠΠ°Π΄Π°ΡΠ° ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ — ΠΈΠ·ΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ·ΡΠΊ HLSL ΠΈ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ FX Composer ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ nVidia, ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈ ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ°ΠΌΠΈ nVidia. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ Π²Π·ΡΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΈΡΡΠΎΠ»Π΅ΡΠ° Ρ ΡΠ°ΠΉΡΠ° http://3dlenta.com/ ΠΈ ΡΠ΅ΠΊΡΡΡΡΠ° ΠΌΠ΅ΡΠ°Π»Π»Π° ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° nVidia. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ Ρ ΠΏΠΎΠ»ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅.bmp.
HLSL (High Level Shader Language) — Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ·ΡΠΊ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ², ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Microsoft ΠΈ ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΡΠ°ΡΡΡΡ DirectX. ΠΠ½Π°Π»ΠΎΠ³ΠΈ: GLSL (OpenGL), Cg (OpenGL, Direct3D).
HLSL ΠΏΡΠΈΡΠ΅Π» Π½Π° ΡΠΌΠ΅Π½Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ·ΡΠΊ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². ΠΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Direct3D Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 9.0 (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° HLSL ΠΈ asm). ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Direct3D10 Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ. [1]
HLSL ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΡ ΡΡΠΈΠ»ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅ 3-Ρ ΠΈ 2-Ρ ΠΌΠ΅ΡΠ½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠ·ΡΠΊ. Π― Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ nVidia FX Composer, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ nVidia.
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ½ΡΠ΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΠ²Π΅ΡΠ°. Π ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π»Π΅ΠΆΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ — Π²Π΅ΡΡΠΈΠ½Π½ΡΡ ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². ΠΠ½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ. ΠΠΎΡΠ»Π΅ Π·Π°Π΄Π°Π½ΠΈΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ «ΠΏΡΠΎΡ ΠΎΠ΄» ΠΏΠΎ Π½ΠΈΠΌ. «ΠΡΠΎΡ ΠΎΠ΄Ρ» Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅Ρ Π½ΠΈΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ° ΠΊΠ°Π½Π°Π»Π° Π² ΡΠ²Π΅ΡΠ° ΠΈ Π΄Ρ. Π ΠΌΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ ΠΎΠ΄, Ρ.ΠΊ. ΠΌΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π΅Π½ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². Π ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ) ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΎΠ², Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΡΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
ΠΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΡΡΡ ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅Π³Π»Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π²ΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ — ΡΡΠΈΡΠ°ΠΉ ΡΠ°ΠΌ, Π²ΡΠ΅ ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΎΠΌΡ ΡΡΠΈΡΠ°ΠΉ Π² Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠ΅, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎΠΌ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΈ Π±Π΅Π· ΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ, ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. [2]
ΠΠ° Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°Π΄ΡΠΆΠ½ΡΠ΅, Ρ.ΠΊ. ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΌΠΈΡΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌΠΈ, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ — ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ. Π‘ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ Π»ΡΠ΄ΠΈ ΡΡΠ°Π»ΠΈ ΠΏΡΠΈΠ²ΡΠΊΠ°ΡΡ ΠΊ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΈ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ Π²Π·ΡΡΠ²ΠΎΠΌ. Π ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ, ΡΠ°ΠΊ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΡΡΡ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΏΠ»ΡΡΠΎΠΌ, Ρ.ΠΊ. ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠ΅ ΠΊΠ°ΠΏΠΈΡΠ°Π»ΠΎΠ²Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Ρ Π½ΠΈΠΊΡ ΠΈ Π² ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ².
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ.
Π Π²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΡΠ΅ΠΌΠΎΠΉ Ρ ΡΠ»Π°Π±ΠΎ, ΡΠΎ ΠΌΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ΅Π½ ΠΎΡ ΡΠ΅Π°Π»ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ².
Π‘ΠΊΠ°ΡΠ°ΡΡ Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² nVidia ΡΠ΅ΠΊΡΡΡΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π·Π°Π΄ΡΠΌΠΊΠ΅ Π°Π²ΡΠΎΡΠ°.
Π‘ΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ComposerΠ° Π½Π°Π»ΠΎΠΆΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ.
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ°. ΠΡΠ΄Π΅Π»ΠΈΠ² ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΡ ΡΡ ΡΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠΎΠ² (ΠΏΠΎ ΠΎΡΡΠΌ x, y, z), ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ° Π² Π½ΡΠΆΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π΄ΠΎΠ±ΠΈΠ²ΡΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
Π‘ΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ: nVidia FX Composer.
Π―Π·ΡΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ: HLSL.
ΠΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ: Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ° — nVidia Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Directx 9.0 ΠΈ Π²ΡΡΠ΅, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ — 1 Π³ΠΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ — 512 mb.
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 4 ΡΠ΅Ρ Π½ΠΈΠΊ (Simple, Textured, SimpleFalloff, TexturedFalloff), ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ° (std_dp_VS), 5 ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² (metal_shared, metalPS, metalPS_t, metalQPS, metalQPS_t).
ΠΡ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΠ° Π²Ρ ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠ΄Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΡΠ΅ΠΊΡΡΡΡΡ, Π° Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ².
ΠΠΎΠ΄Π΅Π»Ρ Π±ΡΠ»Π° ΡΠΊΠ°ΡΠ°Π½Π° Ρ ΡΠ°ΠΉΡΠ° http://netlib.narod.ru
Π ΠΈΡ. 1
Π’Π΅ΠΊΡΡΡΡΠ° Π±ΡΠ»Π° ΡΠΊΠ°ΡΠ°Π½Π° Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΅ΠΊΡΡΡΡ nVidia.
Π ΠΈΡ. 2
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° nVidia http://developer.download.nvidia.com. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΠ»ΡΠΊΠΎΠΌ Ρ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° ΠΈΠ»ΠΈ ΠΈΠ· ΠΌΠ΅Π½Ρ «ΠΡΡΠΊ». ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π½Π° Π΄Π°Π»Π΅Π΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²ΡΡΠ΅, ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΠΌΠ°Π½ΡΠ°Π» ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
Π ΠΈΡ. 3
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠ΅Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΡΠΊΡΡΡΡ Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π³Π°ΠΉΠ΄ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈ ΡΠΎΡΡΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
ΠΠΎΡΠ»Π΅ Π²ΡΠ±ΠΎΡΠ° Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° (Ρ.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π±ΡΠ» Π²ΠΊΠ»ΡΡΠ΅Π½ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°).
Π ΠΈΡ. 4
Π Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ ΠΎΠΊΠ½Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡΡΠ°ΠΌ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌ, Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ — ΠΏΡΡΡΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ±ΠΎΡΠ° ΡΠ΅ΠΊΡΡΡΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, Π° Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΎΠΊΠ½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈ ΠΌΠΎΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ. Π§ΡΠΎΠ±Ρ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ PowerUser: Edit — Layouts — PowerUser.
Π ΠΈΡ. 5
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΡΠ°Π½Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² nVidia, Π° Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ — ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΡΡΡΡ, ΠΎΡΠ΄Π°Π»ΡΡΡ, ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°ΡΡ, Π²ΡΠ±ΠΈΡΠ°Ρ Π»ΡΡΡΠΈΠΉ ΡΠ°ΠΊΡΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ 2D ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΏΡΠ°Π²ΠΎΠΉ ΠΏΠ΅Π½ΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Save Viewport to File, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. bmp,.jpeg,.png.
Π’Π°ΠΊΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ , ΡΠ°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ (Π½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²), Ρ.ΠΊ. ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈ Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π±ΡΡΡΡΠΎ Π½Π°ΠΉΡΠΈ Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΊΡΡΡΡΡ, Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΡ ΠΌΠ΅Π½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π½Π°Π½ΠΈΡ.
Π’Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΠ²Π΅ΡΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Add Point Light.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ New ΠΈ Open ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Import ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΡΡ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ std_dp_VS ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π΅Π΅ ΡΠΎΡΠΌΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡΡ.
ΠΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ metal_shared Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅Ρ Π²Π΅ΠΊΡΠΎΡΠ° ΠΈ Π·Π°Π΄Π°Π΅Ρ ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΡΡΠ΅.
ΠΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ metalPS ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ ΡΠ²Π΅ΡΠ°.
ΠΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ metalPS_t ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° Π² ΠΌΠΈΡΠΎΠ²ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΠΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ metalQPS ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΠ²Π΅ΡΠ° ΠΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ metalQPS_t ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Π½ΠΈ Π½Π° Π»ΠΈΡΠ΅Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ²:
ΡΠ΅ΠΉΠ΄Π΅Ρ ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΡΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π ΠΈΡ. 6
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» Π±Π°Π·ΠΎΠ²ΡΠ΅ Π·Π½Π°Π½ΠΈΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². Π‘ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π·Π°ΡΠ°Π½Π΅Π΅ Π³ΠΎΡΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΡΠ΅ΠΊΡΡΡΡΡ, ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΡΠ΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ FX Composer ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠ» ΡΠ΅ΠΊΡΡΡΡΡ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ, Π²ΡΡΡΠ°Π²ΠΈΠ» ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ° ΠΈ Π²ΡΠ±ΡΠ°Π» ΡΠ°ΠΊΡΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» Π΄Π²ΡΡ ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅. ΠΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ Ρ ΠΏΠ»Π°Π½ΠΈΡΡΡ Π³Π»ΡΠ±ΠΆΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π²ΡΠ΅ΠΉ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΌΠ΅, ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°Π²ΡΠΊΠΈ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ 3D ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ ΡΠ΅ΠΊΡΡΡΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°Ρ .
1. http://ru.wikipedia.org/wiki/HLSL
2. http://www.gamedev.ru
3. http://netlib.narod.ru
4. http://developer.download.nvidia.com
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
// #define _XSI_/* predefined when running in XSI */
// #define TORQUE/* predefined in TGEA 1.7 and up */
// #define _3DSMAX_/* predefined in 3DS Max */
#ifdef _3DSMAX_
int ParamID = 0×0003;/* Used by Max to select the correct parser */
#endif /* _3DSMAX_ */
#ifdef _XSI_
#define Main Static/* Technique name used for export to XNA */
#endif /* _XSI_ */
#ifndef FXCOMPOSER_VERSION/* for very old versions */
#define FXCOMPOSER_VERSION 180
#endif /* FXCOMPOSER_VERSION */
#ifndef DIRECT3D_VERSION
#define DIRECT3D_VERSION 0×900
#endif /* DIRECT3D_VERSION */
#define FLIP_TEXTURE_Y/* Different in OpenGL & DirectX */
/*** EFFECT-SPECIFIC CODE BEGINS HERE *********************/
/******* Lighting Macros *******/
/** To use «Object-Space» lighting definitions, change these two macros: **/
#define LIGHT_COORDS «World»
// #define OBJECT_SPACE_LIGHTS /* Define if LIGHT_COORDS is «Object» */
float Script: STANDARDSGLOBAL <
string UIWidget = «none» ;
string ScriptClass = «object» ;
string ScriptOrder = «standard» ;
string ScriptOutput = «color» ;
// string Script = «Technique=Technique?Simple:Simple10:Textured:Textured10:SimpleFalloff:SimpleFalloff10:TexturedFalloff:TexturedFalloff10;» ;
> = 0.8;
/**** UNTWEAKABLES: Hidden & Automatically-Tracked Parameters **********/
// transform object vertices to world-space:
float4x4 gWorldXf: World < string UIWidget="None"; >;
// transform object normals, tangents, & binormals to world-space:
float4x4 gWorldITXf: WorldInverseTranspose < string UIWidget="None"; >;
// transform object vertices to view space and project them in perspective:
float4x4 gWvpXf: WorldViewProjection < string UIWidget="None"; >;
// provide tranform from «view» or «eye» coords back to world-space:
float4x4 gViewIXf: ViewInverse < string UIWidget="None"; >;
/************* TWEAKABLES **************/
// «DirPos» Lamp 0 /////////
float4 gLamp0DirPos: POSITION < // or direction, if W==0
string Object = «Light0» ;
string UIName = «Lamp 0 Position/Direction» ;
string Space = (LIGHT_COORDS);
> = {-0.5f, 2.0f, 1.25f, 1.0};
float3 gLamp0Color: SPECULAR <
string UIName = «Lamp 0» ;
string Object = «Light0» ;
string UIWidget = «Color» ;
> = {1.0f, 1.0f, 1.0f};
float gLamp0Intensity <
string UIWidget = «slider» ;
float UIMin = 1.0;
float UIMax = 10 000.0f;
float UIStep = 0.1;
string UIName = «Lamp 0 Quadratic Intensity» ;
> = 1.0f;
// Ambient Light
float3 gAmbiColor: AMBIENT <
string UIName = «Ambient Light» ;
string UIWidget = «Color» ;
> = {0.07f, 0.07f, 0.07f};
// surface color
float3 gSurfaceColor: DIFFUSE <
string UIName = «Surface» ;
string UIWidget = «Color» ;
> = {1,1,1};
float gSpecExpon <
string UIWidget = «slider» ;
float UIMin = 1.0;
float UIMax = 128.0;
float UIStep = 1.0;
string UIName = «Specular Exponent» ;
> = 12.0;
float gKd <
string UIWidget = «slider» ;
float UIMin = 0.0;
float UIMax = 1.0;
float UIStep = 0.01;
string UIName = «Diffuse» ;
> = 0.1;
float gKr <
string UIWidget = «slider» ;
float UIMin = 0.0;
float UIMax = 1.0;
float UIStep = 0.05;
string UIName = «Reflection» ;
> = 0.2;
texture gColorTexture: DIFFUSE <
string ResourceName = «default_color.dds» ;
string UIName = «Diffuse Texture» ;
string ResourceType = «2D» ;
>;
sampler2D gColorSampler = sampler_state {
Texture = ;
#if DIRECT3D_VERSION >= 0xa00
Filter = MIN_MAG_MIP_LINEAR;
#else /* DIRECT3D_VERSION < 0xa00 */
MinFilter = Linear;
MipFilter = Linear;
MagFilter = Linear;
#endif /* DIRECT3D_VERSION */
AddressU = Wrap;
AddressV = Wrap;
};
texture gEnvTexture: ENVIRONMENT <
string ResourceName = «default_reflection.dds» ;
string UIName = «Environment» ;
string ResourceType = «Cube» ;
>;
samplerCUBE gEnvSampler = sampler_state {
Texture = ;
#if DIRECT3D_VERSION >= 0xa00
Filter = MIN_MAG_MIP_LINEAR;
#else /* DIRECT3D_VERSION < 0xa00 */
MinFilter = Linear;
MipFilter = Linear;
MagFilter = Linear;
#endif /* DIRECT3D_VERSION */
AddressU = Clamp;
AddressV = Clamp;
AddressW = Clamp;
};
/************* DATA STRUCTS **************/
/* data from application vertex buffer */
struct appdata {
float3 Position: POSITION;
float4 UV: TEXCOORD0;
float4 Normal: NORMAL;
float4 Tangent: TANGENT0;
float4 Binormal: BINORMAL0;
};
/* data passed from vertex shader to pixel shader */
struct vertexOutput {
float4 HPosition: POSITION;
float2 UV: TEXCOORD0;
// The following values are passed in «World» coordinates since
// it tends to be the most flexible and easy for handling
// reflections, sky lighting, and other «global» effects.
float3 LightVec: TEXCOORD1;
float3 WorldNormal: TEXCOORD2;
float3 WorldTangent: TEXCOORD3;
float3 WorldBinormal: TEXCOORD4;
float3 WorldView: TEXCOORD5;
};
/*********** vertex shader for pixel-shaded versions ******/
/*********** Generic Vertex Shader ******/
vertexOutput std_dp_VS (appdata IN,
uniform float4x4 WorldITXf, // our four standard «untweakable» xforms
uniform float4x4 WorldXf,
uniform float4x4 ViewIXf,
uniform float4x4 WvpXf,
uniform float4 LampDirPos
) {
vertexOutput OUT = (vertexOutput)0;
OUT.WorldNormal = mul (IN.Normal, WorldITXf).xyz;
OUT.WorldTangent = mul (IN.Tangent, WorldITXf).xyz;
OUT.WorldBinormal = mul (IN.Binormal, WorldITXf).xyz;
float4 Po = float4(IN.Position.xyz, 1);
float4 Pw = mul (Po, WorldXf);// convert to «world» space
#ifdef OBJECT_SPACE_LIGHTS
float4 Lw = mul (LampDirPos, WorldXf);// convert to «world» space
#else /* !OBJECT_SPACE_LIGHTS — standard world-space lights */
float4 Lw = LampDirPos;
#endif /* !OBJECT_SPACE_LIGHTS */
if (Lw.w == 0) {
OUT.LightVec = -normalize (Lw.xyz);
} else {
// we are still passing a (non-normalized) vector
OUT.LightVec = Lw. xyz — Pw. xyz;
}
#ifdef FLIP_TEXTURE_Y
OUT.UV = float2(IN.UV.x,(1.0-IN.UV.y));
#else /* !FLIP_TEXTURE_Y */
OUT.UV = IN.UV.xy;
#endif /* !FLIP_TEXTURE_Y */
OUT.WorldView = normalize (ViewIXf[3]. xyz — Pw. xyz);
OUT.HPosition = mul (Po, WvpXf);
return OUT;
}
/********* pixel shaders ********/
void metal_shared (vertexOutput IN,
uniform float Kd,
uniform float SpecExpon,
uniform float Kr,
uniform samplerCUBE EnvSampler,
float3 LightColor,
uniform float3 AmbiColor,
out float3 DiffuseContrib,
out float3 SpecularContrib)
{
float3 Ln = normalize (IN.LightVec.xyz);
float3 Nn = normalize (IN.WorldNormal);
float3 Vn = normalize (IN.WorldView);
float3 Hn = normalize (Vn + Ln);
float4 litV = lit (dot (Ln, Nn), dot (Hn, Nn), SpecExpon);
DiffuseContrib = litV. y * Kd * LightColor + AmbiColor;
SpecularContrib = litV. z * LightColor;
float3 reflVect = -reflect (Vn, Nn);
float3 ReflectionContrib = Kr * texCUBE (EnvSampler, reflVect).rgb;
SpecularContrib += ReflectionContrib;
}
float4 metalPS (vertexOutput IN,
uniform float3 SurfaceColor,
uniform float Kd,
uniform float SpecExpon,
uniform float Kr,
uniform samplerCUBE EnvSampler,
uniform float3 LampColor,
uniform float3 AmbiColor
): COLOR {
float3 diffContrib;
float3 specContrib;
metal_shared (IN, Kd, SpecExpon, Kr,
EnvSampler, LampColor, AmbiColor,
diffContrib, specContrib);
float3 result = SurfaceColor * (specContrib + diffContrib);
return float4(result, 1);
}
float4 metalPS_t (vertexOutput IN,
uniform float3 SurfaceColor,
uniform sampler2D ColorSampler,
uniform float Kd,
uniform float SpecExpon,
uniform float Kr,
uniform samplerCUBE EnvSampler,
uniform float3 LampColor,
uniform float3 AmbiColor
): COLOR {
float3 diffContrib;
float3 specContrib;
metal_shared (IN, Kd, SpecExpon, Kr,
EnvSampler, LampColor, AmbiColor,
diffContrib, specContrib);
float3 map = tex2D (ColorSampler, IN. UV).xyz;
float3 result = SurfaceColor * map * (specContrib + diffContrib);
return float4(result, 1);
}
float4 metalQPS (vertexOutput IN,
uniform float3 SurfaceColor,
uniform float Kd,
uniform float SpecExpon,
uniform float Kr,
uniform samplerCUBE EnvSampler,
uniform float3 LampColor,
uniform float LampIntensity,
uniform float3 AmbiColor
): COLOR {
float3 diffContrib;
float3 specContrib;
float3 Cl = (LampIntensity/dot (IN.LightVec.xyz, IN.LightVec.xyz)) * LampColor;
metal_shared (IN, Kd, SpecExpon, Kr,
EnvSampler, Cl, AmbiColor,
diffContrib, specContrib);
float3 result = SurfaceColor * (specContrib + diffContrib);
return float4(result, 1);}
float4 metalQPS_t (vertexOutput IN,
uniform float3 SurfaceColor,
uniform sampler2D ColorSampler,
uniform float Kd,
uniform float SpecExpon,
uniform float Kr,
uniform samplerCUBE EnvSampler,
uniform float3 LampColor,
uniform float LampIntensity,
uniform float3 AmbiColor
): COLOR {
float3 diffContrib;
float3 specContrib;
float3 Cl = (LampIntensity/dot (IN.LightVec.xyz, IN.LightVec.xyz)) * LampColor;
metal_shared (IN, Kd, SpecExpon, Kr,
EnvSampler, Cl, AmbiColor,
diffContrib, specContrib);
float3 map = tex2D (ColorSampler, IN. UV).xyz;
float3 result = SurfaceColor * map * (diffContrib+specContrib);
return float4(result, 1);}
/// TECHNIQUES ////////////////////////
#if DIRECT3D_VERSION >= 0xa00
// Standard DirectX10 Material State Blocks
RasterizerState DisableCulling {CullMode = NONE;};
DepthStencilState DepthEnabling {DepthEnable = TRUE;};
DepthStencilState DepthDisabling {
DepthEnable = FALSE;
DepthWriteMask = ZERO;};
BlendState DisableBlend {BlendEnable[0] = FALSE;};
technique10 Simple10 <
string Script = «Pass=p0;» ;
> {
pass p0 <
string Script = «Draw=geometry;» ;
> {
SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos)));
SetGeometryShader (NULL);
SetPixelShader (CompileShader (ps4_0, metalPS (gSurfaceColor,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gAmbiColor)));
SetRasterizerState (DisableCulling);
SetDepthStencilState (DepthEnabling, 0);
SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
technique Simple <
string Script = «Pass=p0;» ;
> {pass p0 <
string Script = «Draw=geometry;» ;
> {
VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos);
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
AlphaBlendEnable = false;
CullMode = None;
PixelShader = compile ps3_0 metalPS (gSurfaceColor,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gAmbiColor);
}
}
#if DIRECT3D_VERSION >= 0xa00
technique10 Textured10 <
string Script = «Pass=p0;» ;
> { pass p0 <
string Script = «Draw=geometry;» ;
> {
SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos)));
SetGeometryShader (NULL);
SetPixelShader (CompileShader (ps4_0, metalPS_t (gSurfaceColor, gColorSampler,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gAmbiColor)));
SetRasterizerState (DisableCulling);
SetDepthStencilState (DepthEnabling, 0);
SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
technique Textured <
string Script = «Pass=p0;» ;
> {
pass p0 <
string Script = «Draw=geometry;» ;
> {
VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos);
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
AlphaBlendEnable = false;
CullMode = None;
PixelShader = compile ps3_0 metalPS_t (gSurfaceColor, gColorSampler,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gAmbiColor);}}
// pixel shaded, quadratic falloff
#if DIRECT3D_VERSION >= 0xa00
technique10 SimpleFalloff10 <
string Script = «Pass=p0;» ;
> { pass p0 <
string Script = «Draw=geometry;» ;
> {
SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos)));
SetGeometryShader (NULL);
SetPixelShader (CompileShader (ps4_0, metalQPS (gSurfaceColor,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gLamp0Intensity,
gAmbiColor)));
SetRasterizerState (DisableCulling);
SetDepthStencilState (DepthEnabling, 0);
SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);
}
}
#endif /* DIRECT3D_VERSION >= 0xa00 */
technique SimpleFalloff <
string Script = «Pass=p0;» ;
> {
pass p0 <
string Script = «Draw=geometry;» ;
> {
VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos);
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
AlphaBlendEnable = false;
CullMode = None;
PixelShader = compile ps3_0 metalQPS (gSurfaceColor,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gLamp0Intensity,
gAmbiColor);}}
#if DIRECT3D_VERSION >= 0xa00
technique10 TexturedFalloff10 <
string Script = «Pass=p0;» ;
> {
pass p0 <
string Script = «Draw=geometry;» ;
> {
SetVertexShader (CompileShader (vs4_0, std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos)));
SetGeometryShader (NULL);
SetPixelShader (CompileShader (ps4_0, metalQPS_t (gSurfaceColor, gColorSampler,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gLamp0Intensity,
gAmbiColor)));
SetRasterizerState (DisableCulling);
SetDepthStencilState (DepthEnabling, 0);
SetBlendState (DisableBlend, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF);}}
#endif /* DIRECT3D_VERSION >= 0xa00 */
technique TexturedFalloff <
string Script = «Pass=p0;» ;
> {pass p0 <
string Script = «Draw=geometry;» ;
> {
VertexShader = compile vs3_0 std_dp_VS (gWorldITXf, gWorldXf,
gViewIXf, gWvpXf,
gLamp0DirPos);
ZEnable = true;
ZWriteEnable = true;
ZFunc = LessEqual;
AlphaBlendEnable = false;
CullMode = None;
PixelShader = compile ps3_0 metalQPS_t (gSurfaceColor, gColorSampler,
gKd, gSpecExpon, gKr,
gEnvSampler,
gLamp0Color, gLamp0Intensity,
gAmbiColor);
}
}