Skip to the content.

21 May 2026

2026-05-21

Я попытался перетащить игру на Unreal Engine 5. Процесс мне не понравился, на плюсах сильно медленнее писать и отлаживать код. А ещё, кстати, скорость работы физики на С++ по сравнению с JVM отличалась всего лишь в два раза.

И я вдруг к мысли, что в моей игре графика - это совсем не главное, и куда важнее удобство и скорость разработки. И производительность физики проблемой не является - её хватает с хорошим запасом.

Но libgdx мне не нравится, и я попробовал сделать прототип на jMonkeyEngine. Результат меня приятно удивил - есть много чего стандартного и нормально работающего из коробки.

Графический движок

Я немного покумекал с нейронкой про возможности движка и пришёл к такой архитектуре:

Использую forward рендер, потому что он простой и хорошо сочетается с честным сглаживанием типа MSAA x4. Не будет ужасных лесенок по краям объектов. Будут тени от солнца (jME поддерживает каскадные карты теней из коробки и они выглядят нормально) Для повторяющихся объектов типа деревьев буду использовать инстансинг. Для борьбы с overdraw использовать early-Z проход, чтобы сначала отренедирть карту глубины и пиксельный шейдер вызывать только для видимых пикселей. Про материалы ещё не решил - либо PBR, либо что-то более простое.

Какие ограничения нашёл:

Лайтпробы генерируются реально медленно, кажется что проще вообще забить на динамическое обновление. Причём всякие каустики считаются на CPU. Можно отказаться от каустик, но всё равно даже просто рендеринг в текстуру - это рендеринг в шесть камер и он медленный.

Стандартного эффекта для SSR как будто нет, а тот что есть - не очень поддерживает MSAA. Он мог бы использоваться для красивых зеркальных отражений, но он не очень красиво выглядит по краям экрана. Я в будущем планирую поддерживать трипл скрин (с тремя камерами), и как будто на граниче между мониторами SSR будет рисовать фигню и бросаться в глаза.

Ради интереса я попробовал отрендерить сто тысяч шаров при помощи мульти инстансинга с тенями. Получается 270 миллионов полигонов и 140 миллионов вершин. Не то чтобы я собирался так делать в игре, просто померял для понимания предела возможностей. Видеокарта geforce 4080 почти справляется на 58 кадров в секунду.

Так что мой предварительный план такой - сделать рендер, чтобы мог рисовать большую карту с большим количеством объектов, и чтобы были тени от всяких домов, деревьев и гор.