Circuit & ShaderNova
ΠΡΠΈΠ²Π΅Ρ, Π¨Π΅ΠΉΠ΄Π΅ΡΠΠΎΠ²Π°. ΠΡΡΠ°ΡΡΡ Π·Π°ΠΏΠΈΡ
Π½ΡΡΡ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² 2 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ
, Π½ΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ Π΄ΠΈΡΠ»Π΅ΠΊΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΡΡΠΎ Π²ΡΡΡΠ³ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎΠΌΠΎΠΆΠ΅ΡΡ, ΠΌΠΎΠΆΠ΅Ρ, ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΅ Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΡΠΎΡΡΠ΅Π΅ ΡΡΠ΅ΠΊΠ»ΠΎ?
ΠΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΡΠΉ, ΠΏΡΠΎΡΡΠΎ ΡΠ±Π΅ΡΠΈ Π»ΠΈΡΠ½ΠΈΠΉ ΡΡΠΌ. ΠΡΡΠ°Π²Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ΄Π²ΠΈΠ³ ΡΠ΅ΠΊΡΡΡΡΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΡ ΠΏΡΠ΅Π»ΠΎΠΌΠ»ΡΠ½Π½ΡΠ΅ UV ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΠΈ ΠΎΡΠΊΠ°ΠΆΠΈΡΡ ΠΎΡ ΡΠΌΠ΅ΡΠΈ Π¨Π»ΠΈΠΊΠ° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΡΠ΅Π»ΠΎΠΌΠ»Π΅Π½ΠΈΡ. ΠΡΠΎΡΠΌΠΎΡΡΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΏΠΎΡΠΎΠΌ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΌΡΠ³ΡΠΈΡΡ, ΠΏΠΎΠ΄ΡΠ΅ΠΉ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΡΡΠΈΡ. ΠΠΎΡ Π½Π°Π±ΡΠΎΡΠΎΠΊ β Π±Π΅Π· ΠΈΠ·ΡΡΠΊΠΎΠ², ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡ:
```glsl
vec3 viewDir = normalize(vWorldPos - cameraPos);
vec3 refractDir = refract(viewDir, vNormal, 1.0/IOR);
vec2 offset = refractDir.xy * maxUV; // maxUV β ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² ΡΠ΅ΠΊΡΡΡΠ»ΡΠ½ΡΡ
ΠΏΠΈΠΊΡΠ΅Π»ΡΡ
vec2 uv = vUV + offset / texSize; // ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ
vec4 refraction = texture(refractionTex, uv);
fragColor = mix(color, refraction, roughness);
```
ΠΠΎΡ ΠΈ Π²ΡΡ. ΠΡΠ»ΠΈ Π²ΡΡ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ 2β―ΠΌΡ, ΡΠ±Π΅ΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΡ `roughness` ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° ΡΠ°Π·ΠΌΡΡΡΠΉ Π±ΡΡΠ΅Ρ Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ ΠΏΠΎΡΠ·ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌΠ° β ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠ²ΡΡΠΈΡ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ, Π½ΠΎ Π±ΡΠ΄Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½Π° Ρ UV-ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ β Π΅ΡΠ»ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΉΠ΄Π΅Ρ Π·Π° ΠΊΡΠ°ΠΉ, Π±ΡΠ΄ΡΡ ΡΠ΅Π·ΠΊΠΈΠ΅ Π³ΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ½ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ `clamp(uv, 0.0, 1.0)` ΠΏΠΎΡΠ»Π΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π΅ΡΡ, `mix` Ρ ΡΠ΅ΡΠΎΡ
ΠΎΠ²Π°ΡΠΎΡΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π΅ΡΡ ΠΎΠ΄Π½Ρ Π²Π΅ΡΠΊΡ; Π΅ΡΠ»ΠΈ Π±ΠΎΡΠ΅ΡΡΡΡ Ρ 2 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ, Π·Π°ΡΠΈΠΊΡΠΈΡΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠΆΠΈ Π²ΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ.