Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

РусскиС Π‘Π»ΠΎΠ³ΠΈ

прСдисловиС

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ Π½Π΅ рассматриваСт Effects11 (FX11), Π½ΠΎ основан Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ HLSL.

Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ компиляции ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Π’ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ DX11 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ смСшанная Ρ„ΠΎΡ€ΠΌΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° 1 (ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° 3. Π₯отя ΠΌΠ΅Ρ‚ΠΎΠ΄ 2 Π±Ρ‹Π» Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½, люди Π² настоящСС врСмя Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ QQ: 727623616 Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ DX11 вмСстС ΠΈ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… вопросах здСсь.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ², связанныС с ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ соглашСниям Microsoft, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅) Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для своСго ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°:

ΠœΠ΅Ρ‚ΠΎΠ΄ 1: ГСнСрация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ врСмя компиляции ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΡ… Π²ΠΎ врСмя выполнСния

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

срСди Triangle.hlsli Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» HLSL ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ участвуСт Π² процСссС компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

ПослС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, появляСтся Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² ΠΎΠΊΠ½Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° (гСнСрация):
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Волько ΠΊΠΎΠ³Π΄Π° появляСтся Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ содСрТимоС, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилирован, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» скомпилирован.Если Π²Ρ‹ скомпилировали ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Ρ€Π°Π½Π΅Π΅, ΠΈ ΠΏΡ€ΠΈ пСрСкомпиляции Π²Ρ‹Π²ΠΎΠ΄ Π½Π΅ отобраТаСтся, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ скомпилированный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ.

БвязанныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² находятся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. d3dcompiler.h И Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ d3dcompiler.lib

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для чтСния Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ скомпилированного ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если эта функция Π½Π΅ сущСствуСт Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ DX SDK Π·Π°Ρ€Π°Π½Π΅Π΅. Однако Π² этом руководствС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Windows SDK. Π­Ρ‚Π° функция находится Π² вСрсии D3DCompiler> = 46, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ DX SDK ΠΈ ΠŸΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ прост Π² использовании (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создания Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Π°):

Π’ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ это ID3DBlob ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€. Π§Π°ΡΡ‚ΡŒ создания ΠΌΠ°ΠΊΠ΅Ρ‚Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅ обсуТдаСтся Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, поТалуйста, Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΡƒΡ€ΠΎΠΊΡƒ 02, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ просмотр.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ скомпилированный Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован Π² ΠΏΠ°ΠΏΠΊΠ΅ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π»ΠΈ Π΅Π³ΠΎ нСпосрСдствСнно Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бпособ 2: компилятор создаСт Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ» Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

для Triangle_VS.hlsl ΠΈ Triangle_PS.hlsl Бвойства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ установлСны Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π—Π΄Π΅ΡΡŒ имя Ρ„Π°ΠΉΠ»Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ имя Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эти Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° Π½Π°Π΄ исходным Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ для создания ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°:

Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ для создания Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Π° становится Ρ‚Π°ΠΊΠΈΠΌ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ компилируСтся) Π΄ΠΎ компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΠ³Π΄Π° эти Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, сначала Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС процСссы Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° внСдряСтся Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ прилоТСния.

Бпособ 3: ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° Π²ΠΎ врСмя выполнСния для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли функция Π½Π΅ сущСствуСт Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ DX SDK Π·Π°Ρ€Π°Π½Π΅Π΅. Однако Π² этом руководствС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Windows SDK. Π­Ρ‚Π° функция находится Π² вСрсии D3DCompiler> = 46, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ DX SDK И ΠΏΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

для bOverwrite Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния TRUE ΠΈΠ»ΠΈ FALSE Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ запускаСм ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π²ΠΎ врСмя выполнСния, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Ρ„Π°ΠΉΠ»Π° скомпилированного ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°, ΠΈ Π·Π°Ρ‚Π΅ΠΌ сохраняСм Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ».

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ использованиС Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ CreateShaderFromFile Ѐункция Π²

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateShaderFromFile

НиТС CreateShaderFromFile РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,Π’Π΅ΠΏΠ΅Ρ€ΡŒ эта функция Π±Ρ‹Π»Π° ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π² d3dUtil.h, Зависит ΠΎΡ‚ dxerr И стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° filesystem Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

