IGamedevStudio
> DXUT раскапывал, в движках копался, только это было очень давно.
От тупого чтения исходников толку немного. Надо делать так, берешь какой-то базовый функционал из движка и пробуешь делать примеры-тесты-демки, используя его. Сначала периферийные и вспомогательные части, потом ближе к рендеру и системам сущностей.
В движках начала 2000-х в основном есть враппер над рендер-девайсом, свои контейнеры, отладочная система (ассерты и лог), класс движка, класс вида, класс мира. Есть базовый объект, от которого наследуются другие энтити. Класс мира выступает как контейнер для энтити. Есть ресурс-менеджер. Честно говоря я в ресурс-менеджерах еще не копался толком. Есть скрипт-система. Бывает bsp, бывает портальный отсекатель.
nes
> https://www.youtube.com/c/javidx9
прикольный мужичок
Попробуй скачать минимальный пример с рисованием куба с текстурой и сделай из этого карточную игру. Наешся сполна.
Лучше сложную игровую логику напиши на замечательных плюсах - сломай себе мозг на малом объёме кода. Движок слишком массивная вещь, люди их много лет пилят и всё допилить не могут.
Skvoznjak
> Движок слишком массивная вещь, люди их много лет пилят и всё допилить не могут.
Ну вот по этой причине я и забросил плюсы и DirectX в прошлом.
А теперь захотелось снова войти в это.
Под движком я подразумеваю что то маленькое и гибкое для себя, для всяких экспериментов и может быть каких нибудь небольших тулз.
IGamedevStudio
>Под движком я подразумеваю что то маленькое и гибкое для себя, для всяких экспериментов и может быть каких нибудь небольших тулз.
Если ты прямо сейчас не планируешь качать ассеты и лепить подобия ААА проектов, то тебе хватит движка кастле. Он именно запускается и компилируется хоть на древнем железе, имеет 3Д, эффекты, исходники нескольких тестовых игр, новые фичи добавляются, есть канал автора на тытрубе и там нет плюсов. Исходники есть, экспериментируй сколько влезет. Плюсы сейчас нужны чтобы на сверхмощном железе хавать готовые ассеты и лепить продукцию, которая на ПК маленькой не будет. А если нет магазина с ассетами, то нафига тебе недоУЕ без его фичи:)
Skvoznjak
Лепить подобия если и буду то на UE4-5, там ценятся знания плюсов и проектирования плагинов, и ещё всякого разного.
IGamedevStudio
Как бы есть большие сомнения, что те технологии, что ты наработаешь самостоятельно и на стороне, в итоге окажутся именно теми, что нужны в УЕ. Способов заколотить гвоздь или открутить гайку существует множество: кому-то может понадобиться забивать их бутылкой или сковородкой, а если есть камень, так это вообще повезло с инструментарием - им можно не только забивать, но и винтить (если есть подобие тупого зубила)! Но на стандартизированном производстве будет создано множество препятствий для применения полученных навыков. Если тебе нужны знания для УЕ, то на нём их и нарабатывай.
Skvoznjak
> Если тебе нужны знания для УЕ, то на нём их и нарабатывай.
А как ты себе это представляешь ?
Что бы понять как устроено GAPI нужно изучить работу с ним, в анриле это всё под капотом глубоко скрыто, там так сходу не понять что искать. Например для ковыряния освещения если я хочу понять как устроен рендер в UE мне в любом случае придется написать свой рендер.
А учить программирование только для того что бы программировать абстрактные задачи в вакууме это вообще шиза, я так не умею.
IGamedevStudio
>А как ты себе это представляешь ?
Отслюнявливаешь пачку бабла и приобретаешь железо, на котором изделие на плюсах не просто запустится, но будет тормозить с приемлемой скоростью! Это главное, без этого можно только на кошках тренироваться. А потом тебе понадобятся рабочие и компилируемые образцы нужного кода. Желательно с лицензией, позволяющей их изменение и дальнейшее использование в коммерческих целях. Сосредотачиваешься на фрагменте кода и его изучаешь, изменяешь и стараешься получить нужные тебе результаты. Заодно соломки подстеливаешь, на случай когда отпилишь под собой сук.
>Например для ковыряния освещения если я хочу понять как устроен рендер в UE мне в любом случае придется написать свой рендер.
Необязательно. Всё равно эти знания без УЕ будут стремиться к безполезным, а посему нужно научиться изменять прототип чтобы получить желаемое. То есть ты должен как шаман что-то ковырять в своём рендере и получать желаемое, при этом можешь считать хоть что там духи Солнце по экрану двигают. Это называется специализацией: один специалист умеет пуговицы пришивать, другой карманы, а целиком пиджак сшить никто из них не умеет. Вот так и здесь - пусть хоть ни один из специалистов по УЕ не сможет написать к нему рендер с нуля, но имея прототипы кода они долго смогут радовать игроков новыми фичами рендера, а там разрабы могут им новый прототип подкинуть:)
Skvoznjak
Не хочу превращать эту тему в обсуждение UE.
Но если тебе есть что по ней рассказать :) https://gamedev.ru/flame/forum/?id=271892
nes
> Ну вот можешь, например, этого дядьку посмотреть, он там движки пишет и
> разъясняет базовые штуки,
> если конечно рубишь в наглосаксонский.
> https://www.youtube.com/c/javidx9
ещё этого чувачка можно посмотреть (Casey Muratori; Homemade Hero, Molly Rocket)
https://www.youtube.com/watch?v=F1b0daEyh2M
Пилить надо не движок, а игру на нем. Для движка хватит минимальной абстракции, типа создать девайс, нарисовать треугольники, нарисовать спрайты, нарисовать модельки(потенциально с анимацией), текст, если нужно - шейдеры и система материалов нормальная. Для звука - загружать звуки, можно со стримингом, ну и работать с самой звуковой либой(DirectSound/XAudio или OpenAL), при необходимости - 3D звук. Для ввода либо изначальная поддержка нескольких девайсов для ввода(клавиатура, мышь, геймпад, гироскоп если мобильные девайсы), либо унификация через общую прослойку к интерфейсу по-типу геймпада. Для UI можно взять концепцию immediate интерфейса, если лень пилить retained GUI. Я в свои проектах зачастую иммедиейт и делаю.
Дальше идут приятные штуки, которые упрощают разработку:
Ассет пул, который ведет учёт что нужно загрузить, что уже загружено, в каких папках/архивах искать ассеты. При желании - многопоток или отложенная загрузка.
Система сущностей, или даже полноценный граф. сцены - позволяет загружать/сохранять сцены, вводит концепцию объекта на сцене, следит за апдейтами/отрисовкой и удалением объектов. При желании компонентная система(но я в своих играх классический дедовский метод без компонентов использую)
Консоль, логи - тут очевидно я думаю
Редакторы - тут уже что хочешь, то и выбирай. Можно плагин для блендера набросать для экспорта сцен, можно свой редактор запилить. Можно юнити в конце концов взять и из него экспортировать сцены.
В первом абзаце - минимальный сет, мои игры(или вернее я бы сказал демки) используют именно такой перефреймворк-недодвижок. Для себя я нашел именно такой подход околоидеальным, нежели выдрачивать паттерны и архитектуру, и по концовке не получить ничего:
https://gamedev.ru/flame/forum/?id=269049
http://igdc.ru/forum/viewthread.php?forum_id=18&thread_id=5184&last=1#p52774 - здесь есть исходники даже
https://gamedev.ru/flame/forum/?id=269268
А, еще, это не очень хороший пример, но DGLE вполне себе похожий на мой подход движок(хотя он скорее как раз таки фреймворк). Код там такой себе, но как пример того, на чем реально делали игры - неплохой. Есть DGLE2 - его автор не допилил.
Энтузиаст
> Пилить надо не движок, а игру на нем.
Полностью согласен. Поставь цель написания игры(или не обязательно игры) и делай ее. Чем дольше сохранится мотивация, тем больше будет наработка движка. Движок появится сам (с разной стадией готовности). Логику можно брать откуда угодно, сейчас макулатуры и исходников полно. Как надоест перейдешь к известным движкам. Будет хорошая тренировка и понгимание. Но на мой взгляд самописный движок нужен в том случае, если он будет отражать особенности игры или ее достоинство.