Comments 10
Есть некоторые неточности.
Я могу ошибаться в деталях за давностью времени, но в Open GL ES 3.0 (или 3.2) появились очень интересные возможности: стало можно рендерить треугольники не на экран, а в текстуру, причём можно одновременно в несколько, а ещё можно было писать в них не argb цвета, а вполне честные float значения.
Рендерить в текстуру можно было ещё в первых версиях GL с помощью glCopyTexImage2D. Производительность была вполне адекватной. То, о чем вы говорите называется MRT - Multiple Render Target, появился он ещё в GLES 2.0. Учтите, что GLES 2.0 появился как раз к моменту появления десктопного GL 3.0 и унаследовал некоторые его фишки.
Насчет float-форматов текстур, то насколько я помню, все видеокарты уровня FEATURE_LEVEL_9_2 уже такое умели. 9_1 - не умели (или не все). При этом с шедоумаппингом связано одно интересное расширение: ещё в начале нулевых в видеокартах появилось расширение ARB_Shadow, которое позволяло реализовать простые шедоумапы даже на FFP!
Могу ошибаться, но кажется что ES 2.0 нормально поддерживал только argb текстуры с восемью битами на цвет, так что для хранения штук типа карт теней или карты глубины надо было хитро паковать float в rgb компоненты цвета.
Это не столько от гапи зависит, сколько от поддержки видеочипом тех или иных пиксельформатов. Например, PowerVR не держит RGB-текстуры совсем (справедливости ради, современные видеочипы вообще аппаратно не умеют в 24х-битные текстуры).
Отложенный рендеринг позволил сделать декали. Это как тени, но на любую поверхность можно спроецировать картинку.
Deffered-техники не умеют в полупрозрачные объекты, ориентировать на них декали наверное не совсем корректно.
Я знаю что в первой халве и UT декали заранее разбивали на геометрию, сопоставимую со стенкой и генерировали UV, а в Unity компонент Projector использует проективное текстурирование - очень удобная и дешевая техника (но не в юньке - там каждый прожектор +1 дравколл).
На пятидюймовом экране телефона не видно ничего! У моего телефона разрешение было около 2960 x 1440px, разглядеть чёрную точку в пару пикселей можно разве что под лупой. Но при этом экран ещё и маленький- даже мой собственный самолётик на экране получился в дюйм или два размером — и это тоже какая-то неубедительная мелочь.
У вас похоже что-то с проекцией не то. Aspect ratio точно верно считается?
В остальном отличное начинание. Делать что-то с нуля - это всегда офигенно :)
Я тоже запланировал несколько статей о написании 3D-игры с нуля, правда я в основном пишу игры под диковинные платформы. Например, под Windows Mobile (который для коммуникаторов и КПК) :)
Будучи школяром-9 классником смог реализовать демку с сессионными мультиплеерными вертолетиками на юньке. Сеть сначала свою пилил, потом вродь юнет взял.
Это не столько от гапи зависит, сколько от поддержки видеочипом тех или иных пиксельформатов.
Я тогда не использовал расширения (потому что они могут быть, а могут и не быть). В ES 3.0 многие возможности стали обязательными, чему я был рад.
Я знаю что в первой халве и UT декали заранее разбивали на геометрию,
сопоставимую со стенкой и генерировали UV, а в Unity компонент Projector
использует проективное текстурирование - очень удобная и дешевая
техника (но не в юньке - там каждый прожектор +1 дравколл).
У меня похоже на projector в Unity. Я планировал сначала рисовать весь ландшафт, потом на него накладывать декали для дорог и т.п., которые влияли только на буфер цветов, а потом поверх рисовать самолёты (чтобы декали на них не влияли, даже если самолёт стоит на земле).
У вас похоже что-то с проекцией не то. Aspect ratio точно верно считается?
Мне кажется что верно, но скриншоты с PC с совсем другим разрешением. Если вдруг не верно - поправить будет не сложно)
Насчёт mrt в GLES 2.0 вы таки ошибаетесь, это только с GLES 3.0.
Да и на мобильных картах отложенный рендеринг - сильный удар по производительности, из-за тайловой архитектуры.
Авиасимулятор своими руками, очень интересно! Сам писал некий авиасимулятор в школе, вначале была задача просто по приборам посадить самолет, потом добавил линию горизонта, потмо забросил.
В плане того, что на смартфоне нет ощущения присутствия - можно адаптировать игру для VR-очков. Я пробовал некие псевдоочки в простейшем виде - картонная коробка с алиэкспресса куда засовывается смартфон и надевается, эффект присутствия очень хороший (ну смартфон должен быть большим, но они все ссейчас большие) и на выставке - там смартфон (топовый) тоже засовывался во что-то и крутились 360 объемноградусные видео с подводным миром - весьма неплохо было и головой крутить имело смысл - вот это было бы вообще шикарно.
https://www.kp.ru/expert/elektronika/luchshie-ochki-virtualnoj-realnosti-dlya-smartfonov/
Проблема авиасимулятора в том, что голый движок никому не нужен. Его нужно обвешивать самолётами, аэропортами и прочими системами. А одному такое не потянуть, тут нужно сообщество. Но голый движок не привлекает сообщество, получается замкнутый круг. Да и вряд ли можно в одиночку переплюнуть тот же X-Plane или Prepar3D. Я бы лучше присоединился к разработке FlightGear или типа того.
Но если цель была просто научиться делать игры, то почему бы и нет.
Большое спасибо за статью! Я думаю тоже сделать игру на том же стеке - libgdx + Scala. Долго думал (альтернативы - Bevy или Fyrox, заодно подтянуть Rust, либо UE, чтоб минимум кода или совсем без).
Проблема только в том, что в разработке игр мой опыт около абсолютного нуля. С другой стороны, идея в плане графики не амбициозна. Но libgdx + Scala, кажется, верный для меня выбор. Спасибо ещё раз!
Ещё можно взять kotlin.
1. Есть расширения для libgdx, чтобы было удобнее его использовать: https://github.com/libktx/ktx
2. IDEA поддерживает Котлин лучше, чем Скалу (больше рефакторингов, стабильнее работа плагина, лучше автодополнение), в более-менее большом проекте это может влиять на удобство.
3. Котлин должен без всяких костылей хорошо работать под андроидом.
Ещё есть субъективные факторы (например, желание попробовать какой-то язык), поэтому я советую самостоятельно сравнить Котлин и Скалу и выбрать между ними. Они во многом похожи.
Ну сейчас то авиасимуляторов на Андроид уйма и маленькая тележка. Правда 70% неинтересные проекты, где либо проблемы с управлением, либо не проработанная физика полёта, либо другие технические проблемы.
Но лично я ещё с 2014-го люблю играть в качественные мобильные авиасимы такие как Carrier Landings и Airfighters от компании Rortos, а также Carrier Helicopter Flight и Air Cavalry от Flight Sim Studio.
Также нравились Strike Fighters 2 и Gunship 3.
То есть ниша была хоть и не пустой, но относительно свободной.
Как я попробовал написать авиасимулятор