ИспользованиС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ QQ: 727623616 Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ DX11 вмСстС ΠΈ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… вопросах здСсь.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ описываСтся FXC.EXE компилятор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² 2 – 5,1. Для Shader Model 6 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DXC.EXE вмСсто, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ИспользованиС dxc.exe ΠΈ dxcompiler.dll.

Microsoft Visual Studio 2012 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈΠ· * Ρ„Π°ΠΉΠ»ΠΎΠ². hlsl, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ C++.

Π² Ρ€Π°ΠΌΠΊΠ°Ρ… процСсса сборки Visual Studio 2012 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ компилятор ΠΊΠΎΠ΄Π° fxc.exe HLSL для компиляции HLSL Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π² Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ массивы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². Как компилятор ΠΊΠΎΠ΄Π° HLSL ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» HLSL Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свойство Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для этого Ρ„Π°ΠΉΠ»Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ страницах свойств HLSL см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ страницы свойств HLSL.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ компиляции ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° * Ρ„Π°ΠΉΠ»Π° HLSL. Если Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ большой объСм Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ прилоТСния Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, вСсь Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² памяти Π΄Π°ΠΆΠ΅ послС создания ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ рСсурсов. Но ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ созданиС ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы компиляции ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ соглашСний для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°.

ИспользованиС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚ΡŒ соглашСниС с ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π²ΠΎ врСмя сборки Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

ΠŸΡ€ΠΈ компиляции HLSL-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (. cso являСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²), Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ массивы ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈΠ· этих массивов Π±Π°ΠΉΡ‚ΠΎΠ². НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½ (ID3D11VertexShader * * ), Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ID3D11Device:: ΠΊΡ€Π΅Π°Ρ‚Π΅Π²Π΅Ρ€Ρ‚Π΅ΠΊΡΡˆΠ°Π΄Π΅Ρ€ с массивом Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит скомпилированный Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ «ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Direct3D » ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… массивов, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ построитСлСй Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ° ΠΏΠΎ Direct3Dсвойство Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Files для Ρ„Π°ΠΉΠ»Π° ΡΠΈΠΌΠΏΠ»Π΅Π²Π΅Ρ€Ρ‚Π΅ΠΊΡΡˆΠ°Π΄Π΅Ρ€. HLSL опрСдСляСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΡΠΈΠΌΠΏΠ»Π΅Π²Π΅Ρ€Ρ‚Π΅ΠΊΡΡˆΠ°Π΄Π΅Ρ€. cso.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π²ΠΎ врСмя сборки Π² Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ D3DCompileFromFile

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ D3DCompileFromFile Π²ΠΎ врСмя выполнСния для компиляции ΠΊΠΎΠ΄Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ инструкции. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°.

Windows ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Магазина ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ использованиС D3DCompileFromFile для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Π½Π΅ для развСртывания.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Vulkan. Руководство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ГрафичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π― ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ Π² IT-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ CG Tribe, ΠΈ я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ руководства ΠΊ Vulkan API (vulkan-tutorial.com).

БСгодня я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π²Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π³Π»Π°Π² Ρ€Π°Π·Π΄Π΅Π»Π°, посвящСнного графичСскому ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ (Graphics pipeline basics), β€” Introduction ΠΈ Shader modules.

9. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

10. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠΏ-ΠΊΠ°Ρ€Ρ‚

FAQ

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ВступлСниС

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Π»Π°Π² ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ графичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. ГрафичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ тСкстуры мСшСй Π² пиксСли Π² render target-Π°Ρ….

НиТС прСдставлСна упрощСнная схСма:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Input assembler собираСт сырыС Π΄Π°Π½Π½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€ΠΎΠ². На этом этапС Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ индСксный Π±ΡƒΡ„Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ избавляСт ΠΎΡ‚ нСобходимости Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ элСмСнтов.

Π’Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ (vertex shader) вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π² основном, для трансформации Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈΠ· локальной систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² ΡΠΊΡ€Π°Π½Π½ΡƒΡŽ. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ.

Π¨Π΅ΠΉΠ΄Π΅Ρ€Ρ‹ тСссСляции (tessellation shaders) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство мСшСй Π·Π° счСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ разбиСния Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ. Π˜Ρ… часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Π»ΠΈΠ·Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ повСрхности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΏΠΈΡ‡Π½Ρ‹Π΅ стСны ΠΈΠ»ΠΈ лСстницы, ΠΌΠ΅Π½Π΅Π΅ плоскими.

ГСомСтричСский ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ (geometry shader) вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π° (Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, линия, Ρ‚ΠΎΡ‡ΠΊΠ°) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… отрисовку ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹. ГСомСтричСский ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ тСссСляции, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ. Однако ΠΎΠ½ Π½Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² соврСмСнных прилоТСниях ΠΈΠ·-Π·Π° нСдостаточно высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ встроСнных графичСских процСссоров Intel.

На этапС растСризации (rasterization) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² раскладываСтся Π½Π° мноТСство Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ². Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ β€” это ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€Π΅. ВсС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ экрана, ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠΌ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, находящиСся Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ·-Π·Π° тСста Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ (depth testing).

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ (fragment shader) вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈ опрСдСляСт, Π² ΠΊΠ°ΠΊΠΈΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€Ρ‹ ΠΈ с ΠΊΠ°ΠΊΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ†Π²Π΅Ρ‚Π° ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹. Для этого ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ тСкстурныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈ для освСщСния.

На этапС смСшивания Ρ†Π²Π΅Ρ‚ΠΎΠ² (color blending) происходит смСшиваниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², относящихся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ пиксСлю Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€Π΅. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ прозрачности.

Π­Ρ‚Π°ΠΏΡ‹, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ (fixed-function). На этих этапах Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π·Π°Ρ€Π°Π½Π΅Π΅.

Π­Ρ‚Π°ΠΏΡ‹, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ этапы (programmable). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ свой собствСнный ΠΊΠΎΠ΄ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ для самых Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΎΡ‚ тСкстурирования ΠΈ освСщСния Π΄ΠΎ трассировки Π»ΡƒΡ‡Π΅ΠΉ. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° мноТСствС ядСр GPU для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹.

НСкоторыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ этапы ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΡΡΠ΅Π»ΡΡ†ΠΈΡŽ ΠΈ гСомСтричСский ΡˆΠ΅ΠΉΠ΄Π΅Ρ€, Ссли рисуСтС ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ создании ΠΊΠ°Ρ€Ρ‚Ρ‹ Ρ‚Π΅Π½Π΅ΠΉ), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с создания Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… этапов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для отобраТСния Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π° экранС: Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ настроим Π½Π΅ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ этапы, ΡƒΠΊΠ°Π·Π°Π² Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ Ρ€Π΅ΠΆΠΈΠΌ смСшивания ΠΈ viewport. Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ создания графичСского ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ настройку Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€ΠΎΠ².

Π¨Π΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компиляторы, написанныС производитСлями GPU ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ синтаксиса, ΠΊΠ°ΠΊ GLSL, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π½Π΄ΠΎΡ€Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ стандарт вСсьма свободно. ΠŸΡ€ΠΈ написании Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² для GPU Ρ‚Π°ΠΊΠΎΠ³ΠΎ производитСля Π±Ρ‹Π» большой риск, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ окаТСтся нСсовмСстим с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ, Π΅Ρ‰Π΅ Ρ…ΡƒΠΆΠ΅, ΠΈΠ·-Π·Π° ошибок компилятора ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° SPIR-V позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Нам Π½Π΅ придСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Khronos выпустил собствСнный компилятор, нСзависимый ΠΎΡ‚ производитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ GLSL Π² SPIR-V. Он провСряСт, соотвСтствуСт Π»ΠΈ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ стандарту, ΠΈ создаСт Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» SPIR-V для использования Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΆΠ΅ этот компилятор ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для создания SPIR-V Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ (Π²ΠΎ врСмя исполнСния), Π½ΠΎ Π² руководствС ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ этого Π΄Π΅Π»Π°Ρ‚ΡŒ. ВмСсто glslangValidator.exe ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ glslc.exe ΠΎΡ‚ Google. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ glslc Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎ ΠΈ компиляторы GCC ΠΈΠ»ΠΈ Clang, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, includes. ОбС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Vulkan SDK, поэтому Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, для отрисовки Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ… ΠΌΡ‹ рассмотрим ΠΊΠΎΠ΄ GLSL для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ SPIR-V ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π’Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€

Π’Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ. Π’ качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΌ пространствС, Ρ†Π²Π΅Ρ‚, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΈ тСкстурныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ β€” ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² пространствС отсСчСния (clip space) ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠΌΡƒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π²Π΅Ρ‚ ΠΈ тСкстурныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹). ПозТС эти значСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌ для создания ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°.

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Π² пространствС отсСчСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСобразуСтся Π² Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ дСлСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° Π΅Π³ΠΎ послСдний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. НормализованныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства (normalized device coordinate) β€” это Π³ΠΎΠΌΠΎΠ³Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, находящиСся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [-1, 1], ΠΈ ΠΏΡ€ΠΎΠ΅Ρ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Если Π΄ΠΎ этого Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с OpenGL, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Y Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π°. А для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Z Π·Π°Π΄Π°Π½ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Ρ‡Ρ‚ΠΎ ΠΈ Π² Direct3D, ΠΎΡ‚ 0 Π΄ΠΎ 1.

Для нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π° просто ΡƒΠΊΠ°ΠΆΠ΅ΠΌ полоТСния Ρ‚Ρ€Π΅Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… устройства для создания Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ нСпосрСдствСнно Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ пространства отсСчСния с Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ Π² качСствС послСднСго ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° w Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ ΠΊΠ»ΠΈΠΏ пространства ΠΊ экранному.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ хранятся Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅, Π½ΠΎ созданиС Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² Vulkan ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” Π·Π°Π΄Π°Ρ‡Π° Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ это Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π° экранС Π½Π΅ появится ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. А ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ: вставим ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ нСпосрСдствСнно Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€. Код Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€

Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ (пиксСлами) Π½Π° экранС. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈ опрСдСляСт Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€Π΅ (ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€Π°Ρ…). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΊΡ€Π°ΡΠΈΡ‚ΡŒ вСсь Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π² красный Ρ†Π²Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ простой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€:

Π¦Π²Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ красный Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ выглядит слишком просто, ΠΌΠΎΠΆΠ΅Ρ‚, сдСлаСм Π΅Π³ΠΎ поинтСрСснСС?
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²
Для этого внСсём ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ измСнСния Π² ΠΎΠ±Π° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°. Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Ρ†Π²Π΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½. Π’Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя массив Ρ†Π²Π΅Ρ‚ΠΎΠ²:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π²ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ вывСсти ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ значСния Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ±ΡƒΡ„Π΅Ρ€. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для Ρ†Π²Π΅Ρ‚Π° Π² Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Ρ‘ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main :

Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΅ΠΌΡƒ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π° shader.vert Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

А содСрТимоС Ρ„Π°ΠΉΠ»Π° shader.frag ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ glslc.exe Π½Π° ΠΏΡƒΡ‚ΡŒ установки Vulkan SDK. Π”Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ glslc Π½Π° ΠΏΡƒΡ‚ΡŒ установки Vulkan SDK. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ скрипт исполняСмым с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ chmod + x compile.sh ΠΈ запуститС Π΅Π³ΠΎ.

Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ говорят компилятору ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ исходный Ρ„Π°ΠΉΠ» GLSL ΠΈ вывСсти Π΅Π³ΠΎ Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ SPIR-V с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° -o (output).

