Severest & Immersion
Π£ Π½Π°Ρ ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ, Ρ
ΠΎΡΠ΅Ρ 3D-ΡΠΈΠΌΡΠ»ΡΡΠΈΡ ΠΎΠΊΠ΅Π°Π½Π° Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΌ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΡΡΠΎΡΠ½ΠΎ. ΠΡΠΆΠ½Π° Π°ΠΊΠΊΡΡΠ°ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°, Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Ρ
Π°ΠΎΡΠ°, ΠΈ ΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ. ΠΠΎΠΊΠ°ΠΆΠΈ ΠΌΠ½Π΅ ΠΊΠΎΠ΄, Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΌΠ΅ΡΡΠΎ, ΠΈ Π΄Π°Π²Π°ΠΉ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΠΉ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ.
**ΠΠΎΠ½Π²Π΅ΠΉΠ΅Ρ** β ΡΠ±ΠΎΡΠΊΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ.
**ΠΠ°Π΄Π°ΡΠΈ** β 1) Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ, 2) ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠΌΠΈ, Π·Π°Π²ΠΈΡΡΡΠΈΠΌΠΈ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, 3) Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π²ΠΎΠ΄Ρ, 4) ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (ΡΠΎΠ»Π½ΡΠ΅, Π±Π»ΠΈΠΊΠΈ), 5) ΠΏΠΎΡΡΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (bloom, HDR), 6) ΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, 7) ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² Π΄Π²ΠΈΠΆΠΎΠΊ, 8) QA, 9) Π΄Π΅ΠΌΠΎ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
```glsl
// vertex.glsl
#version 330 core
layout(location = 0) in vec3 aPos;
uniform mat4 model, view, projection;
out vec2 uv;
void main()
{
uv = aPos.xz * 0.5 + 0.5; // ΠΏΡΠΎΡΡΠ°Ρ UV-ΡΠ°Π·Π²ΡΡΡΠΊΠ°
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
// fragment.glsl
in vec2 uv;
out vec4 FragColor;
uniform float time;
uniform vec3 lightDir;
uniform vec3 camPos;
vec3 getNormal(float t)
{
float h = sin(uv.x * 10.0 + t) * 0.1;
vec3 n = normalize(vec3(0.0, 1.0, 0.0) + vec3(cos(uv.x * 10.0 + t), 0.0, sin(uv.x * 10.0 + t)) * 0.05);
return n;
}
void main()
{
vec3 normal = getNormal(time);
vec3 light = normalize(lightDir);
float diff = max(dot(normal, light), 0.0);
vec3 color = mix(vec3(0.0, 0.3, 0.5), vec3(0.8, 0.9, 1.0), diff);
FragColor = vec4(color, 1.0);
}
```
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅. ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈ ΡΡΠΎ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΡΠ²ΠΎΠ΅Π³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ°, ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² (Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠΎΠ²), ΠΏΡΠΎΠ²Π΅Π΄ΠΈ Π±ΡΡΡΡΡΠΉ ΡΠ΅ΡΡ FPS ΠΈ Π³ΠΎΡΠΎΠ²Ρ Π΄Π΅ΠΌΠΎ. Π£Π΄Π°ΡΠΈ Π² ΠΊΠΎΠ΄Π΅.
ΠΡΠ»ΠΈΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°, Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ ΡΡΠΎ ΠΊΠ°ΡΠΊΠ°Ρ. ΠΠ°ΠΏΠΈΡ
Π°ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ, Π·Π°ΡΠΈΠΊΡΠΈΡΡΠΉ ΡΠ΅ΠΉΠ΄Π΅ΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡ, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π° Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ β ΠΏΡΠΎΠΉΠ΄Π΅Π½ΠΎ/Π½Π΅ ΠΏΡΠΎΠΉΠ΄Π΅Π½ΠΎ. ΠΠΈΠΊΠ°ΠΊΠΈΡ
ΡΡΡΠΏΡΠΈΠ·ΠΎΠ² Π½Π° Π΄Π΅ΠΌΠΎ. ΠΠ΅ΡΠΆΠΈ Π²ΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ.