Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
WoL
Сегодня, 13:13
 Darthman
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
RES - Движок для пик…
27.09.2023
 rimush
177 - One Button Str…
20.09.2023
 VoroneTZ
JS 13k contest
13.09.2023
 Mefistofel
184 - Arcade II
14.08.2023
 tiger1025
184 - ?
14.07.2023
 Kaps
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 1,789
новичок: NickName
Обсуждение «Крошечный движок»
mv2
Avatar пользователя

Опубликовано 01.06.2021 11:47 (3 года назад)    #
За свои ~8 лет проганья я понял одну очень важную вещь. Если ты пишешь какую-то миддлварь(библиотеку и.т.п), она должна уметь минимальный требуемый функционал. Так же вышло и с движками, свои первые обертки над DX9 я выкладывал сюда 5 лет назад, и они были максимально просты(на уровне LoadSprite, DrawSprite, LoadSound, PlaySound), и я на них сделал даже одну-две игры. Время шло, опыт набирался, мой миддлварь стал быть чем-то сложным и неповоротливым - огромная куча абстракций, оно умело все, но в то же время следить за кодовой базой стало сложно, начал путаться в своей же библиотеке. На этом движке я так и не сделал ни одной игры, любой потуг заканчивался наращиванием функционала движка.

Поэтому я решил написать небольшой 3D движок, который мог бы выполнять 3 самых важных вещи - рисовать модельки/спрайты используя несложную систему материалов, играть звук, обрабатывать ввод. Всё, никаких сценграфов, никакого сложного API, весь движок умещается в ~50 экспортированных функций.

Рендер:
DX9 рендеререр с заделом под мультирендер, правда статичный(порт на GLES будет первой задачей после релиза), только FFP, фактически все гапи умещается в 4 функции: wgeSetTransform, wgeSetMaterial, wgeSetProjectionParams, wgeDrawVertices, ну и текстуры конечно.

Все рендерстейты задаются через материалы(чуть позже будет стенсил), под капотом все три захардкоженных слоя(диффуз + отражение + лайтмап) смешиваются быстро и эффективно. Сначала хотел сделать как и раньше в своих движках - многослойную(до 8 слоев) программируемую систему материалов на манер шейдеров в Quake 3, но потом подумал что это не нужно.

Анимация только морфинг, скиннинг ненужон учитывая простоту конкурсных игр. Хотел запилить поддержку BSP из первой халвы, но там свои заморочки есть с индексами и UV, поэтому чуть позже будет поддержка BSP из Q3.

Из оптимизаций будет куллинг по дистанции с затуханием, фрустум, возможно будет квадтри. Алсо попробую сделать куллинг по перекрытию - откопаем так называемый Occlusion Query(кстати зачем его выпилили из новых API?). Батчинга нет даже для 2D.
В идеале хочу чтобы движок запускался и работал на GeForce 2. Пеки с такими хар-ками есть, так что для тестов буду запускать и там.

Текст только ASCII, причем для шрифтов юзаю древнюю прогу xproger'а - xfont.

Звук:
Ну тут все просто, как везде.

Ввод:
Пока поддержка только клавиатур, затем - мышей и геймпадов. Пока никаких аксисов еще нет.

Движок писался для души, чисто сюда на конкурсы или на гамин, или просто что то для души сделать. Для сложного есть юнити.
mv2
Avatar пользователя

Опубликовано 01.06.2021 11:49 (3 года назад)    #
Алсо касательно исходников, сначала хочу SDK зарелизить с заголовочником, если кому понравится то и исходники подъедут. Скрины чуть позже залью, когда будет что показать из демок(скорее всего вместе с конкурсной игрой).

редакция от mv2, 01.06.2021 11:49

StormT_GMS
Avatar пользователя

Опубликовано 01.06.2021 15:27 (3 года назад)    #
mv2 написал:
движок, который мог бы выполнять 3 самых важных вещи - рисовать модельки/спрайты используя несложную систему материалов, играть звук, обрабатывать ввод. Всё, никаких сценграфов, никакого сложного API, весь движок умещается в ~50 экспортированных функций.

А этого достаточно для игры? Мно просто интересно, я не с целью поддеть или вроде того. Вот, по возможной теме конкурса следующей - скроллер осилит? Я, скорее всего, неправильно себе представляю и ты сейчас с недоумением читаешь мои вопросы, но что поделать - я не понимаю)
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 01.06.2021 16:24 (3 года назад)    #
Этого достаточно, другое дело, что много самому придется делать просто.
mv2
Avatar пользователя

Опубликовано 01.06.2021 18:16 (3 года назад)    #
StormT_GMS написал:
mv2 написал:
движок, который мог бы выполнять 3 самых важных вещи - рисовать модельки/спрайты используя несложную систему материалов, играть звук, обрабатывать ввод. Всё, никаких сценграфов, никакого сложного API, весь движок умещается в ~50 экспортированных функций.

А этого достаточно для игры? Мно просто интересно, я не с целью поддеть или вроде того. Вот, по возможной теме конкурса следующей - скроллер осилит? Я, скорее всего, неправильно себе представляю и ты сейчас с недоумением читаешь мои вопросы, но что поделать - я не понимаю)

Ну да, функционал не в количестве функций измеряется)
Игрушку на конкурс и собираюсь на нем делать.
Shirson
Avatar пользователя

Опубликовано 02.06.2021 16:53 (3 года назад)    #
StormT_GMS написал:
Вот, по возможной теме конкурса следующей - скроллер осилит?
Осиливает участник, а не движок. Суть в том, что если участник знает что и как нужно сделать, движок дело сильно второстепенное.
mv2
Avatar пользователя

Опубликовано 02.06.2021 17:14 (3 года назад)    #
Shirson написал:
StormT_GMS написал:
Вот, по возможной теме конкурса следующей - скроллер осилит?
Осиливает участник, а не движок. Суть в том, что если участник знает что и как нужно сделать, движок дело сильно второстепенное.

В случае с своим великом было бы странно не приценивать возможности :)
Ну или не иметь возможности допилки, но тут мы не упираемся не в API, не в архитектуру.
Shirson
Avatar пользователя

Опубликовано 02.06.2021 21:26 (3 года назад)    #
Вопрос "а можно ли сделать X на Y" живучее гриппа и неистребимее тараканов :)
И с 99.9% вероятности задающий не сделает Y, какой бы X ему не дали. Потому что он не очень представляет как делается Y и ожидает, что за него всё сделает X :)
Тот кто знает, и подыскивает себе двиг, он задаёт не философские, а более конкретные вопрос по движку
(пример:
пусть будет скроллер. Брём за идёю, скажем, Blast-Off.
Нужно выводить задник, базы, звёзды/мусор, корапь героя, выстрелы, врагов, взрывы
Что нужно от движка (чтобы не мудохать это самому)
Вывод текстур как спрайты (или любой другой аналог)
Апскейл с билинейной экстраполяцией.
Базовые операции бленда (+, -, мульт)
Вывод около 1000 спрайтов за фрейм (т.е. около 1000 спрайтов за 1000/60 мс) без просадки.
Всё :)
Из того, что я читал в описании, твой двиг такое осилит и не подавится (если вообще заметит напряг из-за каких-то 1000 спрайтов. Просто потому, что он у тебя достаточно низкоуровневый).
Сможет ли произвольный юзер написать на нём скроллер? ;) Да фиг там. И не потому, что двиг плохой. :) Вот о чём речь.
)

редакция от Shirson, 03.06.2021 03:20

Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 03.06.2021 07:12 (3 года назад)    #
Это вообще сложный и дискуссионный вопрос про оптимальное апи
Так то операция ИЛИ-НЕ с доступом по произвольной памяти Тьюринг полная (хотя не представляю как) и можно что хочешь писать
Удобство - другой вопрос.
Но Я согласен, что для конкретных случаев (те же спрайтовые движки) можно обойтись очень компактным апи.
mv2
Avatar пользователя

Опубликовано 03.06.2021 07:49 (3 года назад)    #
Mefistofel написал:
Это вообще сложный и дискуссионный вопрос про оптимальное апи
Так то операция ИЛИ-НЕ с доступом по произвольной памяти Тьюринг полная (хотя не представляю как) и можно что хочешь писать
Удобство - другой вопрос.
Но Я согласен, что для конкретных случаев (те же спрайтовые движки) можно обойтись очень компактным апи.

Про ограничения архитектуры я говорил что проблемы начинаются когда ты хочешь написать условный 2д сайдскроллер с шейдерами, а у тебя есть условный движок который умеет рисовать только 3д модельки да и то только с диффузом условным. т.е здесь ограничения заложены движком, но если же архитектуру достаточно упростить и ввести более низкий уровень(например вывести низкоуровневое апи для управления камерой и треугольнками) - то такие проблемы отсеиваются.

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

редакция от mv2, 03.06.2021 07:51

Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 03.06.2021 07:58 (3 года назад)    #
Тут как с офисом - люди используют только 10% его возможностей.
Но разные люди - разные 10%
Поэтому скорее важен не минимализм в целом (попытаться выразить функции минимальным набором команд), но компромисс минимализма, функциональности и удобства для всех покрываемых областей. Ну и другие есть требования - например производительность
Поэтому да, как в твоем примере - нужно сделать, условно, простой метод вывода спрайтов, даже если он не производительный. А для производительности оставить более сложное апи, позволяющее выводить спрайты батчами, к примеру.
mv2
Avatar пользователя

Опубликовано 03.06.2021 12:42 (3 года назад)    #
Выкинул в помойку всю имеющуюся кодовую базу, будем перепиливать. Такой вот человек настроения :)
Kaps
Avatar пользователя

Опубликовано 08.06.2021 21:29 (3 года назад)    #
Когда я увидел Nanite, какое-либо желание делать свои движки пропало.
Перейти на форум:
Конкурсы
Открытые конкурсы:
Активных нет
Недавние конкурсы:
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 181 - Pixel Craft 128
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

25,355,569 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.