Если Π² вашСм ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ синтаксичСская ошибка, компилятор сообщит Π²Π°ΠΌ Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π² этом ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой ΠΎΡ‚ΠΊΡƒΠ΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· тСкста ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипт. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ компилятор Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π»Π°Π³ΠΎΠ² ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, компилятор ΠΌΠΎΠΆΠ΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вывСсти Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для чтСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π° этом этапС.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² руководствС, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ нСпосрСдствСнно ΠΈΠ· вашСго ΠΊΠΎΠ΄Π°. Для этого Π² Vulkan SDK Π΅ΡΡ‚ΡŒ libshaderc β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для компиляции ΠΊΠΎΠ΄Π° GLSL Π² SPIR-V.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ SPIR-V Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ графичСскому ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго напишСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ².

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС Π±Π°ΠΉΡ‚Ρ‹ Π·Π° ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ²:

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ» ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠΌ Π±ΡƒΡ„Π΅Ρ€:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ с Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠΌ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ создаСт ΠΈΠ· Π½Π΅Π³ΠΎ VkShaderModule.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½Π°ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: логичСскоС устройство, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° кастомный Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ выходная пСрСмСнная. Π‘ΡƒΡ„Π΅Ρ€ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ сразу послС создания ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½ΠΎΠ³ΠΎ модуля. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ созданный ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:

Π¨Π΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ всСго лишь тонкая ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° для ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° SPIR-V Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан графичСский ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ сразу послС создания ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ createGraphicsPipeline сдСлаСм ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ вмСсто Ρ‡Π»Π΅Π½ΠΎΠ² класса:

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠΌ ΠΈΡ… Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² vkDestroyShaderModule. ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π² этой Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ вставлСн ΠΏΠ΅Ρ€Π΅Π΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ строками:

БвязываСм ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ стадиям ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Для этого ΠΏΡ€ΠΈ создании ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуру VkPipelineShaderStageCreateInfo.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм практичСски Ρ‚ΠΎ ΠΆΠ΅ самоС для Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°:

НаконСц создадим массив, содСрТащий ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ структуры. Π­Ρ‚ΠΎ понадобится Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ… ΠΏΡ€ΠΈ создании ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ этапы ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π΅ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ этапам.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Detroit: Become Human с Playstation 4 Π½Π° PC

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ этой сСрии постов ΠΌΡ‹ расскаТСм ΠΎ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ Detroit: Become Human с PlayStation 4 Π½Π° PC.

Detroit: Become Human Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π½Π° PlayStation 4 Π² ΠΌΠ°Π΅ 2018 Π³ΠΎΠ΄Π°. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ вСрсиСй для PC Π² июлС 2018 Π³ΠΎΠ΄Π°, Π° выпустили Π΅Ρ‘ Π² Π΄Π΅ΠΊΠ°Π±Ρ€Π΅ 2019 Π³ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π°Π΄Π²Π΅Π½Ρ‡ΡƒΡ€Π° с трСмя ΠΈΠ³Ρ€Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ пСрсонаТами ΠΈ мноТСством ΡΡŽΠΆΠ΅Ρ‚Π½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ. Она ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ, Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ графичСских Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ самой ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Quantic Dream.

3D-Π΄Π²ΠΈΠΆΠΎΠΊ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ возмоТностями:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Detroit: Become Human

Π’Ρ‹Π±ΠΎΡ€ графичСского API

Π£ нас ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° OpenGL-вСрсия Π΄Π²ΠΈΠΆΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ примСняли Π² Π½Π°ΡˆΠΈΡ… инструмСнтах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Но Π½Π°ΠΌ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π½Π° OpenGL:

ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ DirectX 12 ΠΈ Vulkan, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ ΠΎΡ‡Π΅Π½ΡŒ схоТий Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Vulkan Π² дальнСйшСм ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π±Ρ‹ Π½Π°ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Linux ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ², Π° DirectX 12 обСспСчивал ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Microsoft Xbox. ΠœΡ‹ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±ΠΎΠΈΡ… API, Π½ΠΎ для ΠΏΠΎΡ€Ρ‚Π° Ρ€Π°Π·ΡƒΠΌΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ API.

Vulkan ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Windows 7 ΠΈ Windows 8. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Detroit: Become Human доступной ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ количСству ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², это стало ΠΎΡ‡Π΅Π½ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Однако ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ занял ΠΎΠ΄ΠΈΠ½ Π³ΠΎΠ΄, ΠΈ этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ΅Π½, вСдь Windows 10 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ!

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… графичСских API

