Створюю свій ігровий рушій на C++
Всім привіт! Створюю ігровий рушій на open gl, imgui, bullet engine, open al.
Багато хто почне розказувати, що вже все готове, навіщо створювати велосипед або я в чомусь не правий, щось засталіре і т. д . Прошу не осуджувати, так як я цим горю ,є велике бажання копатись в такому, це особисто для себе і для власного розвитку. Але ті люди, які зрозуміють мене, зможуть дати підказку.
У мене вже створений редактор рівнів, редактор матеріалів, система часток, завантаження об’єктів на сцену та виделення їх, класс актора з базовим функціоналом, пулл управління пам’яттю, базове освітлення, точечне освітлення, відкладене затінювання, динамічні тіні , базова фізика та програвання звуків і багато іншитх дрібниць.
Моживо хтось знає, як створити управління ресурсами, паралельне завантаження текстур, моделей, станів об’єкта, при роботі основного вікна, і взагалі збереження рівня, і його завантаження, завантаження в кеш і вивантаження з кеша куди потрібно.
Буду вдячний, якщо підкажете подібні книги або статті, можливо десь є куски кода для прикладу.
26 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЄ ще Jolt Physics, з ліцензією MIT. github.com/jrouwe/JoltPhysics
Писати свій двіжок якщо є потреба, скажімо унікальні якісь властивості яких не надає існуючи — це нормально (особисто бачів в комерційній розробці що робилась на замовлення одного дуже відомого видавця, де мені тоді джуніору довелось писати сервер для мультіплеєра до рендерера старші не допустили). Щодо завантаження ресурсів і купи усього, краще не велосипедити, навіть Карлмарк усе сам не осилив з ним працювала купа народу, а ще вони ліцензували якісь бібліотеки. Пропоную подивитись на BGFX — трохи напевно прийдеться переробити існуючий рендерер, та це доволі низкорівневий для побудови рендерера і дуже наближений до «модернового» OpenGL 3+. Якщо у вас рендерер залочений лише на OpenGL backend, то доведеться доволі багато переробляти щоб почати підтримувати OpenGL ES, Vulkan, Metal чи WebGL, не кажучи вже про Ditect X. А для движка це є доволі принциповим. А так пропоную подивитись на готові графічні движки — Ogre та Google Filament. Завантаження моделей здебільшого робиться через Asimp Lib. Також можете подивитись на повні движки з відкритим кодом як то : ioQuake3, RBDoom3 BFG чи Godot. Також є академісно відомий движок Cube 2, та добре дороблений і осучаснений форк Red Eclipse разом з однойменною грою.Власний рендерер, як і завантаження ресурсів станом на 2023 не дуже є сенс писати, краще пристосувати для свої потреб існуючі бібліотеки та додати свій функціонал.
В мене прям ностальгія. Колись я теж таким горів.
Зараз я вже нічого не підкажу. Але в свій час я майже завершив свою гру по типу Quake3/Unreal Tournament. Все писав сам з нуля принципово, С++ та DX9. Свого редактора не було, але був свій плагін для 3ds max, який зберігав об’єкти в моєму кастумному форматі. В плані рендеру за основу було взято deferred shading — на той час це було шось нове та модне.
Ось є трохи відосів:
Ще й мережевий мультіплеєр був. Тут теж робив все сам на udp сокетах, принцип був як у Quake3.
Єдине шо я малював і текстурував сам те все. Але малювати я не вмію, а текстури «взяв» з інших ігор. Тому квадратним ботам не дивуйтесь ))
Охрєнєть О_О
Ухтиии, в мене тепер ше більше мотивації появилось, бо розумію, що це більш реально) можливо підкажеш які книги використовував для якихось моментів?
Супер! Офигенно!
Дуже круто, краще за деякі теперішні висєри)
Звуки — в саме серденько.
Щось воно дуже-дуже схоже на Xonix. Хоча усі Qake подібні ігри схожі. Тим не меньше графіка схожа на Cube 2/Red Eclipse і подібне. Так само як і рівень. На щось з GtkRadian-ту не схоже.
opengl мертве, пиши на vulkan DX12
Не зовсім, особливо коли є якісь умови типу підтримка відносно старих консолей типу Sony PS 4 і т.п. Більшість сучасних рендеререрів мають варіативний бекенд, тобто хочеш Vulkan а хочеш Mate чи WebGL.
можливо хто не в курсі але на PS4 натівне API не OpenGL і воно більше схоже на vulkan
Просто допиши другою строкою, «Це мій пет-проект яким я займаюсь для самовдосконалення і заради кайфу.» і можеш більше не перед ким не виправдовуватися. Успіху.
Розумію автора, тому що сам мав подібний проект. В коментах було постійно одне і теж: візьми gl чи якісь інши готові рішення, де кольори і тому подібне. Але хочеться щось своє, унікальне. youtube.com/watch?v=...4F36Y?si=FWo5mBpQHtvf8HAD
Раджу почитати про ECS — він вирішить як мінімум проблему збереження рівнів. Є чудовий канал на ютубі youtube.com/...HPFwT&si=fLkqLurXWIdmPZH4 (там і про ECS) і ще є виступ на GDC розробників Overwatch на цю тему youtube.com/watch?v=...jyNvw?si=PIU9QkjAldNJY4B1
Але я б почав з серії відео від Cherno)
Взагалі свій ігровий рушій для саморозвитку-навчання — шикарша річ, сам таким займаюся, тож успіхів)
Велике дякую, успіхів тобі в твоїй праці!)
Дякую)
Я повертаюся до свого рушія у ті моменти, коли основна робота допікає.. Писати якісний код та вчити новітні практики доволі часто неможливо при роботі в ентерпразі. А от як пет проект, для себе це нереально крутий спосіб актуалізовувати знання та навики.
До речі, ще дуже крутий «ресурс» для натхнення — ось цей ігровий рушій github.com/urho3d/urho3d. Його перестали підтримувати автори, код заграбастав (як не очікувано) якийсь російськомовний, але там є тег на останню оригінальну версію. Там навіть є редактор для рушія написаний на цьому ж рушії )
Ох і дарма ти це спитав))
Захейтять
Сам допомогти не можу, не розбираюсь, але колись дуже давно, 20 років назад, писав свій рушій, це був найчудовіший пет проект з усіх :-) тому продовжуй якщо подобається
Нехай хейтять, я не звертаю на це уваги) подобається дуже, тому і хочу розвиватись в такому
Зайшов глянути чи вже хтось написав про коровани...
Вибачте.
Тут дело даже не в том, что уже есть всё готовое и ты изобретаешь велосипед, с этим всё понятно. Дело в том, что даже при самом хорошем кейсе у тебя нет шансов это потом кому-то впарить ни за деньги, ни бесплатно. Вот я знаю одного чувака, он тоже запилил свой собственный движок на C++ под openGL, вернее пилит его с 2004 года. До сих пор пилит. При этом у него можно считать самый успешный кейс из всех инди-проектов, называется Alersteam, можешь запросто загуглить. Там он пилит одну и ту же игру с того времени с этим движком, распространяет через steam. Если ты в итоге добьёшься тех же результатов, что у него уже есть, можешь считать что ты достиг всего в инди-разработке. Но лучше не занимайся всякой хернёй.
Якось ти дуже прогнозований
я навіть не так як для монетизації, а для свого досвіду і скіллів, хочеться знати як все працює під капотом, якщо ти рахуєш, що це херня це твоя думка я її не осуджую) але я рахую, що це великий досвід, я достатньо багато часу займався анріалом, але вивчити його повністю теж задача не із простих та і не цікаво
Можливо варто глянути на cocos2dx, godot