Заметка: VertexLighting - как отсутствие обычных теней позволяет впихивать иллюзорные углубления
Предисловие
Моим первым полноценным заходом в около-геймдев был моддинг Gmoda, а именно — создание карт для режима Alien: Isolation. Оригинальная карта от Wheatley (создателя режима) мне не шибко нравилась по двум причинам — слабая детализация и слишком широкие пространства, что я и решил исправить в своем заходе на данное поприще.
Кое как научившись моделить, рисовать текстуры и импортировать это все дело в Gmod, я из говна и палок (а именно из своих моделек и ресурсов карты от Wheatley) собрал свое первое детище, AI_hospital.
Хоть на тот момент мне и нравилась моя подделка, из-за кривого смешения разных ассетов и кривого качества моих собственных моделек я решил сделать еще один заход — AI_generator
Хоть эта карта и не смогла полностью избавиться от ресурсов Wheatley, но зато она привнесла много новых вещей, таких как:
- ИИ выживших, патрулировавших карту и стрелявших в игрока (очень быстро убивались чужим)
- Больше кастомных моделей, на этот раз со сглаживанием (чего не было в первой части)
- Трехмерный скайбокс с летающим на фоне газовым гигантом
Но самое главное — двери, причем не столько саму модельку, сколько рамку:
Суть
В ходе создания рамки, моим главным врагом стали треугольные углубления по бокам, которые сами по себе очень тяжело сделать, так они еще и били по производительности, превращая ровную поверхность рамки в ультраполигональное месиво. Пытаясь как либо пофиксить эту проблему, я нашел совершенно неожиданное техническое решение, которое оказалось возможным исключительно благодаря дерьмовой модели шейдинга движка Source — VertexLighting.
Суть трюка состоит вот в чем: если мы возьмем ровную поверхность и «положим» на неё геометрию в виде «тарелки», то благодаря отсутствию теней и отрисовки задних граней, с определенного ракурса будет казаться, что в поверхности на самом деле есть углубления:
Должен отметить, что трюк хорошо работает только в том случае, если "тарелка" достаточно плоская и очень близко лежит к несущей плоскости — в противном случае, глаз быстро раскусит трюк и начнет создавать проблемы для восприятия. К слову, данный трюк скорее всего можно провернуть и в более технологических движках, навроде того же Unreal — для этого нужно отделить тарелки в отдельную модель, которой затем нужно будет отключить тени (не тестировал, но просто предполагаю).