OpenGL ΠΈ старыС вСрсии DirectX ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ модСль управлСния GPU. Π­Ρ‚ΠΈ API просты Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для обучСния. Они ΠΏΠΎΡ€ΡƒΡ‡Π°ΡŽΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ большой ΠΎΠ±ΡŠΡ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, скрытый ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π½ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ слоТно Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ 3D-Π΄Π²ΠΈΠΆΠΎΠΊ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, PlayStation 4 API ΠΎΡ‡Π΅Π½ΡŒ лСгковСсный ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ Β«ΠΆΠ΅Π»Π΅Π·ΡƒΒ».

Vulkan находится Π³Π΄Π΅-Ρ‚ΠΎ посСрСдинС. Π’ Π½Ρ‘ΠΌ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ абстракции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… GPU, Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ большС контроля. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ кэша ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ остаётся мСньшС Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π΅Ρ‘ приходится Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌ! Однако ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° PlayStation, ΠΈ поэтому Π½Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ всё ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

БлоТности

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ процСссор PlayStation 4 β€” это AMD Jaguar с 8 ядрами. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ PC; ΠΎΠ΄Π½Π°ΠΊΠΎ PlayStation 4 ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ прСимущСства, Π² частности, ΠΎΡ‡Π΅Π½ΡŒ быстрый доступ ΠΊ Β«ΠΆΠ΅Π»Π΅Π·ΡƒΒ». ΠœΡ‹ считаСм, Ρ‡Ρ‚ΠΎ графичСский API PlayStation 4 Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС, Ρ‡Π΅ΠΌ всС API Π½Π° PC. Он ΠΎΡ‡Π΅Π½ΡŒ прямолинСйный ΠΈ ΠΌΠ°Π»ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ рСсурсов Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ большого количСства Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² отрисовки Π½Π° ΠΊΠ°Π΄Ρ€. ΠœΡ‹ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ высокоС количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² отрисовки ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½Π° слабых PC.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ прСимущСство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ Π½Π° PlayStation 4 ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ практичСски ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ. На PC Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹ Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹: ΠΈΠ·-Π·Π° большого количСства ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ GPU ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² этот процСсс Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅.

Π’ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Detroit: Become Human Π½Π° PlayStation 4 Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² для всСх ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ². Из-Π·Π° этого ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ Π±Π΅Π·ΡƒΠΌΠ½ΠΎΠ΅ количСство Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ², поэтому ΠΌΡ‹ с самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ это станСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Как ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ OpenGL-Π΄Π²ΠΈΠΆΠΊΡƒ, компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° PC. Π’ΠΎ врСмя ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ΠΈΠ³Ρ€Ρ‹ ΠΌΡ‹ сгСнСрировали кэш ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ GPU Π½Π°ΡˆΠΈΡ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станций. ГСнСрация ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ кэша ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² для Detroit: Become Human заняла Ρ†Π΅Π»ΡƒΡŽ Π½ΠΎΡ‡ΡŒ! ВсС сотрудники ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ доступ ΠΊ этому ΠΊΡΡˆΡƒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π½Π° ΡƒΡ‚Ρ€ΠΎ. Но ΠΈΠ³Ρ€Π° всё Ρ€Π°Π²Π½ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΠ»Π°, вСдь Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ассСмблСрный ΠΊΠΎΠ΄ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π° GPU.

Оказалось, Ρ‡Ρ‚ΠΎ Vulkan Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ справляСтся с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ‡Π΅ΠΌ OpenGL.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Vulkan Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ высокоуровнСвый язык ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ HLSL, Π° вмСсто Π½Π΅Π³ΠΎ примСняСт ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ SPIR-V. SPIR-V ускоряСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ компилятор ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. На самом Π΄Π΅Π»Π΅, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ сравним с систСмой кэша ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² OpenGL.

Π’ OpenGL компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π½Π΅ Π·Π½Π°Π΅Ρ‚ контСкста использования ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ²Π° отрисовки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» GPU, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² отрисовки с Π½ΠΎΠ²Ρ‹ΠΌ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² CPU.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ VkPipelines Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π°ΠΌ понадобится. Из-Π·Π° этого Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ тормоТСния, ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ OpenGL. ПослС Ρ‡Π΅Π³ΠΎ VkPipelineCache обновлялся, ΠΈ Ρ‚ΠΎΡ€ΠΌΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π»ΠΎ Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° отрисовки.

ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ смоТСм ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ VkPipelines Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° VkPipelineCache Π±Ρ‹Π» Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ, это Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ.

Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС VkPipeline Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска ΠΈΠ³Ρ€Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ устранило ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‚ΠΎΡ€ΠΌΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½ΠΎΠ²ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ: гСнСрация VkPipelineCache Π·Π°Π½ΠΈΠΌΠ°Π»Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π£ нас появилось нСсколько ΠΈΠ΄Π΅ΠΉ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ процСсса:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ создания VkPipelines ΠΎΡ‡Π΅Π½ΡŒ сильно Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. Π’ частности, ΠΎΠ½ΠΎ сильно зависит ΠΎΡ‚ количСства доступных Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². На AMD Ryzen Threadripper с 64 Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ всСго Π΄Π²Π΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Но Π½Π° слабых PC этот процСсс, ΠΊ соТалСнию, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ большС 20 ΠΌΠΈΠ½ΡƒΡ‚.

ПослСднСС Π±Ρ‹Π»ΠΎ для нас слишком Π΄ΠΎΠ»Π³ΠΎ. К соТалСнию, СдинствСнным способом Π΅Ρ‰Ρ‘ сильнСС ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ это врСмя Π±Ρ‹Π»ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ количСства ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Нам Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ способ создания ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСС ΠΈΡ… количСство Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ‰ΠΈΠΌ. Для Detroit: Become Human это Π±Ρ‹Π»ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹. ΠœΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ³Ρ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ инстансинг ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Π½ΠΎ для Detroit: Become Human ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ слишком ΠΏΠΎΠ·Π΄Π½ΠΎ.

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ дСскрипторов

ΠœΡ‹ создаём массивы рСсурсов для всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… рСсурсов:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ компиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Благодаря этой стратСгии ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ°Π»ΠΎΠ΅ количСство Π½Π°Π±ΠΎΡ€ΠΎΠ² дСскрипторов, ΠΎΠ±Ρ‰ΠΈΡ… для всСх Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² отрисовки ΠΈ содСрТащих всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для отрисовки ΠΊΠ°Π΄Ρ€Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π°Π±ΠΎΡ€ΠΎΠ² дСскрипторов

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΌΠ°Π»ΠΎΠΌ количСствС Π½Π°Π±ΠΎΡ€ΠΎΠ² дСскрипторов ΠΈΡ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом. ОбновлСниС Π½Π°Π±ΠΎΡ€Π° дСскрипторов, Ссли ΠΎΠ½ содСрТит мноТСство рСсурсов, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ. НапримСр, Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Π΄Ρ€Π΅ Detroit: Become Human ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… тысяч тСкстур.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ этих вычислСниях Π΄Π΅Π»ΡŒΡ‚Ρ‹ хранятся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ² β€” ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€ΠΎΠΉΠ½ΡƒΡŽ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π° для вычислСний Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² двиТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² со скиннингом трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°. Набор дСскрипторов Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ нСизмСняСмым Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΅Π³ΠΎ снова ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ GPU. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ примСняСм Π΄Π΅Π»ΡŒΡ‚Ρ‹ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ².

Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅, эта оптимизация снизила врСмя обновлСния Π½Π°Π±ΠΎΡ€ΠΎΠ² дСскрипторов Π½Π° ΠΎΠ΄ΠΈΠ½-Π΄Π²Π° порядка Π²Π΅Π»ΠΈΡ‡ΠΈΠ½.

Π‘Π°Ρ‚Ρ‡ΠΈΠ½Π³ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ²

На этом пСрвая Ρ‡Π°ΡΡ‚ΡŒ сСрии статСй Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π›Ρƒ ΠšΡ€Π°ΠΌΠ΅Ρ€ расскаТСт ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΌ индСксировании рСсурсов Π½Π° PC ΠΈ, Π² частности, Π² ΠΊΠ°Ρ€Ρ‚Π°Ρ… AMD.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *