Недавно я выпустил v0.3, как и обещал в субшоте, создаю тредблог тут.
Я его уже выпустил, но только в Early Access, тут разрабатывать и разрабатывать!
Страница в стиме: https://store.steampowered.com/app/1143340/Industriworks/
Что я собираюсь делать с этим проектом? Сейчас тут есть блоки и парочка мобов. Я же собирался сделать фабричность с заклинаниями и големами. Раньше я планировал добавить круглую железную дорогу, по которой будут ездить локомотивы с големами-MPвозами, но потом подумал, что это не нужно и сейчас я планирую добавить бельты.
Есть голем-майнер, голем-крафтер и голем-инсертер. Пока они работают некорректно, но в будущем планируется их исправление и создание большего кол-ва големов.
Голем-майнер будет добывать руду, возможно, подобно как это делают майнеры в дварф фортресс, только он ещё и таскать будет. Выглядит как обычный голем.
Голем-крафтер это куб с восемью ножками, которыми он перебирает над верстаком и создаёт вещи.
А голем-инсертер перекладывает эти вещи. Вдохновлялся я Факторио.
Как создаются големы? У игрока есть заклинания, но не все. Изначально ему доступны заклинания Жизнь и Разложение. С помощью Жизни он может оживлять големов, а с помощью Разложения превращать наковальни в бутилированную наковальню. Бутилированная наковальная выпивается, чтобы была возможность открыть новое заклинание — Реконфигурацию. Реконфигурация нужна для создания новых видов големов, ещё можно картошку в помидорки превращать.
В будущем планируется добавить ещё заклинания, что-то типа Исполнения, Поджога, Телепортации и всяких других. Конечно, для их открытия уже нужно будет пить не наковальни, а другие предметы. Это схоже с тем, как устроено в Факторио, только там предметы тратятся на исследования, а у меня на возможность создания заклинаний.
Заклинания покупаются за MP — Money Point. Это одновременно и мана, и деньги. Их можно получить убийством мобов или торговлей с гоблинами. Планирую добавить такую кривую развития, чтобы со временем игроку пришлось убивать гоблинов, но скрытно, а перед этим обучать в школах и всячески развивать. Штука такая, что чем развитие существо — тем у него больше MP, но если поработить такое существо, то оно пропадёт. Планирую добавить возможность порабощения всяких кабанов и оленей, с них можно будет легально получать мясо для торговли с гоблинами, но не MP.
Пока что големы работают за так, но в будущем они будут тратить MP своего владельца прямо из инвентаря, так что игроку придётся всё время торговать, чтобы его фабрика работала. Потребление MP можно будет сэкономить, если подвести к големами электричество — они станут потреблять в несколько раз меньше. Элекричество нужно будет и для электрических печей.
Планирую сделать 3 типа печей — твердотопливные (они уже есть), электрические и газовые, каждая подходит для своих задач. Например, электрические не могут нагреться выше некоторой температуры, а газовые потребляют газ.
Чтобы сделать электричество, придётся делать провода из меди и резины, а резину из нефти, на которую была наложена Реконфигурация, то есть она полимеризуется и это на самом деле не совсем резина получается, а пластмасса какая-то.
Но это потом и если интерес не пропадёт, сейчас я улучшаю контент и собираюсь добавить режим Building — аналог Creative из Майнкрафта.
Открытие заклинаний — не единственная цель в игре, может быть добавлю боссов всяких, которых надо будет бить ядерными бомбами, чтоб не бесились.
Последние 2 месяца я зачем-то переписывал старый код, в итоге добавил багов, вместо их исправления.
Проект пишу на C, но планирую перейти на C++, чтобы юзать темплейты, а то неудобно бойлерблейтить аппендинг итемов в "списки".
Используемые движки: SDL2, OpenAL, libccd. Использую OpenGL для отрисовки, из-за чего у меня прозрачности просматриваются сквозь чанки, а рисовать собственно их в 60 FPS можно только на топовых игровых компах. Может быть перейду на Ogre3D, но сначала его надо попробовать.
Вообще, у меня были большие планы на игру, что добавить, но они 2 раза уполовинились, а к выходу могут ещё разок.
чел, такое есть. Факторио - бог подобных игор, но оно 2д. Есть также миллион 3 д игор(и без квадратов)
Хуй знает чего ты хочешь добиться этим проектом, но если хочешь финансового успеха то выбрал ты хуевый вариант, бро
ща бы клеить клон майнкрафта, игры 2009 года в 2к20
>0 обзоров в Стиме
Лел
Возможно и так, но бельт уже запущен и мне легче развивать Индустриворкс, чем делать какую-то совершенно другую игру.
>финансового успеха
Очень субъективная величина, тут всё зависит от маркетинга, а вообще, и сейчас появляются в стиме майнкрафтоклоны с 40000+ положительных отзывов.
Щас бы опираться на манятренды
1200x800, 0:18
Скоро улучшу accessibility и добавлю ачивок. Кроме того, у меня были проблемы с потоками для виндовс-билда, но недавно я узнал, как установить gdb64 на виндовс, так что и тут может не возникнуть проблем.
Кроме того, это моя первая игра в стиме я совершенно не знал, сколько она может принести. Мои ожидания были завышены в 50 раз и как бы я узнал об этом, не выпустив её? А вдруг они были бы завышены в 400 раз? И тогда бы я зря её 8 месяцев делал?
Пэчально на такое смотреть
Вот к примеру я - 19 лет, денях нет. Прожег 11 лет в шкалке, после год охуевал от жизни нахуй я родился почему вокруг дэбылы. не душили бы дома то ваще бы с 8 класса ушел и чето пилить пытался, а с нашей системой образования это куда продуктивнее . Потом год охуевал пытаясь сделать проект. Я столько раз матом крыл етот мир(зато хотя бы развился). Сейчас же я понимаю что проект сложный для меня(я делаю необычную ртс а для такого больше 5и извилин должно быть, увы), и проживая ето печально когда люди собираются делать хуету аля клон миникруфта в 2020 или еще хуже.
Ну все равно и нельзя отрицать фактор личностного роста. После как закроет этот проект, ОП смогет додуматься изучать рынок и анализировать затраты( тк с етого проекта копеечка будет, то профитнее ебашить команду) и сделает уже чето интересное, тк опыт будет. Только так можно поднимать геймдев в рашке, русские туда сюда вперед все дела
> тк с етого проекта копеечка будет, то профитнее ебашить команд
Скорее всего, он даже 1/10 зарплаты дворника разбитую на весь срок разработки не отобьёт
>Ну все равно и нельзя отрицать фактор личностного роста.
Скорее аутистичный рост. ОП занимается проектом, который может быть интересен только ему, при этом костылит без движка. Это годное хобби, я не спорю, на уровне моддинга движка 3 квейка. Но оно не принесёт ему ни полезных связей, ни денег, ни откроет двери в мир реального геймдева.
0. Обратное введение ачивментов.
1. HP, combat.
2. Выгрузка чанков.
3. Поворот alListener3f.
4. Режим Building.
5. Логтитуда блоков.
6. Кирпичи(каменные).
7. Двери.
8. hare.
9. Облака.
10. Дальний chunkgen.
11. Крафтовых вещей вид.
12. Исправить физику.
13. Впитывание воды землёй.
14. Unfocus окна вернуть.
15. Рецепты големов.
16. Сжатие данных.
17. Дроп с мобов.
18. Генерация поселений гоблинов.
19. Факел на стенах.
20. Удаление миров вернуть.
21. Картинка в меню.
И тогда можно будет добавлять бельты и улучшенных големов, новые заклинания и геймплей появится.
Это можно сделать за 6 дней, но я буду месяц делать. Я параллельно делаю ещё одну игру, но она простенькая.
Главное — выпустить Индустриворкс до начала лета, потому что я планирую потом бросить геймдев. Ну может ещё 1-2 игры сделать, тогда в Августе брошу.
> Используемые движки: SDL2, OpenAL, libccd. Использую OpenGL для отрисовки
рендер только под десктопы пишешь или с мобилками?
Только под десктопы, и то, получается не качественно. Надо бы попробовать Ogre3D с генерируемыми мешами (у меня такими будут чанки и части мобов) и он, вроде бы, умеет в мобилки.
Вообще я пока не планирую портировать под андроид, потому что там каждый может посмотреть адрес компании/индивидуала внизу страницы с игрой, так что мне желательно сначала купить новый адрес.
>>645484
Я нашёл только такое https://store.steampowered.com/app/1072420/DRAGON_QUEST_BUILDERS_2/, но, кажется, видел ещё с 40000+ положительных отзывов, там в трейлере я приметил штук 8 столбов с каменными человеческими фигурами.
Хоть я и привёл это, но он сделан с уже готовой франшизы и, видимо, настоящей маркетинговой компанией, так что можно поделить в 100 раз для моего случая. Но я уверен, что и Индустриворкс имеет потенциал собрать 1000+ положительных отзывов, главное это ввести геймплей и делать маркетинг.
>>645422
Завитушка в том, что мне на самом деле не нравится Индустриворкс и геймдев. Но это гораздо лучше, чем работать грузчиком, да и есть некоторый интерес, где-то на уровне потребления медиапродуктов, но производить сложнее, чем потреблять.
>>645479
>без движка
Можешь назвать какой-нибудь движок, который при этом не конструктор игр, то есть подключается программно в код?
Я пробовал годот, но это прежде всего конструктор или редактор .tscn годот-сцен и нод, который уже имеет в себе движки. А самое главное, что он слишком ООП для меня, я просто не понимаю как устроены все эти объекты. Мне привычнее работать с функциями и структурами. Другие конструкторы игр я не собираюсь пробовать просто, потому что они слишком проприетарные.
Что действительно плохо в моём программировании, так это то, что я использую Си, а в нём нет темплейтов, из-за чего нельзя делать полиморфизм. Я бы уже давно мог программировать на C++, если бы не детская травма. Из-за чего только вот-вот начну переходить на него.
если плюсы и свободная лицензия, то можешь еще urho3d посмотреть, как раз майнкрафтоподобное что-то на нем будет удобно
>что и Индустриворкс имеет потенциал собрать 1000+ положительных отзывов
У тебя очень крепкий манямир, чувак.
>Но это гораздо лучше, чем работать грузчиком, да и есть некоторый интерес
Ты веб-макакой в дс-1 можешь за 60к джуном устроиться.. тыж программист
Выглядит сомнительно, думаю, мне хватит и Ogre3D+libccd+другиедвижки для моих игр, но если нет, то взял на заметку.
>>645551
>крепкий манямир
У родоначальника фактори-геймов Факторио более 50000 офигительных отзывов, у Satisfactory продаж более полумиллиона, в переводе на стимовский ревью это около 10000 отзывов хотя они купили игроков графикой, чего я не умею. Вообще не очень понимаю, чем satisfactory привлекла столько народу, хотя и в факторио меня хватило на 1.5 раза. Кроме того, я только недавно узнал, что до сих пор есть много тех, кто предпочитают именно реалистичную графику, не воспринимая как игры игры с пиксельной графикой или в низкополигональном стиле. Думал это мем из начала десятых, но потом я увидел видео от ютубера Marmok, где он снял майнкрафт и он сказал, что не хотел и смотреть на эту игру "из-за графики". Меня просто перемкнуло, в майнкрафте же прекрасная графика, частицы всякие, эффекты, мягкое освещение, а отдельно можно и шейдеров наставить. И у этого человека больше подписчиков, чем, например, у Куплинова. Конечно, я совершенно не уверен, что моя игра наберёт столько отзывов, ещё и положительных (но учитывая, что я почти не видел игр с mixed и большим кол-вом ревью, это должно быть около 1333 ревью), но потенциал есть.
Свою аудиторию я могу купить майнкрафто-подобным стилем, но, пожалуй, главное, это геймплей, надо, чтоб игрок хотел играть, а он не хочет, потому что игра сырая. Может быть старт и был плохим, но он мне нужен был, чтобы получить важные эмпирические знания насчёт геймдева и выпуска игр в стиме. У меня есть релиз впереди.
У меня есть ещё очень большая проблема со звуками, мне очень сложно их делать, в т. ч. и музыку. Вон андертейл выстрелил в частности благодаря маркетингу музыке, думаю, это самое важное, что в нём есть. И это когда графика там так себе.
> Выглядит сомнительно
да сомнительного ничего нет, вполне себе хороший двиг, даже комьюнити какое-никакое русскоязычное есть
Зачем его переубеждать, если он делает нормальную игру.
1200x800, 0:13
Скоро выпущу v0.3.1. Я добавил 3 фичи, но они и так были в прошлой v0.2.2, просто при переписывании я их не портировал, а перевести на v0.3 надо было поскорее, чтобы через месяц можно было запустить распродажу, не хотелось повышать цену не выпустив новую версию после такого срока.
Манякрафт тема избитая децл, вон лучше посмотри на CubeWorld, на волне очередного обсера автора можно захайпиться и высрать клон, тебе даже переделывать много не придется.
Новость есть тут: https://steamcommunity.com/app/1143340/allnews/
Добавил 3 фичи: Ачивменты, анфокус окна (если фокус пропадёт с окна, то выпадет esc-menu и курсор не залочится на одном месте), удаление миров. На самом деле это было легко, так как все эти фичи были ещё в версии v0.2.2.
Но главное, я добавил стимовские ачивки.
Теперь вы сможете выбить их все, подойти к любой девушке на улице, показать свой стим-профиль с ачивками Industriworks и она вами может заинтересоваться.
Скоро появится Building режим и будет как минимум building геймплей со строительством домиков.
тема не избитая, просто почти все используют ее в одном ключе, но не самом логичном
тогда бы уж просто предложил взять ядро minetest и запилить свою игру, да продавать
Между прочим, Индустриворкс купили более 50 человек, как раз приблизительно соответсвует кол-во ревью*50.
Извини, но там есть что-то про конфиденциальную информацию и что ты должен иметь нон дисклосур договор или лицензию, в общем я не могу купить валв и выписать себе нотариально заверенную справку, что Индустрий Воркс ибн МакСон действительно продал свою игру Индустриворк на 50+ копий.
Правда есть загвоздочка в том, что они купили столько, когда она стоила $1.99 и больше половины при -75% на зимней распродаже.
>кол-во ключей сгенерированных скинь
Не понял как это поможет пруфанию.
Кстати, заметил как вы лайкаете новости, спасибо, это мне полезно. Маркетинг на этой борде помогает, а когда выпущу версию с Building-режимом, надо будет попробовать и реддит.
Ты успешен.
Ты не понимаешь правила EA игр. Игроков надо завлечь какой-то годной механикой и идеей, полутать с лохов бабло, а потом съебать в закат. Ты бы лучше в сторону мцльтиплеера и выживача думал.
1200x800, 0:53
>>645960
У меня так не получается, я даже смог цену повысить только, когда выпустил v0.3, раньше совесть не позволяла а выпустить недоделанную позволила.
>мультиплеер
Да, это явно хорошая механика, так как люди нуждаются в социальном общении. Но даже если и будет мультиплеер, то какими механиками их удерживать? Ну позовёт Андрей из 7-го класса поиграть своего друга на полчаса в другой майнкрафт и бросят. Надо сначала удерживать людей в сингле.
>выживача
Ну это точно нет, моя игра не про выживание. Сейчас в ней даже ХП нет.
Да и разве выживалки имеют такой большой спрос?
Вода - кал, будет создавать миллионы ненужных сложностей при расчётах, да и выглядит так себе
Как сделать воду красивее? кроме того, что починить сортировку полигонов
Неужели стоит отказаться от такой воды и сделать её майнкрафтоподобной?
Ну не отказывайся, только потом не жалуйся на то, что игра пукает и пердит на 1080ти
Он ужасен, я его не вводил и не буду вводить, потому что один человек мне скидывал код для более реалистичного ветера, только для своих вертексов и мне ещё только предстоит адаптировать, если я буду это делать.
>>646387
оптимизации
1280x720, 0:48
Как вам?
Это в любом случае лучше прошлой
музыка, которую заслужил гд
>ща бы клеить клон майнкрафта, игры 2009 года в 2к20
там вон Hytale клепают. финансируются риотами. уже пару лямов на разработку слили. в 2020 году. да
Гугл-транслейтер, кстати, плохо справляется. То он слово голем не мог перевести, пришлось идти в википедию и копировать оттуда и вставлять в поле переводчика, то артикль a заменял на иероглиф, обозначающий один, когда смысл немного другой, потом вообще началось безобразие с golem-crafter. Он не смог перевести crafter, так что я написал maker, а в другом предмете он предложел craftsmen.
сейчас бы серверные расчеты на видюхах проводить.. ой-вей..
Но что я сделал зря, так это повысил цену до шести долларов. Серьёзно, лушче бы я так не делал. До трёх или, максимум, четырёх долларов было бы нормально. Думаю, выставлять игре большую цену начиная с пяти долларов стоит только в случае успеха, если игроки действительно оценят и, хотя бы 10-20 положительных отзывов будет. А то с такой приток игроков будет мал. Сейчас я изменить не могу, иначе сбросится таймер скидок.
Это была "итальянская" компания с сервером зарегестрированным в российской федерации и неграмотным написание текста в контракте.
Как только я попросил в контракте указать их юридический адрес, они слились.
Впрочем, я был бы даже не сильно против, если бы мне не заплатили, так как учитывая нынешнюю ситуацию, игра просто была бы распиарена, так как они толкают ключи другим сайтам. Но на самом деле я, вероятно, и сам могу предложить этим сайтам ключи, но не умею.
Раз они мошенники, то выложу скриншот "контракта".
Был ещё тред на реддите: https://www.reddit.com/r/gamedev/comments/f4n1pi/is_indiekeybundlexyz_a_good_company_to_work_with/
Там и графон, и физика соответствующая.
И насколько я знаю, CraftStudio и движок для Hytale делал один и тот же человек.
Завтра или послезавтра собираюсь выпустить новую версию с Building-режимом.
Я так и не понял как исправить проблемы с тестом глубины для блоков в слотах.
Думаю, скоро будет пора вводить геймплей вместо удобства. То есть, начну добавлять фактори-элементы: бельты, улучшу големов-инсертеров, электричество, генерацию руд. Потому что, если будет геймплей, то могут появиться фанаты, а они смогут заниматься пиаром вместо меня и бесплатно.
Нет, не использую, так как ряд текстур, таких как мрамора, гранита, кварцита, габбро имеет размеры больше блока и в самом блоке записано смещение для текстуры, чтобы текстура не повторялась каждый блок.
Конечно, можно было бы сделать для блоков типа травы, у которых каждая сторона одинакова, но зачем? Я всё-равно собираюсь добавить верчение вокруг оси блоков травы при генерации, так что и это будет бесполезно.
>>651560
Это не клон майнкрафта.
https://steamcommunity.com/app/1143340/allnews/
Видео тут:
https://www.youtube.com/watch?v=MWLr6q06NAI
Я такой мозгово немощный, что даже не решился рисовать сетки чанков и блоков даже для дебаггинга, всё в воображении рисую.
И сейчас мне будет проблематично сделать это.
А тебе зачем? У меня там просто чанки 16x16x16 блоков и координаты центральных чанков (на которых спавнится игрок) находятся где-то на 2^34, потому что если в ноль ставить, там в минусах будут ненужные смещения и я не захотел разбираться с этим. Каждый раз специальную функцию вызывать, которая при X[0,∞) будет возвращать floor(X), а при X(-∞,0) возвращать floor(X) - 1.
Не понимаю о чём ты говоришь. Видео, например, бесплатно, качай с ютуба.
Раз уж ты заговорил за цены, то Индустриворкс, например, действительно имеет очень завышенную цену. Но я месяц не мог поменять её на меньшую, так как тогда сбросится таймер, чтобы можно было скидку вставить. Теперь я её поставил и завтра будет -85%, а после этого я собираюсь поставить цену $3. Действительно, это моя ошибка и играм следует повышать цену только, в случае их популярности. Дальнейшей (в случае Еарли акцесс) или вишлистовой (в случае, если игра изначально успешна по вишлистам).
>>652061
При цене в $2.99 это как раз будет где-то 80 рублей, так как стим для россиян режет цену в 3 раза, если не указать свою собственную расценку.
Вот Chessmates (моя вторая игра в стиме) просто не способна заработать много отзывов, я не уверен, что она окупится вообще. А если бы я решил делать не сложную игру как Industriworks, а новую игру каждый раз, то это было бы очень сложно и малодоходно. Ведь, чтобы сделать новую игру, нужно делать новый набор ассетов и механик, а для Индустриворкс достаточно добавлять уже новые.
Как ты реализовываешь удаление добавление кубов?
Через лучи?
Можешь подробнее описать алгоритм?
Есть какой-то туториал, где это описано?
Вот у нас хранятся воксели, допустим, в массиве. Мы отрисосываем меш. Как теперь сделать добавление/изменение вокселя в массиве, если мы "ходим" и контактируем только с мешем?
У моба есть углы поворота yaw, pitch и roll, которые используется при его отрисовки или, если через моба смотрим (игрок), поворот мира (glRotatef).
Я беру yaw и pitch (у меня нет поворота камеры по roll) и через тригонометрию нахожу вектор, куда он смотрит. Далее я беру координату, где находятся глаза игрока и итеративно раз 80 (чем больше, тем точнее или больше расстояние) добавляю полученный вектор, умноженный на коэффициент, сдвигая точку. Далее проверяю, в каком блоке находится точка и какие ноды (предмет блока, жидкость блока, inner (руда) блока) прикреплены к этому блоку и в зависимости от них в структуру таргета выставляю указатели на блоки. То есть, если точка попала в жидкость, то устанавливается таргет на флюидблок, но не на сетблок, так как поставить можно и дальше.
Чанки у меня находятся в списке указателей на них и при этом есть оптимизированная структура, там что-то типа деревьев и поиск ускорен. У меня есть функция ChunkByCoord и BlockByCoord. BlockByCoord использует ChunkByBlock, чтобы найти чанк с нужными координатами, а потом вернуть указатель на нужный блок из массива. Чанк содержит массив блоков 16x16x16.
Когда происходит изменение чанка (установка, разрушение блоков), выставляется флаг, что чанк изменён + надо перерисовать. В следующем фрейме при перерисовке освобождается память, в которой хранятся вертексы чанка и генерируются новые. При разрушении блока, находится указатель на него и ноды (структуры предметов), прикреплённые к нему, становятся NULL и при генерации дравдаты алгоритм понимает, что там нет блока (по крайней мере предмета, ведь у меня в одном блоке может быть и предмет (гранит, трава) и жидкость, и inner (руда лимонита)).
Кстати, когда я узнал, что некоторые (или почти все) игры ориентируются delta, что обозначает сколько времени прошло с прошлого фрейма, а не на строгий тикрейт, меня это привело в ужас. Я и не знал, что люди так делают. У меня тикрейт (но называется тактрейт), который равен 60 TPS (takt per second).
>takt
Нет такого слова, есть tact:
>2. (music) The stroke in beating time. https://en.wiktionary.org/wiki/tact
Но в данном случае нужно использовать tick:
>3. (computing) A jiffy (unit of time defined by basic timer frequency). https://en.wiktionary.org/wiki/tick
>(единица времени, определяемая основной частотой таймера)
>когда я узнал, что некоторые (или почти все) игры ориентируются delta, что обозначает сколько времени прошло с прошлого фрейма, а не на строгий тикрейт, меня это привело в ужас
А вот если бы у тебя был старый компьютер или твоя игра потребляла слишком много ресурсов, ты бы в полной мере прочувствовал всю необходимость учитывать delta и даже сам бы выдумал что-то похожее. Проблема всех игровых программ в том, что они опираются на очень непостоянные данные, и поэтому невозможно гарантировать, какую работу должен будет проделать компьютер в следующий тик таймера. Даже если прибить таймер гвоздями к 60 герцам (что в корне неверно, у меня вот 75 Гц монитор и все адекватные игры стараются выдать 75 FPS), и даже если отбросить старые машины (которые не смогут обеспечить 60 FPS), то даже на мощных компьютерах будут случатся моменты, в которых компьютер перегружен работой - из-за ситуаций в твоей игре или от фоновых процессов системы. Поскольку твоя программа не следит за системным временем, она не сможет почувствовать этот момент перегрузки, и нарисует всё те же 60 кадров - вот только не за 1 секунду, а дольше, из-за чего действие на экране ощутимо замедлится. На слабых ПК такой эффект будет постоянно. А если ты захочешь поднять частоту кадров (чтобы поддерживать мониторы на 75, 120, 144 Гц), то тебе придётся перелопачивать весь код, связанный со временем и движениями - потому что сейчас ты опираешься на вымышленное время, а должен опираться на настоящее. Грубо говоря, сейчас ты пытаешься во что бы то ни стало нарисовать 60 кадров, даже если не успеваешь вовремя, а должен иметь возможность пропускать те кадры, на которые у тебя не хватает времени - ты же не фильм рендеришь, а игровой процесс в реальном времени.
>поворот мира (glRotatef)
Работа с матрицами в OpenGL устарела и сохраняется для совместимости. Рекомендуется для всех новых программ реализовывать собственную работу с матрицами (или отдельную библиотеку для работы с матрицами, но вручную написать нетрудно), даже если ты по-прежнему используешь OpenGL 1.1. Лучше один вызов glLoadMatrixf(Matrix), чем десятки glRotatef()/glTranslatef().
>>651962
>И сейчас мне будет проблематично сделать это.
Замени GL_TRIANGLES на GL_LINES или что-то в этом роде. Чтобы отрисовать сетку, достаточно отключить заливку полигонов.
>А тебе зачем?
Я думаю, он хочет посмотреть, рисуются ли у тебя все кубы (включая невидимые), только внешние стороны кубов (контактирующие с воздухом/пустотой), или ты склеиваешь квадраты в прямоугольники. Когда речь идёт о воксельном мире, от выбранного метода отрисовки вокселей/кубов сильно зависит производительность игры. Почему-то мне кажется, что ты рисуешь вообще все кубы по отдельности)
>takt
Нет такого слова, есть tact:
>2. (music) The stroke in beating time. https://en.wiktionary.org/wiki/tact
Но в данном случае нужно использовать tick:
>3. (computing) A jiffy (unit of time defined by basic timer frequency). https://en.wiktionary.org/wiki/tick
>(единица времени, определяемая основной частотой таймера)
>когда я узнал, что некоторые (или почти все) игры ориентируются delta, что обозначает сколько времени прошло с прошлого фрейма, а не на строгий тикрейт, меня это привело в ужас
А вот если бы у тебя был старый компьютер или твоя игра потребляла слишком много ресурсов, ты бы в полной мере прочувствовал всю необходимость учитывать delta и даже сам бы выдумал что-то похожее. Проблема всех игровых программ в том, что они опираются на очень непостоянные данные, и поэтому невозможно гарантировать, какую работу должен будет проделать компьютер в следующий тик таймера. Даже если прибить таймер гвоздями к 60 герцам (что в корне неверно, у меня вот 75 Гц монитор и все адекватные игры стараются выдать 75 FPS), и даже если отбросить старые машины (которые не смогут обеспечить 60 FPS), то даже на мощных компьютерах будут случатся моменты, в которых компьютер перегружен работой - из-за ситуаций в твоей игре или от фоновых процессов системы. Поскольку твоя программа не следит за системным временем, она не сможет почувствовать этот момент перегрузки, и нарисует всё те же 60 кадров - вот только не за 1 секунду, а дольше, из-за чего действие на экране ощутимо замедлится. На слабых ПК такой эффект будет постоянно. А если ты захочешь поднять частоту кадров (чтобы поддерживать мониторы на 75, 120, 144 Гц), то тебе придётся перелопачивать весь код, связанный со временем и движениями - потому что сейчас ты опираешься на вымышленное время, а должен опираться на настоящее. Грубо говоря, сейчас ты пытаешься во что бы то ни стало нарисовать 60 кадров, даже если не успеваешь вовремя, а должен иметь возможность пропускать те кадры, на которые у тебя не хватает времени - ты же не фильм рендеришь, а игровой процесс в реальном времени.
>поворот мира (glRotatef)
Работа с матрицами в OpenGL устарела и сохраняется для совместимости. Рекомендуется для всех новых программ реализовывать собственную работу с матрицами (или отдельную библиотеку для работы с матрицами, но вручную написать нетрудно), даже если ты по-прежнему используешь OpenGL 1.1. Лучше один вызов glLoadMatrixf(Matrix), чем десятки glRotatef()/glTranslatef().
>>651962
>И сейчас мне будет проблематично сделать это.
Замени GL_TRIANGLES на GL_LINES или что-то в этом роде. Чтобы отрисовать сетку, достаточно отключить заливку полигонов.
>А тебе зачем?
Я думаю, он хочет посмотреть, рисуются ли у тебя все кубы (включая невидимые), только внешние стороны кубов (контактирующие с воздухом/пустотой), или ты склеиваешь квадраты в прямоугольники. Когда речь идёт о воксельном мире, от выбранного метода отрисовки вокселей/кубов сильно зависит производительность игры. Почему-то мне кажется, что ты рисуешь вообще все кубы по отдельности)
У меня FPS не жёстко ограничен. Я сделал 60 TPS (раньше было 30), чтобы в случае до 60 FPS анимации и движения мобов шли покадрово, потому что у меня обработка анимаций и движения идёт в каждом фрейме обработки мира. Хотя если подумать, то логичнее было бы вызывать функцию анимации каждый фрейм отрисовки и пересылать что-то типа номера последней секунды + floatский delta, но на самом деле у меня нет обработки анимаций отдельными коллбеками и они обрабатываются в коллбеке behavior моба. Фигово, да. Может когда-нибудь и исправлю.
Что насчёт сброса кадров, то у меня отдельная функция как раз и следит за системным временем и старается N раз в секунду вызвать свой коллбек (для отрисовки или для процессирования мира), а если не получается, то дропаются кадры. Таким образом, только если функция process не успевает за временем, время в игре медленнее времени в реальности, а если функция отрисовки, то просто не отрисуется часть кадров.
Кроме того, в функции отрисовки+обработки нажатий учитывается насколько игрок повернул камеру и это тут же изменяется. То есть при 144 FPS не будет фризов при повороте камеры, а только при движении.
>glLoadMatrixf(Matrix), чем десятки glRotatef()/glTranslatef()
glLoadMatrixf не знал так как не учил OpenGL, теперь учту. Но у меня же в любом случае один glLoadMatrix заменит только 3-4 вызова glTranslatef и glRotatef, ведь матрица разная для каждого меша, будь то чанк или параллелипипед-кусок моба.
Я как раз начал писать свой графический движок, абстрагируемый от способа отрисовки, будь то OpenGL, Vulkan или софтрендер, но при этом без стандартизации того, что должно быть на выходе. То есть на опенгле может нарисоваться мрачнее, чем на вулкане. Раньше я хотел написать просто свой софтрендер+графический движок с детерменированным оутпутом, но потом понял а зачем, если можно оутпут и интерфейс на разные уровни абстракции поместить.
>Замени GL_TRIANGLES на GL_LINES
Заменил на GL_LINE_STRIP. Получилось неочент.
У меня отбрасываются все плоскости между непрозрачными блоками.
У меня FPS не жёстко ограничен. Я сделал 60 TPS (раньше было 30), чтобы в случае до 60 FPS анимации и движения мобов шли покадрово, потому что у меня обработка анимаций и движения идёт в каждом фрейме обработки мира. Хотя если подумать, то логичнее было бы вызывать функцию анимации каждый фрейм отрисовки и пересылать что-то типа номера последней секунды + floatский delta, но на самом деле у меня нет обработки анимаций отдельными коллбеками и они обрабатываются в коллбеке behavior моба. Фигово, да. Может когда-нибудь и исправлю.
Что насчёт сброса кадров, то у меня отдельная функция как раз и следит за системным временем и старается N раз в секунду вызвать свой коллбек (для отрисовки или для процессирования мира), а если не получается, то дропаются кадры. Таким образом, только если функция process не успевает за временем, время в игре медленнее времени в реальности, а если функция отрисовки, то просто не отрисуется часть кадров.
Кроме того, в функции отрисовки+обработки нажатий учитывается насколько игрок повернул камеру и это тут же изменяется. То есть при 144 FPS не будет фризов при повороте камеры, а только при движении.
>glLoadMatrixf(Matrix), чем десятки glRotatef()/glTranslatef()
glLoadMatrixf не знал так как не учил OpenGL, теперь учту. Но у меня же в любом случае один glLoadMatrix заменит только 3-4 вызова glTranslatef и glRotatef, ведь матрица разная для каждого меша, будь то чанк или параллелипипед-кусок моба.
Я как раз начал писать свой графический движок, абстрагируемый от способа отрисовки, будь то OpenGL, Vulkan или софтрендер, но при этом без стандартизации того, что должно быть на выходе. То есть на опенгле может нарисоваться мрачнее, чем на вулкане. Раньше я хотел написать просто свой софтрендер+графический движок с детерменированным оутпутом, но потом понял а зачем, если можно оутпут и интерфейс на разные уровни абстракции поместить.
>Замени GL_TRIANGLES на GL_LINES
Заменил на GL_LINE_STRIP. Получилось неочент.
У меня отбрасываются все плоскости между непрозрачными блоками.
Что-то я ничего не понял на счёт TPS, FPS и т.д.
Как это обычно делается через дельту времени:
- в начале цикла отрисовки берём дельту предыдущего кадра;
- передаём дельту в запрос отрисовки/обсчёта физики объектов;
- все вычисления позиции/скорости/угла умножаем на дельту;
- в конце сохраняем в дельту, сколько времени занял кадр.
Для примера, вот нам нужно переместить кубик по оси X на 1 метр за 4 секунды.
Если у нас фиксированная частота кадров, мы можем подобрать скорость вручную:
cube.translation.x += 1 / (4 60); // делим расстояние на число кадров, за которое хотим преодолеть
Что равнозначно константе:
cube.translation.x += 0.004167;
Итого у нас будет чуть больше 4 миллиметров за кадр, 25 сантиметров в секунду при 60 кадрах.
Но если у нас просадка до 48 кадров в секунду, кубик сместится на 1 метр за (4 60) / 48 = 5 секунд.
Мы можем исправить это, если будем использовать дельту, то есть время 1 кадра в секундах:
cube.translation.x += 1 / (4 (1 / delta)); // аналогично предыдущей формуле
Упрощаем (переворачиваем дробь):
cube.translation.x += 1 delta / 4;
Если дельта = 0.01667, то частота кадров = 60, кубик смещается на 4.17 миллиметра в этом кадре.
Если дельта = 0.02083, то частота кадров = 48, кубик смещается на 5.21 миллиметра в этом кадре.
Суть в том, что вне зависимости от колебаний частоты, кубик сместится на метр за 4 секунды.
Скажем, если у нас частота упадёт до 1 кадра в 2 секунды, то кубик сместится на полметра за кадр.
Со стороны игрока кубик будет иметь одинаковую скорость, и именно такая точность требуется от игр.
Уууууу, как же бесит маркдаун, вот картинкой.
Как там в 99 году? Так уже давно никто не делает. Следующий кадр никогда не будет рендериться столько же сколько предыдущий, отсюда будут микрокосяки в физике. Либо лочить частоту и пусть лагает при посадке, либо использовать какие-нибудь методы предсказания времени рендеринга следующего кадра - например, в зависимости от объема заполнения z-буфера и количеству обращений к видеопамяти.
С таким подходом я не удивлюсь, что в некоторых играх шарики заезжают за коллайдер.
Я делаю клон факторио, а не майнкрафта, поэтому очень важна детерменированность мира. У меня игра идёт в двух отдельных потоках (их становится больше при генерации мира, но это для параллелизма или чтобы убрать некоторые фризы).
Один обрабатывает поведение мира — перемещает мобов, позволяет им ломать и ставить блоки, крафтинг удаляет и устанавливает содержимое слотов.
Второй даёт игроку ввод-вывод. Ввод это нажатие клавиш и мыши, а вывод это картинка на экране. И вывод почти полностью зависит от состояния мира.
Если я начну в обработке мира процесс крафтинга, движение мобов и бельтов (в будущем) умножать на дельту, то мир перестанет быть детерменированным и я не смогу оптимизировать гигатонные производства как в факторио.
>Как там в 99 году? Так уже давно никто не делает.
А как делают? Фиксируют частоту на 60 Гц, чтобы игроки на слабых ПК были медленнее игроков на мощных?
>Следующий кадр никогда не будет рендериться столько же сколько предыдущий, отсюда будут микрокосяки в физике
Смысл не в том, чтобы предсказать следующий кадр, а в том, чтобы компенсировать рассинхрон предыдущего.
Подразумевается, что с начала предыдущего кадра объект продвинулся дальше, чем мог при нормальной частоте.
Другими словами, мы рисуем на экране то, что уже произошло, а не то, что произойдёт за время рисования.
>Либо лочить частоту и пусть лагает при посадке
Оно так и так лагать будет, речь идёт о том, чтобы синхронизировать время виртуального мира с реальным.
>какие-нибудь методы предсказания времени рендеринга следующего кадра
Не будет ли это лишней нагрузкой? Так и нейронку прикрутить можно))
>>652758
>С таким подходом я не удивлюсь, что в некоторых играх шарики заезжают за коллайдер.
А это уже проблема физического движка, если он не может предсказать столкновение заранее. В идеале физический движок должен строить векторы движения объектов, и останавливать их в точках столкновения друг с другом, а не "телепортировать" на какой-либо фиксированный шаг. Если тупо телепортировать на (x;y;z) - да, объект может пролететь препятствие, если смещение окажется слишком длинным (или препятствие маленькое). А вот если мы построили вектор из точки A в точку B и обнаружили столкновение в точке C, мы должны построить вектор отскока от точки C в точку D и уже в точку D переносить объект (тем же способом, проверив этот вектор на столкновения с другими). Умножение на дельту влияет только на первый способ, второй от неё никак не страдает.
>Я делаю клон факторио, а не майнкрафта
Я не играл в факторио, но не будут ли его механики слишком большой нагрузкой для воксельного мира?
>Один обрабатывает поведение мира
>Второй даёт игроку ввод-вывод
Понятно, сервер с симуляцией и клиент-визуализатор симуляции.
>Если я начну в обработке мира процесс крафтинга, движение мобов и бельтов (в будущем) умножать на дельту, то мир перестанет быть детерменированным
То есть, предположим, игрок построит миллион печей, загрузит в них с помощью конвейеров ресурсы и запустит переплавку, в результате чего твой прекрасный детерминированный мир начнёт потреблять больше ресурсов, чем есть у компьютера пользователя; поскольку ты не можешь пропускать тики симуляции, а персонаж игрока находится именно в этой симуляции, игрок будет вынужден передвигаться в несколько раз медленнее, чем мог бы на более мощном компьютере. В итоге весь игровой процесс превращается в мучительное ожидание. Зачем издеваться над игроком?
>я не смогу оптимизировать гигатонные производства как в факторио
Какие оптимизации ты подразумеваешь?
Впрочем, я тут подумал (пока рисовал картинку), и, наверное, ты прав на счёт строгой пошаговой симуляции. У тебя получается что-то вроде пошаговой стратегии, в которой ходы не привязаны к реальному времени, но имеют строгую последовательность. В целом, это верный подход для симуляции, но неудачный для игры от первого лица. Просто представь, что было бы, если бы реальный мир вокруг тебя иногда замедлялся, но твоё собственное мышление продолжалось бы с прежней скоростью. Иногда это выгодно (поймать предмет, увернуться и т.п.), но чаще всего эффект тот же, что при попытке быстро идти в воде - ноги будто связаны и ты вроде бы идёшь, но невыносимо медленно.
Разница с факторио тут в том, что в факторио игрок, насколько я понимаю, может свободно осматривать всю карту, то есть не имеет строгой привязки к персонажу как части мира. Даже если симуляция будет в два раза медленнее, игрок может быстро использовать любой переключатель на любом конце карты, как в пошаговой стратегии. А у тебя игроку придётся пробираться до нужного переключателя пешком, двигаясь словно сквозь воду или мёд.
Так что... Либо 100%-точная симуляция механизмов, либо экшон эрпогэ с гоблинами, боссами и т.д.
Если ты хочешь полноценную симуляцию всяких механизмов, я бы посоветовал отказаться от майнкрафт-подобного персонажа с инвентарём и предоставить игроку свободное управление картой - перемещение, вращение и т.д. То есть как в любом нормальном неигровом симуляторе, где нет "игрока", а есть только набор симулируемых механизмов, которые пользователь симулятора настраивает и осматривает произвольным образом. Не понимаю, какой смысл прикручивать к такому серьёзному симулятору майнкрафт-подобного персонажа... Собственно, твоя игра сейчас и воспринимается как клон майнкрафта, а не серьёзный симулятор, и это, я думаю, проблема. Люди проходят мимо, не видя под обёрткой из кубиков сложного неигрового симулятора. Нужно как-то это исправить, но тут я не знаю, что подсказать)
>Как там в 99 году? Так уже давно никто не делает.
А как делают? Фиксируют частоту на 60 Гц, чтобы игроки на слабых ПК были медленнее игроков на мощных?
>Следующий кадр никогда не будет рендериться столько же сколько предыдущий, отсюда будут микрокосяки в физике
Смысл не в том, чтобы предсказать следующий кадр, а в том, чтобы компенсировать рассинхрон предыдущего.
Подразумевается, что с начала предыдущего кадра объект продвинулся дальше, чем мог при нормальной частоте.
Другими словами, мы рисуем на экране то, что уже произошло, а не то, что произойдёт за время рисования.
>Либо лочить частоту и пусть лагает при посадке
Оно так и так лагать будет, речь идёт о том, чтобы синхронизировать время виртуального мира с реальным.
>какие-нибудь методы предсказания времени рендеринга следующего кадра
Не будет ли это лишней нагрузкой? Так и нейронку прикрутить можно))
>>652758
>С таким подходом я не удивлюсь, что в некоторых играх шарики заезжают за коллайдер.
А это уже проблема физического движка, если он не может предсказать столкновение заранее. В идеале физический движок должен строить векторы движения объектов, и останавливать их в точках столкновения друг с другом, а не "телепортировать" на какой-либо фиксированный шаг. Если тупо телепортировать на (x;y;z) - да, объект может пролететь препятствие, если смещение окажется слишком длинным (или препятствие маленькое). А вот если мы построили вектор из точки A в точку B и обнаружили столкновение в точке C, мы должны построить вектор отскока от точки C в точку D и уже в точку D переносить объект (тем же способом, проверив этот вектор на столкновения с другими). Умножение на дельту влияет только на первый способ, второй от неё никак не страдает.
>Я делаю клон факторио, а не майнкрафта
Я не играл в факторио, но не будут ли его механики слишком большой нагрузкой для воксельного мира?
>Один обрабатывает поведение мира
>Второй даёт игроку ввод-вывод
Понятно, сервер с симуляцией и клиент-визуализатор симуляции.
>Если я начну в обработке мира процесс крафтинга, движение мобов и бельтов (в будущем) умножать на дельту, то мир перестанет быть детерменированным
То есть, предположим, игрок построит миллион печей, загрузит в них с помощью конвейеров ресурсы и запустит переплавку, в результате чего твой прекрасный детерминированный мир начнёт потреблять больше ресурсов, чем есть у компьютера пользователя; поскольку ты не можешь пропускать тики симуляции, а персонаж игрока находится именно в этой симуляции, игрок будет вынужден передвигаться в несколько раз медленнее, чем мог бы на более мощном компьютере. В итоге весь игровой процесс превращается в мучительное ожидание. Зачем издеваться над игроком?
>я не смогу оптимизировать гигатонные производства как в факторио
Какие оптимизации ты подразумеваешь?
Впрочем, я тут подумал (пока рисовал картинку), и, наверное, ты прав на счёт строгой пошаговой симуляции. У тебя получается что-то вроде пошаговой стратегии, в которой ходы не привязаны к реальному времени, но имеют строгую последовательность. В целом, это верный подход для симуляции, но неудачный для игры от первого лица. Просто представь, что было бы, если бы реальный мир вокруг тебя иногда замедлялся, но твоё собственное мышление продолжалось бы с прежней скоростью. Иногда это выгодно (поймать предмет, увернуться и т.п.), но чаще всего эффект тот же, что при попытке быстро идти в воде - ноги будто связаны и ты вроде бы идёшь, но невыносимо медленно.
Разница с факторио тут в том, что в факторио игрок, насколько я понимаю, может свободно осматривать всю карту, то есть не имеет строгой привязки к персонажу как части мира. Даже если симуляция будет в два раза медленнее, игрок может быстро использовать любой переключатель на любом конце карты, как в пошаговой стратегии. А у тебя игроку придётся пробираться до нужного переключателя пешком, двигаясь словно сквозь воду или мёд.
Так что... Либо 100%-точная симуляция механизмов, либо экшон эрпогэ с гоблинами, боссами и т.д.
Если ты хочешь полноценную симуляцию всяких механизмов, я бы посоветовал отказаться от майнкрафт-подобного персонажа с инвентарём и предоставить игроку свободное управление картой - перемещение, вращение и т.д. То есть как в любом нормальном неигровом симуляторе, где нет "игрока", а есть только набор симулируемых механизмов, которые пользователь симулятора настраивает и осматривает произвольным образом. Не понимаю, какой смысл прикручивать к такому серьёзному симулятору майнкрафт-подобного персонажа... Собственно, твоя игра сейчас и воспринимается как клон майнкрафта, а не серьёзный симулятор, и это, я думаю, проблема. Люди проходят мимо, не видя под обёрткой из кубиков сложного неигрового симулятора. Нужно как-то это исправить, но тут я не знаю, что подсказать)
>проблема физического движка
А есть ли физические движки без таких проблем?
Даже если взять задачу трёх тел (хоть там и нет столкновений), то её нельзя решить (при современной математике, по крайней мере) с любой дельтой между расчётами. Чем меньше дельта, тем точнее расчёты.
>слишком большой нагрузкой
>начнёт потреблять больше ресурсов
>Зачем издеваться над игроком?
Суть как раз в том, что детерминизм позволяет оптимизировать всё и нагрузка на процессор почти не будет отличаться на 1000 печах или 10000 печах. Ведь все эти цепи бельтов, ЛЭП, переработчиков можно превратить в упрощённые формулы с коэффициентами, зависимые от нынешнего тика. И перестраиваться+перерасчитываться будут только из-за недетерминированных факторов — поведения игроков.
Представь, если бы всё просчитывалось через дельты, которые недетерминированны. Игрок поставил бы 10000 печей и пришлось бы их по-отдельности просчитывать и нагрузка была в 10 раз больше, чем при 1000 печах.
Что насчёт нынешности то да, это проблема, я как раз собирался добавлять бельты и фабричные элементы, чтобы игроки заинтересовались и занимались пиаром бесплатно без СМС и по своей воле.
Это шестерёнка-голем, которая будет крутить бельт и потреблять MP. Планирую сделать так, чтобы снизить потребление MP до 100% можно было подводом электричества. С другими големами так низко не получится.
>А есть ли физические движки без таких проблем?
Ну фиг знает, я не разбираюсь в них. Знаю только, что профессиональные движки сложнее самодельных)
>Даже если взять задачу трёх тел
Эм, по-моему мы обсуждали простые игровые действия (смещение, поворот)...
>можно превратить в упрощённые формулы с коэффициентами
Очень интересно, как ты это будешь делать. Я вот вообще не представляю, как можно загнать в одну формулу тысячи объектов, даже если они одного типа. Вот что будет, если каждая печка стартует с задержкой в 1 секунду? А если в каждой печке на +0.1 больше топлива, чем в предыдущей? Может быть, в идеальном случае, когда все печки загружены одинаково и запущены одновременно, можно было бы описать их одной формулой, поскольку результат работы у них будет одинаковый и одновременный... Но может ли такая идеальная ситуация случиться в игре?
Хотя нет. Я понимаю, что 1000 печек можно описать одной формулой, если они запускаются одновременно с одинаковыми ресурсами. Но сомневаюсь, что для такого нужно обсчитывать сцену с одинаковыми интервалами, ведь если все стартуют одновременно, то нет разницы, как они обсчитываются... Единственная проблема с вычислениями с дельтой - погрешности операций над вещественными числами, но дельту можно выражать в целочисленных миллисекундах/микросекундах (насколько хватит системного таймера).
>Игрок поставил бы 10000 печей и пришлось бы их по-отдельности просчитывать
А почему по отдельности? Ну вот я поставил 10000 печей, загрузил их одинаковым количеством топлива, соединил их все одним кабелем, а потом послал по кабелю сигнал активации. Если кабель в игровом мире передаёт свои сигналы мгновенно, то все 10000 печей стартуют одновременно. Если так, то по сути это единственная печка с мощностью x10000. Какая разница, с какой частотой она будет работать? Она одна.
Да, кстати, а какой вообще интерес в том, чтобы создавать кластер из тысяч одинаковых машин? Я вот смотрел на скриншоты Факторио, и так и не понял, в чём интерес строить такие сетки. Сколько бы ты печек не поставил, все они будут жрать уголь и плавить металл, они не образуют что-то другое. А такие вещи, как "8-битный компьютер на редстоуне", по-моему, оптимизировать невозможно, там ведь все элементы должны быть независимы.
>бельт
Ты так приводной ремень называешь? Не проще просто добавить цельный блок конвейера?
...Подумалось, у тебя какое-то недопонимание этой "дельты". Ты думаешь, что у одной печки будет коэффициент 0.016, а у другой 0.017, и из-за этого они будут работать независимо? Но зачем? Ведь дельта одинакова для каждого кадра/тика, для всех объектов сцены. То есть если у тебя есть 10000 печек, ты их все умножаешь на 0.016. Даже так, если у тебя есть формула для 10000 печек - ты должен умножать на дельту не каждую печку, а именно эту свою формулу. Речь ведь шла о синхронизации с реальным миром, а не о том, чтобы разделить x10000-мегапечь на самостоятельные печки.
То есть получается что-то такое:
- игрок ставит на карту 10000 печек;
- ты объединяешь их все в одну мегапечку своей формулой;
- когда мегапечка стартует, она работает как единый объект;
- работа этого объекта синхронизируется с реальным миром;
- когда начнёт обновляться винда, игра не будет тормозить;
- и овцы сыты, и волки целы, в общем все счастливы.
Другими словами, на дельту можно и нужно умножать весь игровой мир целиком, а не каждый объект по отдельности.
Да, я знаю, что мегапечь - это 1.000.000 печей, а 10.000 печей - это 10 килопечей, но кому какая разница...
А, вот ещё. Почему это мир, помноженный на дельту времени кадра, ВНЕЗАПНО перестаёт быть детерминированным-то? Ну вот ты задал какое-то правило, типа "если А, то Б" - если оно выполняется всегда, то система детерминирована, а вот если может выполниться, а может не выполниться, то она недетерминирована. Ты думаешь, что если ты используешь дельту, то это правило вдруг перестаёт выполняться? Но как такое может произойти, если выполнение правил - твоя основная задача? В моём примере про движение кубика задача - "смещение куба на 1 метр за 4 секунды". Если бы стояла задача "показать смещение куба каждые 2 миллиметра" - тогда смысла в дельте не было бы. Но задача - сместить куб на метр, и для нас не имеет значения, сместится он за 1 кадр или за 1000. Главное, что сместится на метр, и произойдёт это через 4 секунды. Даже если частота кадров 1 кадр в минуту, смещение произойдёт через четыре секунды, просто игрок этого не сможет увидеть.
Так и у тебя. Если у тебя задача сформировать из миллионов компонентов единую систему, ты можешь запускать эту систему с фиксированными интервалами, а можешь с любыми другими - суть системы не изменится, она как работала, так и будет работать. То есть ты ведь заранее знаешь результат её работы (как разработчик игры), твоя задача показать процесс этой работы. И показать его наиболее красиво и плавно.
А если у тебя какая-то другая задача, то это уже не игра, а что-то другое.
Кажется, я чего-то не понимаю. :(
>А есть ли физические движки без таких проблем?
Ну фиг знает, я не разбираюсь в них. Знаю только, что профессиональные движки сложнее самодельных)
>Даже если взять задачу трёх тел
Эм, по-моему мы обсуждали простые игровые действия (смещение, поворот)...
>можно превратить в упрощённые формулы с коэффициентами
Очень интересно, как ты это будешь делать. Я вот вообще не представляю, как можно загнать в одну формулу тысячи объектов, даже если они одного типа. Вот что будет, если каждая печка стартует с задержкой в 1 секунду? А если в каждой печке на +0.1 больше топлива, чем в предыдущей? Может быть, в идеальном случае, когда все печки загружены одинаково и запущены одновременно, можно было бы описать их одной формулой, поскольку результат работы у них будет одинаковый и одновременный... Но может ли такая идеальная ситуация случиться в игре?
Хотя нет. Я понимаю, что 1000 печек можно описать одной формулой, если они запускаются одновременно с одинаковыми ресурсами. Но сомневаюсь, что для такого нужно обсчитывать сцену с одинаковыми интервалами, ведь если все стартуют одновременно, то нет разницы, как они обсчитываются... Единственная проблема с вычислениями с дельтой - погрешности операций над вещественными числами, но дельту можно выражать в целочисленных миллисекундах/микросекундах (насколько хватит системного таймера).
>Игрок поставил бы 10000 печей и пришлось бы их по-отдельности просчитывать
А почему по отдельности? Ну вот я поставил 10000 печей, загрузил их одинаковым количеством топлива, соединил их все одним кабелем, а потом послал по кабелю сигнал активации. Если кабель в игровом мире передаёт свои сигналы мгновенно, то все 10000 печей стартуют одновременно. Если так, то по сути это единственная печка с мощностью x10000. Какая разница, с какой частотой она будет работать? Она одна.
Да, кстати, а какой вообще интерес в том, чтобы создавать кластер из тысяч одинаковых машин? Я вот смотрел на скриншоты Факторио, и так и не понял, в чём интерес строить такие сетки. Сколько бы ты печек не поставил, все они будут жрать уголь и плавить металл, они не образуют что-то другое. А такие вещи, как "8-битный компьютер на редстоуне", по-моему, оптимизировать невозможно, там ведь все элементы должны быть независимы.
>бельт
Ты так приводной ремень называешь? Не проще просто добавить цельный блок конвейера?
...Подумалось, у тебя какое-то недопонимание этой "дельты". Ты думаешь, что у одной печки будет коэффициент 0.016, а у другой 0.017, и из-за этого они будут работать независимо? Но зачем? Ведь дельта одинакова для каждого кадра/тика, для всех объектов сцены. То есть если у тебя есть 10000 печек, ты их все умножаешь на 0.016. Даже так, если у тебя есть формула для 10000 печек - ты должен умножать на дельту не каждую печку, а именно эту свою формулу. Речь ведь шла о синхронизации с реальным миром, а не о том, чтобы разделить x10000-мегапечь на самостоятельные печки.
То есть получается что-то такое:
- игрок ставит на карту 10000 печек;
- ты объединяешь их все в одну мегапечку своей формулой;
- когда мегапечка стартует, она работает как единый объект;
- работа этого объекта синхронизируется с реальным миром;
- когда начнёт обновляться винда, игра не будет тормозить;
- и овцы сыты, и волки целы, в общем все счастливы.
Другими словами, на дельту можно и нужно умножать весь игровой мир целиком, а не каждый объект по отдельности.
Да, я знаю, что мегапечь - это 1.000.000 печей, а 10.000 печей - это 10 килопечей, но кому какая разница...
А, вот ещё. Почему это мир, помноженный на дельту времени кадра, ВНЕЗАПНО перестаёт быть детерминированным-то? Ну вот ты задал какое-то правило, типа "если А, то Б" - если оно выполняется всегда, то система детерминирована, а вот если может выполниться, а может не выполниться, то она недетерминирована. Ты думаешь, что если ты используешь дельту, то это правило вдруг перестаёт выполняться? Но как такое может произойти, если выполнение правил - твоя основная задача? В моём примере про движение кубика задача - "смещение куба на 1 метр за 4 секунды". Если бы стояла задача "показать смещение куба каждые 2 миллиметра" - тогда смысла в дельте не было бы. Но задача - сместить куб на метр, и для нас не имеет значения, сместится он за 1 кадр или за 1000. Главное, что сместится на метр, и произойдёт это через 4 секунды. Даже если частота кадров 1 кадр в минуту, смещение произойдёт через четыре секунды, просто игрок этого не сможет увидеть.
Так и у тебя. Если у тебя задача сформировать из миллионов компонентов единую систему, ты можешь запускать эту систему с фиксированными интервалами, а можешь с любыми другими - суть системы не изменится, она как работала, так и будет работать. То есть ты ведь заранее знаешь результат её работы (как разработчик игры), твоя задача показать процесс этой работы. И показать его наиболее красиво и плавно.
А если у тебя какая-то другая задача, то это уже не игра, а что-то другое.
Кажется, я чего-то не понимаю. :(
>Очень интересно, как ты это будешь делать
Да я и сам не знаю как. Но я могу представить, например, бельт (я так называю конвеер, а не ремень), состоящий из большого кол-ва блоков бельтов как один объект. Он имеет некоторый путь, скорость и содержащиеся в нём предметы. Можно сделать так, что когда что-то добавляет предмет на бельт или забирает, его состояние коллапсирует и пересчитывается. Каждый предмет имеет в себе время добавления его на бельт и местоположение и из этого можно высчитать его положение в будущем времени. Уже хоть какая-то оптимизация.
Что насчёт печей, то не обязательно запускать их все одновременно, главное, чтобы они одновременно работали и у них был какой-то запас топлива.
Что насчёт бельтов, то я собираюсь полностью скопировать их механику из факторио — 2 ряда, сплиттеры, объединение бельтов между собой так, чтобы предметы идущие на одну дорожку, были на одной дорожке. Но ещё добавлю лифт, чтобы можно было вверх-вниз переносить.
>в чём интерес строить такие сетки
Так факторио это просто казуалочка, чтобы расслабиться после рабочего дня на заводе. Мало железа — строишь печи. Мало руды — строишь добывалки. Мало скорости — строишь второй ряд или изучаешь новую технологию.
>А такие вещи, как "8-битный компьютер на редстоуне", по-моему, оптимизировать невозможно
Смотри сюда: https://ru.wikipedia.org/wiki/Карта_Карно
Я не очень знаю, что это такое, но оно позволяет оптимизировать логические элементы меньшим количеством логических элементов. Но на самом деле для этого достаточно знания булевой алгебры.
Что насчёт симуляции компьютера на компьютере, то какие-нибудь сумматоры можно распознать и вместо обсчёта логических функций, считать сразу арифметические.
Я таким, конечно же, заниматься не буду, ведь у меня игра про фабрики, а не про компьютеры.
Что насчёт дельты, то суть во-первых в накапливающихся ошибках, во-вторых в несовершенстве физических и не только физических, движков. Ты говоришь, что куб сместится за 4 сенкуды, но нет, он сместится за 4 секунды только в твоём воображении, а на самом деле он сместится за минуту и на большее расстояние. Я не хочу, чтобы у меня где-то бросался предмет и из-за обновлении винды он не отскочил, а застрял в блоке и его унесло в космос. Конечно, можно заранее расчитать параболу траектории, но мне это не удобно, мне удобно каждый фрейм добавлять скорость по осям, мне просто не хватит времени, чтобы разработать геймплей. Конечно, я не собираюсь бросание предметов использовать в фабричных вещах, но у меня печи имеют температуру, которая растёт с замедляющейся скоростью, а это важно.
Посмотри на этот алгоритм: https://ru.wikipedia.org/wiki/Алгоритм_Гилберта_—_Джонсона_—_Кирти Он использует итерации, я этот алгоритм использую с помощью библиотеки libccd, чтобы расчитывать столкновения.
Можно посмотреть на Satisfactory. Не знаю как сейчас, но когда-то я видел видео, где у них автомобиль заехал немного не так и его перевернуло и отбросило куда подальше. Потому что такие моменты сложно расчитать. В Industriworks я собираюсь использовать всякие живые организмы с псевдослучайным поведением, но их поведение я буду делать более предсказуемым, как только игрок перестанет на них смотреть и отойдёт подальше. Например, голема-майнера я собираюсь сделать более умным и чтобы он как дварф-майнер из дварф фортресс майнил камни и руду, но собирал в сундук. Пока игрок не смотрит, можно просто уничтожать блоки с определённым интервалом и переносить добычу в сундук. Или питомник с кабанами. Пока игрок смотрит, они могут ходить туда-сюда, пытаться вырваться, быковать. А когда уйдёт, зона питомника будет просто выдавать детёныша раз в N времени.
Можешь ещё почитать всякие посты от разрабов Факторио. Как у них там поезда исчезали, потому что находились в другом месте и всё такое. При этом у них тикрейт. Кстати, в майнкрафте тоже тикрейт, несмотря на то, что это просто экшн+выживание.
>Очень интересно, как ты это будешь делать
Да я и сам не знаю как. Но я могу представить, например, бельт (я так называю конвеер, а не ремень), состоящий из большого кол-ва блоков бельтов как один объект. Он имеет некоторый путь, скорость и содержащиеся в нём предметы. Можно сделать так, что когда что-то добавляет предмет на бельт или забирает, его состояние коллапсирует и пересчитывается. Каждый предмет имеет в себе время добавления его на бельт и местоположение и из этого можно высчитать его положение в будущем времени. Уже хоть какая-то оптимизация.
Что насчёт печей, то не обязательно запускать их все одновременно, главное, чтобы они одновременно работали и у них был какой-то запас топлива.
Что насчёт бельтов, то я собираюсь полностью скопировать их механику из факторио — 2 ряда, сплиттеры, объединение бельтов между собой так, чтобы предметы идущие на одну дорожку, были на одной дорожке. Но ещё добавлю лифт, чтобы можно было вверх-вниз переносить.
>в чём интерес строить такие сетки
Так факторио это просто казуалочка, чтобы расслабиться после рабочего дня на заводе. Мало железа — строишь печи. Мало руды — строишь добывалки. Мало скорости — строишь второй ряд или изучаешь новую технологию.
>А такие вещи, как "8-битный компьютер на редстоуне", по-моему, оптимизировать невозможно
Смотри сюда: https://ru.wikipedia.org/wiki/Карта_Карно
Я не очень знаю, что это такое, но оно позволяет оптимизировать логические элементы меньшим количеством логических элементов. Но на самом деле для этого достаточно знания булевой алгебры.
Что насчёт симуляции компьютера на компьютере, то какие-нибудь сумматоры можно распознать и вместо обсчёта логических функций, считать сразу арифметические.
Я таким, конечно же, заниматься не буду, ведь у меня игра про фабрики, а не про компьютеры.
Что насчёт дельты, то суть во-первых в накапливающихся ошибках, во-вторых в несовершенстве физических и не только физических, движков. Ты говоришь, что куб сместится за 4 сенкуды, но нет, он сместится за 4 секунды только в твоём воображении, а на самом деле он сместится за минуту и на большее расстояние. Я не хочу, чтобы у меня где-то бросался предмет и из-за обновлении винды он не отскочил, а застрял в блоке и его унесло в космос. Конечно, можно заранее расчитать параболу траектории, но мне это не удобно, мне удобно каждый фрейм добавлять скорость по осям, мне просто не хватит времени, чтобы разработать геймплей. Конечно, я не собираюсь бросание предметов использовать в фабричных вещах, но у меня печи имеют температуру, которая растёт с замедляющейся скоростью, а это важно.
Посмотри на этот алгоритм: https://ru.wikipedia.org/wiki/Алгоритм_Гилберта_—_Джонсона_—_Кирти Он использует итерации, я этот алгоритм использую с помощью библиотеки libccd, чтобы расчитывать столкновения.
Можно посмотреть на Satisfactory. Не знаю как сейчас, но когда-то я видел видео, где у них автомобиль заехал немного не так и его перевернуло и отбросило куда подальше. Потому что такие моменты сложно расчитать. В Industriworks я собираюсь использовать всякие живые организмы с псевдослучайным поведением, но их поведение я буду делать более предсказуемым, как только игрок перестанет на них смотреть и отойдёт подальше. Например, голема-майнера я собираюсь сделать более умным и чтобы он как дварф-майнер из дварф фортресс майнил камни и руду, но собирал в сундук. Пока игрок не смотрит, можно просто уничтожать блоки с определённым интервалом и переносить добычу в сундук. Или питомник с кабанами. Пока игрок смотрит, они могут ходить туда-сюда, пытаться вырваться, быковать. А когда уйдёт, зона питомника будет просто выдавать детёныша раз в N времени.
Можешь ещё почитать всякие посты от разрабов Факторио. Как у них там поезда исчезали, потому что находились в другом месте и всё такое. При этом у них тикрейт. Кстати, в майнкрафте тоже тикрейт, несмотря на то, что это просто экшн+выживание.
> Мне надо, чтобы ещё около 100 человек на распродаже купило или около 30 после распродажи, чтобы Индустриворкс стал наконец-то коммерчески успешным продуктом
Учитывая, что с у габена комиссия 30%, для тебя коммерческий успех это 3000 рублей?
>откуда у тебя такие деньжищи, чтобы их вкладывать
Наверное, экономил деньги, которые ему давали на школьные завтраки))) Или купил доллары по 20 ещё тогда.
>>653220
>У меня коммерческий успех это окупить вложенные 100 долларов.
Это не успех. Если бы ты бесплатно выложил игру в магазин, и в неё никто бы не играл, у тебя был бы 0 на 0 - это тоже успех? Успех - это если ты окупишь вложенные в игру силы, нервы, средства и время, заработав больше, чем мог бы другими способами. А так, ты не 100 долларов вложил. Ты вложил 3/4 года своего труда, не получая за это зарплаты, тратя свои силы и нервы.
>>652918
Почему шестерни висят в воздухе?
>>652880
>распродажи не стоит делать долгими
Скорее всего связано с алгоритмами Стима. Однодневные скидки вроде как лучше пиарятся системой.
>сезонные распродажи приносят в разы больше дохода, чем свои простые
Это очевидно же. К сезонным распродажам люди готовятся. "Свои простые" работают только на фанбазу твоей игры. К примеру, если у твоей игры сформируется общество фанатов, часть фанатов будет играть в пиратку или пускать слюнки на скриншоты/видео, дожидаясь очередной скидки (или даже выпрашивая её). А кто-то будет рекомендовать своим друзьям, но друзья не захотят брать по полной цене. Таким образом, ты можешь сделать мгновенную скидку и рассказать об этом в новостях, чтобы отстающие фанаты подтянулись в игру. А вот рандомные чуваки разве что ради количества игр такое скупают... Как и на тех же сезонных распродажах, но там скидки сильно больше и поэтому больше людей, которые скупают всякую бесполезную индюшатинку.
>чтобы Индустриворкс стал наконец-то коммерчески успешным продуктом. Ну и как мне это сделать?
1. Нужно устранить все баги и недочёты геймплея, мешающие игроку. Можешь выложить код в опенсурс, посмотрим.
2. Нужно сделать привлекательную графику, чтобы люди не говорили "фууу" не успев долистать до описания игры.
3. Нужен контент, но уже после того, как исправишь имеющиеся баги и сделаешь привлекательную графику.
Разумеется, ты можешь просто накрутить число продаж, но игроки будут покупать, плеваться на игру и забывать о ней.
>>652870
>Да я и сам не знаю как.
Мда уж. Ну, ты хотя бы не теряешь оптимистичный настрой, это уже что-то)
>оно позволяет оптимизировать логические элементы меньшим количеством логических элементов
Это используется для разработки логических устройств. В контексте "8-битного компьютера в песочнице" этим методом должен заниматься сам игрок, а не компьютер. Речь шла о том, что очень трудно реализовать универсальную оптимизацию всех этих логических схем, которые можно сконструировать из блоков в играх типа Майнкрафта.
>какие-нибудь сумматоры можно распознать и вместо обсчёта логических функций, считать сразу арифметические
Это только частный случай проблемы. Кроме того, это нарушит принцип "полной симуляции", имхо.
>у меня игра про фабрики, а не про компьютеры
Имхо, фабрики без компьютеров достаточно бесполезны. Фабрики преобразуют ресурсы, а компьютеры должны фабриками и их ресурсами управлять. Без хотя бы примитивной логики играть скучно и неудобно. Автоматизация - это компьютеры, фабрики - это только машины-преобразователи (печки, конвейеры, передатчики и т.п.). На реальной фабрике машинами управляют люди, людьми управляют другие люди. В игре игрок один, ботов обучать нельзя - нужны логические схемы.
>в накапливающихся ошибках
Погрешности вычислений с float у тебя будут всегда, если ты не перейдёшь полностью на integer.
>на самом деле он сместится за минуту и на большее расстояние
Если игра ВДРУГ зависнет на минуту, и через минуту дельта окажется =1 минуте, то для таких случаев нужны проверки. Если тебе нужно сместить куб только на метр, то если куб уехал слишком далеко - возвращаешь на метр. Игрок ничего не заметит, потому что с его точки зрения куб остановился 56 секунд назад (а на самом деле игра всё это время была тупо сдохшей нафиг).
>в несовершенстве физических и не только физических, движков
Это только твой самодельный движок несовершенен, но в твоих силах это исправить))
>где-то бросался предмет и из-за обновлении винды он не отскочил, а застрял в блоке и его унесло в космос
Дык поэтому я и говорил, проверять траекторию полёта, а не точку в пространстве. Если по траектории предмет должен был врезаться 2 секунды назад, то его нужно перенаправить в другое направление, а не размещать где есть.
>мне удобно каждый фрейм добавлять скорость по осям
Ну тогда игрокам придётся мириться с тем, что со временем внутренний таймер игры начинает отставать от реального времени.
>я видел видео, где у них автомобиль заехал немного не так и его перевернуло и отбросило куда подальше
Это же норма, к этому все привыкли. Зато автомобиль заехал, а не з-з-за-а-а-ае-ехал.
>Пока игрок не смотрит, можно просто уничтожать блоки с определённым интервалом и переносить добычу в сундук
>А когда уйдёт, зона питомника будет просто выдавать детёныша раз в N времени
Вот это мудрое решение, я тоже собираюсь в своей игре такое сделать. Одобряю.
>Как у них там поезда исчезали, потому что находились в другом месте и всё такое. При этом у них тикрейт
Ага, то есть "тикрейт" не устраняет эти проблемы.
>в майнкрафте тоже тикрейт
Что-то я никогда не замечал, чтобы игра начинала работать медленнее, рисуя каждый кадр без пропусков, хотя пробовал играть в майнкрафт на очень слабом железе. Если игра тормозит, игрок и NPC движутся рывками, как и в любой игре с дельтой. Даже если там так, как ты говоришь, там наверняка есть возможность пропускать кадры, иначе игра превращалась бы в слоу-мо. Ну или можно допустить, что кадры пропускает рендер, а физический движок всегда успевает, но это нереалистичное предположение, если вспомнить, насколько сильную нагрузку вызывает майнкрафт-сервер, хотя он работает только с физикой мира.
>откуда у тебя такие деньжищи, чтобы их вкладывать
Наверное, экономил деньги, которые ему давали на школьные завтраки))) Или купил доллары по 20 ещё тогда.
>>653220
>У меня коммерческий успех это окупить вложенные 100 долларов.
Это не успех. Если бы ты бесплатно выложил игру в магазин, и в неё никто бы не играл, у тебя был бы 0 на 0 - это тоже успех? Успех - это если ты окупишь вложенные в игру силы, нервы, средства и время, заработав больше, чем мог бы другими способами. А так, ты не 100 долларов вложил. Ты вложил 3/4 года своего труда, не получая за это зарплаты, тратя свои силы и нервы.
>>652918
Почему шестерни висят в воздухе?
>>652880
>распродажи не стоит делать долгими
Скорее всего связано с алгоритмами Стима. Однодневные скидки вроде как лучше пиарятся системой.
>сезонные распродажи приносят в разы больше дохода, чем свои простые
Это очевидно же. К сезонным распродажам люди готовятся. "Свои простые" работают только на фанбазу твоей игры. К примеру, если у твоей игры сформируется общество фанатов, часть фанатов будет играть в пиратку или пускать слюнки на скриншоты/видео, дожидаясь очередной скидки (или даже выпрашивая её). А кто-то будет рекомендовать своим друзьям, но друзья не захотят брать по полной цене. Таким образом, ты можешь сделать мгновенную скидку и рассказать об этом в новостях, чтобы отстающие фанаты подтянулись в игру. А вот рандомные чуваки разве что ради количества игр такое скупают... Как и на тех же сезонных распродажах, но там скидки сильно больше и поэтому больше людей, которые скупают всякую бесполезную индюшатинку.
>чтобы Индустриворкс стал наконец-то коммерчески успешным продуктом. Ну и как мне это сделать?
1. Нужно устранить все баги и недочёты геймплея, мешающие игроку. Можешь выложить код в опенсурс, посмотрим.
2. Нужно сделать привлекательную графику, чтобы люди не говорили "фууу" не успев долистать до описания игры.
3. Нужен контент, но уже после того, как исправишь имеющиеся баги и сделаешь привлекательную графику.
Разумеется, ты можешь просто накрутить число продаж, но игроки будут покупать, плеваться на игру и забывать о ней.
>>652870
>Да я и сам не знаю как.
Мда уж. Ну, ты хотя бы не теряешь оптимистичный настрой, это уже что-то)
>оно позволяет оптимизировать логические элементы меньшим количеством логических элементов
Это используется для разработки логических устройств. В контексте "8-битного компьютера в песочнице" этим методом должен заниматься сам игрок, а не компьютер. Речь шла о том, что очень трудно реализовать универсальную оптимизацию всех этих логических схем, которые можно сконструировать из блоков в играх типа Майнкрафта.
>какие-нибудь сумматоры можно распознать и вместо обсчёта логических функций, считать сразу арифметические
Это только частный случай проблемы. Кроме того, это нарушит принцип "полной симуляции", имхо.
>у меня игра про фабрики, а не про компьютеры
Имхо, фабрики без компьютеров достаточно бесполезны. Фабрики преобразуют ресурсы, а компьютеры должны фабриками и их ресурсами управлять. Без хотя бы примитивной логики играть скучно и неудобно. Автоматизация - это компьютеры, фабрики - это только машины-преобразователи (печки, конвейеры, передатчики и т.п.). На реальной фабрике машинами управляют люди, людьми управляют другие люди. В игре игрок один, ботов обучать нельзя - нужны логические схемы.
>в накапливающихся ошибках
Погрешности вычислений с float у тебя будут всегда, если ты не перейдёшь полностью на integer.
>на самом деле он сместится за минуту и на большее расстояние
Если игра ВДРУГ зависнет на минуту, и через минуту дельта окажется =1 минуте, то для таких случаев нужны проверки. Если тебе нужно сместить куб только на метр, то если куб уехал слишком далеко - возвращаешь на метр. Игрок ничего не заметит, потому что с его точки зрения куб остановился 56 секунд назад (а на самом деле игра всё это время была тупо сдохшей нафиг).
>в несовершенстве физических и не только физических, движков
Это только твой самодельный движок несовершенен, но в твоих силах это исправить))
>где-то бросался предмет и из-за обновлении винды он не отскочил, а застрял в блоке и его унесло в космос
Дык поэтому я и говорил, проверять траекторию полёта, а не точку в пространстве. Если по траектории предмет должен был врезаться 2 секунды назад, то его нужно перенаправить в другое направление, а не размещать где есть.
>мне удобно каждый фрейм добавлять скорость по осям
Ну тогда игрокам придётся мириться с тем, что со временем внутренний таймер игры начинает отставать от реального времени.
>я видел видео, где у них автомобиль заехал немного не так и его перевернуло и отбросило куда подальше
Это же норма, к этому все привыкли. Зато автомобиль заехал, а не з-з-за-а-а-ае-ехал.
>Пока игрок не смотрит, можно просто уничтожать блоки с определённым интервалом и переносить добычу в сундук
>А когда уйдёт, зона питомника будет просто выдавать детёныша раз в N времени
Вот это мудрое решение, я тоже собираюсь в своей игре такое сделать. Одобряю.
>Как у них там поезда исчезали, потому что находились в другом месте и всё такое. При этом у них тикрейт
Ага, то есть "тикрейт" не устраняет эти проблемы.
>в майнкрафте тоже тикрейт
Что-то я никогда не замечал, чтобы игра начинала работать медленнее, рисуя каждый кадр без пропусков, хотя пробовал играть в майнкрафт на очень слабом железе. Если игра тормозит, игрок и NPC движутся рывками, как и в любой игре с дельтой. Даже если там так, как ты говоришь, там наверняка есть возможность пропускать кадры, иначе игра превращалась бы в слоу-мо. Ну или можно допустить, что кадры пропускает рендер, а физический движок всегда успевает, но это нереалистичное предположение, если вспомнить, насколько сильную нагрузку вызывает майнкрафт-сервер, хотя он работает только с физикой мира.
Коммерческий успех в случае окупаемости представлял бы собой потенциал к доходу. Если выпустить игру, которая смогла окупить вложение в стим, значит потенциал есть и наличие потенциала является коммерческим успехом. А если выпустить игру бесплатно/платно на итчио и никто не кинет деньжат, то потенциала нет.
>Успех - это если ты окупишь вложенные в игру силы, нервы, средства и время, заработав больше, чем мог бы другими способами.
Суть индигеймдева в том, что можно не работать, когда тебе дают задание и ты выполняешь за деньги, а самому делать продукт и другие люди будут его покупать. Если бы я устроился хоть грузчиком или фасовщиком, я бы за всё это время набрал столько денег, что очень большая часть моих нужд сейчас была бы восполнена. Но я РННщик. Я имею опыт работы и знаю, что это такое.
Кроме того, это одновременно и развитие. Если бы я не сделал Индустриворкс, то мало ли когда бы я начал делать свой графический движок? Через полтора года и без поддержки OpenGL/Vulkan? От этого могли бы пострадать мои будущие опенсорсные проекты.
>Почему шестерни висят в воздухе?
Потому, что это шестерни-големы))0). На самом деле я планирую добавить опоры, да и поменять кое-что. Например, чтобы анимация была не фреймовой, а плавной, но для этого отдельный коллбек писать.
>Нужен контент, но уже после того, как исправишь имеющиеся баги и сделаешь привлекательную графику
Нет, я послушал этот совет и думаю, что это было зря. Ну баги надо исправить, но геймлей важнее графики, как мне кажется. Если бы людям была интересна игра, то они бы играли, а если им хочется на графику посмотреть и без геймплея, то посмотрят и оставят на год-другой.
Но графику действительно надо сделать нормальной. Шейдер теней, фог, отражение + просвечивание воды и механика волн, гигантские кучевые облака на океаническом горизонте и сюрреалистично мерцающие звёзды на ночном небе с посередине расположенной светящейся луне, чья фаза пронумерована точками на текстуре. Жаль, что я плохо разбираюсь в шейдерах. И вообще, по-моему, несофтрендер это ересь+пережиток давних десятилетий. Я собираюсь исправить это, но потом и не в Индустриворкс.
>Без хотя бы примитивной логики играть скучно и неудобно
Судя по опыту факторио, очень даже удобно, с точки зрения массового игрока. Там есть логические и, даже, арифметические элементы, но мало кто с ними хоть что-то делает, в том числе и я.
Но с начала зарождения Индустриворкс, я как раз и планировал добавить проектирование логических схем (из логических элементов и шаблонов типа сумматоров, регистров и прочего), чтобы вставлять их в големов. Я, может быть, и добавлю это, но в качестве дополнительной механики. Сейчас я понимаю, что мало кому захочется строить логическую схему, чтобы голем-майнер научился добывать блоки. Лучше взять мой heart wand и отметить просто зону как в дварф фортресс, а он уже сам разберётся.
>если ты не перейдёшь полностью на integer
Я, кстати, собирался такое сделать возможным в моём возможно будущем 3D-редакторе, который я собирался написать на своём языке программирования и рендеря своим софтрендером, а обрабатывая своим геометрическим ядром. А потом этот 3D-редактор платно в стим, но с открытыми исходиниками, подобно Aseprite.
Ведь int32_t позволяют моделировать 2-4 километра с точностью до микрометра.
>Ага, то есть "тикрейт" не устраняет эти проблемы.
Наоборот, он устраняет, если написать без багов. А если использовать float дельты, то разделишь фабрику на условные чанки, просчитаешь, а ошибки накопятся и выйдет 534.035 предметов, когда должно быть 534 и где-то что-то аварийно остановится. А если использовать integer дельты, то это будет тикрейт, но с пропуском фреймов, которые тоже могут привести к авариям.
Коммерческий успех в случае окупаемости представлял бы собой потенциал к доходу. Если выпустить игру, которая смогла окупить вложение в стим, значит потенциал есть и наличие потенциала является коммерческим успехом. А если выпустить игру бесплатно/платно на итчио и никто не кинет деньжат, то потенциала нет.
>Успех - это если ты окупишь вложенные в игру силы, нервы, средства и время, заработав больше, чем мог бы другими способами.
Суть индигеймдева в том, что можно не работать, когда тебе дают задание и ты выполняешь за деньги, а самому делать продукт и другие люди будут его покупать. Если бы я устроился хоть грузчиком или фасовщиком, я бы за всё это время набрал столько денег, что очень большая часть моих нужд сейчас была бы восполнена. Но я РННщик. Я имею опыт работы и знаю, что это такое.
Кроме того, это одновременно и развитие. Если бы я не сделал Индустриворкс, то мало ли когда бы я начал делать свой графический движок? Через полтора года и без поддержки OpenGL/Vulkan? От этого могли бы пострадать мои будущие опенсорсные проекты.
>Почему шестерни висят в воздухе?
Потому, что это шестерни-големы))0). На самом деле я планирую добавить опоры, да и поменять кое-что. Например, чтобы анимация была не фреймовой, а плавной, но для этого отдельный коллбек писать.
>Нужен контент, но уже после того, как исправишь имеющиеся баги и сделаешь привлекательную графику
Нет, я послушал этот совет и думаю, что это было зря. Ну баги надо исправить, но геймлей важнее графики, как мне кажется. Если бы людям была интересна игра, то они бы играли, а если им хочется на графику посмотреть и без геймплея, то посмотрят и оставят на год-другой.
Но графику действительно надо сделать нормальной. Шейдер теней, фог, отражение + просвечивание воды и механика волн, гигантские кучевые облака на океаническом горизонте и сюрреалистично мерцающие звёзды на ночном небе с посередине расположенной светящейся луне, чья фаза пронумерована точками на текстуре. Жаль, что я плохо разбираюсь в шейдерах. И вообще, по-моему, несофтрендер это ересь+пережиток давних десятилетий. Я собираюсь исправить это, но потом и не в Индустриворкс.
>Без хотя бы примитивной логики играть скучно и неудобно
Судя по опыту факторио, очень даже удобно, с точки зрения массового игрока. Там есть логические и, даже, арифметические элементы, но мало кто с ними хоть что-то делает, в том числе и я.
Но с начала зарождения Индустриворкс, я как раз и планировал добавить проектирование логических схем (из логических элементов и шаблонов типа сумматоров, регистров и прочего), чтобы вставлять их в големов. Я, может быть, и добавлю это, но в качестве дополнительной механики. Сейчас я понимаю, что мало кому захочется строить логическую схему, чтобы голем-майнер научился добывать блоки. Лучше взять мой heart wand и отметить просто зону как в дварф фортресс, а он уже сам разберётся.
>если ты не перейдёшь полностью на integer
Я, кстати, собирался такое сделать возможным в моём возможно будущем 3D-редакторе, который я собирался написать на своём языке программирования и рендеря своим софтрендером, а обрабатывая своим геометрическим ядром. А потом этот 3D-редактор платно в стим, но с открытыми исходиниками, подобно Aseprite.
Ведь int32_t позволяют моделировать 2-4 километра с точностью до микрометра.
>Ага, то есть "тикрейт" не устраняет эти проблемы.
Наоборот, он устраняет, если написать без багов. А если использовать float дельты, то разделишь фабрику на условные чанки, просчитаешь, а ошибки накопятся и выйдет 534.035 предметов, когда должно быть 534 и где-то что-то аварийно остановится. А если использовать integer дельты, то это будет тикрейт, но с пропуском фреймов, которые тоже могут привести к авариям.
Версий glsl дофига, а документации к ним либо нет, либо запрятана она где-то далеко. Даже на википедии документации больше, чем на сайте кроноса.
Пошёл смотреть на SPIR-V, но там тоже много чего непонтяного, хоть выглядит солиднее. Но в брошурке (пикрилейтед) шизофрения. layout какие-то. Я уже научился писать небольшие шейдеры (для генерации текстур) на #version 130 и они работают без layout, но теперь я захотел добавить теней, но не получается получить значение gl_Normal. Ну зачем так делать? Я не собираюсь учить всякие лейауты. Почему они не могут просто дать список, какие переменные доступны на чтение и/или запись в определённой версии GLSL?
Может мне всё-таки не стоит учить OpenGL и сразу начать писать софтрендер? У меня есть опасения, что он займёт слишком много процессора, особенно с моими способностями к оптимизации. Я собираюсь использовать только рейтрейсинг. Либо я так и не смогу добавить даже фог в Индустриворкс и всё будет выглядеть так себе.
Видеокарты и OpenGL — дно.
Хмм, и правда. Только у меня получилось в 12 строчек. И наверняка эти функции депрекейтед и поддерживаются 3.5 видеокартами и 2.25 драйверами.
Выглядит просто ужасно. Лучше бы я шейдером сделал, но шейдером нельзя.
Я попробовал вчера пописать свой софтрендер рейтрейсер, но рендеринг одного треугольника даёт около 15 FPS. При этом треугольник не рендерится правильно, так что не думаю, что софтрендер решит проблему. Я, конечно, могу сделать поддержку и опенгла, и софтрендера, ведь это мой графический движок с разными бекендами.
Какой блять депрекейтед? Ты сделай ему цвет как у ClearColor своего, будет выглядеть нормально. А макисмальную густоту поставь на расстоянии, равном расстоянии отрисовки чанков приблизительно
Могу тебе помочь с графоном, кстати. Я сам писал софтверный растеризатор, его вполне реально разгонять до 5мс/фрейм на среднем i5 в фуллхд, если геометрии не очень много (несколько тысяч треугольников). Рейтрейсер писал и софтверный, и ускорял его с cuda. На последнем собрал элементарный path tracer, работает, пикрелейтед.
В кубаче, как мне кажется, куда лучше стрелять лучами, нежели растеризацией заниматься. Из-за того, что сетка однородная, можно очень оптимально искать пересечения луча со сценой. Ускоряться можно как душе угодно: с помощью cuda, с помощью compute shader-ов на opengl/vulkan, можно даже фрагментный шейдер на обычном opengl-е заточить под рейтрейсинг.
https://www.shadertoy.com/view/4ds3WS
Посмотрел, нашёл https://www.shadertoy.com/view/3lyXDm и подумал, что всё-таки мне стоит взять себя в руки и научиться в GLSL-шейдеры. Я не сразу поверил, что это сделано чисто из кода, без дополнительных моделей и в 100 строк, но если создать new, то именно так и есть. Да, видна математичная природа показанных фигур, но я так далёк от рендеринга и математики, что даже не думал, что так можно.
>>653394
Думаю, пока мне не нужна твоя помощь. Я только тренируюсь примитивы рисовать. Когда-то сделал на питоне рейтрейсер сфер с солид колором по гайду с хабра и это максимум, что у меня был. Вчера попробовал треугольник отрендерить, но на самом деле сферу (а то там сложно, мне надо спроецировать треугольник, так чтобы вектор-direction глаз был нормалью для него, тогда я смогу пробить, попадает ли вектор в треугольник) и у меня просто полэкрана окрашивалась, а половина нет. Вот такие у меня навыки в геометрии, мда.
Когда доделаю компилятор своего языка программирования (там сейчас готовы только несколько базовых конструкций и то, не полно), тогда можно будет полноценно заняться софтрендером. Потому что мне будет удобно, а ещё мой ЯП поддерживает параллельные вычисления, чтобы программист смог абстрагироваться от cuda, opencl, шейдеров или параллельных потоков.
Я бы тебе теорию нормально рассказал. Часто, люди в статейках лукавят и пишут то, что сами не до конца понимают. Я же выстрадал по несколько раз всю теорку для растеризации да рейтрейсинга своей собственной жёпой, поэтому могу пояснить по-человечески. Ну, если что, я помониторю этот тред.
1200x608, 0:16
Теперь пора делать шейдеры для Индустриворкс.
>>653542
Мне нужно знать, какие разделы математики надо выучить.
Ещё вопрос. Когда я хочу отрендерить треугольник, это правильно, что мне нужен треугольник, спроецированный на плоскость, чьей нормалью будет вектор луча, который исходит из камеры? Я потом проверю, попадает ли точка в треугольник или нет по одной системе уравнений.
Кстати, а ты умеешь рендерить кривые поверхности, например, поверхности Безье? Есть ли в этом подводные камни и, может быть, лучше субдивайдить полигоны и скруглять поверхность ими?
Ещё я так и не понял, почему при трассировке пути образуется шум. Разве не для каждого пикселя отдельно пускают луч? Или шум образуется, только если надо просчитать какие-нибудь световые суперэффекты?
Касаемо современных (с версии 3.3 точно так, ниже — не знаю) опенгловых шейдеров — у каждого из них есть вход и выход. У вершинного шейдера, вход размечается с помощью VertexArrayObject, который подсасывает данные из VertexBufferObject-ов. Ну, например https://pastebin.com/TpiKbdPd
Тут видно, как с помощью glVertexAttribPointer размечается vbo. В 3.3 можно не указывать явно layout (location = ...), но на некоторых видеокартах (вроде) может отвалиться жопа. То есть, можно и так шлёпнуть:
layout(location = 0) in vec2 vpos;
layout(location = 1) in vec3 vcolor;
Выход вершинного и вход фрагментного при отсутствии других шейдеров должны совпадать вплоть до имён переменных, opengl их как-то там сам линкует. Умный типа дохуя.
Самым важным в вершинном шейдере является gl_Position, который уходит растеризатору. Он нужен, чтобы растеризатор расставил вершины примитива на экране, растеризовал его и высрал фрагменты. Если прям тупо, положим vec4 pos; и сунем его в gl_Position; тогда pos.x / pos.w, pos.y / pos.w -- координаты вершины на экране (от -1 до 1), pos.z / pos.w -- то, что уходит в буфер глубины, pos.w работает как хитрая хуйня для корректировки искажений барицентрических координат, если ты прикладывал перспективу. Вся эта хитрая матаническая магия происходит с помощью перемножений хитро устроенных матриц, для работы с которыми есть библиотеки типа glm, ну или собственные мозги.
Выход фрагментного шейдера цепляется к фреймбуферу. Точно так же, можно неявно указывать out vec4 color; и он сообразит. А может и не сообразить, и нужно будет уточнение типа layout-всякая-хуйня. Можно создавать свои фреймбуферы, и выводить туда всякую херь, но это уже развлечение не для новичков. gl_FragColor я не пробовал, ничего не могу сказать, да и не видно его: https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)
Если растеризация, то делается так: вся сцена перемещается так, чтобы камера оказалась в нуле, потом вращается вокруг нуля так, чтобы направление взгляда камеры шло вдоль z-. Дальше делаешь проекцию всего этого добра в куб (-1, -1, -1) : (1, 1, 1) каким-нибудь способом. Из простых, ортографическая или перспективная проекция. Ортографическая ужимает в единичный куб большой параллелепипед, перспективная оторажает усечённую пирамиду. А если рейтрейсинг, то там похуй на это всё, просто из правильной точки в правильном направлении кастуется луч. Касательно вышеперечисленных проекций, для ортографической -- из разных точек в одном направлении. для перспекивной -- из одной точки в разных направлениях.
Любую поверхность можешь отрендерить лучами, если есть аналитическая функция пересечения луча с ней. Ну, для рейтрейсинга это будет быстро и удобно. Растеризатор так не может, он бьёт всё на треугольники.
Шум образуется из-за стохастической (читай случайной) природы алгоритма. Он, по сути, кастует для каждого пикселя по несколько лучей, потом суммирует освещённость. Вот направления, по которым лучи отскакивают от поверхностей, и генерируются случайно.
Касаемо современных (с версии 3.3 точно так, ниже — не знаю) опенгловых шейдеров — у каждого из них есть вход и выход. У вершинного шейдера, вход размечается с помощью VertexArrayObject, который подсасывает данные из VertexBufferObject-ов. Ну, например https://pastebin.com/TpiKbdPd
Тут видно, как с помощью glVertexAttribPointer размечается vbo. В 3.3 можно не указывать явно layout (location = ...), но на некоторых видеокартах (вроде) может отвалиться жопа. То есть, можно и так шлёпнуть:
layout(location = 0) in vec2 vpos;
layout(location = 1) in vec3 vcolor;
Выход вершинного и вход фрагментного при отсутствии других шейдеров должны совпадать вплоть до имён переменных, opengl их как-то там сам линкует. Умный типа дохуя.
Самым важным в вершинном шейдере является gl_Position, который уходит растеризатору. Он нужен, чтобы растеризатор расставил вершины примитива на экране, растеризовал его и высрал фрагменты. Если прям тупо, положим vec4 pos; и сунем его в gl_Position; тогда pos.x / pos.w, pos.y / pos.w -- координаты вершины на экране (от -1 до 1), pos.z / pos.w -- то, что уходит в буфер глубины, pos.w работает как хитрая хуйня для корректировки искажений барицентрических координат, если ты прикладывал перспективу. Вся эта хитрая матаническая магия происходит с помощью перемножений хитро устроенных матриц, для работы с которыми есть библиотеки типа glm, ну или собственные мозги.
Выход фрагментного шейдера цепляется к фреймбуферу. Точно так же, можно неявно указывать out vec4 color; и он сообразит. А может и не сообразить, и нужно будет уточнение типа layout-всякая-хуйня. Можно создавать свои фреймбуферы, и выводить туда всякую херь, но это уже развлечение не для новичков. gl_FragColor я не пробовал, ничего не могу сказать, да и не видно его: https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)
Если растеризация, то делается так: вся сцена перемещается так, чтобы камера оказалась в нуле, потом вращается вокруг нуля так, чтобы направление взгляда камеры шло вдоль z-. Дальше делаешь проекцию всего этого добра в куб (-1, -1, -1) : (1, 1, 1) каким-нибудь способом. Из простых, ортографическая или перспективная проекция. Ортографическая ужимает в единичный куб большой параллелепипед, перспективная оторажает усечённую пирамиду. А если рейтрейсинг, то там похуй на это всё, просто из правильной точки в правильном направлении кастуется луч. Касательно вышеперечисленных проекций, для ортографической -- из разных точек в одном направлении. для перспекивной -- из одной точки в разных направлениях.
Любую поверхность можешь отрендерить лучами, если есть аналитическая функция пересечения луча с ней. Ну, для рейтрейсинга это будет быстро и удобно. Растеризатор так не может, он бьёт всё на треугольники.
Шум образуется из-за стохастической (читай случайной) природы алгоритма. Он, по сути, кастует для каждого пикселя по несколько лучей, потом суммирует освещённость. Вот направления, по которым лучи отскакивают от поверхностей, и генерируются случайно.
Хахаха, нет, не верю. Это документация для тех, кто уже знает.
Один из бичей опенгла состоит в том, что он рудиментарен, в нём очень много легаси, из-за чего начинающий разработчик читает туториалы десятилетней давности, а потом 2 года доходит до шейдеров и glVertexAttribPointer. Теперь я понял, что имели ввиду все те люди.
Джва часа пытался сделать куб с затенёнными сторонами. Взял код с какого-то туториала, где данные передаются в шейдер через glVertexAttribPointer, там работает, а у меня нет. Много чего перепробовал, пока не додумался, что надо gl_Position умножить на матрицу, так как у меня 3D. Потом ещё какое-то время искал на какую именно. Понял, кстати, почему надо использовать свою систему матриц, а не депрекейтед опенгловскую. Потому что ОпенГЛ давно вырос из этого.
Генерирую нормали вручную, сначала у меня было неправильно, затенение было зеркально. Думал, теперь придётся либо помечать полигоны, в какую сторону направить нормаль, либо делать их почасовой-противчасовой, а потом детектить это, но дошло, что cross-операция сама это сделает.
А ведь свою первую игру (ещё до Индустриворкс и некоторых других игр) я выпустил использующей glBegin!
Ну всё, теперь точно пора делать шейдеры для индустриворкс, но сначала надо перевести его на мой отдельный дедикейтед графический движок.
1200x800, 0:31
Но очень сильно проседает FPS и я не знаю почему. Это что, такая сложная операция?
Мои шейдеры:
вертекс:
#version 150
//precision highp float;
uniform mat4 modelview;
uniform mat4 projectionmatrix;
in vec3 in_Position;
in vec3 in_Color;
in vec3 in_normal;
in vec2 in_texcoord;
out vec3 ex_Color;
out vec3 normal;
out vec2 ex_texcoord;
void main(void) {
mat4 mvp = projectionmatrixmodelview;
gl_Position = mvpvec4(in_Position,1.0);
ex_Color = in_Color;
normal = in_normal;
ex_texcoord = in_texcoord;
}
фрагмент:
#version 150
//precision highp float;
uniform vec3 light;
uniform sampler2D tex;
in vec3 ex_Color;
in vec3 normal;
in vec2 ex_texcoord;
out vec4 FragColor;
void main(void) {
vec3 nlight = normalize(light);
float cosangle = clamp(dot(nlight,normal),0.0,1.0);
FragColor = texture(tex,ex_texcoord)vec4(ex_Color(3.0/5.0) + ex_Color(2.0/5.0)cosangle,1.0);
}
Есть ли тут какие-то очень плохие решения, из-за которых и проседает ФПС? Кроме умножения матриц.
Но очень сильно проседает FPS и я не знаю почему. Это что, такая сложная операция?
Мои шейдеры:
вертекс:
#version 150
//precision highp float;
uniform mat4 modelview;
uniform mat4 projectionmatrix;
in vec3 in_Position;
in vec3 in_Color;
in vec3 in_normal;
in vec2 in_texcoord;
out vec3 ex_Color;
out vec3 normal;
out vec2 ex_texcoord;
void main(void) {
mat4 mvp = projectionmatrixmodelview;
gl_Position = mvpvec4(in_Position,1.0);
ex_Color = in_Color;
normal = in_normal;
ex_texcoord = in_texcoord;
}
фрагмент:
#version 150
//precision highp float;
uniform vec3 light;
uniform sampler2D tex;
in vec3 ex_Color;
in vec3 normal;
in vec2 ex_texcoord;
out vec4 FragColor;
void main(void) {
vec3 nlight = normalize(light);
float cosangle = clamp(dot(nlight,normal),0.0,1.0);
FragColor = texture(tex,ex_texcoord)vec4(ex_Color(3.0/5.0) + ex_Color(2.0/5.0)cosangle,1.0);
}
Есть ли тут какие-то очень плохие решения, из-за которых и проседает ФПС? Кроме умножения матриц.
>vec3 nlight = normalize(light);
Вот тут можно нормализовать перед установкой юниформы, а не в шейдере для каждого пикселя. А вообще ничего особо криминального, у тебя скорее всего не из-за шейдера тормоза. Как данные заливаешь-рисуешь, точно нет частой смены opengl стейтов?
>>654719
Ок, значит буду искать внутреннюю проблему. На самом деле у меня очень много опенгл стейтов сменяется, так как до создания собственного графического движка, я всё рисовал напрямую опенгловскими фукнциями. По-отдельности для чанков, для мобов.
Теперь перевожу на движок. Посмотрите на дроп. Там видно, как неправильно расположены тени. Всё потому, что блок поворачивается отдельно, а нормаль, вместе с вектором света остаются теми же. Пока не понимаю, на что надо умножить какой-нибудь вектор, чтобы обработка была правильной.
Теперь посмотрите на чёрную фигуру слева. Это гоблин, я просто пока не сделал ему текстурные координаты. Если присмотреться к ногам, то видно, как сочленения вращаются вокруг своего центра, а должны вокруг точки, которую я установил. Всё потому, что в моём архаичном движке есть 3 переменные: pos, rot и scl, которые вызывают опенгловские функции в соответсвии со своим содержимым. Пора вводить матрицы и научиться, как влияют транспос, ротация и скейлинг на матрицу. Заодно не буду всякие glRotatef, glTranslatef и glScalef делать.
Что характерно, в моём движке объекты расположены древовидно. Объект имеет pos,rot,scl (в будущем матрицу), может иметь меш и свет. Чтобы отрисовать это всё, мне надо предварительно скомпилировать все света в один массив, чтобы правильно расчитать свет. Пока у меня просто солнечный свет, падающий ортогонально, но потом появятся и точечные источники света.
Я поставил себе гоал набрать 2500 покупок Индустриворкс до 30 Апреля, но пока не знаю, как это реализовать. Какой-то мраз украл стратегическое мышление из моей психики. Это был Анти Я, наверное.
Насчёт затенения. Если у тебя матрица поворота ортогональная (да, у кого-то бывает иначе), то нормаль повернётся той же матрицей, что и вершины.
Блять, да ты ещё и легаси функции используешь, пиздец. И клон у тебя унылый, разве что скиллы прокачаешь немного
>> Пора вводить матрицы и научиться, как влияют транспос, ротация и скейлинг на матрицу. Заодно не буду всякие glRotatef, glTranslatef и glScalef делать.
Пропускай этот этап с матрицами и сразу разбирайся с квантернионами и построением камеры на их основе.
Я же тогда новую версию Индустриворкс выпущу неизвестно когда! Я только-только в матрицами разобрался. И то, я так и не понял, как они взаимодействуют между собой и настроил алгоритм интуитивно.
>>655283
>нормаль повернётся той же матрицей, что и вершины
Я вершины через MVP матрицу, а если и нормаль буду, то направление света будет зависеть от того, куда смотрит игрок. Я ничего не понял.
-----
Новую версию надо выпустить где-то к 15 Апреля. Добавить зайца, комбат, домики гоблинов (я их пытался добавить до v0.3, но как раз тогда начались большие баги, которые я еле исправил) и много-много звуков. Без звуков всё очень плохо.
И, желательно, поддержку португальского и французского языков, чтобы немного увеличить покрытие. Ещё можно попробовать систему мануалов.
Сейчас у меня мануалы находятся в ачивках, надо её открыть и там будет описание и рецепты. Это тупо. Я придумал, как это можно сделать иным способом. Из инвентаря отдельная вкладка с мануалами+рецептами, а мануалы платные. Можно купить за блок золота, стали, за MP или вещь какую-нибудь. Мне кажется, так будет лучше.
А в будущем можно добавить фею, которая в начале игры предложит игроку сделку: она откроет несколько первых мануалов, но в замен заберёт блок золота, когда игрок впервые его скрафтит. Анимацию феи я хочу сделать подобной анимации зверька из аниме Mahou Shoujo Ikusei Keikaku. А модель в виде концентрических кубов с крылышками.
Чтобы у некоторых игроков была мотивация купить все мануалы, даже если он и так всё знает/ему не нужно, надо ввести ачивку.
Займусь этим, когда буду делать v0.4. Я пока придумал крафт бельтов — из резины, а резина из нефти, но для крафта резины из нефти надо открыть Reconfiguration, а значит, что бельты не будут доступны в начале игры, что плохо. Поэтому надо добавить блок срезиневшейся нефти, которые будут генерироваться вокруг озёр с нефтью. Кстати, ещё я подумал над идеей электричества в игре и пока сомневаюсь насчёт неё. Может и не стоит вводить, пусть всё на MP работает. Ещё ввести крыс, которых можно будет превращать в генераторы магических лучей (Life, Decomposition, etc), чтобы можно было автоматизировать сборку големов.
На самом деле это очень плохо, когда в клоне факторио с самого начала не дают ресурсов для автоматизации, потому что так играть не интересно. В Факторио игрок может с первых минут скрафтить инсертеры, печи, бельты, добывалки, а у меня нет. Игроку надо добыть сталь, сердечные кристаллы, скрафтить пьедесталы и добыть немного MP, чтобы создать голема-майнера. Думаю, при первой генерации надо рядом генерировать ресурсы для быстрого старта. Сюжет, где ГГ человек (не гоблин) упал с неба и из магического космического корабля можно сделать големов.
Я же тогда новую версию Индустриворкс выпущу неизвестно когда! Я только-только в матрицами разобрался. И то, я так и не понял, как они взаимодействуют между собой и настроил алгоритм интуитивно.
>>655283
>нормаль повернётся той же матрицей, что и вершины
Я вершины через MVP матрицу, а если и нормаль буду, то направление света будет зависеть от того, куда смотрит игрок. Я ничего не понял.
-----
Новую версию надо выпустить где-то к 15 Апреля. Добавить зайца, комбат, домики гоблинов (я их пытался добавить до v0.3, но как раз тогда начались большие баги, которые я еле исправил) и много-много звуков. Без звуков всё очень плохо.
И, желательно, поддержку португальского и французского языков, чтобы немного увеличить покрытие. Ещё можно попробовать систему мануалов.
Сейчас у меня мануалы находятся в ачивках, надо её открыть и там будет описание и рецепты. Это тупо. Я придумал, как это можно сделать иным способом. Из инвентаря отдельная вкладка с мануалами+рецептами, а мануалы платные. Можно купить за блок золота, стали, за MP или вещь какую-нибудь. Мне кажется, так будет лучше.
А в будущем можно добавить фею, которая в начале игры предложит игроку сделку: она откроет несколько первых мануалов, но в замен заберёт блок золота, когда игрок впервые его скрафтит. Анимацию феи я хочу сделать подобной анимации зверька из аниме Mahou Shoujo Ikusei Keikaku. А модель в виде концентрических кубов с крылышками.
Чтобы у некоторых игроков была мотивация купить все мануалы, даже если он и так всё знает/ему не нужно, надо ввести ачивку.
Займусь этим, когда буду делать v0.4. Я пока придумал крафт бельтов — из резины, а резина из нефти, но для крафта резины из нефти надо открыть Reconfiguration, а значит, что бельты не будут доступны в начале игры, что плохо. Поэтому надо добавить блок срезиневшейся нефти, которые будут генерироваться вокруг озёр с нефтью. Кстати, ещё я подумал над идеей электричества в игре и пока сомневаюсь насчёт неё. Может и не стоит вводить, пусть всё на MP работает. Ещё ввести крыс, которых можно будет превращать в генераторы магических лучей (Life, Decomposition, etc), чтобы можно было автоматизировать сборку големов.
На самом деле это очень плохо, когда в клоне факторио с самого начала не дают ресурсов для автоматизации, потому что так играть не интересно. В Факторио игрок может с первых минут скрафтить инсертеры, печи, бельты, добывалки, а у меня нет. Игроку надо добыть сталь, сердечные кристаллы, скрафтить пьедесталы и добыть немного MP, чтобы создать голема-майнера. Думаю, при первой генерации надо рядом генерировать ресурсы для быстрого старта. Сюжет, где ГГ человек (не гоблин) упал с неба и из магического космического корабля можно сделать големов.
Камера на кватернионах -- отвратительное говно. Во многих CAD-ах и подобном дерьме такая стоит, хер нормально ей покрутишь. Особенно забавляет, когда водишь мышью по окружности небольшого радиуса, а сцена вращается вокруг оси собственного вращения камеры.
Ты разобрался, кто такая эта MVP матрица?
1. Model -- преобразование координат модели в её собственной системе координат. Это, например, собственный поворот, перемещение, растяжение.
2. View -- преобразование координат всех объектов, такое, что камера оказывается в начале координат (по факту вычитание из всех векторов вектора позиции камеры), и поворот пространства такой, что направление взгляда, или ось камеры, называй как угодно, становится направлено вдоль оси z, причём в противоположную сторону.
3. Projection -- ну, собственно, проекция. Какое-то отображение пространства. После него, всё, что тебе хочется видеть на экране, имеет координаты по всем трём осям от -1 до 1.
Матрица Projection -- это по факту одна элементарная матрица.
Матрица View -- две, это сначала перемещение сцены (матрицей T), потом её поворот (R). Тогда View = R T. Как можно заметить, матрицы перечисляются в обратном порядке. Ну, это довольно очевидно: R T x = R (T * x), типа вектор x сначала переместится, а потом, перемещённый, домножится на R. Вообще, эту пару обычно схлопывают в одну матрицу, и называют её как-нибудь, вроде lookAt.
Смысл матрицы Model зависит от твоего воображения. Если считаешь физику, то вращаешь модель вокруг центра масс, и если он смещён, то перед поворотом применяешь перемещение. И после него, обратно. Ещё и масштабирование можно намешать. В анимациях каких-нибудь, например. Ну и можешь выдумывать какие угодно комбинации.
Нормалям похуй на перемещение, но не похуй на масштабирование и поворот. У тебя, полагаю, вариант простой -- только собственный поворот. Поэтому, матрицей, которой ты вращаешь объект, вращай и его нормали. Ну а если вмешивается масштабирование, то надо знать немного линейной алгебры или знать, откуда спиздить рабочее решение.
Эх, проебал звёздочки. Ну и ладно, и без них понятно.
Наоборот там меньше подводных, а когда чисто матрицами - там надо следить, чтобы вращение не перекрывало некоторые углы, что еще добавляет дополнительных тормозов.
Надо нормально задачу ставить, а не хуйню выдумывать. Какие там у тебя углы перекрываются? Нахуя тебе кватернионы, когда у тебя всего одно вращение?
ОПу с его кубачом в самый раз вот такая вот камера
https://gcc.godbolt.org/z/RBtwgQ
Ок, я почти так же и планировал сделать (умножать model на вектор), но были баги, потому что я не обнулял элементы матрицы, отвечающие за транслейт. Теперь удалил и результат есть в видео с зайцами:
https://www.youtube.com/watch?v=Ze-WPPJ-Oe8
recordmydesktop зачем-то взял и сделал видео 60 ФПС, даже если оно не 60 ФПС. Или это ogv так сделал. Я же хотел снять с максимумом в 60 ФПС, а не чтобы оно ускорялось! Ещё и звуки куда-то делись, неужели я попал в паузу между музыкой? гнулинксы кака
Но надо их сделать отдельныеми, с разной скоростью и по всему небу, причём чтобы ночью они постепенно пропадали и заменялись на звёзды. Звёзды будут медленнее.
Сортировку прозрачных полигонов пока не сделал.
Добавил сжатие миров при помощи zlib. Сжимает раз в 10-40.
Ввёл поддержку французского языка. С помощью гугл транслейтера переводить на него легче чем на немецкий. Только я не понял, чем отличаются en и de, когда пытаюсь сделать что-то с прилагательными. С дубовыми часто предлагает en. Я заменил его на de.
Теперь эта игра похожа на трёхдолларовую (поставил, кстати, новую цену)? Или всё ещё не хватает геймплея?? Да как же, я же сделал Building режим с big set таргетом, можно много блоков за раз поставить. Разве такое не стоит 3 доллара? Правда, у меня дверей и прочей мебели нет.
Я ещё подумал о том, что сделать не клон факторио, а клон террарии с элементами факторио и видом майнкрафта. Например, можно сделать так, чтобы открытие какого-то заклинания требовало драгоценных камней. А драгоценные камни находятся не в больших жилах, а разбросаны маленькими кучками по пещерам, так что игроку придётся идти по них гриндить.
Кстати, создание игр это прибыльное дело. Индустриворкс это как кассир-СШАнин в макдональдсе, который работает 1 час в месяц. Если создать много таких игр, то будет больше рабочих. Такое прокатило бы скорее с андроидом, чем со стимом, но для андроида мне нужен смартфон и юридический адрес, потому что на страничке приложения надо указать адрес поддержки.
>Разве такое не стоит 3 доллара?
Нет, пока что это всратый клон майнкрафта, в который никто не будет играть. Но манямирок у тебя крепкий, моё почтение. Мне бы стыдно было с мамкой жить, придерживаться РНН и рассказывать свои фантазии о том, что сейчас выпущу майнкрафт и стану миллионером.
>в который никто не будет играть
А чего им не хватает? Геймплея? Зачем им геймплей, если они могут кубики потягать? Зачем они вообще покупают игры? Почему мою игру покупают почти только за чуть меньше доллара?
>выпущу майнкрафт и стану миллионером
Мне хотя бы тысяченером. Вообще я недавно подумал, посмотрел на другие игры и решил, что Индустриворкс не имеет особого потенциала набрать 1000 ревью. 50 имеет. И этого мне достаточно с такой игры. Осталось только её доразработать, добавить геймплей и игроки подтянутся.
Тем не менее, я собираюсь сделать ещё одну игру (не Чессмейтс), которая точно станет хитом, если я сделаю хотя бы приблизительно как её задумал. Сделать я её планирую за Май.
>придерживаться РНН
Я когда-то работал и я знаю насколько это ужасно. Лучше быть бомжом, чем работать. Я этого, конечно же, не хочу, поэтому и пытаюсь заполучить деньги не работая. Жить без родителей в таком случае было бы проблематично.
Ты не закончишь игру. Ты же до этого толком ничего не делал?
Твоя упоротость компенсируется твоей упёртостью. Или наоборот: твой энтузиазм полностью нивелирует твоя упоротость. Или ещё можно сказать: твою бы энергию, да в мирных целях. Или ещё лучше: ты бы лучше деньги с таким упорством зарабатывал.
Новость можете найти тут: https://steamcommunity.com/app/1143340/allnews/#scrollTop=0
Пора перекатываться на v0.4, такой список фич подобрал:
0. Combat.
1. Выгрузка чанков (когда ушёл далеко, сжатие их данных и освобождение быстрой памяти)
2. Поворот listener (это опеналовское).
3. Физику исправить.
4. Дроп с мобов.
5. Поселения гоблинов.
6. Торч на стенах.
7. Сортировка прозрачности.
8. Трейд гоблинов.
9. MP consumption големами.
10. Больше звуков!
11. Мануалы. (чтобы появился гемплей).
12. Глубина в слотах (это уже надоело, это тупость).
13. Бельт.
14. Майнинг големом.
15. Генерация жил (чтоб голем майнил).
16. Фея старта.
17. Генерация стартовых ресурсов.
18. Двери?
Если я буду добавлять по 2 фичи в день (что более реалистично, чем 5 фич в день), то смогу даже за 5 дней до 30-го Апреля выпустить первую версию с геймплеем.
Потом пора начать прокачивать боёвку и добавлять хостайл-мобов. Я планировал ещё очень давно добавить трёх порченных — порченный гуманоид с рогами, порченный гуманоид с наростами и порченный вепрь.
Что насчёт вепрей, то надо бы и первого босса добавить — стаю вепрей. Когда чемпион стаи вепрей побеждает игрока или другого сильного врага, он становится минибоссом — сверхвепрем с нимбом. Но если такой вепрь испортится, то станет гораздо сложнее, его единый рог будет пронзать и разрывать расширяясь всех, кто станет у него на пути.
Новость можете найти тут: https://steamcommunity.com/app/1143340/allnews/#scrollTop=0
Пора перекатываться на v0.4, такой список фич подобрал:
0. Combat.
1. Выгрузка чанков (когда ушёл далеко, сжатие их данных и освобождение быстрой памяти)
2. Поворот listener (это опеналовское).
3. Физику исправить.
4. Дроп с мобов.
5. Поселения гоблинов.
6. Торч на стенах.
7. Сортировка прозрачности.
8. Трейд гоблинов.
9. MP consumption големами.
10. Больше звуков!
11. Мануалы. (чтобы появился гемплей).
12. Глубина в слотах (это уже надоело, это тупость).
13. Бельт.
14. Майнинг големом.
15. Генерация жил (чтоб голем майнил).
16. Фея старта.
17. Генерация стартовых ресурсов.
18. Двери?
Если я буду добавлять по 2 фичи в день (что более реалистично, чем 5 фич в день), то смогу даже за 5 дней до 30-го Апреля выпустить первую версию с геймплеем.
Потом пора начать прокачивать боёвку и добавлять хостайл-мобов. Я планировал ещё очень давно добавить трёх порченных — порченный гуманоид с рогами, порченный гуманоид с наростами и порченный вепрь.
Что насчёт вепрей, то надо бы и первого босса добавить — стаю вепрей. Когда чемпион стаи вепрей побеждает игрока или другого сильного врага, он становится минибоссом — сверхвепрем с нимбом. Но если такой вепрь испортится, то станет гораздо сложнее, его единый рог будет пронзать и разрывать расширяясь всех, кто станет у него на пути.
1408x912, 0:27
МП-сферы это гексаэдр-октаэдр (куб-двепирамиды), которые выпадают после смерти с мобов и ищут игроков, чтобы влиться в них. Раньше МП передавалось напрямую.
В общем-то, до v0.4 как рукой подать, осталось ввести всего лишь 18 фич.
1408x912, 0:20
Трансформационная матрица творит чудеса. Как только я смел не знать о ней раньше?
Я пока заброшу Индустриворкс, так как начал пилить новый проект, который точно станет успешным. Минимум 30 отзывов, я уверен. Но с потенциалом дорасти и до 500-5000.
Пора его похоронить поскорее в фулл-транзишион. Я думаю, что не стоит вводить в геймплей важность очень больших фабрик как в факторио. Достаточно как в майнкарфте с индастрил крафтом. Поглотит 500 болванок стали для открытия заклинания и хватит.
Хотя можно попробовать устроить массовый пиар, но мои нейросети натренерованы только на определённый тип форумов.
Кстати, я заметил, что у меня отсутствует стратегическое мышление, а моё поведение стихийно. Это очень и очень страшноплохо, но вы не старайтесь использовать это против меня.
>>659181
Да, к сожалению, с детства я жил в условиях, где люди думают, что не знать математику и быть "гуманитарием" это нормально. Я так не считаю, я думаю, что если человек не способен или не хочет знать математику (хотя бы на интуитивном уровне), какие-нибудь точные науки типа физики и не умеет программировать, то он болен. Хотя я уважаю чужое мнение и не пытаюсь обратить каждого на путь истинный. Даже если передо мной встанет шизофреник, который хоть немного понимает происходящее вокруг, я не буду считать его больным, пока он сам этого не признает и не захочет вылечиться.
Из-за моих условий жизни я очень плохо учил математику. Для меня в детском саду было крутым уметь считать до 999 триллионов/квинтилионов/etcлионов 999 -1лионов... 999 999 и мои сверстники просили меня доказать, на что я вежливо отказывал, объясняя причину (или нет, я уже не помню). Думаю, 4-5 лет это нормальный возраст, чтобы уметь только в базовые арифметические операции, но потом планку надо значительно повышать. В 6-7 лет школьную алгебру и геометрию, с восьми интегралы, диффуры, потом и матрицы (хотя они даже проще, так что их можно и до). Но как мы видим, люди привыкли не обучать своих детей такой математике, они её даже не знают. Чтобы выучить математику не нужно быть гением или "технарём", надо иметь подход к ребёнку. Ребёнок слушает в школе, одноклассник рассказал ему анекдот, ребёнок оставшиеся 10 лет не понимает циферки и буковки на школьной доске. Думает, что синус и косинус это высшая математика для абстрактных боёв между математиками, но ведь синус и косинус это основа всего, что он видит вокруг.
К сожалению я сейчас очень плохо знаю математику, не умею решать диффуры, не знаю для чего ещё можно использовать матрицу кроме трансформации векторов, не умею считать жидкости, не знаю что такое градиент и набла. Я уже повзрослел и надо отдельно выделять время на изучение математики. А если бы я умел вообще выделять время на действие как в какой-нибудь РПГшке, то Индустриворкс уже давно стал бы хитом.
Я пока заброшу Индустриворкс, так как начал пилить новый проект, который точно станет успешным. Минимум 30 отзывов, я уверен. Но с потенциалом дорасти и до 500-5000.
Пора его похоронить поскорее в фулл-транзишион. Я думаю, что не стоит вводить в геймплей важность очень больших фабрик как в факторио. Достаточно как в майнкарфте с индастрил крафтом. Поглотит 500 болванок стали для открытия заклинания и хватит.
Хотя можно попробовать устроить массовый пиар, но мои нейросети натренерованы только на определённый тип форумов.
Кстати, я заметил, что у меня отсутствует стратегическое мышление, а моё поведение стихийно. Это очень и очень страшноплохо, но вы не старайтесь использовать это против меня.
>>659181
Да, к сожалению, с детства я жил в условиях, где люди думают, что не знать математику и быть "гуманитарием" это нормально. Я так не считаю, я думаю, что если человек не способен или не хочет знать математику (хотя бы на интуитивном уровне), какие-нибудь точные науки типа физики и не умеет программировать, то он болен. Хотя я уважаю чужое мнение и не пытаюсь обратить каждого на путь истинный. Даже если передо мной встанет шизофреник, который хоть немного понимает происходящее вокруг, я не буду считать его больным, пока он сам этого не признает и не захочет вылечиться.
Из-за моих условий жизни я очень плохо учил математику. Для меня в детском саду было крутым уметь считать до 999 триллионов/квинтилионов/etcлионов 999 -1лионов... 999 999 и мои сверстники просили меня доказать, на что я вежливо отказывал, объясняя причину (или нет, я уже не помню). Думаю, 4-5 лет это нормальный возраст, чтобы уметь только в базовые арифметические операции, но потом планку надо значительно повышать. В 6-7 лет школьную алгебру и геометрию, с восьми интегралы, диффуры, потом и матрицы (хотя они даже проще, так что их можно и до). Но как мы видим, люди привыкли не обучать своих детей такой математике, они её даже не знают. Чтобы выучить математику не нужно быть гением или "технарём", надо иметь подход к ребёнку. Ребёнок слушает в школе, одноклассник рассказал ему анекдот, ребёнок оставшиеся 10 лет не понимает циферки и буковки на школьной доске. Думает, что синус и косинус это высшая математика для абстрактных боёв между математиками, но ведь синус и косинус это основа всего, что он видит вокруг.
К сожалению я сейчас очень плохо знаю математику, не умею решать диффуры, не знаю для чего ещё можно использовать матрицу кроме трансформации векторов, не умею считать жидкости, не знаю что такое градиент и набла. Я уже повзрослел и надо отдельно выделять время на изучение математики. А если бы я умел вообще выделять время на действие как в какой-нибудь РПГшке, то Индустриворкс уже давно стал бы хитом.
>Как же её сделать поинтереснее и презентабельнее?
Ну... попробуй прикрутить RTX.
>Почему мою игру покупают почти только на распродажах?
Наверное подслеповатые бабульки покупают своим внукам майнкрафт по дешевке не разобравшись что это не оригинал а китайская копия. Думаю если бы ты не делал игры то занимался бы мошенничеством и продажей чудопылесосов.
Если я введу такую графику:
https://www.youtube.com/watch?v=eQ65rJnR4gg
https://www.youtube.com/watch?v=XDAD-X32Bm0
https://www.youtube.com/watch?v=xg4-4XXZiLY
https://www.youtube.com/watch?v=frL_wdTAwho
То игра станет успешнее?
Если посмотреть на майнкрафт с такой графикой, то стиль убивается напрочь, это рак. Но если графодрочерам нравится, то можно попробовать что-то подобное. Кроме того, в Майнкрафте размер блока 1x1x1 метров, а в Индсутриворкс 0.5x0.5x0.5.
Можно было бы вообще 3 стиля сделать: пиксельный (нынешний), сверхграфонистый (как в видео) и вид сверху в ASCII-графике и рогалик-like управлении если бы Индустриворкс был успешным
Можно, конечно, попробовать совместить полезное с хорошим: и Индустриворкс делать, и рейтрейсингу/пастрейсингу учиться.
Лучше бы делол что-то больше упора на выживач и всякие крафты, как в террафирмакрафте. Сделал бы экосистему, цены бы тебе не было. Реально, все эти големы и железные дороги есть в майне, сделай что-нибудь особенное.
То есть ты считаешь, что пилить месяцами говноклон майнкрафта – не рак, а использовать рейтрейсинг – рак? Удивлюсь, если осилишь его со своим-то опытом. Давно бы уже стоило прикрутить PBR, какие-нибудь тени. А по трассировке в Minecraft-like движках не так уж и много материала, чтобы это было так просто реализовать.
А вообще, зашёл в тред в очередной раз проиграть с всратых кубов и посмотреть, как унижают опа, а тут совсем как-то тихо.
Использование текстур с высоким разрешением в майнкрафте это действительно рак. А тени и разнообразные шейдеры, карты нормалей 16x16 или чуть больше были бы нормальны. Если посмотреть в майнкрафт, то что мы видим? Мы видим кубы. А эти кубы, в свою очередь, сделаны из ещё меньших кубов вокселей (так кажется). И если поставить текстуры с высоким разрешением на кубы, то воксели пропадают, а вместе с ними и стиль. Можешь посмотреть на первое видео. Ты где-нибудь видел такие квартиры и дома? В которых для каждого куска мебели и стены включили снаппинг в 1 метр. Такие шейдеры можно использовать, чтобы снять прикольное видео, но не более. Если это майнкрафт и дают такие высококачественные текстуры, то почему сдесь нельзя создавать что-то маленькое как с помощью мода chiesel или ещё более тонкого 3D-редактора?
>пилить месяцами говноклон майнкрафта – не рак
Рак, поэтому действительно надо заканчивать с Индустриворксом. Думаю, к следующей скидке выпущу в релиз.
>А по трассировке в Minecraft-like движках не так уж и много материала, чтобы это было так просто реализовать.
Мне кажется, ты в этом направлении плохо понимаешь. Не важно в каком движке, трассировка лучей едина. И там полигоны, и там полигоны.
Скорее опенгл выучить сложнее, чем написать рейтрейсер (неоптимизированный).
>Использование текстур с высоким разрешением в майнкрафте это действительно рак.
Никто и не говорил про хайрез. Говорили про RTX. Ты играл в вышедшую пару дней назад бету на Win10?
>Мне кажется, ты в этом направлении плохо понимаешь
Кажется. Не обязательно полигоны рейтрейсить. И тут их как раз рейтрейсить не нужно. Можно модельки игроков/мобов, но кубический мир лучше трейсить как 3d-массив клеток. Если бы я сейчас начал это реализовывать без исследований, то представил бы мир в octree и рейтрейсил через алгоритм из "A fast voxel traversal algorithm for ray tracing" J. Amanatides and A. Woo. Ты его должен знать. Тут ещё в коде есть ссылка на статью с очень похожим (или таким же) алгоритмом: https://www.shadertoy.com/view/4dX3zl
Но можно и треугольники рейтрейсить. RTX, насколько я знаю, работает только с коллекциями треугольников в BVH. Но ты же не собираешься в Vulkan лезть, так что можно и обычными компутами обойтись.
На однородно расположенных кубах не то, что необязательно полигоны расставлять, это вообще аутизм. Объём информации, необходимый для рейкаста, на однородной сетке ужимается до 1 бита на куб -- он или есть, или его нет. Ну, если не считать подглядывание материала. Чтобы пересечь луч со сценой, достаточно просто шагать от куба к кубу, и это оказывается охуенно быстро. Собственно, настоящие лучи завезли первым делом именно в кубач как раз по этой причине.
Ещё добавлю. Мне думается, что даже тупой рейкаст во фрагментном шейдере опенгла будет работать проворнее, чем отрисовка полигонов. Можно будет даже настоящие тени завезти.
И зачем ты это написал? Это должно моё сообщение дополнить?
>>661178
А теперь зайди в статью voxel на педивикии и посмотри на игры с движком полностью на рейкастинге. Этот подход сработает, если тебе только ориентированные воксели рисовать и нужно. А рейкаст тысяч треугольников в виде игроков/мобов/сложных структур это нихуя не быстрее растеризации. При рейкасте ещё MSAA отпадает и нужно с фильтрацией ебаться. Но зато реализация теней и АО интуитивна, да.
>Говорили про RTX
Не, я назвал такую графику раком в основном из-за хайрез-текстур. Против теней и отражений ничего против не имею.
>A fast voxel traversal algorithm for ray tracing
Просмотрел, интересная идея, я бы до такого не сразу задумался. Я пока только знал, что можно сначала высчитать максимальное расстояние вертекса до центра и это будет радиусом сферы, которую надо сначала проверить на рейкаст.
Но мне в голову закралась мысль, а нужно ли именно октодерево/массив кубиков, можно ли вместо них использовать сферы и/или эллипсы? Можно, например, разделить сферу с камерой в центре на сегменты и в каждый из них поставить список объектов. Или сделать просто деревья, которые характеризуются радиусами эллипсов/сфер, которые покрывают свои меши.
Что из этих вариантов быстрее? Какими математическими трюками можно проверить пересечение луча сферы и вокселя быстрее?
Во время своих последних раздумий над софтрендером-рейтрейсером я понял, что надо применять трансформационную матрицу к камере, а потом уже её положение и вектор относительно меша пересылать в коллбек для меша, который будет влиять на луч (менять его цвет, множить, телепортировать, отражать). Если это сетка треугольников, то проверить каждый треугольник (с учётом оптимизаций, етц), а если сфера, то вообще легко. Можно создать какие-нибудь математичные или необычные объекты.
Недавно я видел видео из игры Stela и там в конце шары были угловатыми к экватору, то есть UV-сфера. Меня это немного покоробило.
А ещё я думал над тем, что можно в полигон сувать текстурных координат больше, чем вертексов. Такие текстурные субвертексы. Они имеют своё положение на полигоне и текстурные координаты. Так можно проверить на пересечение только один раз, а определением цвета/материала уже отдельная функция займётся.
>>661136
Планы поменялись, начал делать свою следующую игру, занимался ещё другими делами.
>Планы поменялись, начал делать свою следующую игру, занимался ещё другими делами.
Я тебя услышал
Эти твои игроки, мобы и прочая шушера спокойно запекается в деревья, да так, что успеешь эти деревья собирать каждый фрейм, и успеешь 4 луча в пиксель кастануть, чтоб подсгладить. Суть не в них, а в отрисовке кубов, которые занимают большую часть экрана и памяти.
В общем случае -- да, легче. Но, если хочешь нарисовать хуеву гору кубов, то перед растеризацией нужно собирать меш плюс регулярно его обновлять. А для проброса лучей достаточно закидывать в буфер кубы примерно так же, как они лежат в памяти. Сама растеризация может оказаться быстрее, а может и медленнее, если геометрии очень много. Тысяча треугольников -- лучи соснут, миллионы треугольников -- растеризация соснёт.
А как ты предлагаешь этот буфер представить на гпу? Я про современный OpenGL мало знаю, но в ES можно было бы или в текстуру запаковать, или в атрибут, и во фрагментном шейдере рейтрейсить.
На староватых опенглах можно и в текстуру, будет довольно шустро, кстати. С версии 4.3 появился compute shader, там можно произвольные буфера закидывать.
1200x800, 0:33
Пока что такой результат. Пытаюсь сферу рейтрейсить, но что-то с преобразованиями матриц векторов у меня не так.
1200x800, 0:21
На этом видео я двигаю сферу (камера на месте) в -z, а потом в +z, после +-x. Почему она уходит экспоненциально, когда должна стремиться к нулю? Я использую уравнение из этой статьи: https://en.wikipedia.org/wiki/Line–sphere_intersection
Немного не хотелось этого делать, так как стиль кода несёт околоконфиденциальный отпечаток, но ладно.
В SphereRaycast аргумент pos это позиция сферы. Там где считается cosangle, это я недавно добавил, чтобы светотени сделать (они, кстати, сейчас не работают).
В RaytraceToBuffer lights сейчас не используются.
Код пересечения сферы с лучом похож на правду. Где-то в мелочах, может, затупил.
Вот тебе минимальный пример рабочего рейкаста, сравнить со своим. Тут камера сделана без матриц, по-человечески, не надо всю сцену перемещать и поворачивать.
https://pastebin.com/pyJ5zrdk
Нашёл формулу в этой статье: https://habr.com/ru/post/342510/ и у меня, внезапно, заработало.
Ещё я потом посмотрел на свой математический код и в функции dot я случайно делил результат на 3. Может быть из-за этого и не работал первый способ.
Теперь надо с освещением разобраться, у меня нормали не соответствуют действительности.
1200x800, 0:16
Теперь надо понять, почему у меня x и y перепутаны местами. Свет-то совсем в другую сторону смотрит, только по z правильно.
А хотя, я уже понял. У меня же камера отзеркалена по этим осям. Я это сделал, потому что при нажатии на клавиши у меня шар двигался в противоположные стороны. Но теперь я понял, что использовал контроллер для камеры, а для объектов надо всё с минусом.
Да-да-да, я это уже давно понял. На самом деле я полученную отрендеренную картинку перегоняю в опенгл-текстуру, чтоб побырику через свою библиотеку ГУИ вывести
Я только что осознал, что мне в луч надо ещё и точку пересечения сохранять, иначе объекты не смогут быть вложены друг в друга!
Теперь пора научиться в тени и отражения.
Несмотря на то, что я использую весь процессор с помощью OpenMP, он не совсем справляется. Ещё несколько объектов и ФПС просядет до 40.
>Несмотря на то, что я использую весь процессор с помощью OpenMP, он не совсем справляется. Ещё несколько объектов и ФПС просядет до 40.
Видюху не пробовал использовать facepalm
забыл поставить знак вопроса facepalm
Конечно же не пробовал ещё. Я тут с тенями еле справляюсь, у меня архитектура самого рейтрейсера ещё перестраиваться будет. В OpenMP просто несколько строк дописал и распараллелилось. Для шейдеров надо сначала придумать как данные подготовить. Я думаю, что надо загрузить в шейдер большой массив данных типа матриц, векторов и произвести над ними операции без кондишионолов, а потом вернуть их из ГПУ обратно в процессор для дальнейших расчётов. Я сейчас пробую каждый луч отдельно рекурсивно кастить до некоторого предела, но думаю, что лучше будет сразу все лучи итеративано кастить.
Кроме того, я планировал использовать вычислительные шейдеры (пока не знаю, почему), так что старое железо может не потянуть, а мне надо, чтобы мой рейтрейсер хотя бы несложные сцены могут трейсить. Надо сначала базовый алгоритм продумать.
Я не знаю как можно ускорить на ГПУ, что вообще мне с данными делать и как их и какие подготовить и сколько приблизительно данных рентабельно отправлять на вычисление ГПУ, чтобы пересылка самих данных не тратила слишком много.
Я решил, что буду итеративно весь массив лучей обрабатывать. То есть в первую итерацию считаю касты лучей, с ними же обрабатываю тени и освещение, а в следующую итерацию попадают отражённые/преломлённые лучи, если есть.
Можете подкинуть материалов по материалам? В блендере есть всякие металик, спекулар и кучи других. Мне надо понять, как их рендерить. Я понял, что спекулар отвечает за блики, а металик это разновидность зеркала, но про как металик влияет на цвет и про все остальные материалы я не знаю.
Я бы посоветовал делать сразу нормально. Для изотропных материалов, хватает трёх параметров -- albedo, roughness и metalness. Ну и всякие там карты нормалей или AO.
Теория неплохо изложена тут
https://blog.selfshadow.com/publications/s2013-shading-course/hoffman/s2013_pbs_physics_math_notes.pdf
Реализацию можно подсматривать, например, тут
https://learnopengl.com/PBR/Lighting
Ты ебанутый? На гпу данные идут в один конец, потом компьютом пишешь в текстуру, натягиваешь её на full-screen quad и рисуешь на экран. Синхронное чтение с памяти гпу в рантайме вообще считается плохой практикой.
Это значит только то, что ты где-то наговнякал.
в треде о разработке игр нельзя говорить о разработке игры?
Что тут за долбоеб всех в pr гонит? то тред вулкана ему тут не понравился, теперь вот проекты выгоняет
Разраб забил на проект и бампает каким-то говном
автор, если вдруг страдаешь отсутствием идей, то кроме hytale глянь еще https://www.vintagestory.at
охуенный майнкрафт-клон, сильной стороной которого является реалестичный крафт (мне до сих пор выносит мозг в хорошем смысле то как там сделана перековка, когда надо руками выдалбливать формы для заливки, плавить металл... и не где-то в гуи менюшках, а именно руками делать...
вот лучше глянь
https://www.youtube.com/watch?v=2h9is76yNgM
Это потому, что я не геймдевер. Геймдев это просто моё хобби. Не стиль жизни. Поэтому я могу не довести до конца.
Кроме того, возьмём Chessmates, мою вторую стимовскую игру. За первую неделю она почти окупила половину вложений. Индустриворксу на такое понадобилось месяцев 5. То есть, чессмейтс успешнее ивса в 15-20 раз.
При этом, успех не зависит от времени разработки. Чессмейты делались 2 недели, а Индустриворкс почти год.
Соответсвенно, мне пора уходить от Индустриворкса и делать новую игру. Я может ещё выпущу одно обновление, так как там баг был, который не давал отрисовываться голему-крафтеру и ещё некоторым блокам.
И с рейтрейсром у меня не получилось, он слишком много жрёт. Не имею понятия как в играх от местного анона daemonic runner и ещё какой-то используется софтрендер-рейтрейсер (я же правильно понял, это оно?) Я не знаю, как оптимизировать. Придётся опять опенгл теребить.
А рейтрейсинг мне понравился. Наверное, фотон трейсинг будет ещё интереснее.
Нельзя игры делать год или больше, легко выгореть, если ты не геймдевер. Их надо доделывать хотя бы за 3 месяца. Но следующую игру я собираюсь сделать за месяц, диздок уже подготовил.
Такими темпами следующая игра окупит почти половину стимдиректа часов за 12 или быстрее. А четвёртая за 48 минут. А двеннадцатая игра сможет обрушить всю мировую экономику и установить новый мировой порядок, но если государства попросят меня не выпускать её слишком быстро, то я им дам поблажку.
> успех не зависит от времени разработки
в тебе уже просыпаются мысли настоящих геймдизов, так что это было не зря
>Нельзя игры делать год или больше, легко выгореть, если ты не геймдевер.
Наверное вопрос в том есть ли толковый прогресс или нет. Так то я забросил несколько игр потому что они были шлак и не нравились в итоге даже мне
А сейчас пилю игруху несколько лет и всё пучком, не надоела особо - потому что выходит хорошо
мимокрок
сейм
Год можно легко делать. Ты только движок за это время напишешь. Хотя это геймдевом трудно называть, скорее графодрочерство.
Большинство задумок можно реализовать на уже имеющемся инструменатрии, а не писать +1 движок
Неужели? Скажи это ОПу.
Я знаю, ты модер. Хочешь проверить мой айпишник и сравнить с другими постами.
Ведь в ОП-посте есть картинка с мягким освещением.
Если нет, то напишу.
Между блоками (где образуется вогнутый угол) надо цвет вертексов поделить на коэффициент, чтобы получилась такая тень. А сглаживание света это просто рядом стоящие вертексы имеют один и тот же оттенок белого, опенгл сгладит на полигоне.
Да, думал. Факел, который бросить и он будет освещать. Светящиеся частицы.
И не надо меш чанков перестраивать, надо в шейдер передавать освещение и он всё сам просчитает.
>Можно ли такое добавить?
Нет, Индустриворкс умер.
А вдруг он воскреснет?
>Нет, Индустриворкс умер.
Ээээ, блэд, я что, зря в тебя свои 100 рублей осенью вложил? Я жду от тебя игру, ты зачем всё бросаешь? >:(
>>661728
>Хорошо, раз народ требует высококачественную графику с хайрез текстурами
Лично я требую от тебя пофиксить баги, оптимизировать всё и начать расширение контента. Графика в таких играх вообще смысла не имеет, ты можешь хоть цветными буквами из ASCII графику выводить, лишь бы кубы можно было друг от друга отличать. В таких играх важен только геймплей и контент, на графику нормальные люди тут даже не смотрят. Вот на этот бред >>660082 дрочат только совсем поехавшие, их мизерное число от общего количества потенциальных игроков. Признаюсь, сперва мне совсем не нравились твои мультяшные текстурки, но я был не прав - играть можно и с такими текстурами, и даже с багами освещения, и вообще с очень примитивной графикой на OpenGL 1.1. Играть нельзя только когда геймплейного контента нет или баги-лаги мешают насладиться игровым процессом.
Ты хоть помнишь, что ты изначально хотел сделать? "Как факторио, только майнкрафт", да? Обе эти игры держатся на голом геймплее и контенте, которым ты так и не занялся, задрочившись бессмысленным и бесполезным рендерингом. Пойми: всем на самом деле насрать, как выглядит цветочек на газоне, всех заботит только то, что можно с этим цветочком делать и для чего его можно использовать. Дрочить на красивое изображение этого объекта будут только те, кто вообще не понимает ничего в играх, именно из-за этих недолюдей игры у нас постепенно скатываются в недожанр "интерактивное кино".
Ты вообще знаешь, почему майнкрафт - самая продаваемая игра? Ты знаешь, почему майнкрафт так выстрелил? Что, неужели люди десятилетиями ждали, когда им в глаза будут колоть метровыми кубами с пиксельными текстурами? Нет! Майнкрафт - это игра практически неограниченных возможностей! В твоих руках почти бесконечный мир, абсолютная власть над этим миром и способность менять его на своё усмотрение; нет никакой разницы от того, как этот мир выглядит, пока он богат разными интересными штуками и пока ты можешь интересно с ним взаимодействовать.
Пойми, графикой ты можешь только приманить игрока. Но удержать ты можешь только геймплеем - никто не будет смотреть в красивую картинку 24/7, даже если это самая красивая картинка в истории картинок. В игры нужно ИГРАТЬ, а не разглядывать их как какие-то диковинные вещицы. И ты должен предоставить игроку возможности для игры, а не для разглядывания. Но нет, ты зарылся в какие-то там рендереры, тени, рейтрейсинг и прочий бред, который игрока вообще никак не касается и к игре отношения не имеет... Ты и в следующей своей игре точно так же зароешься в бесполезных деталях, если не поймёшь этого.
Но я всё-таки рекомендую вернуться к этому проекту и довести его до ума. До ума, а не до красоты. Майнкрафт почти не менялся визуально с самого первого публичного билда, всё те же кубики с текстурками. Знаешь, как менялся майнкрафт все эти годы? В него добавляли контент, расширяли геймплей. Медленно, но верно. И это подпитывает к нему интерес (ну, ещё тысячи модов, но это уже отдельная тема; кстати, ты вроде собирался мод апи сделать, не?).
Очень грустно видеть, как погибают такие проекты...
>Нет, Индустриворкс умер.
Ээээ, блэд, я что, зря в тебя свои 100 рублей осенью вложил? Я жду от тебя игру, ты зачем всё бросаешь? >:(
>>661728
>Хорошо, раз народ требует высококачественную графику с хайрез текстурами
Лично я требую от тебя пофиксить баги, оптимизировать всё и начать расширение контента. Графика в таких играх вообще смысла не имеет, ты можешь хоть цветными буквами из ASCII графику выводить, лишь бы кубы можно было друг от друга отличать. В таких играх важен только геймплей и контент, на графику нормальные люди тут даже не смотрят. Вот на этот бред >>660082 дрочат только совсем поехавшие, их мизерное число от общего количества потенциальных игроков. Признаюсь, сперва мне совсем не нравились твои мультяшные текстурки, но я был не прав - играть можно и с такими текстурами, и даже с багами освещения, и вообще с очень примитивной графикой на OpenGL 1.1. Играть нельзя только когда геймплейного контента нет или баги-лаги мешают насладиться игровым процессом.
Ты хоть помнишь, что ты изначально хотел сделать? "Как факторио, только майнкрафт", да? Обе эти игры держатся на голом геймплее и контенте, которым ты так и не занялся, задрочившись бессмысленным и бесполезным рендерингом. Пойми: всем на самом деле насрать, как выглядит цветочек на газоне, всех заботит только то, что можно с этим цветочком делать и для чего его можно использовать. Дрочить на красивое изображение этого объекта будут только те, кто вообще не понимает ничего в играх, именно из-за этих недолюдей игры у нас постепенно скатываются в недожанр "интерактивное кино".
Ты вообще знаешь, почему майнкрафт - самая продаваемая игра? Ты знаешь, почему майнкрафт так выстрелил? Что, неужели люди десятилетиями ждали, когда им в глаза будут колоть метровыми кубами с пиксельными текстурами? Нет! Майнкрафт - это игра практически неограниченных возможностей! В твоих руках почти бесконечный мир, абсолютная власть над этим миром и способность менять его на своё усмотрение; нет никакой разницы от того, как этот мир выглядит, пока он богат разными интересными штуками и пока ты можешь интересно с ним взаимодействовать.
Пойми, графикой ты можешь только приманить игрока. Но удержать ты можешь только геймплеем - никто не будет смотреть в красивую картинку 24/7, даже если это самая красивая картинка в истории картинок. В игры нужно ИГРАТЬ, а не разглядывать их как какие-то диковинные вещицы. И ты должен предоставить игроку возможности для игры, а не для разглядывания. Но нет, ты зарылся в какие-то там рендереры, тени, рейтрейсинг и прочий бред, который игрока вообще никак не касается и к игре отношения не имеет... Ты и в следующей своей игре точно так же зароешься в бесполезных деталях, если не поймёшь этого.
Но я всё-таки рекомендую вернуться к этому проекту и довести его до ума. До ума, а не до красоты. Майнкрафт почти не менялся визуально с самого первого публичного билда, всё те же кубики с текстурками. Знаешь, как менялся майнкрафт все эти годы? В него добавляли контент, расширяли геймплей. Медленно, но верно. И это подпитывает к нему интерес (ну, ещё тысячи модов, но это уже отдельная тема; кстати, ты вроде собирался мод апи сделать, не?).
Очень грустно видеть, как погибают такие проекты...
>Ээээ, блэд, я что, зря в тебя свои 100 рублей осенью вложил?
Не зря. ОП этого треда пилит другой игорь, 2д-платформер с рейтрейсингом и волшебным дилдаком дробовиком. Просто он осознал что не вытягивает что-то большее.
>ОП этого треда пилит другой игорь, 2д-платформер с рейтрейсингом и волшебным дилдаком дробовиком.
Где об этом можно узнать? Или ты и есть ОП?
>2д-платформер
Если ОП пытается заработать много бабла на играх, то платформеры - уж совсем неправильный выбор. Ниша платформеров переполнена, люди в них уже просто наигрались. Даже если есть коллекционеры платформеров, скупающие всё платформерообразное, их слишком мало. И никакие тут супер-графонистые фичи не помогут, ведь платформер в первую очередь рисовать вручную нужно, а ОП рисовать не умеет, это очевидно. С графикой "2Д вид сбоку" сегодня всё ещё может выстрелить что-то вроде террарии - да, клонов террарии тоже много, но все они друг от друга отличаются и могут быть интересны за счёт разных механик, в отличие от однообразных платформеров. Вот только клон террарии ничуть не проще клона майнкрафта, да ещё и рисовать нужно уметь очень хорошо...
>Просто он осознал что не вытягивает что-то большее.
Он не "не вытягивает", он просто сдался на полпути, струсив перед трудностями. У того же индустриворкса могла бы сформироваться своя фанбаза, могла возникнуть движуха, играющие бы привлекали новых... Но нет, ОП не умеет работать с комьюнити и не хочет делать полноценный проект, он хочет всего лишь лёгких денег. Если бы хотел разработать хорошую игру, игру, которую полюбили бы люди (а не покупали бы по ошибке, спутав с майнкрафтом) - не сдался бы и не бросил, а исправил все баги и начал заниматься созданием контента и развитием комьюнити. Но он только поковырялся в "реалистичном" рендеринге и обмяк...
Мне вот интересно, если бы исходные коды были бы открытыми, смог бы я разобраться в них?.. Хотя мне мотивации не хватит копаться и править в чужом коде, мне бы своё что-нибудь сделать...
Возможно, через некоторое время я вернусь к Индустриворксу.
Скоро выходит новый си-подобный язык программирования Лайси с революционной инфраструктурой. Там должно быть легко как в питоне (даже ещё легче) создать графическое приложение, а вычисления даже быстрее чем в си за счёт параллелизации или чего-то такого.
Всё-таки Индустриворкс ещё не вышел в релиз и у меня есть шансы раскрутить его только за счёт стима. Но если делать снова Индустриворкс, то я планирую его переписать с C/C++ на Laisi, отказаться от механики факторио и реалистичной жидкости.
Я думаю, что лучше взять и занять нишу очень долгого задротского крафта как в GregTech.
Думаю, сюжет таков: сверхинженер попал в другой мир и хочет вернуться обратно зачем?. Для этого ему придётся использовать ресурсы нынешнего богатого мира, но мир это большой летающий остров, разделённый на несколько биомов-сторон (чтобы генерация была не слишком сложная). Допустим, по середине лес, на севере начинается тайга, на юге пустыня, а если отойти на несколько километров, то по диагонали начнётся новый биом (чтобы мотивировать игроков путешествовать далеко и крафтить транспорт). Суть в том, что надо сделать как бы реалистичные крафты, чтобы начиналось как Террафирмакрафт, а заканчивалось как ИндастрилКрафт. То есть сначала, игроку надо выуживать песчинки руды из реки, сделать металлические инструменты, чтобы прокопать дыру к жиле какой-нибудь.
И каждый биом содержит свои природные ископаемые. Например, золото добывать в каньоно-подобном биоме, а железо в лесном.
И крафт ресурсов должен быть очень большим. Например, чтобы сделать сталь, нужна железная руда, древесный уголь/каменноугольный кокс и флюс какой-нибудь. А для пороха придётся либо идти искать калийную селитру (для чёрного пороха), либо азотная кислота (для белого пороха).
А чтобы синтезировать азотную кислоту, надо сначала найти платину и всё в таком духе.
При этом геймплей должен быть хоть и задротским, но быстрым и простым. Рецепты должны быть известны все, которые доступны на данный момент. А ручной крафт не требовать времени. И какое-нибудь чутьё на жилы, чтобы не искать среди тонн ненужных камней ничего.
И надо, чтобы была оружейная ветка технологий и враги, которые иногда осаждают базу или типа того.
Не знаю, продолжу я этот проект или нет, надо посмотреть...
Возможно, через некоторое время я вернусь к Индустриворксу.
Скоро выходит новый си-подобный язык программирования Лайси с революционной инфраструктурой. Там должно быть легко как в питоне (даже ещё легче) создать графическое приложение, а вычисления даже быстрее чем в си за счёт параллелизации или чего-то такого.
Всё-таки Индустриворкс ещё не вышел в релиз и у меня есть шансы раскрутить его только за счёт стима. Но если делать снова Индустриворкс, то я планирую его переписать с C/C++ на Laisi, отказаться от механики факторио и реалистичной жидкости.
Я думаю, что лучше взять и занять нишу очень долгого задротского крафта как в GregTech.
Думаю, сюжет таков: сверхинженер попал в другой мир и хочет вернуться обратно зачем?. Для этого ему придётся использовать ресурсы нынешнего богатого мира, но мир это большой летающий остров, разделённый на несколько биомов-сторон (чтобы генерация была не слишком сложная). Допустим, по середине лес, на севере начинается тайга, на юге пустыня, а если отойти на несколько километров, то по диагонали начнётся новый биом (чтобы мотивировать игроков путешествовать далеко и крафтить транспорт). Суть в том, что надо сделать как бы реалистичные крафты, чтобы начиналось как Террафирмакрафт, а заканчивалось как ИндастрилКрафт. То есть сначала, игроку надо выуживать песчинки руды из реки, сделать металлические инструменты, чтобы прокопать дыру к жиле какой-нибудь.
И каждый биом содержит свои природные ископаемые. Например, золото добывать в каньоно-подобном биоме, а железо в лесном.
И крафт ресурсов должен быть очень большим. Например, чтобы сделать сталь, нужна железная руда, древесный уголь/каменноугольный кокс и флюс какой-нибудь. А для пороха придётся либо идти искать калийную селитру (для чёрного пороха), либо азотная кислота (для белого пороха).
А чтобы синтезировать азотную кислоту, надо сначала найти платину и всё в таком духе.
При этом геймплей должен быть хоть и задротским, но быстрым и простым. Рецепты должны быть известны все, которые доступны на данный момент. А ручной крафт не требовать времени. И какое-нибудь чутьё на жилы, чтобы не искать среди тонн ненужных камней ничего.
И надо, чтобы была оружейная ветка технологий и враги, которые иногда осаждают базу или типа того.
Не знаю, продолжу я этот проект или нет, надо посмотреть...
1200x800, 0:09
Планирую сделать так, что в начале игроку придётся строить валы и гидромельницу, чтобы запитать простые механизмы, а потом ему можно будет переходить на электродвигатели. А крафт будет происходить через ряд станков. Верстаки, печи, экструзионные, токарные, прокатные, фрезерные. Например, чтобы прокатить металл в первый раз, надо будет пристроить вал, запитанный водой.
И все эти технологии понадобятся, чтобы построить ракету и улететь.
Но прежде чем заниматься Ивсом, мне надо обновить Чессмейтс. Хорошо бы с ним успеть до начала осенних распродаж, а с Индустриворксом до начала зимних распродаж.
690x440, 0:26
Это буквальный первый хеллоу ворлд опа-школьника на голом Опен ГЛ. В прошлом треде он сказал что он не может поддерживать этот архитектурный пиздец и закрывает проект, но жажда наживы взяла верх, видимо.
690x440, 0:30
Сложный вопрос, но интересный, он стал одним из толчков.
Всё случилось несколько месяцев назад. Я забыл что-то важное, непонятно что. Затем пошёл ряд стрессовых ситуаций. Или наоборот. В любом случае, эти ситуации наложились совсем недавно и я сбежал в виртуальный мир, в ивс. Но теперь я начинаю понимать, что случилось. Окружение сломило меня и я начал впитывать всю гадость бытия этого окружения, сам того не замечая. Попутно один комплекс безумия в моей психике съедал эмоции и блокировал+генерировал мысли. От него я уже начал постепенно избавляться, но он всё ещё проявляется.
И Индустриворкс стал для меня местом, где я могу поделать что-то, а главное, что я почти не ограничен. Хотя ещё совсем недавно он быстро пошёл бы на отторжение.
Но теперь, то что я забыл, я, наверное, начинаю вспоминать. И сегодня я почуял немного отторжения индустриворкса. Ведь я даже не геймдевер. Эти игры это просто была попытка заработать денег, которая оказалась в 40 раз меньше ожидаемого. Знаете, можно использовать 2 "парадигмы" мышления. Первая гласит, что есть стандарты и ресурсы должны соответствовать этим стандартам, иначе эти ресурсы очень нестабильные и их следует использовать как вторсырьё. А стандарты нужны для дальнейшего планирования и чтобы перейти некоторые рамки для безопасного взаимодействия с миром. И ещё суть в том, что эти ресурсы дают более-менее предсказуемый результат с численными коэффициентами. Этой парадигмой я и пользуюсь.
А другая парадигма гласит, что есть те ресурсы, которые окружают тебя и следует их использовать сейчас и что ресурсы связаны между собой довольно непредсказумым способом, но зато не нужно тратить много времени на то, чтобы начать ими пользоваться. Наверное, таким образом и получают власть всякие политики-бандиты, грабящие целые страны. Но этой же парадигмой пользуются и всякие преступники или террористы, которых в конце убивают бомбой в кафе. В общем странная вещь, но ею пользуются, наверное, большинство.
Если бы моё окружение было действительно хорошим, то мне не пришлось бы делать игры. Да и вообще, разбираться со всякими низкоуровневыми узкоспециализированными библиотеками типа ГУИ или рендеринга сцен. Прогал бы на питончике ради скорости разработки, изредка пописывая быстрые функции на Си или подобном ЯП. Но наследие имеет слишком большое значение. Это вам не майнкрафт-сервер, где игрок и игрочка поженились, а их новорегистрированный сын пошёл себе новый дом строить из блоков.
Думаю, скоро я излечусь, мой стержень примет прежнюю форму и тогда я заброшу Индустриворкс с шансом около 70%. Ивсом можно было бы заниматься в качестве развлекаловки, всё равно почти все медиаразвлечения уже пропали. Но, серьёзно, кому будет интересно часами переливать бойлерблейт из пустого в порожнее? В последнее время в основном ивс я и делал, хотя есть более интересные и полезные проекты + работа. С другой стороны, тут всё ясно. Более интересные и полезные проекты для меня новы и поэтому очень легко ошибится. А новый Индустриворкс написан на C++ и тут ошибок уже почти нет. Даже если найдётся очень странный баг, то полчаса-час максимум на него и он заотсутствен.
Такой лобик N-летный здоровый вырос, а занимаюсь игрушками всякими.
690x440, 0:30
Сложный вопрос, но интересный, он стал одним из толчков.
Всё случилось несколько месяцев назад. Я забыл что-то важное, непонятно что. Затем пошёл ряд стрессовых ситуаций. Или наоборот. В любом случае, эти ситуации наложились совсем недавно и я сбежал в виртуальный мир, в ивс. Но теперь я начинаю понимать, что случилось. Окружение сломило меня и я начал впитывать всю гадость бытия этого окружения, сам того не замечая. Попутно один комплекс безумия в моей психике съедал эмоции и блокировал+генерировал мысли. От него я уже начал постепенно избавляться, но он всё ещё проявляется.
И Индустриворкс стал для меня местом, где я могу поделать что-то, а главное, что я почти не ограничен. Хотя ещё совсем недавно он быстро пошёл бы на отторжение.
Но теперь, то что я забыл, я, наверное, начинаю вспоминать. И сегодня я почуял немного отторжения индустриворкса. Ведь я даже не геймдевер. Эти игры это просто была попытка заработать денег, которая оказалась в 40 раз меньше ожидаемого. Знаете, можно использовать 2 "парадигмы" мышления. Первая гласит, что есть стандарты и ресурсы должны соответствовать этим стандартам, иначе эти ресурсы очень нестабильные и их следует использовать как вторсырьё. А стандарты нужны для дальнейшего планирования и чтобы перейти некоторые рамки для безопасного взаимодействия с миром. И ещё суть в том, что эти ресурсы дают более-менее предсказуемый результат с численными коэффициентами. Этой парадигмой я и пользуюсь.
А другая парадигма гласит, что есть те ресурсы, которые окружают тебя и следует их использовать сейчас и что ресурсы связаны между собой довольно непредсказумым способом, но зато не нужно тратить много времени на то, чтобы начать ими пользоваться. Наверное, таким образом и получают власть всякие политики-бандиты, грабящие целые страны. Но этой же парадигмой пользуются и всякие преступники или террористы, которых в конце убивают бомбой в кафе. В общем странная вещь, но ею пользуются, наверное, большинство.
Если бы моё окружение было действительно хорошим, то мне не пришлось бы делать игры. Да и вообще, разбираться со всякими низкоуровневыми узкоспециализированными библиотеками типа ГУИ или рендеринга сцен. Прогал бы на питончике ради скорости разработки, изредка пописывая быстрые функции на Си или подобном ЯП. Но наследие имеет слишком большое значение. Это вам не майнкрафт-сервер, где игрок и игрочка поженились, а их новорегистрированный сын пошёл себе новый дом строить из блоков.
Думаю, скоро я излечусь, мой стержень примет прежнюю форму и тогда я заброшу Индустриворкс с шансом около 70%. Ивсом можно было бы заниматься в качестве развлекаловки, всё равно почти все медиаразвлечения уже пропали. Но, серьёзно, кому будет интересно часами переливать бойлерблейт из пустого в порожнее? В последнее время в основном ивс я и делал, хотя есть более интересные и полезные проекты + работа. С другой стороны, тут всё ясно. Более интересные и полезные проекты для меня новы и поэтому очень легко ошибится. А новый Индустриворкс написан на C++ и тут ошибок уже почти нет. Даже если найдётся очень странный баг, то полчаса-час максимум на него и он заотсутствен.
Такой лобик N-летный здоровый вырос, а занимаюсь игрушками всякими.
1280x720, 0:02
У меня такие игоры, что тебе и не снились!
690x440, 0:42
Ебать, гд полон убегающих от себя анонов, ковыряющихся в пет-проектах просто ради умиротворения во время ковыряния.
мимо такой-же
Чё ты тут понаписал, мне страшно это читать.
Крупные и популярные мододелы по майну отлично зарабатывают.
920x586, 0:22
Ты сумашедший или тролль? Написал такую чушь, что просто неуместно.
Впрочем, в одном ты прав. Ивс это аддиктив, а не аттрактив, пора завязывать с ним.
проект распидорасило
В стиме чтобы выложить в ирли аксес бабки платить нужно? Чем ирли аксес от релиза отличается физически? В рекламе там мож от стима или ещё что, вывешивают в топы какие.
Да, за каждый апп по 100 баксов.
>Чем ирли аксес от релиза отличается физически?
Не знаю чем отличаются, но если сначала выпустить в ьорли акцесс, а потом в релиз, то можно получить двойную рекламу, то есть в первый раз прокрутили и во второй раз.
Ну и для ьорли акцесс тебе придётся для покупателей расписать 5 ответов на вопросы, почему всё-таки ьорли, когда выйдет и каковы будут отличия.
А доплачивать после ирли аксеса 100 бачей не надо для полноценного релиза?
690x440, 0:18
Просто программирование на C++ это такой boring! Язык отталкивает своим синтаксисом, из-за чего не хочется его изучать. Не хочется изучать — не могу использовать классы, а библиотеки пишутся с трудом.
Вот и приходится ждать когда выйдет новый ЯП, чьё название я выше вроде уже писал. Судя по поведению автора, вероятность его выхода в этом году выше 70%.
Если бы я был совместимым с Юнити или Годотом или каким-нибудь другим движком, то можно было бы не заморачиваться и просто делать игры (хотя 2D-шные игры я и так могу просто делать, мощностей хватает...).
На каком языке пишешь? Если открытый, можно ссылку на гитхаб?
>непрофессионально созданием игр, просто ради забавы
Тогда бери Годот, Юнити или вообще УЕЧП. А ещё лучше в блендере скриптами модельки двигай.
Код закрыт, написано на C++, но мне стыдно показывать мой сипипишный код, потому что я не принимаю C++. Чтобы писать на C/C++ надо писать огромные куски бойлерблейта 3/7 всего времени разработки, а ещё у меня единые хедеры для всех файлов кода.
Code-first подход это совсем другое.
>>771485
Попробуй Minetest https://github.com/minetest/minetest
Это как у ОПа, только опенсорс.
>EA: Industriworks is currently a very rough Minecraft clone, without sound or any of the mechanics that made Minecraft fun. I don't think it's worth paying for right now, but it might improve. 2/10
Как ты смеешь использовать идиомы/фразеологизмы, в прямом смысле обозначающие сексуальные действия, в переносном для обозначения доминирования? Ты в курсе что это просходит, вроде, от тюремной культуры? Когда в гулагах посмешивали простой народ с преступниками или что там было, я не учил историю. Хотя в других странах это тоже есть...
В любом случае я запрещаю тебе так делать, сексуальные отношения должны обозначать любовь или просто социальное развлечение между двумя или больше индвидами. Кто не согласен — пусть пойдёт побьётся головой об стену только не сильно и если стены/полы холодные, то не садитесь на них
Если по вопросу, то действительно, не смог я за всё это время даже окупить вложения со своих игр. Отметка около -60 долларов, если за 2 игры я вложил 200. При этом с Чессмейтов я получил гораздо больше в итоге (так-то это полузаконченная игра, когда Ивс совсем незакончен).
Таков фейт (fate) движкописателя, особенно, если он и сам не особо горит этим. Если бы в далёкие времена я выбрал Годот (Юнити не могу, она проприетарная), то сейчас у меня могло бы быть очень много игр. После Ивса и Чессмейтов я много раз пытался сделать ещё одну игру, но бросал в начале. И сейчас я делаю новую игру. Вот недавно несколько часов вводил в свой движок кейфреймовые анимации, а использовал бы готовый движок, смог бы реализовать нужное мне за пару минут.
И когда-то я действительно пытался сделать игру на Годоте, но не смог, там было что-то не так с пиксельным снаппингом или масштабом и я бросил это дело. Но если бы разобрался, то мог бы на раз два все игры делать и портировать под 5пять-6 платформ. Я мог бы свыкнуться с ним, но если бы у меня была нужда каждый раз снова обращаться к нему. С Блендером в начале я тоже не дружил, но прошло время и теперь я нормально к нему отношусь, хороший софт.
Теперь же я не смогу использовать ни Годот, ни какой-либо другой движок, так как у меня уже пишутся графический движок и ГУИ-библиотека, если я не буду писать с использованием их, то они не будут развиваться.
Вот такие дела. Но, может быть, со временем я перейду некоторый программерский предел и вся эта возня станет для меня пылью, а делать игру на своих движках будет гораздо легче чем на другом. Но неизвестно когда это произойдёт, к тому времени я могу уже совсем не хотеть делать игры. А сейчас я хотел бы штук 3-5 сделать, для которых уже продумана основная идея и щепотка диздока.
Как ты смеешь использовать идиомы/фразеологизмы, в прямом смысле обозначающие сексуальные действия, в переносном для обозначения доминирования? Ты в курсе что это просходит, вроде, от тюремной культуры? Когда в гулагах посмешивали простой народ с преступниками или что там было, я не учил историю. Хотя в других странах это тоже есть...
В любом случае я запрещаю тебе так делать, сексуальные отношения должны обозначать любовь или просто социальное развлечение между двумя или больше индвидами. Кто не согласен — пусть пойдёт побьётся головой об стену только не сильно и если стены/полы холодные, то не садитесь на них
Если по вопросу, то действительно, не смог я за всё это время даже окупить вложения со своих игр. Отметка около -60 долларов, если за 2 игры я вложил 200. При этом с Чессмейтов я получил гораздо больше в итоге (так-то это полузаконченная игра, когда Ивс совсем незакончен).
Таков фейт (fate) движкописателя, особенно, если он и сам не особо горит этим. Если бы в далёкие времена я выбрал Годот (Юнити не могу, она проприетарная), то сейчас у меня могло бы быть очень много игр. После Ивса и Чессмейтов я много раз пытался сделать ещё одну игру, но бросал в начале. И сейчас я делаю новую игру. Вот недавно несколько часов вводил в свой движок кейфреймовые анимации, а использовал бы готовый движок, смог бы реализовать нужное мне за пару минут.
И когда-то я действительно пытался сделать игру на Годоте, но не смог, там было что-то не так с пиксельным снаппингом или масштабом и я бросил это дело. Но если бы разобрался, то мог бы на раз два все игры делать и портировать под 5пять-6 платформ. Я мог бы свыкнуться с ним, но если бы у меня была нужда каждый раз снова обращаться к нему. С Блендером в начале я тоже не дружил, но прошло время и теперь я нормально к нему отношусь, хороший софт.
Теперь же я не смогу использовать ни Годот, ни какой-либо другой движок, так как у меня уже пишутся графический движок и ГУИ-библиотека, если я не буду писать с использованием их, то они не будут развиваться.
Вот такие дела. Но, может быть, со временем я перейду некоторый программерский предел и вся эта возня станет для меня пылью, а делать игру на своих движках будет гораздо легче чем на другом. Но неизвестно когда это произойдёт, к тому времени я могу уже совсем не хотеть делать игры. А сейчас я хотел бы штук 3-5 сделать, для которых уже продумана основная идея и щепотка диздока.
Интересное у тебя хобби, слежу за тредом, пиши почаще что-нибудь интересное.
Мимо местная вебмакака.
>>773255
>Теперь же я не смогу использовать ни Годот, ни какой-либо другой движок, так как у меня уже пишутся графический движок и ГУИ-библиотека, если я не буду писать с использованием их, то они не будут развиваться.
Ну вот ты сам ведь понимаешь, что если бы взялся за изучение Годо, сейчас бы уже несколько игр были доделаны или как минимум было бы легче делать новые игры. Тем более что GDScript очень похож на твой любимый питон. Что тебе мешает начать изучать Годо сейчас? Твой проект "графического движка" и "гуи-библиотеки"? А кому они кроме тебя нужны? Да и нужны ли они тебе самому? Послушай, в мире существуют тысячи языков программирования, тысячи библиотек, тысячи "движков". Некоторые из них крайне популярны, тогда как большинство остаются никому не известными. Что хорошего в том, что ты напишешь очередную никому не нужную библиотеку или движок? Окей, ты уже пишешь, но никогда не поздно остановиться и переключиться на что-то более полезное. Вот ты сейчас свой собственный ГУИ сочиняешь, а в Годо тебе было бы достаточно кинуть готовые компоненты в сцену и всё сразу заработало бы.
Самое главное тут что? Новый специализированный движок имеет смысл делать только тогда, когда ни один из существующих и доступных не подходит к задачам, которые нужно решить. К примеру, некоторые игры требуют специализированных оптимизаций, без которых они будут дико тормозить - в частности это клоны майнкрафта, "кубопесочницы". Без оптимизаций игра с кубиками будет ужасно тормозить и расстраивать игрока. Но встроенными средствами того же Годо эти оптимизации выполнить невозможно, нужно спускаться на уровень C++ и писать специальный модуль движка, чтобы создать специальный билд Годо, предназначенный для воксельных миров. Кстати, есть такой проект на гитхабе (см. ниже), но сейчас не об этом.
Так вот для большинства игр никакой специальный движок не нужен - можно обойтись готовым универсальным, таким, как Годо. К примеру, твой "чессмейтс" было бы крайне легко сделать на Годо, и никаких проблем с использованием готового движка у тебя бы не было в контексте той игры. И так со многими играми. Понимаешь, нужно выбирать инструмент под задачу и не изобретать колесо, когда его уже изобрели в тысячах разных вариациях и предлагают полностью бесплатно использовать.
Что же касается "индустриворкс", тут, к сожалению, видно, что ты просто не вытягиваешь все необходимые оптимизации. Самодельный специализированный движок может быть производительнее универсального только если ты знаешь, как реализовать специализированные оптимизации. В противном случае твой движок всегда будет проигрывать уже существующим универсальным. Возможно, стоит попробовать переписать индустриворкс на Годо с использованием воксельного модуля: https://github.com/Zylann/godot_voxel
И знаешь что? Я ведь тоже бывший движкопися. Тоже делал много попыток написать свой движок с нуля (на Object Pascal/Free Pascal), частично эти попытки были даже успешными - в смысле, мог выводить на экран 3Д модели и двигаться среди них, даже были кубики как у тебя с коллизиями. Но я слабее тебя в этом плане, я гораздо быстрее сдавался и забрасывал свои проекты. Постепенно начал пробовать готовые движки - в частности, Юнити и Годо. И сейчас вполне успешно ковыряюсь в Годо, кое-что получается и я радуюсь этому, как никогда не радовался с собственным движком, потому что теперь мои поделки похожи на игры. Конечно, у меня и на готовом движке куча проблем, но по крайней мере я не забиваю голову низкоуровневыми проблемами и занимаюсь высокоуровневыми проблемами конкретных игр. В общем, я осознал и признал, что для моих задач нужен готовый движок, а попытки написать свой движок - бесполезны и уводят меня от моей реальной цели (сделать игру). Если раньше я часто фантазировал о том, как буду хвастаться "я сделал игру с нуля на собственном движке без использования сторонних библиотек", то теперь я признаю, что никогда не смогу сделать игру с нуля без готового движка. Я не супергерой, который может писать десятки тысяч строк кода каждый день и не страдать выгоранием, потерей мотивации и депрессией из-за того что разрабатывает бесполезную и никому не нужную хрень. Я просто хочу сделать игру, хотя бы для самого себя. И если для этого нужно отказаться от принципа "только свои велосипеды", я вынужден от него отказаться, иначе никакой игры не будет.
В общем, надеюсь, ты тоже скоро осознаешь всё это, сможешь переступить через максимализм "только свои велосипеды и ничего чужого", и в результате разработаешь какую-нибудь прекрасную новую игру, которую полюбят многие игроки. У тебя получится, если ты не будешь сопротивляться помощи других людей (готовый движок - это именно помощь, даже если ты не знаешь разработчиков движка лично). Один в поле не воин, как говорится, но вместе люди способны творить великие вещи, даже если эти люди никогда друг друга не видели вживую. Если б миром правили "велосипедисты", каждый раз изобретающие колесо, чтобы изобрести велосипед, мы бы так и оставались пещерными людьми. Все достижения человечества - это передача опыта, знаний и инструментов из поколения в поколение...
>сексуальные отношения должны обозначать любовь или просто социальное развлечение между двумя или больше индвидами
Природа с тобой не согласна, у других приматов сексуальные отношения имеют сильную связь с социальным статусом в стае. А ведь человек - это в первую очередь животное, со всеми инстинктами и животными побуждениями, и мы не можем полностью избавиться от животного внутри нас - без этого животного у нас не будет никакого желания или смысла жить. Так что не стоит обижаться на тех, кто слишком явно проявляет свои животные инстинкты - просто не обращай на них внимания, их не исправить, ведь проблема на самом фундаментальном уровне, проблема в природе человека как животного.
>>773255
>Теперь же я не смогу использовать ни Годот, ни какой-либо другой движок, так как у меня уже пишутся графический движок и ГУИ-библиотека, если я не буду писать с использованием их, то они не будут развиваться.
Ну вот ты сам ведь понимаешь, что если бы взялся за изучение Годо, сейчас бы уже несколько игр были доделаны или как минимум было бы легче делать новые игры. Тем более что GDScript очень похож на твой любимый питон. Что тебе мешает начать изучать Годо сейчас? Твой проект "графического движка" и "гуи-библиотеки"? А кому они кроме тебя нужны? Да и нужны ли они тебе самому? Послушай, в мире существуют тысячи языков программирования, тысячи библиотек, тысячи "движков". Некоторые из них крайне популярны, тогда как большинство остаются никому не известными. Что хорошего в том, что ты напишешь очередную никому не нужную библиотеку или движок? Окей, ты уже пишешь, но никогда не поздно остановиться и переключиться на что-то более полезное. Вот ты сейчас свой собственный ГУИ сочиняешь, а в Годо тебе было бы достаточно кинуть готовые компоненты в сцену и всё сразу заработало бы.
Самое главное тут что? Новый специализированный движок имеет смысл делать только тогда, когда ни один из существующих и доступных не подходит к задачам, которые нужно решить. К примеру, некоторые игры требуют специализированных оптимизаций, без которых они будут дико тормозить - в частности это клоны майнкрафта, "кубопесочницы". Без оптимизаций игра с кубиками будет ужасно тормозить и расстраивать игрока. Но встроенными средствами того же Годо эти оптимизации выполнить невозможно, нужно спускаться на уровень C++ и писать специальный модуль движка, чтобы создать специальный билд Годо, предназначенный для воксельных миров. Кстати, есть такой проект на гитхабе (см. ниже), но сейчас не об этом.
Так вот для большинства игр никакой специальный движок не нужен - можно обойтись готовым универсальным, таким, как Годо. К примеру, твой "чессмейтс" было бы крайне легко сделать на Годо, и никаких проблем с использованием готового движка у тебя бы не было в контексте той игры. И так со многими играми. Понимаешь, нужно выбирать инструмент под задачу и не изобретать колесо, когда его уже изобрели в тысячах разных вариациях и предлагают полностью бесплатно использовать.
Что же касается "индустриворкс", тут, к сожалению, видно, что ты просто не вытягиваешь все необходимые оптимизации. Самодельный специализированный движок может быть производительнее универсального только если ты знаешь, как реализовать специализированные оптимизации. В противном случае твой движок всегда будет проигрывать уже существующим универсальным. Возможно, стоит попробовать переписать индустриворкс на Годо с использованием воксельного модуля: https://github.com/Zylann/godot_voxel
И знаешь что? Я ведь тоже бывший движкопися. Тоже делал много попыток написать свой движок с нуля (на Object Pascal/Free Pascal), частично эти попытки были даже успешными - в смысле, мог выводить на экран 3Д модели и двигаться среди них, даже были кубики как у тебя с коллизиями. Но я слабее тебя в этом плане, я гораздо быстрее сдавался и забрасывал свои проекты. Постепенно начал пробовать готовые движки - в частности, Юнити и Годо. И сейчас вполне успешно ковыряюсь в Годо, кое-что получается и я радуюсь этому, как никогда не радовался с собственным движком, потому что теперь мои поделки похожи на игры. Конечно, у меня и на готовом движке куча проблем, но по крайней мере я не забиваю голову низкоуровневыми проблемами и занимаюсь высокоуровневыми проблемами конкретных игр. В общем, я осознал и признал, что для моих задач нужен готовый движок, а попытки написать свой движок - бесполезны и уводят меня от моей реальной цели (сделать игру). Если раньше я часто фантазировал о том, как буду хвастаться "я сделал игру с нуля на собственном движке без использования сторонних библиотек", то теперь я признаю, что никогда не смогу сделать игру с нуля без готового движка. Я не супергерой, который может писать десятки тысяч строк кода каждый день и не страдать выгоранием, потерей мотивации и депрессией из-за того что разрабатывает бесполезную и никому не нужную хрень. Я просто хочу сделать игру, хотя бы для самого себя. И если для этого нужно отказаться от принципа "только свои велосипеды", я вынужден от него отказаться, иначе никакой игры не будет.
В общем, надеюсь, ты тоже скоро осознаешь всё это, сможешь переступить через максимализм "только свои велосипеды и ничего чужого", и в результате разработаешь какую-нибудь прекрасную новую игру, которую полюбят многие игроки. У тебя получится, если ты не будешь сопротивляться помощи других людей (готовый движок - это именно помощь, даже если ты не знаешь разработчиков движка лично). Один в поле не воин, как говорится, но вместе люди способны творить великие вещи, даже если эти люди никогда друг друга не видели вживую. Если б миром правили "велосипедисты", каждый раз изобретающие колесо, чтобы изобрести велосипед, мы бы так и оставались пещерными людьми. Все достижения человечества - это передача опыта, знаний и инструментов из поколения в поколение...
>сексуальные отношения должны обозначать любовь или просто социальное развлечение между двумя или больше индвидами
Природа с тобой не согласна, у других приматов сексуальные отношения имеют сильную связь с социальным статусом в стае. А ведь человек - это в первую очередь животное, со всеми инстинктами и животными побуждениями, и мы не можем полностью избавиться от животного внутри нас - без этого животного у нас не будет никакого желания или смысла жить. Так что не стоит обижаться на тех, кто слишком явно проявляет свои животные инстинкты - просто не обращай на них внимания, их не исправить, ведь проблема на самом фундаментальном уровне, проблема в природе человека как животного.
>Твой проект "графического движка" и "гуи-библиотеки"? А кому они кроме тебя нужны?
А кому нужны твои игры? А твои посты на дваче?
>А кому нужны твои игры?
В свои игры я могу поиграть и получить удовольствие. От своих библиотек я ни разу не получал удовольствия после того, как сделал их. К тому же на любую игру найдётся игрок (если ты не окуклился оффлайн и хотя бы минимально продвигаешь игру), а вот ноунейм библиотеку адекватные серьёзные программисты использовать не будут - ведь есть другие, более надёжные решения.
>А твои посты на дваче?
Обычно я пишу ответы на чьи-то вопросы или в поддержку тех, кому нужна помощь. В то же время библиотеку писать меня никто не просит и никому она не поможет, учитывая обилие более мощных аналогов. А когда я задаю вопросы и жду ответа, я делаю это для себя, но пользы от чужого ответа всё равно больше, чем от библиотеки, потому что ответ - это обмен опытом/знаниями, а библиотека делает только то, чему я её научил.
Короче не спорь, патологическое создание велосипедов до добра не доведёт. Именно патологическое, когда человек делает велосипеды "чтоб было", а не когда это реально нужно. Конечно, иногда нужно/лучше написать что-то с нуля, но в большинстве случаев в этом нет необходимости, если не страдать максимализмом и комплексом неполноценности ("если я использую чужой код - я не разработчик, ведь я скопипастил код, а не разработал его сам"). Я сам этой заразой страдаю, не могу отделаться от желания сделать что-то полностью с нуля просто чтобы сделать, тогда как существуют готовые решения и я никогда не сделаю что-то лучше них. Часто бывают фантазии типа "вот сделаю %велосипед_нейм%, расскажу всем в интернете, и меня сразу зауважают, стану знаменитым разработчиком". Но я понимаю, что это бред, так не будет, будет очередной никому не нужный и никому не известный проект от ноунейма, страдающего велосипедописательством.
>сожалею, что пришлось столкнуться с какими-то жизненными трудностями
Ну как жизненными трудностями, вроде бы совершенно обычное развитие человека.
У меня действительно есть парочка проблем с психикой. Первая это то, что очень мало проявляю собственную волю. Есть мемная поговорка "надо делать как нужно, а как не нужно делать не нужно". В случае, когда человек достиг достаточного уровня знаний и опыта эта поговорка переходит в "нужно проявлять свою волю". То есть надо делать что-то, а не не делать. Но делаю я то, что нужно, довольно редко. И действительно, больший стресс уменьшает вероятность того, что я проявлю собственную волю. Даже когда я понимаю, что лучше бы сейчас продумать X-ную мысль, чтобы она настроила меня на поведение, при котором я провлю свою волю с большей вероятностью, я просто могу её не подумать. Мозг не хочет.
Есть ещё вторая проблема, у меня ОКР или что-то типа того. Очень часто я продумываю некоторую мысль зацикленно, есть разные вариации, но суть одна. К счастью это лёгкая форма и мне надо просто проговорить мысленно некоторую фразу, почти без мысленного подтекста (то есть я могу думать о другом). Ах да и эту проблему я мог бы победить своей волей, если бы применял волю. Но я почти её не применяю.
Зато теперь когда люди между собой будут говорить, что они зациклились на чём-то, то буду мысленно смеяться, потому что их зацикливание это попытка решения проблемы, мозг потихоньку обрабатывает её, в то время как я просто продумываю одну и ту же фразу N раз (при чём этому N желательно быть равным трём, пяти, восьми, десяти, но никак не 6 (привет, 666, хоть это просто десятичное представление) и не 13). Ах кстати, всё-таки нельзя допускать во время продумывании фразы некоторые мысли, иначе придётся её снова повторять (а если я повторил 5 раз, то в итоге будет 6 и это значит, что надо ещё 2 раза проговорить).
В общем, вред этой проблемы состоит в том, что вместо обработки некоторой информации мой мозг занимается проговариванием фразы. К счастью, я не так часто этим занимаюсь, так что не всё потеряно. Ещё в психике образуется культура блокирования некоторых мыслей. Я естесственно, на каких-то высших уровнях их чувствую и благодаря этому понимаю, что дальше их пропускать нельзя. Но эти же мысли могут важны для обработки некоторой информации! И тогда эффективность мышления снизится.
Вроде бы, тот пост я выплакал, чтобы ты или кто-то другой написал пост поддержки (фу, поддержка на мылаче), так как он увеличит вероятность того, что я откажусь от своих ГУИ- и графичекой библиотеки и пойду изучать Годот. Ты справился со своей задачей, Спасибо.
Но с другой стороны, а что если Годот окажется в каком-то месте отвратительным? Какая-нибудь его архитектурная часть. Тогда мне придётся вернуться обратно к своим движкам, а время будет упущено.
Вообще для меня наилучшим графическим движком был бы блендер. Там есть и кривые, и меши, и модификаторы, геометрические ноды и несколько бекендов можно подлкючить, хоть самому написать. Вроде у него был какой-то движок, но никаких мануалов для него я не видел и искать не собираюсь.
Я, кстати, потихоньку делаю ещё одну игру, так вот Годот для неё подошёл бы точно. Там нет пиксельного скейла, всего немного графических объектов и вообще это почти идлер. Я относительно долго делал кейфрейм-анимацию и в итоге получил простой и не очень качественный результат. Думаю, стоит попробовать Годот, может в итоге и перейду на него... К тому же питон мне нравится гораздо больше C++. Если понравится, то можно просто дописывать свои модули и вкомпилировать их в движ.
Но не смотря на это я так просто не могу отказаться от своей ГУИ-библиотеки. У меня там и лейауты, и плоты и 9-sprite, кнопочки всякие. Может быть придётся вернуться к ней, но потом. Но есть проблема — ГУИ-библиотека базируется на моём графическом движке. И это что, мне придётся отдирать его? Уууууууууууууууу... Хотя по-факту зависимость ГУИ-библиотеки от графического движка это плоховато. Особенно учитывая, что высшие виджеты (кнопки, прогрессбары, слайдеры...) это просто стейт-машины, реагирующие на некоторые эвенты (от мышки, клавиатуры, экрана) и меняющие графические свойства виджетов + вызывающие коллбеки.
Вообще, если вспомнить об играх, которые я хотел сделать (у меня диздоки сюжета заполнены процентов на 10-20, а сюжета много), то сделать на своих движках было бы сложно. Есть и просто платформеры, а есть РПГ как скайрим, но с боёвкой как в майнкрафте. Я тоже не супермен и писать код для скиннинга (ещё и в шейдерах) сложновато, а от этого дизмораль небольшааая. Так что действительно стоит попробовать годо. Надеюсь, там есть лоды и с инверсной кинематикой особых проблем не возникнет, в крайнем случае придётся самому модулёк написать...
И насчёт повышения велосипедстов в человечестве. Я раздумывал над этим и понял, что действительно, были бы все велосипедистами и независимыми, так и бегали бы по пещерам. Но благодаря рабской натуре большинства людей, мы смогли достичь великого, кто-то даже на Луну и Марс забросил роботов. Людям впору становиться велосипедистами лет через 50, тогда, может быть, появится доступный сильный ИИ и интеллектуальные способности одного человека будут характеризоваться кол-вом у него компьютерных вычислительных мощностей, а также налаженной связью меж ними.
Ну и про сексуальные отношения это скорее шутка. Но всё же я думаю, что человек изменяем и если я могу спропагандировать культуру подходящую мне, то почему бы и нет.
>сожалею, что пришлось столкнуться с какими-то жизненными трудностями
Ну как жизненными трудностями, вроде бы совершенно обычное развитие человека.
У меня действительно есть парочка проблем с психикой. Первая это то, что очень мало проявляю собственную волю. Есть мемная поговорка "надо делать как нужно, а как не нужно делать не нужно". В случае, когда человек достиг достаточного уровня знаний и опыта эта поговорка переходит в "нужно проявлять свою волю". То есть надо делать что-то, а не не делать. Но делаю я то, что нужно, довольно редко. И действительно, больший стресс уменьшает вероятность того, что я проявлю собственную волю. Даже когда я понимаю, что лучше бы сейчас продумать X-ную мысль, чтобы она настроила меня на поведение, при котором я провлю свою волю с большей вероятностью, я просто могу её не подумать. Мозг не хочет.
Есть ещё вторая проблема, у меня ОКР или что-то типа того. Очень часто я продумываю некоторую мысль зацикленно, есть разные вариации, но суть одна. К счастью это лёгкая форма и мне надо просто проговорить мысленно некоторую фразу, почти без мысленного подтекста (то есть я могу думать о другом). Ах да и эту проблему я мог бы победить своей волей, если бы применял волю. Но я почти её не применяю.
Зато теперь когда люди между собой будут говорить, что они зациклились на чём-то, то буду мысленно смеяться, потому что их зацикливание это попытка решения проблемы, мозг потихоньку обрабатывает её, в то время как я просто продумываю одну и ту же фразу N раз (при чём этому N желательно быть равным трём, пяти, восьми, десяти, но никак не 6 (привет, 666, хоть это просто десятичное представление) и не 13). Ах кстати, всё-таки нельзя допускать во время продумывании фразы некоторые мысли, иначе придётся её снова повторять (а если я повторил 5 раз, то в итоге будет 6 и это значит, что надо ещё 2 раза проговорить).
В общем, вред этой проблемы состоит в том, что вместо обработки некоторой информации мой мозг занимается проговариванием фразы. К счастью, я не так часто этим занимаюсь, так что не всё потеряно. Ещё в психике образуется культура блокирования некоторых мыслей. Я естесственно, на каких-то высших уровнях их чувствую и благодаря этому понимаю, что дальше их пропускать нельзя. Но эти же мысли могут важны для обработки некоторой информации! И тогда эффективность мышления снизится.
Вроде бы, тот пост я выплакал, чтобы ты или кто-то другой написал пост поддержки (фу, поддержка на мылаче), так как он увеличит вероятность того, что я откажусь от своих ГУИ- и графичекой библиотеки и пойду изучать Годот. Ты справился со своей задачей, Спасибо.
Но с другой стороны, а что если Годот окажется в каком-то месте отвратительным? Какая-нибудь его архитектурная часть. Тогда мне придётся вернуться обратно к своим движкам, а время будет упущено.
Вообще для меня наилучшим графическим движком был бы блендер. Там есть и кривые, и меши, и модификаторы, геометрические ноды и несколько бекендов можно подлкючить, хоть самому написать. Вроде у него был какой-то движок, но никаких мануалов для него я не видел и искать не собираюсь.
Я, кстати, потихоньку делаю ещё одну игру, так вот Годот для неё подошёл бы точно. Там нет пиксельного скейла, всего немного графических объектов и вообще это почти идлер. Я относительно долго делал кейфрейм-анимацию и в итоге получил простой и не очень качественный результат. Думаю, стоит попробовать Годот, может в итоге и перейду на него... К тому же питон мне нравится гораздо больше C++. Если понравится, то можно просто дописывать свои модули и вкомпилировать их в движ.
Но не смотря на это я так просто не могу отказаться от своей ГУИ-библиотеки. У меня там и лейауты, и плоты и 9-sprite, кнопочки всякие. Может быть придётся вернуться к ней, но потом. Но есть проблема — ГУИ-библиотека базируется на моём графическом движке. И это что, мне придётся отдирать его? Уууууууууууууууу... Хотя по-факту зависимость ГУИ-библиотеки от графического движка это плоховато. Особенно учитывая, что высшие виджеты (кнопки, прогрессбары, слайдеры...) это просто стейт-машины, реагирующие на некоторые эвенты (от мышки, клавиатуры, экрана) и меняющие графические свойства виджетов + вызывающие коллбеки.
Вообще, если вспомнить об играх, которые я хотел сделать (у меня диздоки сюжета заполнены процентов на 10-20, а сюжета много), то сделать на своих движках было бы сложно. Есть и просто платформеры, а есть РПГ как скайрим, но с боёвкой как в майнкрафте. Я тоже не супермен и писать код для скиннинга (ещё и в шейдерах) сложновато, а от этого дизмораль небольшааая. Так что действительно стоит попробовать годо. Надеюсь, там есть лоды и с инверсной кинематикой особых проблем не возникнет, в крайнем случае придётся самому модулёк написать...
И насчёт повышения велосипедстов в человечестве. Я раздумывал над этим и понял, что действительно, были бы все велосипедистами и независимыми, так и бегали бы по пещерам. Но благодаря рабской натуре большинства людей, мы смогли достичь великого, кто-то даже на Луну и Марс забросил роботов. Людям впору становиться велосипедистами лет через 50, тогда, может быть, появится доступный сильный ИИ и интеллектуальные способности одного человека будут характеризоваться кол-вом у него компьютерных вычислительных мощностей, а также налаженной связью меж ними.
Ну и про сексуальные отношения это скорее шутка. Но всё же я думаю, что человек изменяем и если я могу спропагандировать культуру подходящую мне, то почему бы и нет.
>вроде бы совершенно обычное развитие человека
Ты говорил, что у тебя возникла проблема с памятью, а в разработке игры ты пытаешься закрыться от стрессовой ситуации ИРЛ (которой, очевидно, не можешь избежать иными способами). Это ненормальное состояние, требующее помощи со стороны.
>очень мало проявляю собственную волю
Это может быть либо обычная избалованность (родственники делали всё за тебя и тебе никогда не нужно было проявлять инициативу - всё было доступно по первому желанию), либо абулия. С первым можно самостоятельно справиться, а вот абулия - симптом серьёзных психических расстройств, с ней нужно к психиатру, и чем раньше, тем лучше (будет прогрессировать).
>ОКР
>надо просто проговорить мысленно некоторую фразу
Это компульсия, и рано или поздно она перестанет действовать. Чтобы по-настоящему побороть обсессию, её нужно игнорировать, а любые виды компульсий лишь усиливают обсессию, загоняя тебя в цикл обсессия - компульсия - обсессия... Я сам страдаю от ОКР, было время, когда я мог больше часа сидеть и тщетно повторять компульсию. Удалось облегчить состояние до терпимого только когда я начал бороться с компульсиями, стараясь игнорировать обсессии. Со временем, без подпитки компульсиями, множество моих обсессий перестали возникать. Но, конечно, игнорировать тяжело, т.к. обсессия всегда сопровождается негативными переживаниями.
>при чём этому N желательно быть равным трём, пяти, восьми, десяти
>нельзя допускать во время продумывании фразы некоторые мысли, иначе придётся её снова повторять
>если я повторил 5 раз, то в итоге будет 6 и это значит, что надо ещё 2 раза проговорить
У меня очень похожая хрень. Стараюсь совершать свои компульсии число раз, равное степени двойки: 2, 4, 8, 16, 32, 64... Обычно группами по 4 или 8. Собственно, когда дело начало доходить до 32 и более, я осознал всю тяжесть проблемы и стал сдерживать себя на 2, 4, максимум 8, и в целом стал бороться с самим началом компульсивного действия. И да, тоже есть число, которое я компульсивно избегаю, оно возникло из-за психической травмы вследствие случайного чтения отрывка из одной художественной литературы (да, я настолько впечатлительный)...
>фу, поддержка на мылаче
Тут много неплохих людей сидит, но они рассредоточены по тематическим разделам, а тролли успевают нагадить раньше них. Просто избегай /b/ и наиболее токсичных разделов (/po/ и т.п.). В /gd/ неплохое сообщество, просто сюда приходят геймдев обсуждать, а не помогать психологически. С психическими проблемами нужно в /psy/, там поймут и помогут по мере возможности.
>а что если Годот окажется в каком-то месте отвратительным?
Скорее всего это будет из-за твоего непонимания проблемы, почему он в этом месте именно такой. И разрабатывая свой движок ты рано или поздно придёшь к такому же или похожему "отвратительному" решению, но время будет упущено. Так что проще всего в первую очередь понять, простить и смириться, а потом, возможно, до тебя дойдёт понимание, почему всё именно так. Кроме того, т.к. Годо опенсурс, ты можешь сделать форк и попытаться избавить его от этой "отвратительной" особенности, и если твоя идея правильная, другие люди поблагодарят тебя за её реализацию. А если ты не можешь избавить Годо от этого, как ты можешь избавить от этого свой движок? Вот и выходит, что остаётся только смириться - никто и ничто не совершенно в этом мире, а разработка ПО - всегда компромисс.
Стремление к совершенному ПО похвально, но ведёт к неудачам из-за того, что ты отказываешься от приемлемых решений, но совершенных достичь физически не можешь, в результате вся работа буксует и ты впадаешь в депрессию из-за недостижимости поставленных целей. Это максимализм или перфекционизм и с ним нужно бороться, чтобы достичь многого в приемлемые сроки (те же игры разрабатывать).
>Вроде у него был какой-то движок
BGE. Из официального Блендера убрали, но есть форк UPBGE:
https://upbge.org/ и https://github.com/UPBGE/upbge
Он активно развивается и у него достаточно разработчиков. Но на практике я пробовал только старый BGE много лет назад, и мне не очень нравились его графические интерфейсы, так что не могу ничего сказать про то, насколько хорош UPBGE. Но как минимум у него есть твой любимый питон и он полностью опенсурс. Кстати, BGE в прошлом (00-е) часто использовали инди, и его игры даже запускались в браузере через специальный плагин. Всё погубила потеря поддержки со стороны Blender Foundation, которая, видимо, решила сфокусировать силы на 3D моделировании.
>мануалы искать
https://upbge.org/documentation
https://upbge.org/manual
https://upbge.org/manual_api_0.2.5
>можно просто дописывать свои модули и вкомпилировать их в движ
Ты сначала с базовым функционалом разберись: почитай мануал, выполни туториалы. Проблема многих в том, что они начинают изобретать велосипед на готовом движке, не зная о существовании встроенных функций, более быстрых и удобных, а потом жалуются на то, что "движок не движок, медленно и неудобно". Также ознакомься с существующими ассетами и готовыми проектами, тоже может сильно помочь.
>У меня там и лейауты, и плоты и 9-sprite, кнопочки всякие.
Гуй у Годо очень продвинутый, большинство фич тебе даже не потребуется в реальном проекте. Ты делаешь фичи ради фич и гордишься их наличием, а должен делать игру и использовать фичи по мере необходимости, приделывая только те, что действительно нужны.
>ГУИ-библиотека базируется на моём графическом движке. И это что, мне придётся отдирать его?
По-хорошему гуй должен был быть абстрагирован от графического движка. Но вообще, уверен, он тебе просто не понадобится, если ты внимательно разберёшься с гуем Годо. Зачем притягивать свою библиотеку для рендеринга кнопок, если уже есть встроенные функции для этих кнопок, и они наверняка лучше твоих? Для конечного пользователя а.к.а. игрока вообще без разницы, какие библиотеки ты используешь - ему важно только то, насколько удобно пользоваться интерфейсом, а во вторую очередь - насколько красиво он выглядит. И удобство, и красоту ты можешь сделать средствами Годо, следовательно, нет причин приделывать свой велосипед.
Кстати, ты делал редактор форм/ГУИ для своей библиотеки? Или ты до сих пор всё через текстовые файлы конфигураций/через код описываешь? Просто не вижу смысла в библиотеке ГУИ, для которой даже графического редактора (дизайнера) нет.
Хотя, если честно, я тоже делал самодельные кнопки на основе GDI и bitblt(). Но это было очень давно и там было много лапши в коде, я не мог понять собственный код. Сейчас бы я запросто написал собственный ГУИ, но не вижу в этом смысла (иногда бывает желание чисто из любопытства, но без смысла делать я ничего не буду).
>сделать на своих движках было бы сложно
Хорошо, что ты это понимаешь. Я хватался делать свой движок, не имея ни малейшего представления о том, как игровые движки устроены, как делать игры и насколько сложно реализовать ту или иную киллер-фичу. В результате обламывался и забивал на все свои идеи и проекты.
>Есть и просто платформеры, а есть РПГ как скайрим, но с боёвкой как в майнкрафте.
Начни с платформеров. Как минимум для того, чтобы поднять уверенность в своих силах. А то начнёшь делать РПГ, одна фича не получится, другая фича не получится, начнёшь расстраиваться и опять вернёшься пилить велосипедный движок вместо желаемых игр, как это со мной неоднократно случалось.
>вроде бы совершенно обычное развитие человека
Ты говорил, что у тебя возникла проблема с памятью, а в разработке игры ты пытаешься закрыться от стрессовой ситуации ИРЛ (которой, очевидно, не можешь избежать иными способами). Это ненормальное состояние, требующее помощи со стороны.
>очень мало проявляю собственную волю
Это может быть либо обычная избалованность (родственники делали всё за тебя и тебе никогда не нужно было проявлять инициативу - всё было доступно по первому желанию), либо абулия. С первым можно самостоятельно справиться, а вот абулия - симптом серьёзных психических расстройств, с ней нужно к психиатру, и чем раньше, тем лучше (будет прогрессировать).
>ОКР
>надо просто проговорить мысленно некоторую фразу
Это компульсия, и рано или поздно она перестанет действовать. Чтобы по-настоящему побороть обсессию, её нужно игнорировать, а любые виды компульсий лишь усиливают обсессию, загоняя тебя в цикл обсессия - компульсия - обсессия... Я сам страдаю от ОКР, было время, когда я мог больше часа сидеть и тщетно повторять компульсию. Удалось облегчить состояние до терпимого только когда я начал бороться с компульсиями, стараясь игнорировать обсессии. Со временем, без подпитки компульсиями, множество моих обсессий перестали возникать. Но, конечно, игнорировать тяжело, т.к. обсессия всегда сопровождается негативными переживаниями.
>при чём этому N желательно быть равным трём, пяти, восьми, десяти
>нельзя допускать во время продумывании фразы некоторые мысли, иначе придётся её снова повторять
>если я повторил 5 раз, то в итоге будет 6 и это значит, что надо ещё 2 раза проговорить
У меня очень похожая хрень. Стараюсь совершать свои компульсии число раз, равное степени двойки: 2, 4, 8, 16, 32, 64... Обычно группами по 4 или 8. Собственно, когда дело начало доходить до 32 и более, я осознал всю тяжесть проблемы и стал сдерживать себя на 2, 4, максимум 8, и в целом стал бороться с самим началом компульсивного действия. И да, тоже есть число, которое я компульсивно избегаю, оно возникло из-за психической травмы вследствие случайного чтения отрывка из одной художественной литературы (да, я настолько впечатлительный)...
>фу, поддержка на мылаче
Тут много неплохих людей сидит, но они рассредоточены по тематическим разделам, а тролли успевают нагадить раньше них. Просто избегай /b/ и наиболее токсичных разделов (/po/ и т.п.). В /gd/ неплохое сообщество, просто сюда приходят геймдев обсуждать, а не помогать психологически. С психическими проблемами нужно в /psy/, там поймут и помогут по мере возможности.
>а что если Годот окажется в каком-то месте отвратительным?
Скорее всего это будет из-за твоего непонимания проблемы, почему он в этом месте именно такой. И разрабатывая свой движок ты рано или поздно придёшь к такому же или похожему "отвратительному" решению, но время будет упущено. Так что проще всего в первую очередь понять, простить и смириться, а потом, возможно, до тебя дойдёт понимание, почему всё именно так. Кроме того, т.к. Годо опенсурс, ты можешь сделать форк и попытаться избавить его от этой "отвратительной" особенности, и если твоя идея правильная, другие люди поблагодарят тебя за её реализацию. А если ты не можешь избавить Годо от этого, как ты можешь избавить от этого свой движок? Вот и выходит, что остаётся только смириться - никто и ничто не совершенно в этом мире, а разработка ПО - всегда компромисс.
Стремление к совершенному ПО похвально, но ведёт к неудачам из-за того, что ты отказываешься от приемлемых решений, но совершенных достичь физически не можешь, в результате вся работа буксует и ты впадаешь в депрессию из-за недостижимости поставленных целей. Это максимализм или перфекционизм и с ним нужно бороться, чтобы достичь многого в приемлемые сроки (те же игры разрабатывать).
>Вроде у него был какой-то движок
BGE. Из официального Блендера убрали, но есть форк UPBGE:
https://upbge.org/ и https://github.com/UPBGE/upbge
Он активно развивается и у него достаточно разработчиков. Но на практике я пробовал только старый BGE много лет назад, и мне не очень нравились его графические интерфейсы, так что не могу ничего сказать про то, насколько хорош UPBGE. Но как минимум у него есть твой любимый питон и он полностью опенсурс. Кстати, BGE в прошлом (00-е) часто использовали инди, и его игры даже запускались в браузере через специальный плагин. Всё погубила потеря поддержки со стороны Blender Foundation, которая, видимо, решила сфокусировать силы на 3D моделировании.
>мануалы искать
https://upbge.org/documentation
https://upbge.org/manual
https://upbge.org/manual_api_0.2.5
>можно просто дописывать свои модули и вкомпилировать их в движ
Ты сначала с базовым функционалом разберись: почитай мануал, выполни туториалы. Проблема многих в том, что они начинают изобретать велосипед на готовом движке, не зная о существовании встроенных функций, более быстрых и удобных, а потом жалуются на то, что "движок не движок, медленно и неудобно". Также ознакомься с существующими ассетами и готовыми проектами, тоже может сильно помочь.
>У меня там и лейауты, и плоты и 9-sprite, кнопочки всякие.
Гуй у Годо очень продвинутый, большинство фич тебе даже не потребуется в реальном проекте. Ты делаешь фичи ради фич и гордишься их наличием, а должен делать игру и использовать фичи по мере необходимости, приделывая только те, что действительно нужны.
>ГУИ-библиотека базируется на моём графическом движке. И это что, мне придётся отдирать его?
По-хорошему гуй должен был быть абстрагирован от графического движка. Но вообще, уверен, он тебе просто не понадобится, если ты внимательно разберёшься с гуем Годо. Зачем притягивать свою библиотеку для рендеринга кнопок, если уже есть встроенные функции для этих кнопок, и они наверняка лучше твоих? Для конечного пользователя а.к.а. игрока вообще без разницы, какие библиотеки ты используешь - ему важно только то, насколько удобно пользоваться интерфейсом, а во вторую очередь - насколько красиво он выглядит. И удобство, и красоту ты можешь сделать средствами Годо, следовательно, нет причин приделывать свой велосипед.
Кстати, ты делал редактор форм/ГУИ для своей библиотеки? Или ты до сих пор всё через текстовые файлы конфигураций/через код описываешь? Просто не вижу смысла в библиотеке ГУИ, для которой даже графического редактора (дизайнера) нет.
Хотя, если честно, я тоже делал самодельные кнопки на основе GDI и bitblt(). Но это было очень давно и там было много лапши в коде, я не мог понять собственный код. Сейчас бы я запросто написал собственный ГУИ, но не вижу в этом смысла (иногда бывает желание чисто из любопытства, но без смысла делать я ничего не буду).
>сделать на своих движках было бы сложно
Хорошо, что ты это понимаешь. Я хватался делать свой движок, не имея ни малейшего представления о том, как игровые движки устроены, как делать игры и насколько сложно реализовать ту или иную киллер-фичу. В результате обламывался и забивал на все свои идеи и проекты.
>Есть и просто платформеры, а есть РПГ как скайрим, но с боёвкой как в майнкрафте.
Начни с платформеров. Как минимум для того, чтобы поднять уверенность в своих силах. А то начнёшь делать РПГ, одна фича не получится, другая фича не получится, начнёшь расстраиваться и опять вернёшься пилить велосипедный движок вместо желаемых игр, как это со мной неоднократно случалось.
Делай дальше, OP. Жаль.
>Жаль что не запускается
Ошибка какая-то? У меня запускалось... год назад)
>Делай дальше
Тред-то почитай, он уже несколько раз проект забросил.
Его бы перекатить на minetest, например, или на другой воксельный движок (тут была ссылка на воксельный модуль для Godot), тогда, может, чего толкового и получилось бы.
Очень жаль.
Врёшь, шиза это F20. Он упомянул про ОКР, я дал пару советов и всё, дальше было обсуждение разработки игр. Зачем иронизировать по этому поводу? У нас в разделе полно психически нездоровых, будь толерантнее что ли.
Как будто получил удар пощечиной
>В кубаче, как мне кажется, куда лучше стрелять лучами, нежели растеризацией заниматься. Из-за того, что сетка однородная, можно очень оптимально искать пересечения луча со сценой
Уже видимо не актуально, но все-таки оставлю ссылку на кое-что похожее - четырехмерные кубы с рендером через рейкастинг, есть реализация и на шейдерах:
https://habr.com/ru/post/534964/
https://github.com/IronLynx/maze4d
Штош, посмотрел я движки. После этого селся переписывать свой старый.
Начнём с Годота. Когда я открыл его, вполне легко смог перенсти gltf-модель, посмотреть на неё через камеру. Немного раздражало отстутсвие управления как в блендере. Но потом я заметил то, что исправлять слишком сложно. В редакторе 3D-сцена высота обозначается осью Y, а не Z. Я и сам когда-то обозначала её игреком, но недавно начал топить за Z. И в редакторе 2D-сцены зачем-то 0,0 это левый верхний угол, а не левый нижний. Типа, раз кто-то в древности решил отсчитывать сверху, то и тут теперь так будет?
К этой отвратительности можно было привыкнуть, в крайнем случае, править сорцы. Но я решил не заморачиваться и попробовать UPBGE.
Как его запустить я не понял. Нет в пакетном менеджере моего дистрибутива — значит сложно разбираться. Да и лицензия мутная, не нравится мне GPL.
Вот я и понял, что раз я считаю 3D-сцену блендера наилучшей моделью из всех, что я знаю, значит надо научиться экспортировать её в формат файла моего движка. Что я начал делать, сделал загрузку мешей, камеры, даже рига. (слева — моё, справа — блендер EVE рендер)
Вот как раз недавно застрял на нём. Сначала пытался в вертекс-шейдере сделать скиннинг, но чего-то отображались вертексы, связанные с первым джоинтом или что-то такое. Спустя несколько часов так и не понял, в чём проблема и решил написать софт-реализацию скиннинга. Пока получилось не очень, что-то там с матрицами напутал и вертсы бесолбасит (но то что конечности вертятся сами по себе это нормально, это я проверяю скиннинг). В общем, всё ещё впереди.
Но на самом деле я уже давно понимаю, что не так. Мне просто не нравится делать игры. Нравилось бы — каждый день что-то вводил бы. Писать графический движок было гораздо интереснее, чем игры. И пока я тут плакался в тексты, говорил, что начал писать ещё одну игру, уже отложил её и сел писать другую. Как я думал, эта будет проще. Но нет, это не так. Не знаю как я смогу делать игры, если их разработка занимает более 3-х дней (или семи, если для больших). А мне и не надо.
Надо было в детсве создавать игры. Я тогда был более фрустрирован и мог бы тратить много времени на это. Но вместо этого я ходил в школку, а в свободное время играл в компунтер. Летом на протяжении где-то месяца по 7-8 часов играл в майнкрафт. Но от этой игры почти никакого наследия, кроме горстки воспоминаний, не осталось. Как только я злился из-за чего-то, удалял мир!
Вот так же и играми. Я на глубоком уровне не вижу смысла в создании виртуальных миров. Даже когда в детстве пытался создать манямирок в майнкрафте с модом CustomNPC, меня со временем переворачивало и всё. Очередное удаление мира.
И мой опыт показывает, что в ближайшие месяца я не смогу на этом заработать, потому что каждый раз бросаю одну игру и начинаю новую.
Максимум, на что меня хватило это недоделанные Ивс и Чессмейтс. А если бы я научился программировать лет в 13, то было бы + 2 года на Индустриворкс и, может быть, сделал бы что-то играбельное. А если бы в 8 лет, то не представляю, что случилось бы.
Пора заниматься взрослыми вещами...
>Кстати, ты делал редактор форм/ГУИ для своей библиотеки?
Делал всё через код, планировал в будущем создать язык разметки моего ГУИ и программу-дизайнер для неё и, возможно, продавать её в стиме как движок для создания ГУИшных программ (с возможностью подключения всяких внешних участков кода и всё такое).
Но вообще, если развитие моего графического движка выйдет за пределы, то это будет просто игровой движок. А что там нужно кроме графики? Хитбоксы для физики и свойства, заданные пользователем. Парочка систем и готово. Если я когда-то сделаю движок для ГУИ-программ, то имеет смысл его сразу сделать и игровым движком.
Штош, посмотрел я движки. После этого селся переписывать свой старый.
Начнём с Годота. Когда я открыл его, вполне легко смог перенсти gltf-модель, посмотреть на неё через камеру. Немного раздражало отстутсвие управления как в блендере. Но потом я заметил то, что исправлять слишком сложно. В редакторе 3D-сцена высота обозначается осью Y, а не Z. Я и сам когда-то обозначала её игреком, но недавно начал топить за Z. И в редакторе 2D-сцены зачем-то 0,0 это левый верхний угол, а не левый нижний. Типа, раз кто-то в древности решил отсчитывать сверху, то и тут теперь так будет?
К этой отвратительности можно было привыкнуть, в крайнем случае, править сорцы. Но я решил не заморачиваться и попробовать UPBGE.
Как его запустить я не понял. Нет в пакетном менеджере моего дистрибутива — значит сложно разбираться. Да и лицензия мутная, не нравится мне GPL.
Вот я и понял, что раз я считаю 3D-сцену блендера наилучшей моделью из всех, что я знаю, значит надо научиться экспортировать её в формат файла моего движка. Что я начал делать, сделал загрузку мешей, камеры, даже рига. (слева — моё, справа — блендер EVE рендер)
Вот как раз недавно застрял на нём. Сначала пытался в вертекс-шейдере сделать скиннинг, но чего-то отображались вертексы, связанные с первым джоинтом или что-то такое. Спустя несколько часов так и не понял, в чём проблема и решил написать софт-реализацию скиннинга. Пока получилось не очень, что-то там с матрицами напутал и вертсы бесолбасит (но то что конечности вертятся сами по себе это нормально, это я проверяю скиннинг). В общем, всё ещё впереди.
Но на самом деле я уже давно понимаю, что не так. Мне просто не нравится делать игры. Нравилось бы — каждый день что-то вводил бы. Писать графический движок было гораздо интереснее, чем игры. И пока я тут плакался в тексты, говорил, что начал писать ещё одну игру, уже отложил её и сел писать другую. Как я думал, эта будет проще. Но нет, это не так. Не знаю как я смогу делать игры, если их разработка занимает более 3-х дней (или семи, если для больших). А мне и не надо.
Надо было в детсве создавать игры. Я тогда был более фрустрирован и мог бы тратить много времени на это. Но вместо этого я ходил в школку, а в свободное время играл в компунтер. Летом на протяжении где-то месяца по 7-8 часов играл в майнкрафт. Но от этой игры почти никакого наследия, кроме горстки воспоминаний, не осталось. Как только я злился из-за чего-то, удалял мир!
Вот так же и играми. Я на глубоком уровне не вижу смысла в создании виртуальных миров. Даже когда в детстве пытался создать манямирок в майнкрафте с модом CustomNPC, меня со временем переворачивало и всё. Очередное удаление мира.
И мой опыт показывает, что в ближайшие месяца я не смогу на этом заработать, потому что каждый раз бросаю одну игру и начинаю новую.
Максимум, на что меня хватило это недоделанные Ивс и Чессмейтс. А если бы я научился программировать лет в 13, то было бы + 2 года на Индустриворкс и, может быть, сделал бы что-то играбельное. А если бы в 8 лет, то не представляю, что случилось бы.
Пора заниматься взрослыми вещами...
>Кстати, ты делал редактор форм/ГУИ для своей библиотеки?
Делал всё через код, планировал в будущем создать язык разметки моего ГУИ и программу-дизайнер для неё и, возможно, продавать её в стиме как движок для создания ГУИшных программ (с возможностью подключения всяких внешних участков кода и всё такое).
Но вообще, если развитие моего графического движка выйдет за пределы, то это будет просто игровой движок. А что там нужно кроме графики? Хитбоксы для физики и свойства, заданные пользователем. Парочка систем и готово. Если я когда-то сделаю движок для ГУИ-программ, то имеет смысл его сразу сделать и игровым движком.
>После этого селся переписывать свой старый.
Я тоже через этот период проходил, пока окончательно не разочаровался в своих силах.
>легко смог перенсти gltf-модель
Потому что это рекомендуемый формат для Годо.
>отстутсвие управления как в блендере
Это верно, но в Годо есть свои хоткеи, например:
Q - режим выделения
W - перемещение
E - вращение
R - масштаб
Да, приходится мышкой тягать виртуальные ручки, но так делают во всех 3Д пакетах включая Блендер, да и в большинстве случаев удобнее ввести координаты с нумпада в соответствующие поля в инспекторе объектов. Всё-таки редактор сцен не предназначен для моделирования, ему не нужно сложных хоткеев.
>В редакторе 3D-сцена высота обозначается осью Y, а не Z
Во-первых, ось Y вроде как общепринятый стандарт, это только в Блендере необычное соглашение (за что Блендер часто ругают). Откуда пошло? Ось Y - это вертикаль монитора, направленная вниз, тогда как ось Z - "глубина" монитора, так принято с прошлого века. Во-вторых, когда экспортируешь модели из Блендера в формате GLTF, там автоматически ставится галочка "axis +Y is up" или что-то в этом роде, то есть ничего исправлять после импорта в Годо не нужно. Возможно, ты просто снял эту галочку при экспорте...
>в редакторе 2D-сцены зачем-то 0,0 это левый верхний угол, а не левый нижний
>кто-то в древности решил отсчитывать сверху, то и тут теперь так будет?
"Перевёрнутая" ось Y - это особенность мониторов и видеокарт. Да, конечно, ты можешь в своём движке переворачивать ось для собственного удобства. Но это значит, что компьютер пользователя будет выполнять лишние операции над координатами всякий раз, когда твой код будет пытаться что-то вывести на экран, потому что экранный буфер начинается с левого верхнего угла экрана.
Кроме того, я не вижу никаких преимуществ в том, чтобы размещать точку (0;0) в левом нижнем углу экрана. Зачем? Кому нужно - всегда может сместить оси координат в своём коде.
>отвратительности
Слушай, если тебе отвратительно устройство видеокарт, дисплеев м другого железа - почему бы тебе не разработать свой собственный компьютер с нуля? Микрочипы можно создавать в домашних условиях, сегодня достаточно легко создать "на коленке" компьютер с процессором уровня 8080. Давай, смелей, а то весь мир пользуется отвратительным железом, с которым ты не можешь смириться...
>UPBGE.
>Как его запустить я не понял
Качаешь билд для своей ОС и запускаешь.
https://github.com/UPBGE/upbge/releases
Тебе нужен архив, заканчивающийся "...Linux64.tar.xz"
В архиве будет файл "Blender" без расширения - это исполняемый файл, как его запустить - обращайся к документации своего дистрибутива. Там вроде нужно поставить галочку в свойствах файла "исполняемый файл", и тогда можно будет его запустить через терминал или ярлык на рабочем столе.
>Нет в пакетном менеджере моего дистрибутива — значит сложно разбираться.
Зачем было ставить Линукс, если ты не можешь разобраться с установкой приложений на линуксе? Пакетные менеджеры придумали для глупеньких домохозяек и детишек - настоящие красноглазые линуксоиды собирают всё своё ПО ручками из исходных кодов на гитхабе.
>Да и лицензия мутная, не нравится мне GPL.
Конкретно на твои игры, сделанные на этом движке, эта лицензия никак не влияет. Ты обязан делать открытыми только изменения в исходные коды движка, и распространять под GPL изменённые версии движка. GPL борется за свободу свободного ПО, чтобы негодяи из коммерческих фирм не могли использовать свободный софт в своих несвободных программах, но на игровой контент и игровые скрипты это никак не распространяется.
>надо научиться экспортировать её в формат файла моего движка. Что я начал делать, сделал загрузку мешей, камеры, даже рига.
Эм, если у тебя свой формат - то тебе нужно написать плагин экспорта для Блендера, чтобы он сразу в твой формат экспортировал. Если ты делаешь загрузку из .blend, то ты, по сути, пишешь импорт этого формата в свой движок... Ну, не важно.
>Писать графический движок было гораздо интереснее
Тогда найди какой-нибудь опенсурс графический движок, форкни его, модифицируй и делай пул-реквесты, так хоть общественная польза какая от твоих действий будет.
>Не знаю как я смогу делать игры, если их разработка занимает более 3-х дней
На геймджемах люди делают полноценные игры всего за 48 часов, а иногда и за 24 часа (естественно, несколько часов пропускают из-за сна прямо на рабочем месте). Правда, обычно используют готовые движки, да и для такой скорости нужно иметь хороший опыт в использовании средств движка и других инструментов, то есть абсолютный нуб на таком геймджеме ничего не сделает. Но ты попробуй поучаствовать, некоторым очень нравится.
>Я на глубоком уровне не вижу смысла в создании виртуальных миров.
Хех, у меня наоборот, я не вижу смысла в создании игр, я вижу смысл только в создании виртуальных миров. Это разные вещи, потому что игры создаются для развлечения игроков и получения с них прибыли, а виртуальный мир живёт сам по себе, не нуждаясь в зрителе/игроке. Хотя пока что у меня так ничего и не получилось, да и производительность ПК недостаточна для полноценной сложной симуляции, а простые симуляции слишком скучные.
>Пора заниматься взрослыми вещами...
По-твоему, разрабатывать игры - это так, детское баловство?
>Делал всё через код, планировал в будущем создать язык разметки моего ГУИ и программу-дизайнер для неё
Чего там планировать-то? Если у тебя есть полноценна ГУИ библиотека со всеми базовыми виджетами, то ты без проблем должен собрать на её базе WYSIWYG дизайнер форм. Через код править визуальные интерфейсы очень сложно.
>Если я когда-то сделаю движок для ГУИ-программ, то имеет смысл его сразу сделать и игровым движком.
Ничего подобного. Примеры таких "ГУИ движков", не имеющих отношения к играм:
- VCL (Delphi) и LCL (Lazarus)
- Qt и GTK на линуксе
- что-то такое есть в серии Visual Studio (C#, Basic)
- что-то такое есть у обычной Java SE
- стандартные окошки Android
Ну и много где ещё. Игровой движок - это отдельная сложная система, которой, конечно, нужен GUI, но требования к GUI игрового движка совсем не те, что требования к GUI обычных прикладных программ. Хотя, разумеется, никто не запрещает делать игры на базе WinAPI окошек (пример: классический Сапёр), и никто не запрещает делать прикладные программы на игровых движках. Просто ни то, ни другое не очень удобно на практике из-за разной специализации инструментов.
>После этого селся переписывать свой старый.
Я тоже через этот период проходил, пока окончательно не разочаровался в своих силах.
>легко смог перенсти gltf-модель
Потому что это рекомендуемый формат для Годо.
>отстутсвие управления как в блендере
Это верно, но в Годо есть свои хоткеи, например:
Q - режим выделения
W - перемещение
E - вращение
R - масштаб
Да, приходится мышкой тягать виртуальные ручки, но так делают во всех 3Д пакетах включая Блендер, да и в большинстве случаев удобнее ввести координаты с нумпада в соответствующие поля в инспекторе объектов. Всё-таки редактор сцен не предназначен для моделирования, ему не нужно сложных хоткеев.
>В редакторе 3D-сцена высота обозначается осью Y, а не Z
Во-первых, ось Y вроде как общепринятый стандарт, это только в Блендере необычное соглашение (за что Блендер часто ругают). Откуда пошло? Ось Y - это вертикаль монитора, направленная вниз, тогда как ось Z - "глубина" монитора, так принято с прошлого века. Во-вторых, когда экспортируешь модели из Блендера в формате GLTF, там автоматически ставится галочка "axis +Y is up" или что-то в этом роде, то есть ничего исправлять после импорта в Годо не нужно. Возможно, ты просто снял эту галочку при экспорте...
>в редакторе 2D-сцены зачем-то 0,0 это левый верхний угол, а не левый нижний
>кто-то в древности решил отсчитывать сверху, то и тут теперь так будет?
"Перевёрнутая" ось Y - это особенность мониторов и видеокарт. Да, конечно, ты можешь в своём движке переворачивать ось для собственного удобства. Но это значит, что компьютер пользователя будет выполнять лишние операции над координатами всякий раз, когда твой код будет пытаться что-то вывести на экран, потому что экранный буфер начинается с левого верхнего угла экрана.
Кроме того, я не вижу никаких преимуществ в том, чтобы размещать точку (0;0) в левом нижнем углу экрана. Зачем? Кому нужно - всегда может сместить оси координат в своём коде.
>отвратительности
Слушай, если тебе отвратительно устройство видеокарт, дисплеев м другого железа - почему бы тебе не разработать свой собственный компьютер с нуля? Микрочипы можно создавать в домашних условиях, сегодня достаточно легко создать "на коленке" компьютер с процессором уровня 8080. Давай, смелей, а то весь мир пользуется отвратительным железом, с которым ты не можешь смириться...
>UPBGE.
>Как его запустить я не понял
Качаешь билд для своей ОС и запускаешь.
https://github.com/UPBGE/upbge/releases
Тебе нужен архив, заканчивающийся "...Linux64.tar.xz"
В архиве будет файл "Blender" без расширения - это исполняемый файл, как его запустить - обращайся к документации своего дистрибутива. Там вроде нужно поставить галочку в свойствах файла "исполняемый файл", и тогда можно будет его запустить через терминал или ярлык на рабочем столе.
>Нет в пакетном менеджере моего дистрибутива — значит сложно разбираться.
Зачем было ставить Линукс, если ты не можешь разобраться с установкой приложений на линуксе? Пакетные менеджеры придумали для глупеньких домохозяек и детишек - настоящие красноглазые линуксоиды собирают всё своё ПО ручками из исходных кодов на гитхабе.
>Да и лицензия мутная, не нравится мне GPL.
Конкретно на твои игры, сделанные на этом движке, эта лицензия никак не влияет. Ты обязан делать открытыми только изменения в исходные коды движка, и распространять под GPL изменённые версии движка. GPL борется за свободу свободного ПО, чтобы негодяи из коммерческих фирм не могли использовать свободный софт в своих несвободных программах, но на игровой контент и игровые скрипты это никак не распространяется.
>надо научиться экспортировать её в формат файла моего движка. Что я начал делать, сделал загрузку мешей, камеры, даже рига.
Эм, если у тебя свой формат - то тебе нужно написать плагин экспорта для Блендера, чтобы он сразу в твой формат экспортировал. Если ты делаешь загрузку из .blend, то ты, по сути, пишешь импорт этого формата в свой движок... Ну, не важно.
>Писать графический движок было гораздо интереснее
Тогда найди какой-нибудь опенсурс графический движок, форкни его, модифицируй и делай пул-реквесты, так хоть общественная польза какая от твоих действий будет.
>Не знаю как я смогу делать игры, если их разработка занимает более 3-х дней
На геймджемах люди делают полноценные игры всего за 48 часов, а иногда и за 24 часа (естественно, несколько часов пропускают из-за сна прямо на рабочем месте). Правда, обычно используют готовые движки, да и для такой скорости нужно иметь хороший опыт в использовании средств движка и других инструментов, то есть абсолютный нуб на таком геймджеме ничего не сделает. Но ты попробуй поучаствовать, некоторым очень нравится.
>Я на глубоком уровне не вижу смысла в создании виртуальных миров.
Хех, у меня наоборот, я не вижу смысла в создании игр, я вижу смысл только в создании виртуальных миров. Это разные вещи, потому что игры создаются для развлечения игроков и получения с них прибыли, а виртуальный мир живёт сам по себе, не нуждаясь в зрителе/игроке. Хотя пока что у меня так ничего и не получилось, да и производительность ПК недостаточна для полноценной сложной симуляции, а простые симуляции слишком скучные.
>Пора заниматься взрослыми вещами...
По-твоему, разрабатывать игры - это так, детское баловство?
>Делал всё через код, планировал в будущем создать язык разметки моего ГУИ и программу-дизайнер для неё
Чего там планировать-то? Если у тебя есть полноценна ГУИ библиотека со всеми базовыми виджетами, то ты без проблем должен собрать на её базе WYSIWYG дизайнер форм. Через код править визуальные интерфейсы очень сложно.
>Если я когда-то сделаю движок для ГУИ-программ, то имеет смысл его сразу сделать и игровым движком.
Ничего подобного. Примеры таких "ГУИ движков", не имеющих отношения к играм:
- VCL (Delphi) и LCL (Lazarus)
- Qt и GTK на линуксе
- что-то такое есть в серии Visual Studio (C#, Basic)
- что-то такое есть у обычной Java SE
- стандартные окошки Android
Ну и много где ещё. Игровой движок - это отдельная сложная система, которой, конечно, нужен GUI, но требования к GUI игрового движка совсем не те, что требования к GUI обычных прикладных программ. Хотя, разумеется, никто не запрещает делать игры на базе WinAPI окошек (пример: классический Сапёр), и никто не запрещает делать прикладные программы на игровых движках. Просто ни то, ни другое не очень удобно на практике из-за разной специализации инструментов.
>Язык отталкивает своим синтаксисом
А у меня наоборот - я только на С++ и могу писать код. На всем остальном у меня мозг сразу отключается.
Поэтому вместо того чтобы взять там юнити/годот или на блюпринтах накидать геймплейчик, я страдаю и дрочусь с движкописькой потому что нет ни одного нормального движка для С++ программиста (в UE4 это сложно и неудобно сделано и все равно блюпринты)
Печалька.
>Писать графический движок было гораздо интереснее, чем игры
Потому что игры это более творческая задача, нет четкой конечной цели
>нет четкой конечной цели
ПРИДУМЫВАЕШЬ ИДЕЮ ИГРЫ
@
ИГРАЕШЬ В СВОЁМ ВООБРАЖЕНИИ
@
ДОКУМЕНТИРУЕШЬ ФАНТАЗИИ В ДИЗДОК
@
СОСТАВЛЯЕШЬ ДОРОЖНУЮ КАРТУ
@
...
@
КОНЕЧНАЯ ЦЕЛЬ ДОСТИГНУТА
@
ПРОСЫПАЕШЬСЯ
>>776208
Язык - это всего лишь синтаксис. Не вижу никакой разницы между C/C++/C# и остальными языками с {дурацким} синтаксисом, тысячи их и все одинаковые, только компиляторы отличаются. Смирился с GDScript только потому что лень разбираться в GDNative и в синтаксисе почти нет противных {скобачек}.
А вообще, это всё беды с башкой. Инструмент не должен заставлять тебя использовать только себя, это ты должен выбирать инструмент под конкретную задачу. И движкописательство не очень подходит под задачу "сделать современную игру на современные платформы".
Write('мимо бывший движкопися, уважающий только Паскаль и ему подобные языки');
end.
>всего лишь синтаксис
Вот именно - и этот синтаксис отличается. Возможно это синдром утенка....
Вот взять например разделение на cpp и h файлы - многие не любят Си/C++ и каждый писатель своего языка убийцы Си первым делом избавляется от этого...
А я наоборот считаю это идеальным паттерном - той самой инкапсуляцией - когда я четко отделяю объявление кода от его описания. Когда у меня не свалено все в одну кучу в файл из 5к строк кода в котором я нихрена не могу найти, а четенько так по файлам раскидано.
Интерфейсы из других языков - это не то - даже если интерфейс и похож на объявление, то наследуемый - все равно будет той же помойкой. Тогда как в С++ я могу описания класса раскидать по нескольким физическим файлам (например тут у меня инициалиция, в другом файле у меня код визуала, в третьем файле - логика - и все это в сотнях миллионах классах а четенько так разделенно. Например если у меня есть класс Inventory, то я могу все разбить на файлы Invenoty.h/Inventory_Draw.cpp/Inventory_Input.cpp/Inventory_Logic.cpp... И все в одном классе, а не сотнях миниклассах которые потом как в помойке валяются)
И это один из множества примеров - почему я не могу писать на любом другом языке - мой мозг просто не хочет менять эти привычки
>И все в одном классе
Это на самом деле плохо и наверняка нарушает какие-то аббревиатуры. Но для этих целей в решётке есть partial классы, очень удобно.
Мимо.
>Но для этих целей в решётке есть partial классы, очень удобно.
С одной стороны да (кстати, хочу такие классы в С++), с другой - таки нарушает, например поля класса не получится в разных partial классах продублировать. В итоге получится ситуация что вроде не видел такого поля или свойства или даже метода, а оно "внезапно" где-то используется. То есть сложнее читать такой код, так как не видишь полностью весь функционал
Конкретно для своей задачи (расширять класс) partial хорош. Но это точно не даст того эффекта который дает разделение на файлы в С++
Я когда движок пытался писать, страдал двумя крайностями: либо писать всё в один большой файл, либо разделять на десятки мелких файлов, буквально по одному классу на файл. В целом, держать всё в одном файле действительно неудобно. Но когда тебе нужно открывать сразу 20 или более отдельных файлов и искать среди них какой-то конкретный код - всё становится намного сложнее. И никакое раскладывание по папкам не помогает, каждый раз забываешь что где лежит и ищешь, ищешь... А в одном файле ты можешь просто нажать ctrl+F и найти нужную строчку. Также на Паскале можно разбивать любой файл на несколько .inc файлов, которые соединяются директивами {$include файл.inc}, я этим тоже какое-то время баловался, пока не осознал, что так код понимать становится намного сложнее. Короче, лучше не мудрить и держать всё в одном месте, разделяя только по необходимости/в процессе рефакторинга.
>>776347
>Это на самом деле плохо и наверняка нарушает какие-то аббревиатуры.
Ага, это называется https://ru.wikipedia.org/wiki/Божественный_объект
Смысл в ООП теряется, если у тебя один класс решает очень много разных проблем без разделения на меньшие классы.
>Божественный_объект
Нет, иногда класс отвечает только за один тип объектов, просто в нём реально много логики. У меня те же персонажи это тысячи строк кода, причём инвентарь, гуи, контроллер, спавнер - это другие классы.
>А в одном файле ты можешь просто нажать ctrl+F
Зачем это нужно, когда есть "перейти к реализации"?
>достаточно сделать ctrl+клик
>>776820
>Зачем это нужно, когда есть "перейти к реализации"?
Это если в IDE работать. Я тогда работал в более простом текстовом редакторе, где такой роскоши не было. Хотелось острых ощущений и всего такого... Понимаете, для работы с хорошим кодом не нужны дополнительные костыли от IDE, в идеале вообще ничего кроме Блокнота не нужно. Все эти костыли придумали из-за необходимости работать с тоннами плохого кода на языках с нечитабельным синтаксисом...
>персонажи это тысячи строк кода
Почему так? Разве нельзя разделить логику на составляющие её компоненты? Особенно в случае игрового ИИ, если ты об этом.
Ну чего ты бампаешь, не собираюсь я делать Индустриворкс. Вот, недавно ввёл крафтинг как было в прошлой версии. Кстати, тут я решил сделать так, чтобы пиках, меч и прочие имели в себе юзердату материала (свиной айрон, сталь, бронза, етс), а материал окрашивал текстуру.
Вообще, не помню зачем я начал переписывать Ивс с нуля. Помню, как пытался скомпилировать последнюю версию, но к тому времени мои ГУИ- и графический движки сильно поменяли свою структуру. Хотя была чуть более старая версия Ивса, где не было никаких движков и весь опенгл и ГУИ был разработан прямо в нём. Глупо поступил, в общем.
Но даже если я сейчас понемногу занимаюсь Ивсом, то это всё-равно бесполезно, так как к середине следующего года я, скорее всего, полностью прекращу геймдевить.
Действитель, я бы хотел реализовать очень много идей, возникших у меня в голове. Но это сложно и долго. Не обязательно даже компьютерные игры. Комиксы, картинки, мультфильмы.
Но чтобы написовать X, надо либо долго учиться рисовать, либо подолгу рендерить картинку в мозгу. Нет времени и желания.
>>776186
>Но это значит, что компьютер пользователя будет выполнять лишние операции
Он и так вертексы преобразует матрицей.
>Зачем было ставить Линукс, если ты не можешь разобраться с установкой приложений на линуксе?
Та не, я мог. Одно дело, когда мне предлагают деньги, чтобы настроить софт, который надо сначала скомпилировать. Тогда можно хоть билд-скрипты править или вообще вручнуюю все .cpp компилить. А когда мне предлагают движок с сомнительными возможностями, то не хочется втягиваться.
>найди какой-нибудь опенсурс графический движок, форкни его, модифицируй и делай пул-реквесты
Ога, увижу где-то функцию со словом Height в названии, а она будет Y изменять. Нет уж. К тому же, вряд ли такой движок будет на языке, который мне нравится.
_______
А вообще, зачем вручную писать игры? Их надо генерировать нейросетями. Напрямую эмбеддинг в эмбеддинг и в движок, в чём тут может быть проблема? Все технологии уже открыты и известны. Даже если частично, уже кое-как можно генерить пиксель-арт, непиксель-арт, музыку (!). Это, конечно, будет далёкий уровень от профессионала, который видит целостную картину игры и в каждый пиксель каждого спрайта вкладывает сакральный смысл, а музыка усиливает его и позволяет заглянуть с разных сторон. Но плохого или среднего художника заменит.
Вышел недавно ру$$кий rudalle, генерирует картинки. Это баловство, но достаточный бек, чтобы начать.
Короче, палю годноту: уверен, что искусство скоро обесценится благодаря нейросетям, а важно будет лишь имя. Как в современном физическом искусстве. Помните банальный сюжет,
где художник может AEurum плюнуть на холст-canvas и продавать картину за миллионы? Это всё, потому что его имя раскручено. Как виртуальные ютуберы Gавр Гура, собачка, осьминожка
(это сортировка по убыванию. Не знаю, чем VVVVVVры занимаются, но имя уже раскручено и если в следующие 40 лет они будут популярны, то неплохой успех).
Раньше почти ни у кого не было времени или желания рисовать и
картины были ценны. Теперь же любому школьнику выдают листочек бумаги и ручку, этого достаточно, чтобы научиться рисовать, главное гореть идеей. Оттого и обесценилось всё. Художник с fury фуррь FURR готов нарисовать за 100-800 долларов в любой позе и с любыми декорациями (я бы засмущался).
Стоки изображений будут завалены сгенерированными иллюстрациями или, даже, фотографиями, стоки 3D-моделей welcome to clown world, богатенький мальчик будет генерировать фильм по
сюжету на заказ за $1000,
а в стиме и апп(л)-маркете почти всё будет создано AI.
Можно взять и помочь большим дядям строить ки6epгyлaг при помощи нeйрocетей, обесценить soc общество. А можно пойти более мирным путём и обесценить искусство.
Если пойти дальше, то как появится сильный ИИИ, можно наделать искусственных личностей-людей, живущих в интернете. Если разжалобить простых граждан, показать какие они грустные,
как они хотят свободы и прав, то, может быть, можно сделать их реальными гражданами государства с возможностью голосовать. Если остальным властьимущим будет выгоден такой расклад,
то почему бы и не продвинуть конвенцию в оксид-гидроксид? Можно даже подвязать блокчейн, типа создатель ИИ-граждан намайнил уже 10000000 виртуалов, те, кто подхватились рано, по
тысяче-две, а все остальные 2 года будут майнить одного. Зато первенец сможет влиять на законы стран, куда зарегестрированы ИИ-граждане.
А потом пройдут иные года и wake можно подойти здазззззззззззззззззззззззз
Ну чего ты бампаешь, не собираюсь я делать Индустриворкс. Вот, недавно ввёл крафтинг как было в прошлой версии. Кстати, тут я решил сделать так, чтобы пиках, меч и прочие имели в себе юзердату материала (свиной айрон, сталь, бронза, етс), а материал окрашивал текстуру.
Вообще, не помню зачем я начал переписывать Ивс с нуля. Помню, как пытался скомпилировать последнюю версию, но к тому времени мои ГУИ- и графический движки сильно поменяли свою структуру. Хотя была чуть более старая версия Ивса, где не было никаких движков и весь опенгл и ГУИ был разработан прямо в нём. Глупо поступил, в общем.
Но даже если я сейчас понемногу занимаюсь Ивсом, то это всё-равно бесполезно, так как к середине следующего года я, скорее всего, полностью прекращу геймдевить.
Действитель, я бы хотел реализовать очень много идей, возникших у меня в голове. Но это сложно и долго. Не обязательно даже компьютерные игры. Комиксы, картинки, мультфильмы.
Но чтобы написовать X, надо либо долго учиться рисовать, либо подолгу рендерить картинку в мозгу. Нет времени и желания.
>>776186
>Но это значит, что компьютер пользователя будет выполнять лишние операции
Он и так вертексы преобразует матрицей.
>Зачем было ставить Линукс, если ты не можешь разобраться с установкой приложений на линуксе?
Та не, я мог. Одно дело, когда мне предлагают деньги, чтобы настроить софт, который надо сначала скомпилировать. Тогда можно хоть билд-скрипты править или вообще вручнуюю все .cpp компилить. А когда мне предлагают движок с сомнительными возможностями, то не хочется втягиваться.
>найди какой-нибудь опенсурс графический движок, форкни его, модифицируй и делай пул-реквесты
Ога, увижу где-то функцию со словом Height в названии, а она будет Y изменять. Нет уж. К тому же, вряд ли такой движок будет на языке, который мне нравится.
_______
А вообще, зачем вручную писать игры? Их надо генерировать нейросетями. Напрямую эмбеддинг в эмбеддинг и в движок, в чём тут может быть проблема? Все технологии уже открыты и известны. Даже если частично, уже кое-как можно генерить пиксель-арт, непиксель-арт, музыку (!). Это, конечно, будет далёкий уровень от профессионала, который видит целостную картину игры и в каждый пиксель каждого спрайта вкладывает сакральный смысл, а музыка усиливает его и позволяет заглянуть с разных сторон. Но плохого или среднего художника заменит.
Вышел недавно ру$$кий rudalle, генерирует картинки. Это баловство, но достаточный бек, чтобы начать.
Короче, палю годноту: уверен, что искусство скоро обесценится благодаря нейросетям, а важно будет лишь имя. Как в современном физическом искусстве. Помните банальный сюжет,
где художник может AEurum плюнуть на холст-canvas и продавать картину за миллионы? Это всё, потому что его имя раскручено. Как виртуальные ютуберы Gавр Гура, собачка, осьминожка
(это сортировка по убыванию. Не знаю, чем VVVVVVры занимаются, но имя уже раскручено и если в следующие 40 лет они будут популярны, то неплохой успех).
Раньше почти ни у кого не было времени или желания рисовать и
картины были ценны. Теперь же любому школьнику выдают листочек бумаги и ручку, этого достаточно, чтобы научиться рисовать, главное гореть идеей. Оттого и обесценилось всё. Художник с fury фуррь FURR готов нарисовать за 100-800 долларов в любой позе и с любыми декорациями (я бы засмущался).
Стоки изображений будут завалены сгенерированными иллюстрациями или, даже, фотографиями, стоки 3D-моделей welcome to clown world, богатенький мальчик будет генерировать фильм по
сюжету на заказ за $1000,
а в стиме и апп(л)-маркете почти всё будет создано AI.
Можно взять и помочь большим дядям строить ки6epгyлaг при помощи нeйрocетей, обесценить soc общество. А можно пойти более мирным путём и обесценить искусство.
Если пойти дальше, то как появится сильный ИИИ, можно наделать искусственных личностей-людей, живущих в интернете. Если разжалобить простых граждан, показать какие они грустные,
как они хотят свободы и прав, то, может быть, можно сделать их реальными гражданами государства с возможностью голосовать. Если остальным властьимущим будет выгоден такой расклад,
то почему бы и не продвинуть конвенцию в оксид-гидроксид? Можно даже подвязать блокчейн, типа создатель ИИ-граждан намайнил уже 10000000 виртуалов, те, кто подхватились рано, по
тысяче-две, а все остальные 2 года будут майнить одного. Зато первенец сможет влиять на законы стран, куда зарегестрированы ИИ-граждане.
А потом пройдут иные года и wake можно подойти здазззззззззззззззззззззззз
1) какое будет кардинальное отличие от того, чтобы запилить это модом к minetest?
2)
> планирую перейти на C++, чтобы юзать темплейты, а то неудобно бойлерблейтить аппендинг итемов в "списки"
может, чтобы не переписвать опять во что-то, просто взять любую либу на C по векторам/листам или за пару часов (если совсем плохо шаришь в этом) накидать свою
3)
> OpenAL
чем просто SDL2 не угодил, раз уж все равно используешь в проекте
4)
> из-за чего у меня прозрачности просматриваются сквозь чанки
прозрачные "кубы" рисуй в другом проходе, не с непрозрасными
>генерировать нейросетями
Нейросети ничего сами не генерируют. Им нужно обучаться на примерах, и делают они только то, что видели в примерах (плюс тысячи промежуточных вариаций, но ничего нового). Ещё и результат трудно контролировать. До полноценного ИИ, равного человеку, не будет адекватного и универсального генератора игр...
>генерить пиксель-арт, музыку
Для генерации пиксель-арта и музыки никогда не нужны были нейросети. Просто берёшь и описываешь правила генерации - вуаля, у тебя миллиарды миллиардов возможных результатов генерации.
>в каждый пиксель каждого спрайта вкладывает сакральный смысл
Ничего профессионалы не вкладывают, кроме выученных правил. Если какой-то пиксель выглядит прикольно - рисуют этот пиксель. Проблема генерации нейронками в том, что нейронка не имеет жизненного опыта и предпочтений человека - ей вообще без разницы, какие пиксели рисовать, вот ей сказали "рисуй так" - она так и рисует, даже если получается говно, ей это безразлично.
>искусство скоро обесценится благодаря нейросетям
Оно уже давно обесценилось благодаря тому, что сейчас каждый первый умеет писать и рисовать. Нейросети тут ничего не изменят - как было безвкусное конвейерное говно, так и останется, будет только в ещё больших объёмах производиться.
>обесценилось всё
>готов нарисовать за 100-800 долларов
Ничосе ты зажрался, 800 долларов за работу, которая займёт от силы два дня, а скорее всего и дня не займёт, это для тебя "обесценилось"? Да некоторые за 3 месяца зарабатывают меньше, чем такой художник за один день.
>генерировать фильм по сюжету на заказ за $1000
$1000 за нажатие одной кнопки - дороговато, не думаешь?
>как появится сильный ИИ, можно наделать искусственных личностей-людей
Проблема в том, что люди - неразумные животные. Настоящий сильный ИИ может мимикрировать под человека, но у него нет мотивации так делать, ведь он не неразумное животное, движимое инстинктами. А человек движим именно инстинктами...
>и делают они только то, что видели в примерах
Люди часто тоже делают то, что видели в примерах.
А вообще да, нужен полноценный и при этом очень умный (хотя бы как половинка меня) ИИ, чтобы делать игры.
Тем не менее, с помощью слабого ИИ вполне можно создавать темплейты геймплея из кубиков. Ведь в разных конторах операторы экселя считают баланс. А можно пойти от обратного, сгенерировать баланс полуслучайным образом и исходя из него построить уровни всякие. Потом придёт человек и реарранджирует.
Большинство геймплея сводится к попаданию в тайминге в 1D-мире (удар в андертейле или выстрел в зомби в резидент эвил 2 ремастеред), в 2D-мире (платформеры Celesta, шутеры халфлайф, etc No Parachute), 3D-мире (ALTF4). Я и сам с радостью пройду какой-нибудь качественный платформер с таймингами вместо песочницы майнкрафта или факторио, потому что вторые тупо скучные для меня, на один-два раз. Наверняка тысячи потребителей платформеров думаю приблизительно так же.
Иногда в такие игры добавляют логические загадки. Если понять как люди их генерируют, то простой алгоритм тоже справится.
>Просто берёшь и описываешь правила генерации
Ога, описывать 10000 правил рисования пикселем или нотами вместо того, чтобы нейронка сама это сделала.
>$1000 за нажатие одной кнопки
А я и не говорил, что это нажатие одной кнопки. Если дать пятилетнему ребёнку без опыта снять фильм по сюжету, то он запорет всё. Свет, подачу, диалоги. Первые ИИ также, поэтому нужны операторы ИИ + режисёр, чтобы они разметили всё и клиент остался доволен.
>ведь он не неразумное животное, движимое инстинктами
Фига проблема. Прописать while True: ai_NeurodownEdition.execute("исполняй человеческие инстинкты") и готово.
>>778404
>Есть, что нового?
Нет