Project Immersive

game engine development journal

  • v0.26 ‐ Crouch mechanic
  • v0.25 ‐ BSP areas and portals
  • v0.24 ‐ Health and fall damage
  • v0.23 ‐ Surface based footsteps
  • v0.22 ‐ Transparent materials
  • v0.21 ‐ Inventory system
  • v0.20 ‐ Interactable doors
  • v0.19 ‐ Dialogue system
  • v0.18 ‐ Occlusion culling
  • v0.17 ‐ Mantle mechanic
  • v0.16 ‐ Frustum culling
  • v0.15 ‐ Sounds
  • v0.14 ‐ Movement physics
  • v0.13 ‐ Collisions
  • v0.12 ‐ Scene loading
  • v0.11 ‐ Normal shading
  • v0.10 ‐ Per-vertex lighting
  • v0.9 ‐ Font rendering
  • v0.8 ‐ Skeletal animations
  • v0.7 ‐ Texture filtering
  • v0.6 ‐ Cubemap reflections, Skybox
  • v0.5 ‐ Texture mapping
  • v0.4 ‐ Tick system / interpolation
  • v0.3 ‐ Vertex colors and depth buffer
  • v0.2 ‐ Models and colored triangles
  • v0.1 ‐ Wireframe cube

What's in Version v0.6?

2024-08-08
  • Added skybox
  • Added cubemap reflections

Download

project-immersive-demo-v6.zip (617.1 KB)

message.txt


Я смог добавить кубмапинг для отражений. От векторной алгебры чуть голова не взорвалась, но я наконец-то закончил с ними.

Принцип работы алгоритма довольно простой: это тот же самый алгоритм, которым рисуется скайбокс, только при семплировании текстуры скайбокса вектор направления взгляда камеры преломляется о нормаль треугольника.
В результате очень дешевые и красивые отражения.

Радует то, что до реализации этого алгоритма мне удалось додуматься самому. Обычно всё гениальное лежит на поверхности и если поразмыслить над тем, как математически рассчитать рендеринг сферической панорамы на 360 градусов, то рано или поздно этот алгоритм придёт на ум. У нас ведь есть всего 3 оси (XYZ), направление которых может быть либо положительным, либо отрицательным. Это получается куб. А из проекции мы можем высчитать направление взгляда и найти точку на этом кубе. И если текстура будет кубической, то мы сможем легко замапить на неё окружение. А когда мы будем рисовать треугольники, то мы можем взять нормаль треугольника и отразить вектор направления взгляда - получится зеркальное отражение.
Вот и вся логическая цепочка, чтобы изобрести такой алгоритм.

Кстати в статье про кубмапинг на вики написано, что технологию environment mapping'а в 1976 году придумали Джим Блинн из NASA, который участвовал в запуске Voyager, и Мартин Эдвард Ньюэлл, который создал 3D модель того самого чайника, который я использовал для тестирования алгоритма. Как всё интересно переплетено оказалось...

А ещё вот что будет, если текстуру скайбокса заменить на случайный участок памяти: