Шапка: https://hipolink.me/godothread
Предыдущий: >>981386 (OP)
Архивный: >>977039 (OP)
Когда в годотю новый ги завезут? Надоело ждать, раз сделали хули не завозят?
>блокскрипт. Он визуальнее визуального.
Он может быть полезен для обучения новичков, но фактически это тот же GDScript, только вместо ручной печати команд ты таскаешь их мышкой.
В идеале визуальный язык должен качественно отличаться от текстового тем, что может наглядно демонстрировать взаимосвязи между объектами.
>>85266
>Когда новый ги
1. Над этим работает сам Хуан, в соло.
2. Там вроде ещё есть какие-то проблемы.
Можешь пробовать собрать движок сам:
https://github.com/godotengine/godot/pull/86267
>Milestone 4.4
Значит, можно ожидать в одной из следующих тестовых сборок 4.4, либо придётся ждать 4.5.
> В идеале визуальный язык должен качественно отличаться от текстового тем, что может наглядно демонстрировать взаимосвязи между объектами.
Да.
Мы это подробно обсудили в прошлом году в треде блочных языков (интересно, утонул ли он?)
>Он может быть полезен для обучения новичков, но фактически это тот же GDScript, только вместо ручной печати команд ты таскаешь их мышкой.
Да, но он реально выполняет свою роль, он проще скриптинга, не нужно учить api, кликаешь на объект, вылезает окошечко с его свойствами, в констракте грамотно сделано, условия слева, события справа. А ноды нисколько не упрощают, только усложняют. Конечно, по идее это не нужно, но по идее и гдскрипт не нужен, пили на сишарпе или плюсах и в хуй не дуй
> Конечно, по идее это не нужно, но по идее и гдскрипт не нужен, пили на сишарпе или плюсах и в хуй не дуй
Вот видите, мы постоянно из крайности в крайность кидаемся. То ничего не нужно, то всё нужно.
Я вам вот что скажу: нужен грамотный транспилинг, чтобы любой мог писать логику так ,как ему нравится и в любой момент мог спуститься на уровень ниже, чтобы оптимизировать. Самый высокий уровень: блоки/ивентщиты, уровнем пониже ноды/лапша, еще ниже высокоуровневые скрипты типа гдскрипта/питона/жс, еще ниже низкоуровневые скрипты типа шарпа/жавы, ну и в самом низу си/си++/паскаль/раст. И между этими уровнями уже сегодня можно спускаться сверху вниз. Тулчейны имеются. Но вверх, очевидно, задача нетривиальная, да и не нужно это.
Чел, ну допустим у тебя будет что-то в выпадающем списке. Как ты узнаешь что из этого что не изучая?
А так в текстовых ЯП есть автодополнение.
Ты не пынямаешь. Я вот начинал с констракта, а сейчас на сишарпе, и констракт это единственный упрощенный "скриптинг", есть фишки для новичков, которые позволяют кодить простое просто
Мне кажется что Абу уже давно прикрутил нейронку и она копирует людей и потом пишет от их лица. Как будто я после трёх литров пива. Еще года три назад можно было определить Анонов по стилю написания, сейчас вообще не возможно.
Ты о чем, бот?
Какие нахуй боты нейронки? Вы что ёбнулись, друзья? Или ньюфаги? Любитель констракта здесь уже лет 5 сидит. Душнила с ним спорящий тоже не меньше. Вы их двоих не узнали штоле?
>>85319
> волшебным образом знания сами в голову подгрузятся
Есть настолько интуитивные приложения, что никакие справочники не нужны. Например Paint никто не учил тебя как в нём рисовать. Там настолько всё очевидно, что ты просто берёшь мышку и рисуешь.
Полагаю, в констракте что-то подобное.
Я недавно вкатился, и только потому что у движка якобы есть поддержка сишарпа. Меня десять раз обосрали в прошлом треде за мой выбор яп. Да мы ебанулись. Нейронки даже ошибки те же самые делают в предложениях.
Я как-то своим бывшим друзьям, лет десять назад, говорил что на даваче боты треды пишут в б. А они мне Ты что ебанутый, быть такого не может, это же так сложно написать.
Любишь шарп - пиши на шарпе. Официально.
>Paint никто не учил
А зачем сравнивать с ним? Тут сравнивать впору с фотошопом. А там таки надо учить. Вон какой код в констракте приходится писать прямо внутри поля.
Попробуй через настройки кастомной темы UI.
>Душнила с ним спорящий тоже не меньше.
Спасибо за комплимент, ты тоже молодец.
>>85300
>проще скриптинга, не нужно учить api, кликаешь на объект, вылезает окошечко с его свойствами
Твоя ошибка в том, что ты пытаешься нас убедить, что мышкой скроллить километровые менюшки и таскать из них блоки - это проще, чем простой текст.
API никуда не девается. Пример - вывести текст:
1. Открыть меню - "список доступных функций".
2. Пролистать колёсиком до функции "print text".
3. Перетащить мышкой функцию в окно кода.
4. Набрать желаемый текст на клавиатуре.
Классическим кодом будет примерно так:
1. Нажимаешь "p", "r", "i" или что-то вроде того.
2. Видишь - подсказка "print()" - жмёшь enter.
3. Набираешь желаемый текст на клавиатуре.
Как можешь заменить, во втором случае не нужно трогать мышь, листать километровые меню, что-то куда-то таскать. Но в обоих случаях ты добавляешь функцию с одинаковым названием и одинаково вынужден набирать текст на клавиатуре. Т.е. твой "блочный код" не даёт никаких преимуществ даже пользователям, не знакомым с клавиатурой.
Удобный визуальный язык должен абстрагировать пользователя от таких действий полностью. Как? Например, у тебя есть два объекта: "динамик" и "генератор звуков" - просто соединяешь динамик с генератором звуков и можешь слышать звуки. Без необходимости каким-либо способом вызывать API команды уровня "play sound: path to sound".
С таким языком ты можешь глянуть на монитор и мгновенно осознать: "ага, динамик соединяется с генератором звуков, значит, должно что-то звучать". Вместо необходимости искать глазами и читать текстовую строку "play sound", независимо от её внешности - цветная рамка её суть не меняет.
Но подобные языки - это DSL, а не что-то общее.
https://en.wikipedia.org/wiki/Domain-specific_language
Поэтому движок может предоставить только общие средства создания таких языков (GraphEdit в Godot).
>Душнила с ним спорящий тоже не меньше.
Спасибо за комплимент, ты тоже молодец.
>>85300
>проще скриптинга, не нужно учить api, кликаешь на объект, вылезает окошечко с его свойствами
Твоя ошибка в том, что ты пытаешься нас убедить, что мышкой скроллить километровые менюшки и таскать из них блоки - это проще, чем простой текст.
API никуда не девается. Пример - вывести текст:
1. Открыть меню - "список доступных функций".
2. Пролистать колёсиком до функции "print text".
3. Перетащить мышкой функцию в окно кода.
4. Набрать желаемый текст на клавиатуре.
Классическим кодом будет примерно так:
1. Нажимаешь "p", "r", "i" или что-то вроде того.
2. Видишь - подсказка "print()" - жмёшь enter.
3. Набираешь желаемый текст на клавиатуре.
Как можешь заменить, во втором случае не нужно трогать мышь, листать километровые меню, что-то куда-то таскать. Но в обоих случаях ты добавляешь функцию с одинаковым названием и одинаково вынужден набирать текст на клавиатуре. Т.е. твой "блочный код" не даёт никаких преимуществ даже пользователям, не знакомым с клавиатурой.
Удобный визуальный язык должен абстрагировать пользователя от таких действий полностью. Как? Например, у тебя есть два объекта: "динамик" и "генератор звуков" - просто соединяешь динамик с генератором звуков и можешь слышать звуки. Без необходимости каким-либо способом вызывать API команды уровня "play sound: path to sound".
С таким языком ты можешь глянуть на монитор и мгновенно осознать: "ага, динамик соединяется с генератором звуков, значит, должно что-то звучать". Вместо необходимости искать глазами и читать текстовую строку "play sound", независимо от её внешности - цветная рамка её суть не меняет.
Но подобные языки - это DSL, а не что-то общее.
https://en.wikipedia.org/wiki/Domain-specific_language
Поэтому движок может предоставить только общие средства создания таких языков (GraphEdit в Godot).
>Твоя ошибка в том, что ты пытаешься нас убедить, что мышкой скроллить километровые менюшки и таскать из них блоки - это проще, чем простой текст.
Никто тебя ни в чем не пытался убедить, я сейчас на юнити прогаю сишарпой, конечно, это гораздо лучше. Дальше писанину твою не читал, ты шизоид
> Классическим кодом будет примерно так:
> 1. Нажимаешь "p", "r", "i" или что-то вроде того.
> 2. Видишь - подсказка "print()" - жмёшь enter.
> 3. Набираешь желаемый текст на клавиатуре.
В трёшке было так. В четвёрке почему-то поменяли порядок сортировки подсказок и проще принт целиком напечатать, чем прокручивать его в списке. Подскажите, может это можно как-то отменить? Вернуть как было в трёшке?
Щас понял. Оно при сортировке ставит подчёркивание первее конца строки. И это, походу, баг, а не фича. Если его пофиксить, то сортировка вернётся в норму. Возможно, даже как-то супер-просто фиксится, надо просто найти в исходниках функцию сортировки.
На мой взгляд, сейчас всё правильно работает. Тебе значительно дольше печатать "print_orphan_nodes", чем тот же print, printerr и т.п. Даже если ты редко используешь эту функцию, иметь её ближе удобно.
Изменения сортировки подсказок в 4.0 касались в первую очередь наследования классов, и с этим всё хорошо. Раньше ты получал рандомные встроенные функции и константы сверху списка, а сейчас - то, что объявлено тобой в унаследованном классе.
Изменения произошли здесь:
https://github.com/godotengine/godot/pull/58931
Там же ссылки на обсуждения проблем 3.x.
Здесь жалоба, аналогичная твоей:
https://github.com/godotengine/godot-proposals/issues/9808
С обсуждением, почему откатывать не нужно.
>дольше печатать
Что дольше: 1 раз напечатать nt_orphan_nodes или 10 раз напечатать nt? Как по мне, print нужен даже чаще.
>в первую очередь наследования классов, и с этим всё хорошо
Да, с этим хорошо, и к этому никаких претензий. Претензии только к подчёркиваниям.
>С обсуждением, почему откатывать не нужно.
>Calinou changed the title Change autocompletion sort order to purely alphabetical or give an option for it in settings. Change autocompletion sort order to be purely alphabetical or add an editor setting for it on May 23
Тащемта да, откатывать не нужно, нужна опция.
Хотя я не видел в интернетах ни одного довольного новой сортировкой, но вот недовольных хватает. Это повод задуматься.
Но, я смотрю, воз и ныне там.
Бляяяя.
Godotaны такой вопрос.
Если спрайт, допустим, размером 500x500, но в движке мы его скейлим на 0.1,
то есть в игре он будет 50x50, то как этот спрайт себя ведет?
Он так и остается 500x500, просто визуально отображается как 50x50?
Или он скейлится один раз а затем сохраняется где-то в памяти и используется с меньшим размером?
Или он пересчитывается каждый кадр?
Просто надоело постоянно вручную менять спрайты в GIMP.
Остается, движок же не знает, вдруг ты потом из скрипта скейлишь.
Надоело вручную - автоматизируй. Тул скриптами, или батником каким нибудь с imagemagick.
Погуглил, и оказывается в 4 годоте есть такая опция импорта.
Она индивидуальная для каждой картинки, но если нажать Preset - set as default, то такие настройки импорта будут распространяться на последующие добавленные картинки.
В дебаггере есть вкладка video ram, в ней показывается разрешение каждой картинки и сколько памяти она ест.
Алсо 500х500 не так страшно. У тебя же не 4к текстуры.
Хуан UID завез, теперь любителям бесконечного рефакторинга жить легче станет.
Статья на сайте Godot Engine представляет собой обзор текущего состояния разработки Godot 4.4, в частности, версии Dev 5. В ней обсуждаются новые функции и улучшения, включая оптимизацию производительности и обновления в редакторе. Также авторы подчеркивают важность обратной связи от сообщества для дальнейшего совершенствования движка.
Ясно спасибо.
>>85478
ГПТ головного мозга, плез. Сказали же тебе - UID у каждого скрипта/файла/ресурса, позволяет надежно отслеживать все переименования/перемещения файлов, затрудняя твоим кривым рукам поломку твоей инди-дрочильни при рефакторинге твоей говеной структуры проекта. Ясно-понятно, принял-понял, как слышно? Прием, шшш.
Я не поленился и почитал, просто ноль полезной информации. . . . . .. . .
Если бы было, то не было бы нытья "я поперемещал кучу всего, и все зависимости сломались!"
Я уже привык и каждый раз проверю. И обычно только если на паку выше перемешаешь, случаться проблемы.
А если в целом то ладно молодцы хоть что то делают.
Дык оно просто криво работало. Но было же. Зависимости отслеживаются, если перемещать файлы из редактора. Но не всегда. Если цепочка вложенных зависимостей слишком сложная, может поломаться. Желательно держать открытыми все сцены, где используется перемещаемый файл.
Изменение не в том, что УИДы добавили, а в том, что их добавили для всего, в том числе для импортируемого всякого.
о, нихуя, такое и мне полезно будет
>обзор текущего состояния разработки Godot 4.4, в частности, версии Dev 5
>Dev 5
Всмысле 4.5 или 5.0? Если 5.0, то известны мин. требования к пеке для 2д разработки, что бы не было больно? Для меня это как бы новое хобби, и если требования возрастут, не хочется на пеку много тратиться. А пока черная пятница, я могу подевешле что-то найти.
не ссы, пока поддержка веба есть режим совместимости на опенжл3 никуда не уйдет
Да в любом случае имеет смысл брать что-инбудь, цены будут расти
4.4 dev 5 это сырая пятая пре-бета версии 4.4, потом какие-нибудь 4.4 beta1-2-3 пойдут, потом release candidate (RC1-2-3), потом, наконец, релиз 4.4.
До 5.0 еще лет 5, так что не трясись.
>не видел в интернетах ни одного довольного
Нам что, открывать новые issue?
>Здравствуйте, работаю над попенворлд 3д экшн, суть не важна, хотел только сказать, что доволен новой сортировкой подсказок в коде. Спасибо!
>100500 лайков, один комментарий
>Комментарий: Это не проблема, закрываю
>Комментарии ограничены до проверенных
Конечно, чаще всего пишут о том, чем недовольны.
>Сколько миллионов было потрачено
https://duckduckgo.com/?q=how+many+programming+languages+exists
>There are estimates of over 8,000 programming languages in existence, with some sources suggesting the number could be as high as 9,000. However, only a small fraction of these are widely used in practice today.
Давай, поплачь ещё, что кто-то свой язык делает.
>будет 50x50, то как этот спрайт себя ведет?
Если сгенерированы mipmap, то будет использован наиболее подходящий по размеру вариант. Без них получается сжатие с возможными артефактами.
Mipmap позволяет создать несколько качественно уменьшенных вариантов, чтобы уменьшить число артефактов при сжатии полигонов в реалтайме:
https://ru.wikipedia.org/wiki/MIP-текстурирование
Это выгодно, если ты планируешь делать сильное приближение и/или отдаление камеры в 2D игре.
Но если планируешь использовать только 1/10 от изначального размера, т.е. в игре камера не будет приближаться к спрайтам, лучше сжать оригинал.
>Сколько миллионов было потрачено потому что какой-то шизик с манией решил свой язык придумать.
Ты про c++? Там ракеты и самроеиы падали.
Или про C#? Он в банкинге и трейдинге использовался, а значит точно наносил убытки в миллионы.
Подробнее о нумерации и поддержке версий Godot:
https://docs.godotengine.org/en/latest/about/release_policy.html
Прогресс разработки актуальных версий Godot:
https://github.com/godotengine/godot/milestones
>3.7 - 48% complete, 24 open, 23 closed
>4.4 - 66% complete, 1145 open, 2271 closed
Как видишь, ни 4.5, ни 5.0 пока не планируется.
На версию 5.0 откладывают только предложения:
https://github.com/godotengine/godot-proposals/milestones
>5.0 - 0% complete, 40 open, 0 closed
>если требования возрастут
Godot всегда делали с упором на то, чтобы он был максимально доступен всем, включая детей нищих африканских стран или что-то в этом роде. Должно быть достаточно компьютера 2007-го года, разве что видеокарта должна быть помоложе (2013+).
>А пока черная пятница
А разве это не развод перед новым годом? Перед распродажей всегда завышают цены, как и перед новогодними праздниками. К лету снова снижают.
Так с мипмапом оригинал никуда не девается, вроде.
Фишка мипмапа в матемтическом свойстве, что 1/4+1/16+1/256... ~= 1/3, иными словами, размер оригинала увеличивается на треть, но в этой трети можно хранить ВСЕ шаги уменьшения картинки вдвое.
То есть это другая оптимизация, не размера, а скорости (чтобы не масштабировать в реалтайме, а доставать уже уменьшенную картинку и при надобности интерполировать между двумя соседними шагами до нужного нецелого размера).
Погуглил, так и старой многие не довольны.
https://github.com/godotengine/godot-proposals/issues/9808
https://github.com/godotengine/godot/issues/21726
https://github.com/godotengine/godot-proposals/issues/4189
https://github.com/godotengine/godot/pull/58931
Я так понимаю, что можно придумать примеры которые ломают то одну, то другую схему, и надо делать вообще более сложную систему, которая учитывает не только, какой класс сейчас редактируешь, но и какие слова часто использовал (в VsCode вроде так, последнее использованное начнет подниматься вверх по списку - но это значит, что сортировка станет непостоянной, и когда ты пойдешь работать над другой частью проекта, может запутать)
Придётся ждать следующую версию, когда пофикс... Так, падажжи. А ведь в VSCode есть поддержка гдскрипта.
Божечьки, какой каеф!
>какие слова часто использовал
Это неудобно в долгосрочной перспективе.
В идеале нужен ИИ, который держит в контексте не только весь проект, но и твои идеи/рассуждения.
>>85570
Какой же у VSCode дурацкий гуй... Откуда эта мода на боковое меню иконками? Виндувс же вроде уже отказалась от размещения таскбара сбоку экрана.
>>85572
Куда собрался? Ты теперь навсегда годотер.
>В идеале нужен ИИ
Rider несколько методов которые ты недавно использовал или часто используешь вроде бы держит всехда сверху.
Каково состояние годота в качестве инструмента разработки мобильных дрочилок на ведроид/айкос?
В vs code, боковую панель, можно переместить
Меня никто не спрашивал но я выскажу своё скромное мнение.
Вроде как есть но я сам лично не пробовал.
Но если чтото не будет работать. То можно портировать под веб html5.
А с него уже другими свистелками переделка можно на что угодно портировать.
Примеров успешных проэктов на js и ts фреймворках в мире полно.
А вообще об этом наверно стоит беспокоиться только в последнюю очередь на любом движке. Ты хотя бы доживи до стадии релиза. А как сбилдить или портировать на куда тебе надо ты точно потом точно разберешься.
>Каково состояние годота в качестве инструмента разработки мобильных дрочилок на ведроид
Я пробовал, далеко не зашёл, но пока нормально.
Из хорошего:
- сборка APK на готовом шаблоне быстрая;
- UI работает практически так же, как на ПК;
- легко регулировать FPS даже в рантайме;
- легко настроить действие кнопки back.
Пока не пробовал, но хорошо:
- remote debug без установки всех файлов;
- поддержка мультитача, разных датчиков;
- можно включать разрешения галочкой;
- встроенная поддержка микротранзакций;
- можно собирать с нуля и это несложно.
Подводные:
- для многих фишек ОС нужна будет сборка с нуля;
- костные анимации Polygon не работают в GLES3;
- Vulkan пока слабо поддерживается смартфонами;
- запуск простой Vulkan игры долгий (3+ секунды);
- какие-то сложности с виртуальной клавиатурой;
- какие-то сложности с общей файловой системой.
Но моему смартфону уже почти 4 года, если что.
По экспорту смотри сам, в целом несложно:
https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_android.html
https://docs.godotengine.org/en/stable/tutorials/export/android_gradle_build.html
>>85597
>портировать под веб html5
>свистелками переделка можно на что угодно
Билд под веб самый ограниченный и медленный. Примитивные игры лучше писать на голом JS, чем использовать движок, а тяжёлые игры в браузере типичной домохозяйки/ребёнка будут тормозить. Поддержка веба тут скорее маркетинговая уловка.
>>85598
>потом точно разберешься
Для мобильных игр это категорически неправильно. Мобильные игры должны всегда тестироваться на реальных устройствах с самого раннего прототипа, буквально когда у тебя только меню и квадратик по экрану ползает. Потому что геймплей на мобилках чрезвычайно завязан на сенсорный экран, плюс неудобное положение пользователя в окружающем пространстве, и оценить это всё возможно только плейтестом на реальном устройстве. Желательно нескольких с разными разрешениями экрана. Иначе получится фигня и придётся менять даже игровые механики. Поэтому порты с ПК редко взлетают - изначальный дизайн игры не заточен для мобилок. Особенно это важно для твоей первой мобильной игры, и для первой игры на новом для тебя движке.
Поэтому первым должен идти билд, а уже потом - разработка игровых механик, что будут на этом устройстве тестироваться так, как должен играть потенциальный игрок. Если игра, например, для расслабления в автобусе - нужно симулировать обстановку автобуса или тестировать в нём, чтоб убедиться в читаемости и удобстве интерфейса и геймплейных механик. Впрочем, если ты просто копипастишь успешную игру, это уже не так важно.
>Каково состояние годота в качестве инструмента разработки мобильных дрочилок на ведроид
Я пробовал, далеко не зашёл, но пока нормально.
Из хорошего:
- сборка APK на готовом шаблоне быстрая;
- UI работает практически так же, как на ПК;
- легко регулировать FPS даже в рантайме;
- легко настроить действие кнопки back.
Пока не пробовал, но хорошо:
- remote debug без установки всех файлов;
- поддержка мультитача, разных датчиков;
- можно включать разрешения галочкой;
- встроенная поддержка микротранзакций;
- можно собирать с нуля и это несложно.
Подводные:
- для многих фишек ОС нужна будет сборка с нуля;
- костные анимации Polygon не работают в GLES3;
- Vulkan пока слабо поддерживается смартфонами;
- запуск простой Vulkan игры долгий (3+ секунды);
- какие-то сложности с виртуальной клавиатурой;
- какие-то сложности с общей файловой системой.
Но моему смартфону уже почти 4 года, если что.
По экспорту смотри сам, в целом несложно:
https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_android.html
https://docs.godotengine.org/en/stable/tutorials/export/android_gradle_build.html
>>85597
>портировать под веб html5
>свистелками переделка можно на что угодно
Билд под веб самый ограниченный и медленный. Примитивные игры лучше писать на голом JS, чем использовать движок, а тяжёлые игры в браузере типичной домохозяйки/ребёнка будут тормозить. Поддержка веба тут скорее маркетинговая уловка.
>>85598
>потом точно разберешься
Для мобильных игр это категорически неправильно. Мобильные игры должны всегда тестироваться на реальных устройствах с самого раннего прототипа, буквально когда у тебя только меню и квадратик по экрану ползает. Потому что геймплей на мобилках чрезвычайно завязан на сенсорный экран, плюс неудобное положение пользователя в окружающем пространстве, и оценить это всё возможно только плейтестом на реальном устройстве. Желательно нескольких с разными разрешениями экрана. Иначе получится фигня и придётся менять даже игровые механики. Поэтому порты с ПК редко взлетают - изначальный дизайн игры не заточен для мобилок. Особенно это важно для твоей первой мобильной игры, и для первой игры на новом для тебя движке.
Поэтому первым должен идти билд, а уже потом - разработка игровых механик, что будут на этом устройстве тестироваться так, как должен играть потенциальный игрок. Если игра, например, для расслабления в автобусе - нужно симулировать обстановку автобуса или тестировать в нём, чтоб убедиться в читаемости и удобстве интерфейса и геймплейных механик. Впрочем, если ты просто копипастишь успешную игру, это уже не так важно.
Под айос не знаю, под андроид полет нормальный - 3 приложения за последние пару лет опубликовал в гугл плей без какого-либо геморроя, одна из приложений гуевая менюха-менеджер с low process mode. Сейчас делаю четвертую в 3д, по тестам на локальных девайсах тоже норм.
>Для мобильных игр это категорически неправильно. Мобильные игры должны всегда тестироваться на реальных устройствах с самого раннего прототипа
Спасибо, анон, именно поэтому я и спрашивал
Хуевая, лучше не стоит. Проблемы есть и с мультипоточностью, и с шейдерами, и с поддержкой взаимодействия с системой. Всё довольно криво и косо, юнити в этом плане подойдёт лучше.
Пошел нахуй, лжец
Неприятно, годотя?
1. Вот в 2д есть нода CanvasGroup, чтобы за один дравколл отрисовывать всех её детей. А есть что-нибудь подобное для 3д?
2. Шейпы коллизий. Они по умолчанию рисуются только рёбрами, и не видно, особенно когда пытаешься подогнать к модельке. Как сделать, чтобы у коллижоншейпов отрисовывались ещё и грани?
Итак. Единственный (в ассетлибе) террейн-плагин на гдскрипте, поддерживающий скульптинг и дырки, это Heightmap Terrain от Zylann. И у него есть две проблемы:
1. Ублюдский скульптинг. Прямо вот как будто автор сам им не пользуется. Точечное аккуратное редактирование отдельными кликами невозможно, гизмо рисуется неправильно, настройки кисти в виде полосок прокрутки без текстового поля.
2. Всратая работа с текстурами. Сука ну почему нельзя StandardMaterial3D использовать? Ну нахуя эти вот извращения с запихиванием бампмапы в альфу текстуры альбедо? Или это какое-то принципиальное ограничение террейнов?
Все остальные плагины либо на плюсах (при экспорте ждёт ебля с пересборкой темплейта), либо на б-гомерзком шарпе.
И я всё ещё считаю, что движок, стремящийся в нишу тридэ, должен иметь встроенный террейн. И старфилдовское "модами допилят" тут не прокатит - мододелы делают только то, что надо лично им, ровно так, как надо им, а если тебе не нравится - ну сделай сам. И отмазка про малую востребованность тоже мимо: среди трёхмерных игр таких, которым террейны не нужны, меньшинство; а поддержку вулкана, а рендерер для чего пилили, чтобы так и вариться дальше в двадэ?
Карочи аргх.
А в блендере я потыкался и понял, что в годоте левелдизайнить гораздо комфортнее. Блендер охуенен для моделирования, но на больших сценах всё же Годот и шустрее, и удобнее. Воттаквот.
> считаю, что движок
> должен иметь встроенный террейн
Молодец, возьми с полки пирожок.
Я хотел написать, >сделай сам, это опенсорц< но вспомнил, что деланье ты называешь
> ебля с пересборкой темплейта
Поэтому полка, поэтому пирожок.
Вот только как их самому писать, это какой там язык используется?
бред
Скоро на slang перейдут.
Меня тут три месяца не было. Скажи, на Годовом уже появились игры (ну, знаешь, такие программки, в которые играют больше 1000 человек)?
К сожалению есть только недоделанный кал. Это же Годо, у них сейчас другая задача, вместо создания движка для игр они собирают донаты с ГЛГБТК++ фондов.
Вот в чем дело, загружаю скрипт в коде таким образом
load(путь к скрипту).new(аргумент), но получаю ошибку, что мой скрипт не принимает аргументы.
При этом в скрипте есть _init, который принимает аргумент и если сделать этот скрипт классом, то все работает, но при использовании load выскакивает ошибка.
Что я делаю не так?
Что? Я, вроде, в актуальный тред пишу
Вот я делаю StandardMaterial3D -> преобразовать в ShaderMaterial. Дальше смотрю код этого шейдера и вижу, что карта высот (heightmap_texture) в нём не используется вообще. Хотя в исходном материале она была задана.
Шозанах? Я как раз эту часть шейдера хотел поменять, а её внезапно нету.
> загружаю скрипт в коде таким образом
> load
Объект уже существует и просто меняет скрипт у себя. У него не отрабатывает init и аргументы оттуда игнорируются. https://docs.godotengine.org/en/stable/classes/class_object.html#class-object-private-method-init
Чтобы инстанцировать с аргументами, тебе нужно создавать объекты, а не грузить скрипт в существующие.
1. В скрипте делаешь class_name ClassName
2. В целевом участке кода:
> var cn := ClassName.new(arg)
> add_child(cn)
Тока так.
>Годнота
Опять управлять тянкой, которую насилуют в случае поражения. То есть фап-контент противоречит игре.
Почему так мало игр, где ТЫ насилуешь монстров? И побеждаешь в бою, если изнасилуешь правильно.
>CanvasGroup, чтобы за один дравколл отрисовывать
Не, там другая суть. Сначала твои ноды рендерятся по отдельности, а потом CanvasGroup копирует результат, применяя к нему закреплённый на нём шейдер.
>А есть что-нибудь подобное для 3д?
В смысле, чтобы применить эффект для копипасты? Конечно. Используй SubViewport, там transparent_bg установи true, чтобы фон был прозрачный. Текстуру обработаешь как обычно с 2D шейдерами. Вроде бы можно как-то вытащить отдельно буфер глубины...
>Шейпы коллизий
>пытаешься подогнать к модельке
Ставь камеру ортогонально спереди/сверху/сбоку. Будет намного проще, чем с перспективным видом. Хоткеи +/- как в блендере: на клавишах нумпада.
>отрисовывались ещё и грани
Создай тестовый MeshInstance с примитивом. У сфер, капсул, цилиндров и параллелепипедов одинаковые параметры (должны быть). Как настроишь, значения можно скопировать, кликнув в инспекторе правой кнопкой мыши (копирует с учётом типа поля, т.е. скопированный Vector3 вставится в любой Vector3).
>Объект уже существует
А если сделать так?
>var script: Script = load("res://script.gd")
>var object = script.new(args)
Так должно работать...
>>85726
>ошибку, что мой скрипт не принимает аргументы
Не знаю, попробуй сделать так:
>print(load("res://script.gd"))
Чтобы понять, что у тебя там загрузилось.
А зачем грузишь скрипты через load? Моддинг?
Попробуй выключить uv1_triplanar:
https://docs.godotengine.org/en/stable/classes/class_basematerial3d.html#class-basematerial3d-property-heightmap-enabled
>Note: Height mapping is not supported if triplanar mapping is used on the same material. The value of heightmap_enabled will be ignored if uv1_triplanar is enabled.
Если что-то из стандартных функций не нужно, Godot генерирует облегченную версию шейдера.
>прошлом треде я бухтел
Помню, тебе какая-то трава нужна была вдоль дорог.
>Ублюдский скульптинг
Скульптинг... Травы? А не много ли тебе нужно?
>Точечное аккуратное редактирование отдельными кликами
...травы? Травы ведь? Вдоль дороги, да?
>Всратая работа с текстурами
Это нужно, чтобы оптимизировать рендеринг.
>нельзя StandardMaterial3D использовать?
Куда StandardMaterial3D засунешь, если у тебя там несколько разных текстур альбедо? У тебя текстура травы, земли, камней, песка. Их нужно смешивать в разных пропорциях в зависимости от того, что там нарисовано на твоём ландшафте. Для этого нужен специальный шейдер, а не тот, что в Godot.
Если тебе достаточно одной текстуры травы, то тебе вообще не нужен никакой ландшафт. Просто слепи модельку травы в блендере и импортируй как меш.
>ебля с пересборкой темплейта
Если плагин типа такого, то сборка не нужна:
https://github.com/TokisanGames/Terrain3D
Т.к. там уже готовые .dll/.so в папке /bin лежат.
>тут не прокатит - мододелы делают только то, что надо лично им, ровно так, как надо им
А если разработчики Godot Engine его сделают?
>среди трёхмерных игр таких, которым террейны не нужны, меньшинство
Ага. А если новичок попытается сделать копание? Классические террейны сейчас мало используются. Посмотри на количество 3D игр на мобилках... Там летающие в пространстве меши, иногда GridMap. А большинство игр с террейном - это клоны майна, а значит, воксельные со сглаживанием.
>в блендере
>левелдизайнить
Никто тебя не заставляет весь уровень в блендере лепить. Слепи свою траву там, импортируй в Godot.
>прошлом треде я бухтел
Помню, тебе какая-то трава нужна была вдоль дорог.
>Ублюдский скульптинг
Скульптинг... Травы? А не много ли тебе нужно?
>Точечное аккуратное редактирование отдельными кликами
...травы? Травы ведь? Вдоль дороги, да?
>Всратая работа с текстурами
Это нужно, чтобы оптимизировать рендеринг.
>нельзя StandardMaterial3D использовать?
Куда StandardMaterial3D засунешь, если у тебя там несколько разных текстур альбедо? У тебя текстура травы, земли, камней, песка. Их нужно смешивать в разных пропорциях в зависимости от того, что там нарисовано на твоём ландшафте. Для этого нужен специальный шейдер, а не тот, что в Godot.
Если тебе достаточно одной текстуры травы, то тебе вообще не нужен никакой ландшафт. Просто слепи модельку травы в блендере и импортируй как меш.
>ебля с пересборкой темплейта
Если плагин типа такого, то сборка не нужна:
https://github.com/TokisanGames/Terrain3D
Т.к. там уже готовые .dll/.so в папке /bin лежат.
>тут не прокатит - мододелы делают только то, что надо лично им, ровно так, как надо им
А если разработчики Godot Engine его сделают?
>среди трёхмерных игр таких, которым террейны не нужны, меньшинство
Ага. А если новичок попытается сделать копание? Классические террейны сейчас мало используются. Посмотри на количество 3D игр на мобилках... Там летающие в пространстве меши, иногда GridMap. А большинство игр с террейном - это клоны майна, а значит, воксельные со сглаживанием.
>в блендере
>левелдизайнить
Никто тебя не заставляет весь уровень в блендере лепить. Слепи свою траву там, импортируй в Godot.
Но я не меняю никакой скрипт, я просто загружаю новый и передаю ссылку на него в переменную.
>1. В скрипте делаешь class_name ClassName
Я про это знаю, но это сильно забивает автодополнение. Десяток лишних классов, экземпляры которых нужно создавать не так уж и часто, мне не нужны в автодополнение.
>>85762
>var script: Script = load("res://script.gd")
>var object = script.new(args)
Тоже самое. Ошибка, что new не принимает аргументы.
>Чтобы понять, что у тебя там загрузилось.
Загрузился этот самый скрипт. Я могу с ним нормально работать, просто я не могу передать аргументы в конструктор.
>А зачем грузишь скрипты через load? Моддинг?
Не, не для этого. Просто у некоторых айтемов, которые у игрока в инвентаре, должны быть уникальные функции, сначала я делал это через class_name, но потом меня стало напрягать замусореность автодополнения.
> меня стало напрягать замусореность автодополнения
Ебать пиздец.
Просто пиздец.
Я не знаю, чему тут еще помочь.
Автодополнение у него замусорено, ёб твою мать. Это толстота такая?
>Вот в 2д есть нода CanvasGroup, чтобы за один дравколл отрисовывать всех её детей. А есть что-нибудь подобное для 3д?
Если ты про батчинг, то для 3-ки есть Mesh Merge (вручную/скриптами). https://github.com/godotengine/godot/pull/57661 Для одинаковых объектов MeshInstance. А в 4-ке это вроде не так важно, там автоматический mesh instancer, а для разных дроуколлы дешевле, так что тут стоит вообще проверить, надо ли с этим париться.
Если же ты про порядок рендера, то для 3д есть render priority.
Поэтому либо все один аки человек-оркестр плюс свободные ассеты, либо плоти людям. Ситуация типичная, не переживай, справишься. Геймлпей энивей важнее арта.
Все, нашел в доке
>Ну нахуя эти вот извращения с запихиванием бампмапы в альфу текстуры альбедо? Или это какое-то принципиальное ограничение террейнов?
Оптимизация шейдера. В доках же описано почему. https://hterrain-plugin.readthedocs.io/en/latest/#packing-textures-manually
Чтение текстуры в шейдере - дорогая операция. Так бы пришлось читать 2 текстуры, притом что из первой используется только RGB (3 из 4 каналов), а неровности - 1 канал из 4. Логично объединить их 3+1.
Этот человек пытался выжать максимум выгоды, ведя сразу три проекта с одними и теми же спрайтами. Если кому интересно, могу скинуть ссылку на Discord-сервер, где всё это задокументировано. Возможно, кому-то пригодится, чтобы в будущем не наступить на те же грабли.
Я, между тем, две недели работал, как одержимый: по 12 часов в день, с утра до вечера, вкладывая в проект всю душу.
Теперь даже не знаю, что делать. Идея была его, спрайты тоже его. Перерисовывать? Ну, честно говоря, совсем не хочется. У меня были планы выпустить игру в Steam в раннем доступе, довести её до ума и сделать по-настоящему крутой продукт. А ему, как оказалось, важнее было всё сделать быстро и по-своему, но при этом он ни разу об этом прямо не сказал.
Позже выяснилось, что он крайне болезненно реагирует на любую критику. Начал придираться буквально ко всему, без причины, просто из-за собственного настроения.
> Идея была его, спрайты тоже его.
Нахуй с таким вообще связываться, он потом тупо тебя засудит.
Если честно, я бы хотел, чтобы кто-нибудь почитал чат дискорда. Мне интересно ваше мнение, чтобы понять, в чём я был неправ.
Ну смотри, допустим идея не копирайтится. Но есть ли у тебя договор с ним на передачу прав на спрайты?
>CanvasGroup
Ты перепутал с BackBufferCopy, буквально его описал.
https://docs.godotengine.org/en/stable/classes/class_canvasgroup.html
>Merges several 2D nodes into a single draw operation.
Батчинг крч.
>Ставь камеру ортогонально
Не работает с более-менее сложными формами, становится непонятно, что там и как.
>Создай тестовый MeshInstance с примитивом
Вот это годный воркароунд, спасибо.
Да не хочу продолжать с его спрайтами, их там было совсем немного: всего пара мобов с одной анимацией, бонус и спавны.
Я бы пересобрал проект со свободными спрайтами, на итче хватает, выложил бы что получилось и двигался дальше получив экспириенс. Потому что, будем честны, ваша первая игра, даже если бы вы не разосрались, нихуя не взлетела бы. Как и вторая. И третья.
>всю душу
>по-настоящему крутой продукт
И советую снять розовые очки, иначе геймдев тебя пережует и выплюнет. Что, впрочем, уже и происходит. Дискорд ваш читать лень. Просто продолжай работать.
>трава
Нет. Участки неровной земли между асфальтированными дорогами и домами в городе. Щас выгляни в окно и посмотри на землю во дворе. Вот оно и надо. Точечно редактировать - чтобы подогнать к тротуарам, бордюрам, заборам и стенам.
А как раз именно трава НЕ нужна.
>оптимизировать рендеринг
Понян. >>85966 понятно объяснил.
>А если разработчики Godot Engine его сделают?
>если
>Никто тебя не заставляет весь уровень в блендере лепить
Ну, сам уровень и заставляет. Террейн, дороги, бордюры дома - основа, в общем.
>Классические террейны сейчас мало используются
Ну хуй знает, мне как-то казалось всегда, что кусок плоскости, гнутый субдивизией с дисплейсментом, - это простой и дешёвый способ придать живости и естественности любой карте.
Олсо, вылезла ещё одна проблема террейнов-плагинов. Пикрил, блядский уголок. Как от него избавиться - хз. Судя по всему, никак, это ограничение логики прорезания дыр.
Я от безнадёги стал курить, как завелосипедить свой простенький террейн, и чот прихуел. Шейдером?! Шейдером сука. Вот эту абсолютно статичную хуйню, которая делается ровно один раз и никогда более (в рантайме) не меняется - вот её изгибают шейдером?! Но зачем, а главное нахуя? Это ж бред, считать такое каждый кадр - это хуже NFT. Походу, запекание шейпа - это утерянная технология древних.
Шейдер - это то, что рисует материалы. Они и так везде используются в рендере. Запекание в zylann hterrain есть, но смысл террейна то в динамических лодах - когда детально рисуется та поверхность, что ближе к камере. В zylann hterrain запекание есть, там будет меш на выходе, но движку потом придется рисовать его целиком.
>Это толстота такая?
Не он один от этого страдает:
https://github.com/godotengine/godot-proposals/issues/1566
>👍142 🚀29 👀25
>>85792
>Ошибка, что new не принимает аргументы.
Ну, похоже на баг, т.к. по идее должно работать.
>не могу передать аргументы в конструктор.
А тебе они действительно нужны в _init()?
>должны быть уникальные функции
Можно попробовать цеплять к ним ноду...
>напрягать замусореность автодополнения.
Добавляй префиксы, будет как-то так:
>class_name Inventory
>class_name InventoryItem
>class_name InventoryItemHint
>class_name InventoryItemEffect
>class_name InventoryItemEdible
>class_name InventoryItemTool
>class_name InventoryItemWeapon
>class_name InventoryItemThrowable
И т.д. Это, конечно, костыль, но лучше, чем ничего.
С рабочими name space было бы как-то так:
>class_name Inventory.Item.Effect
Так что особой разницы в ощущениях как бы и нет.
>Это толстота такая?
Не он один от этого страдает:
https://github.com/godotengine/godot-proposals/issues/1566
>👍142 🚀29 👀25
>>85792
>Ошибка, что new не принимает аргументы.
Ну, похоже на баг, т.к. по идее должно работать.
>не могу передать аргументы в конструктор.
А тебе они действительно нужны в _init()?
>должны быть уникальные функции
Можно попробовать цеплять к ним ноду...
>напрягать замусореность автодополнения.
Добавляй префиксы, будет как-то так:
>class_name Inventory
>class_name InventoryItem
>class_name InventoryItemHint
>class_name InventoryItemEffect
>class_name InventoryItemEdible
>class_name InventoryItemTool
>class_name InventoryItemWeapon
>class_name InventoryItemThrowable
И т.д. Это, конечно, костыль, но лучше, чем ничего.
С рабочими name space было бы как-то так:
>class_name Inventory.Item.Effect
Так что особой разницы в ощущениях как бы и нет.
>Батчинг крч.
Батчинг в 2D происходит автоматически, и это не то.
>Ты перепутал с BackBufferCopy
Это ты невнимательно читаешь.
Читай внимательно:
>The CanvasGroup uses a custom shader to read from the backbuffer to draw its children.
>To duplicate the behavior of the builtin shader in a custom Shader use the following:
>void fragment() {
>vec4 c = textureLod(screen_texture, SCREEN_UV, 0.0);
Т.е. эта нода каждый кадр копирует с экрана...
Пример того, для чего нужен CanvasGroup:
https://www.reddit.com/r/godot/comments/xrfkc5/
>копирует
А, нет, копирует из "back buffer", которых у приложения может быть несколько. Но вот вопрос, как часто этот буфер обновляется? Когда ноды двигаются? Каждый кадр? Батчинг имеет смысл только если уменьшает количество вызовов отрисовки, а если каждый кадр рендерить в задний буфер - будет больше вызовов.
Например, если использовать это:
https://docs.godotengine.org/en/stable/classes/class_subviewport.html#enum-subviewport-updatemode
>UpdateMode UPDATE_ONCE = 1
>Update the render target once, then switch to UPDATE_DISABLED.
Тогда у тебя вместо 9000 вызовов будет только 1 - копирование готовой картинки из ViewportTexture.
Но если у тебя стоит:
>UPDATE_WHEN_VISIBLE
>UPDATE_WHEN_PARENT_VISIBLE
>UPDATE_ALWAYS
У тебя будет 9001 вызов отрисовки: сначала сами объекты, а потом их копирование из текстуры.
Поэтому я сомневаюсь на счёт роли CanvasGroup.
Я прочитал твою портянку. Тебя конечно тяжело читать. Ну да ладно.
Вот поэтому и нужен договор с художниками. Причем с прописанными эксклюзивными правами, чтобы арт и персонажей нельзя было использовать где-то еще.
Договоры на то и нужны. Поскольку вы не смогли определиться кто из вас главный (да-да, из двоих кто-то главнее).
Спасибо за совет
Ты только что случайно (пункт 1 правил Двача):
>УК РФ Статья 138
>УК Украины Статья 163
Чтоб понимали, это алкаш-гомофоб из >>981122 (OP)
В переписке объективные претензии к тебе. На его месте я б с тобой разорвал контакт раньше, молча.
>>85975
>три проекта с одними и теми же спрайтами.
Это нормальная практика на фрилансе. Юридически проблемы нет, ведь это его проект, а не твой личный.
>Начал придираться буквально ко всему, без причины, просто из-за собственного настроения.
Это ты по настроению всё делаешь. Не проецируй проблемы со своими гомоэмоциями на других.
>>86029
Не защищай этого токсика - получил, что заслужил. Неожиданно, что кто-то с ним вообще связался.
Я, кстати, вообще нашел его случайно по скриншоту с Двача, а потом нашел сайт.
https://gamin.me/posts/22832
Как выяснилось, до меня он уже с кем-то не сработался, потому что скидывал другую демку в тг.
И потом оказалось, что он работал еще с двумя людьми параллельно со мной.
То есть, он нашел как минимум четырех "лохов", включая меня.
На такую мразь надо вообще везде объявления расклеивать, чтобы с ним не работали. Нахуй таких пинком под жопу вытравливать из геймдева.
>лохов, включая меня.
Ты не лох, ты токсичный агрессор. Остынь.
>с двумя людьми параллельно со мной.
У тебя уже были фантазии что между вами любовь?
Понимаю, тяжело переживать измену любовника...
>такую мразь
В чём он виноват? В том, что просил твоей помощи?
>сразу не предупредил
Он же вроде ясно выразился:
>Целей заработать нет, только приятно провести время во время разработки и получить фан от процесса и общения.
Что ты ожидал? Что между вами внезапно вспыхнут интимные отношения, только он да ты наедине?
Мог бы заранее спросить, не работает ли он с кем-то, если тебя настолько волнует этот интимный момент.
А вот твой пост:
>Этот человек использует одну и ту же идею игры и одинаковые спрайты, параллельно работая с несколькими программистами.
>По сути, он просто тестирует, кто ему больше подходит, а затем избавляется от остальных.
>Меня он отсеял, прекратив сотрудничество спустя две недели активной работы.
Никаким законом всё это не запрещено. Трудового договора между вами, как я понимаю, не было. Если рассчитывал на что-то большее - заключал бы сразу договор, потом было бы на что жаловаться (в суд).
>Все усилия и время, вложенные в проект, оказались потраченными впустую.
Это неправда, поскольку:
1. Код у тебя никто не отбирал - ты можешь просто поменять графику и продолжить работу один или с другими людьми. Учитывая разногласия, ты явно собирался делать что-то другое - вот и делай сам.
2. Ты за это время набрался опыта и навыков. Даже если ты не будешь больше использовать Godot, опыт разработки игр ценен вне зависимости от движка. И кроме того, опыт работы в команде - даже если он был неудачным. Делай выводы и станешь лучше.
Я его и не защищал, я просто не стал комментировать его личность, а ответил только по существу. У нас же тред дружбы и взаимопомощи, а еще он новичок в годоте, мы же не гейткиперы, и помогаем всем годотерам. К тому же он двачер.
Я тебе по программистски логично объясню.
Если ты пробуешь и покупаешь помидоры в одном магазине, это не означает что у тебя пропадает право покупать их в других магазинах.
Если ты выбираешь, скачиваешь картинки для своей игры, это не значит что ты не можешь больше скачивать картинки других художников.
Тут произошло то же самое. Он выбирал программиста, и это не значит что он не имеет права пробовать других. Договор то вы не заключали, значит и обязанности продолжать сотрудничать нет.
Если у вас не было договора какого-то, получается ты код ему сам добровольно писал. В следующий раз заключай на нужных тебе условиях, раз тебе так не нравится, нанимайся по договору, где будет написано что делаешь ты и что ты за это получаешь - например деньги.
В любом случае для вас это к лучшему, потому что представь, что было бы если бы так без договора выпустили игру и потом начали бы делить прибыль. Это ж пиздец. Если не знаешь как оно бывает - посмотри сериал "кремниевая долина", там понятно и доступно показаны такие переделы.
хотя если почитать тот тред, а как с ним будет заключать договор петербуржец в казахстане? Подозреваю что neekaque
>Участки неровной земли между асфальтированными дорогами и домами в городе. Щас выгляни в окно и посмотри на землю во дворе. Вот оно и надо. Точечно редактировать - чтобы подогнать к тротуарам, бордюрам, заборам и стенам.
Обычно газоны в городах сильно ограничены и спроектированы как прямоугольники. Т.е. если твой уровень - исключительно город (современный), то выгоднее будет вставлять кусочки неровной земли в промежутки между дорогами, домами и тротуарами, а не наоборот, как ты предлагаешь. Поэтому не вижу проблемы намоделить эти кусочки отдельно.
Кстати, современные газоны делают в виде рулонов, поэтому укладывать их удобнее всего именно в такие прямоугольные участки. И в целом там нет каких-то особенных неровностей, разве что склон дороги.
Потом, возникает вопрос: какова роль в геймплее у данных участков неровной земли? На чём у игры геймплейный фокус: автомобилях, пешеходах, или, возможно, менеджменте города? Может ли игрок взаимодействовать с неровными участками?
Если тебе не нужен фотореализм графики, то можно обойтись программной тряской автомобиля, когда сходит с дороги на обочину - без буквальных кочек. Простое замедление тоже может оказаться более естественным по ощущениям, чем точная модель взаимодействия с бугорками на обочине дороги.
Ты хочешь простое и быстрое решение, что как бы намекает, что это вообще не важный элемент. Если неровности только декоративные, может, их стоит отложить на потом, сфокусировав силы на отладке основного геймплея игры? Скажем, вдруг задумка геймплея окажется скучной, забьёшь на проект...
>А как раз именно трава НЕ нужна.
Речь шла о плоской текстуре травы.
>>Никто не заставляет в блендере лепить
>Ну, сам уровень и заставляет
У тебя есть 2D эскизы/наброски/концепт уровня? Референсы? Похожие уровни из других игр? Не волнуйся, если что, никому не интересны чьи-то каракули типа пикрила. Но так нам будет проще подсказать более удобное решение проблемы.
А ты не думал в сторону модульности/тайловости? Не обязательно квадратно гнездовой, главное что делать не так много частей то надо. Ну например у тебя могут быть замоделены куски канавы, а остальная земля будет плоскостью.
1280x658, 0:24
Каким образом лучше всего сделать линию от пули
ЧТобы как в утракиле
Сидел пердел над партиклами но они дают не тот эффект
Просто цилиндр, а то и вообще банальная прямоугольная плоскость.
Вот это глянь https://docs.godotengine.org/en/stable/tutorials/3d/particles/trails.html
Раньше надо было аддон качать
Я для сложных веток диалогов использую дополнительные ноды с embedded скриптами, дальше уже от конкретного диалога зависит. Тебе посоветую не повторять мой путь, не костылять и взять готовый плагин диалогов.
> Добавляй префиксы
> Это, конечно, костыль
Когда я учился это был хороший тон в кодинге. А нынче вона чо, кастыли!
Не, это не всегда было костылём, как раз когда я учился это было хорошим тоном в кодинге.
Вот прям так и говорили, не надо использовать классы и неймспейсы, замусоривайте имена переменных? Такое может быть, если учился на бейские каком нибудь. Потому что если уже были неймспейсы или классы, то за Inventory.InventoryItemEffect бы били по рукам в приличном заведении.
> Inventory.InventoryItemEffect
У тебя каша в голове. Охуенную антирекламу своего учебного заведения ты щас сделал. Где учился?
>исключительно город (современный)
Город ВСЖ. Не облагороженный мегаполис с ровными газонами, а кривой-косой артефакт уходящих времён.
>какова роль в геймплее у данных участков неровной земли?
Научиться их делать :3
Весь этот проект затевался с целью вкатиться в 3д. Так что я просто поставил себе задачу: хочу сделать такой вот уровень, соответственно и ищу инструменты под это.
Вообще, я почитал про ArrayMesh и всё сопутствующее, вроде не оч сложно. Попробую навелосипедить простенький террейн под свои задачи. Существующие плагины нацелены на огромные открытые миры и ЛОДы, а мой будет сделан под запекание меша, точечное редактирование и маленькие локации. Примерно как они используются в Халфлайфе.
Олсо, была даже мысль слепить уровень в Хаммере, а потом импортировать через VMF-импортер. Но это не даст мне новых знаний, а велосипединг - даст.
>Ты хочешь простое и быстрое решение, что как бы намекает, что это вообще не важный элемент
Да не, просто надеялся успеть слепить к определённой дате. А теперь уже точно не успеваю.
>>86060
>А ты не думал в сторону модульности/тайловости?
Не. Панелькам надо давать не-панельное окружение, только тогда они раскрываются во всей своей чужеродности.
>>86267
> тебе не стоит закапывать себя еще глубже
Забавно.
Ну ок, ты решил закапываться. Не буду мешать.
>Ну, похоже на баг, т.к. по идее должно работать.
Попробовал в пустом проекте, точно так же не работает.
>Можно попробовать цеплять к ним ноду...
Не хотелось бы
>И т.д. Это, конечно, костыль, но лучше, чем ничего.
Я все таки тоже решил сделать костылем. Сразу после создания вызываю собственную функцию "инициализации". Конечно, возможно, я в будущем об этом пожалею, но пока что это самый логичный вариант, который пришел мне в голову.
так и есть. есть issue на гитхабе, в гдскрипте нет перегрузки функций, а значит нет разных конструкторов. А значит редактор не сможет создать экземпляр с дефолтным конструктором без параметров. Нерешенная проблема, так и советуют делать свою функцию инициализации.
Поцоны это просто эпик!
Похоже, что художник еще и персонажа полностью сплагиатил. Просто вбейте в Яндекс.Картинки название: Not Involved “Survived”.
https://www.youtube.com/watch?v=898Yqyte8qo
https://play.google.com/store/apps/details/Not+Involved?id=com.strayfeet.notinvolved
https://strayfeetgames.itch.io/not-involved
Ладно, я, можетскуфпротивный и алкоголик. Но он украл у тяночки писечки. Это нельзя так просто оставить.
Это его новелла, как выяснилось, и он уже давно получает какие-никакие донаты.
Но кодеры ему нужны чисто за бесплатно, которых потом можно легко отсеять.
Короче, ушлый человек пытается развести по максимуму "лохов", при этом не рассказывая всех подробностей.
Такой себе Мориарти — гений преступного мира, дергает из тени за ниточки, манипулируя глупцами.
Теперь понятно, почему его так триггерило, когда я не хотел звать звукоря и предлагал нагенерить нейронкой.
Спросил у команды разрабов посмотрим что ответит.
Похоже что команда минимум из четырёх человек и они давно делают похожие игры.
У тебя не хватит мощностей и видео памяти.
Что бы их хотя бы каждые 10 минут обучать.
По сравнению, это то же самое что криптовалюту майнить.
Алгоритмов нет, там просто рандом.
В указанном тебе диапазоне из нескольких триллионов варинатов.
Которые понравились тебе.
Если варианты правильные - лак.
Нейронка двигается в указанном направление.
Но если говорить о конкретном видео, то оно просто собрало разные LLM под разными именами,
которые указаны в константах, чтобы было понятно,
к кому обращаются.
И всё равно, даже не зная имён и обращений, они поняли, кто человек.
Сука, я как будто в некоторые моменты думаю, что сам с нейронками общаюсь на дваче.
А иногда и сам собой, когда забываю старые свои сообщения.
если я вам всем не нравлюсь
я могу уйти навсегда с двача
мне не сложно бдут
и варитесь сами в своем говне без меня
я не первый раз в интернете.
И большая половина моей жизни прошла на дваче и общение с двачерами в скайпе и дискорде. Не рассказывай мне сказки мальчик кто тут шизик.
Похоже, он нашёл ещё один способ, как поднасрать:
https://godotengine.org/article/statement-on-godloader-malware-loader/
Видать, всё никак не может охладить свою жопу.
Почитал, ознакомился, и мне пришла в голову идея, почему Хуан не сделал возможность зарегистрировать pck-файлы в системе, чтобы они запускались установленным в системе годотом? Было бы интересно и необычно. Дааа... Мало кто поймёт в наше время. Открывать игры словно офисные документы.
Я уже давно подозревал, что в .pck файлы будут эксплоиты встраивать. У рантайма годота нет никаких сендбоксов, он исполняет все что в него пихают, и был вопрос времени, когда появятся первые вирусы
Так никакой дополнительной проблемы pck не создает. Так чел скачал pck и запустил, а так бы он скачал .exe и запустил. Было бы то же самое.
Более того на стороне годота ничего сделать и нельзя. Песочницей должна заниматься операционная система, антивирусы (делаемые миллионными корпорациями). В современном андроиде например приложению просто не покажут файлы других приложений или системные.Ему не покажут память других процессов, где данные банковских карточек и паролей. А проблемы решета винды не должен решать маленький опенсорсный годот. Экзешник и не может сам себя "запесочить". Что он сделает, скажет мамой клянусь - ничего плохо не делаю? Так хакеры найдут какой нибудь буффер оверран, и выйдет еще хуже - все будут утверждать, что бинарник безопасен, а хакеры уже научились сбегать.
А вот за что я бы ладошкой надавал, так это за вредные советы вида - доверяйте площадкам Стим, Эпик стор, Плей стор. Да с хуяли? Там индусы сидят на модерке и им никто исходники никогда не показывает. Они максимум могут поверхностно что-то заметить. Ну так ничто не мешает злоумышленнику положить в стим прогу, которая будет срабатывать только у игрока через неделю, а не у проверяющего. То же самое касается совета личного знакомства - каким это раком личное знакомство защищает? Может быть это тебе человек симпатичен, а он тебя ненавидит и специально тебе билд с трояном подкидывает.
Который перевозбудился. Хуан этого не оценил.
>>86560
>никакой дополнительной проблемы pck
>так бы он скачал .exe и запустил
Разница есть - антивирусы не могут оценить скрипт настолько хорошо, насколько чисто машинный код. Конечно, это та же проблема, что и с Python...
>>86558
>нет никаких сендбоксов
Давно предлагали, Хуан справедливо отказывал. Пользователь сам должен решать, запускать ему конкретную программу или нет. А разработчик самостоятельно должен очищать данные от кода. Остальные проблемы движок решить не может.
>>86552
>запускались установленным в системе годотом
Идея интересная, но для осуществления придётся отказаться от кастомных сборок с модулями. И на мобильных платформах всё равно плеер тащить.
Впрочем, это имеет смысл только пока .pck намного меньше плеера (<150 МБ). Практически любая игра с графикой и музыкой будет в несколько раз тяжелее текущей стандартной сборки Godot. троллейбус.jpg
>Разница есть - антивирусы не могут оценить скрипт настолько хорошо,
Это не проблема pck, это проблема антивирусов... К тому же 99% pck незашифровано, и gdscript даже проще анализировать, лол.
ну то есть я понимаю что разница в том, что если пользователь скачал exe и запустил, современная винда ему покажет окошко - винда предотвратила запуск незнакомого приложения, нажимте подробнее. А если скачать godot.exe+pck, то она его запустит, потому что сам экзешник один и тот же (в рамках версии) и подписан. Ну так это значит что винде надо изменить свое поведение, она все равно помечает файлы, которые были скачаны с интернета, значит ей надо помечать каждый новый скачанный godot.exe как незнакомый. Или блокировать загрузку .pck из godot.exe, так эе как она может блокировать загрузку .dll из .exe, пока пользователь не подтвердит.
>Идея интересная, но для осуществления придётся отказаться от кастомных сборок с модулями. И на мобильных платформах всё равно плеер тащить.
Проблема не в этом, а в разных версиях. Игры сделанные под 3.0.6, 3.1, 3.4, 3.6 не запустятся поздней или ранней версией. Не говоря про бурный рост 4.0.3, 4.1, 4.2, 4.3, 4.4 там в каждой были breaking changes.
Так когда ты меняешь игру (логику, структуру данных), то старый сейв перестанет подходить. Это ты сам своими руками сделал, чем тебе тут помогут?
>ничто не мешает злоумышленнику положить
Стим об этом узнает и забанит. А для регистрации требуется куча данных из реальной жизни. Заметь: упоминаний itch.io там нет, потому что на itch.io ты регистрируешься как на любой файлопомойке.
>Может быть
Жить вообще опасно - можно умереть. Это советы, помогающие снизить риск, а не на 100% защититься. Полная защита от вирусов - отсутствие подключения к интернету и каким-либо внешним устройствам.
Что они должны были написать?
>Не играйте в игры, а то умрёте (шанс 1:1000000000)!
>>86568
>это проблема антивирусов
Антивирусы скажут "ок, блокируем все .pck", доволен?
>упоминаний itch.io там нет, потому что на itch.io ты регистрируешься как на любой файлопомойке
Зато у итча есть официальный лаунчер с сандбоксом, через который и рекомендуется запускать индюшатину.
>Стим об этом узнает и забанит.
С чего ты взял что узнает? С чего ты взял что забанит? Никто это не гарантирует. А если и забанит, дело то уже может быть сделано, кто то запустит малварь до этого момента.
>А для регистрации требуется куча данных из реальной жизни
Учитывая что я видел кикстартер зареганный на бомжа, не считаю это непреодолимым препятствием.
В общем это такой очевидный самообман - раз с площадки значит надежно. Что то уровня дорогое или популярное значит хорошее.
Не хочешь - не реализуй. Добавь сейвы когда игра будет полностью готова и никогда не меняй формат и не добавляй ни одной новой фичи в игру.
>в разных версиях
Это как раз не проблема - я уже придумал:
1. Делаем общий лаунчер, .pck связаны с ним.
2. В .pck должен быть идентификатор версии.
3. Лаунчер смотрит версию в .pck и:
3.1. Если ещё нет, скачивает нужную версию.
3.2. Запускает .pck в плеере нужной версии.
Ну и вспомни VC++ Redistributable, C# .NET, Java JRE.
Т.е. при желании организовать это можно. Но зачем?
>Антивирусы скажут "ок, блокируем все .pck", доволен?
Доволен. Я же написал - до подтверждения пользователем. Так же, как сейчас с запуском незнакомых .exe. Хочет - пусть разрешает.
Вроде такой лаунчер уже есть. (Аддоном?) По крайней мере я помню скриншот для разработчика для управления версиями движка.
>С чего ты взял что узнает?
Пострадавшие пожалуются.
>С чего ты взял что забанит?
Репутация и профиты Valve дороже всего - они даже прогибаются под Роскомнадзор, что им постоянно спамит запросами "УДОЛИЛ БЫСТРА АТО ЗАБАНЮ".
>кто то запустит малварь до этого момента.
Да и хер с ним, ничтожная цифра в статистике.
>кикстартер зареганный на бомжа
Смешно, но таких наверняка меньшинство. Защита в первую очередь нужна от скрипт-кидди, которых большинство, а не от гениев преступного мира.
>уровня дорогое или популярное значит хорошее.
А у тебя логика примерно как:
>Даже в дорогом ресторане можно отравиться, так что рекомендовать есть в ресторане нельзя: пускай продолжают жрать дохлых крыс с помойки!
>Пострадавшие пожалуются.
С чего ты взял? Некоторые могут и через месяц не заметить что у них пароли или деньги с банка украли.
>Репутация
Не работает. Даже конкретно со Стимом, прям в этом году с ним судятся и что, у него дела хуже?
>Да и хер с ним, ничтожная цифра в статистике.
Это тем более касается раздуваемой проблемы с .pck. Она В РАЗЫ меньше потенциальных малварей в стиме - а нас убеждают что стим надежный источник.
>А у тебя логика примерно как:
>Даже в дорогом ресторане можно отравиться, так что рекомендовать есть в ресторане нельзя: пускай продолжают жрать дохлых крыс с помойки!
Найс соломенное чучело- У меня логика примерно такая - хватит жрать в макдоналдсе, надо выращивать номальную корову самому или хотя бы брать у фермера, у которого проверяешь чем он ее кормил и лечил.
>Почему сейвы такая ебаная боль?
Потому что они очень сильно зависят от внутреннего устройства самой игры, а Godot позиционируется как движок для любых игр. Простую систему сохранений несложно сделать, благо инструменты для неё есть.
>функционал, предполагаемый по дефолту
Есть несколько альтернатив сохранениям:
- относительно короткая игровая сессия, которую интересно повторять много раз с самого начала;
- игра даёт игроку пароль или ключ-код, который возможно ввести для начала с другого уровня;
- вся игра проходится за одну игровую сессию.
Конечно, сейчас такие игры нечасто встречаются.
>>86574
>Я не хочу это все реализовывать для каждой игры
Если твои игры очень похожие, то будет достаточно сделать свою систему сохранения один раз, а потом копировать скрипты в новые проекты (типа аддон). Старайся любой код делать универсальным - тогда с каждым проектом будет больше копирования уже готового и меньше изобретения кода с нуля.
>я хочу игры делать
Делай. Система сохранения - обычно последнее, что должно волновать тебя. Исключением будут только песочницы типа Minecraft, или если геймплей игры растянут между сессиями (симулятор питомца). Т.е. разработай сначала играбельный прототип, а потом подумаешь о том, как сохранять его состояние.
>Некоторые могут и через месяц не заметить
Думаю, если бы GTA V была трояном, это рано или поздно обнаружили бы. Игры со дна Стима только извращенцы всякие собирают, это их проблемы.
>прям в этом году с ним судятся и что
Если каждая собака будет лаять "в Стиме все игры с вирусом, не кочайте, у меня так брат умер", тогда им перестанут пользоваться. Валв это не выгодно.
>раздуваемой проблемы
Проблема реальная и началась с аддонов-троянов на гитхабе, нацеленных на ньюфажек. Хорошо, что они предупредили о ней. Что плохого-то?
>потенциальных малварей в стиме
Про Стим и так все знают и он борется с этим. А специальные Годо-трояны на гитхабе - новость.
>надо выращивать номальную корову самому
Ты об играх или об аддонах? Аддоны Годо на халяву - одна из главных киллер-фич, а их нехватка - главная претензия приверженцев юнити. Ты же предлагаешь рекомендовать всем изобретать всё с нуля.
Короче, тебе просто поспорить хочется, так ведь?
Я написал все предельно ясно. Говорить "в стиме все безопасно" - распространять вредную идею. Любой сторонний софт небезопасен, если ты не проверял исходники.
>Проблема реальная и началась с аддонов-троянов на гитхабе
С чего ты перешел на аддоны? Речь в новости про якобы "читы" для популярнх игр, распространяемые в виде godot.exe + pck. Проблема pck тут раздута, потому что такие трояны качали всегда и запускали даже если они в виде exe и антивирус предупреждает, pck не вносит тут никакой дополнительной проблемы.
> Ты же предлагаешь рекомендовать всем изобретать всё с нуля.
Опять соломенное чучело. Аддоны распространяются в виде исходного кода. Который так же необходимо проверять. Кроме того, изобретать с нуля не обязательно, можно прочитать глазами какой-то гайд или туториал, а потом написать аналогичный код самому.
>короче, тебе просто поспорить хочется, так ведь?
Я бы хотел, чтобы приверженцы и создатели опенсорса не писали глупости вроде "слепо доверяйте стиму".
>в стиме все безопасно
>слепо доверяйте стиму
Чини переводчик, там
>Trusted distribution platform
Значение "trusted" знаешь?
>если ты не проверял исходники.
Ой всё, теперь только в GNU/игры играть будем...
>С чего ты перешел на аддоны?
Основной вектор атаки этих хакеров.
>Речь в новости про якобы "читы"
Не про читы, а про аддоны, кряки, моды.
>в виде godot.exe + pck.
Там прям исходники с трояном дают, какие pck?
>такие трояны качали всегда и запускали
Только в газетах не писали про Godot.
>даже если они в виде exe и антивирус
Антивирус бессилен против pck, если ты уже дал все возможные разрешения exe, который 100% чист и подписан всеми возможными сертификатами. Только разработчик игры, сам того не ведая, вложил троян.
>в виде исходного кода. Который...
...никому не приходит в голову проверять.
Ты вообще не в теме о чем идет речь.
Там же по ссылке написано - рекламировались читы и кряки. Цель хочет взломать какую-то программу или игру, скачивает малварь. Раньше бы она скачивала .exe, сейчас скачивает .exe+pck, и запускает в любом случае, потому что ведется на халяву. Это вовсе не про аддоны или исходиики.
>Антивирус бессилен против pck
Это проблема антивируса. Антивирус может: 1) анализировать pck, как он это делает с другими типами виртуальных машин. 2) отслеживать поведение, например запросы в сеть, чтение/перезаписывание файлов которые не должен читать.
>никому не приходит в голову проверять.
Никогда в жизни не подключал ни один аддон, не прочитав сначала его исходники. Это блджад базовая гигиена. Ведь любой аддон может запустить автолоад тулскрипта, который хоть зашифрует тебе файлы, хоть сольет твои файлы в интернет. Вот об этом должны писать в Секьюрити тим годота, а не о том что всякие стимы якобы доверенная платформа.
>Ой всё, теперь только в GNU/игры играть будем...
А в чем собственно проблема? Только у закрытых платформ вроде айфона конфликт с этим, так я пользуюсь смартфоном с открытым андроидом и прошивкой.
В принципе даже одной Freeciv можно обеспечить себе развлечение на месяцы.
Вся сцена (тестовая):
WorldEnvironment
DIrectionalLight3D
LightmapGI
Camera3D
SpotLight3D
MeshInstance3D / PlaneMesh
Выбираю лайтмапу, пытаюсь запечь - годот падает.
Оказалось: лайтмапе надо задать environment mode. По дефолту там Scene, и если в сцене не задано нормальное небо, происходит краш, дескать sky is null.
А собсно. Запекать я взялся после того, как сцена с уровнем разрослась, и в рантайме фпс упал до 6-7. Опытным путём выяснил: виноват свет. Запёк. Нихуя не поменялось. Хотя вроде всем источникам света Bake Mode выставлен Static. Что я мог упустить?
Хз что у тебя за версия, в тройке был баг с динамично-запеченным светом, то есть объект движется туда-сюда, а запеченный свет это учитывает - баг сильно ронял фпс.
Нашел его: https://github.com/godotengine/godot/issues/71162
>Опытным путём выяснил: виноват свет.
Ты отключал свет и это снижало нагрузку?
Обычно, проблема не от света, а от теней:
>дроуколы = источники_тени × объекты_в_сцене
Поэтому основная оптимизация - это уменьшение количества объектов и источников света, отбрасывающих тени возле камеры.
Можно, например, создать большой примитивный объект, который не видно через обычную камеру, но рендерится в карту теней вместо множества мелких объектов в его позиции. Плоская мелочь на полу вообще не должна никаких теней отбрасывать.
Оптимальное решение зависит от сцены. Городская улица ночью оптимизируется иначе, чем композиция комнат в доме с закрытыми окнами и лампами.
Ну и в зависимости от визуального стиля, конечно.
Олдовое быстрее. Потому что закон Мура. Потому что корпоративный сговор интел и майкрософт!
Shadow volume изобрели в 1977, а shadow mapping изобрели в 1978. Разница в том, что shadow volume генерирует процедурную геометрию, которая делит игровое пространство на две части, в то время как shadow mapping всего лишь рендерит геометрию в специальную текстуру со стороны источника света.
>>86726
>Потому что закон Мура.
Закон Мура уже несколько лет не работает - кристалл мельче, а скорость на преждем уровне. Вытягивают только за счёт всяких костыльных оптимизаций, дополнительных сложных инструкций (типа AVX, их требуется явно использовать и они не везде), разных сопроцессоров типа NPU (для вычисления тензоров, полезны в специфических задачах типа нейронок) и многоядерности, которая в играх редко полезна.
> Закон Мура уже несколько лет не работает
Вот бы посмотреть на ебало фанатика, которому я объяснял, что закон Мура не работает в середине 2010х. Он мне доказывал, что закон Мура вечен и фундаментален и вот-вот, и ух, и ваще.
>>86720
>Ты отключал свет и это снижало нагрузку?
Да.
>проблема не от света, а от теней
Вот это неожиданный фокус. Чота не увидел особо настроек по оптимизации теней. Ну, кроме distance fade.
>Городская улица ночью оптимизируется иначе
Вот про это бы почитать где-нибудь.
Я когда-то (лет 15 назад) моддил сурс-игры, и там было всё просто. Есть источники света статические, есть динамические. Статические запекаются и в рантайме не светят; динамические, не пекутся, супер оптимизированные, в рантайме светят и отбрасывают тени.
А тут я карту освещения запёк, но источники света отключать не могу: динамические объекты типа персонажа перестают освещаться, выглядит всё сильно иначе, чем только с динамическим светом. А если не отключаю, их свет складывается с картой освещения, да и тормоза.
>>86725
Ля, утерянные технологии предков. Кармак батяня.
>>86735
>Закон Мура уже несколько лет не работает - кристалл мельче, а скорость на преждем уровне
Закон Мура не про скорость, дебич. Он про количество транзисторов на кристалле. И с этим пока полный порядок. А вот рост производительности замедлился, тут трудно спорить с очевидным.
Вот же ж не каждый день разговариваю с людьми про закон Мура, но вот ровно сегодня случилось объяснять про него подруге. И вдруг вы тут про него же. У меня ж паранойя разовьётся от таких совпадений, остановитесь!
Ровным счётом ничего. Полный гитхаб таких игорей, всем на них насрать. Ты не Кармак и твоя игра не Дум, чтобы кого-то заинтересовать своими исходниками.
Если игра станет супер-пупер популярной: кабанчики начнут делать клоны со слегка перекрашенными текстурами, тебя упоминать, естественно, не будут.
Если игра будет популярной в узких кругах (рогалики, стратегии): через несколько лет найдутся желающие высрать свой гениальный код в твой репозиторий, но вы разойдётесь во взглядах и получится форк.
Если игра будет унылым, никому не нужным говном: сможешь хвастаться перед хрюшами на галерах, что у тебя есть многолетний опыт разработки игр.
>>проблема не от света, а от теней
>Вот это неожиданный фокус.
Читай в документации, как тени работают. Чтобы от источников света были проблемы, их нужно сильно больше, чем обычно бывает в играх. А вот тени, если точнее, shadow mapping, всегда тормозит игру. Я вот в чужих играх тени всегда на минимум ставлю или вообще выключаю, независимо от движка игры.
>настроек по оптимизации теней
Можно уменьшить размер текстуры теней - от этого получатся более размытые, рубленные тени, но это серьёзно улучшает производительность без лишних изменений в сценах. Желательно вывести эту опцию игроку в меню настроек графики ("качество теней").
В остальном - убирать лишнее, объединять мелкое.
>>Городская улица ночью оптимизируется иначе
>Вот про это бы почитать где-нибудь
Не знаю, где. Но в целом, источники света далеко от игрока - это не источники света в прямом смысле, а имитация текстурой. Типа мерцающий огнями город в GTA не использует источники света, там просто малюсенькие квадратики с текстурой "огонёк". Тут названия "источников света" в игровых движках сбивают новичков с толку, т.е. они пытаются тупо расставить лампочки, получают 0 FPS и жалуются.
>динамические объекты типа персонажа перестают освещаться, выглядит всё сильно иначе, чем только с динамическим светом. А если не отключаю, их свет складывается с картой освещения, да и тормоза.
Vulkan Mobile? Нашёл твою проблему:
https://github.com/godotengine/godot/issues/85145
Что делать? Если ты на мобилки 3D игру делаешь, то вообще выключай тени, не обжигай людям руки.
>Закон Мура не про скорость
>Он про количество транзисторов на кристалле
Как это подтверждает фразу >>86726
>Олдовое быстрее. Потому что закон Мура.
Алсо, если кристалл увеличить, то и транзисторов получается больше. Это какая-то особая магия?
>А вот рост производительности замедлился
О чём речь и шла изначально (скорость алгоритма).
>объяснять про него подруге
Спасибки! Жду тебя завтра! Чмоки! <3
>>проблема не от света, а от теней
>Вот это неожиданный фокус.
Читай в документации, как тени работают. Чтобы от источников света были проблемы, их нужно сильно больше, чем обычно бывает в играх. А вот тени, если точнее, shadow mapping, всегда тормозит игру. Я вот в чужих играх тени всегда на минимум ставлю или вообще выключаю, независимо от движка игры.
>настроек по оптимизации теней
Можно уменьшить размер текстуры теней - от этого получатся более размытые, рубленные тени, но это серьёзно улучшает производительность без лишних изменений в сценах. Желательно вывести эту опцию игроку в меню настроек графики ("качество теней").
В остальном - убирать лишнее, объединять мелкое.
>>Городская улица ночью оптимизируется иначе
>Вот про это бы почитать где-нибудь
Не знаю, где. Но в целом, источники света далеко от игрока - это не источники света в прямом смысле, а имитация текстурой. Типа мерцающий огнями город в GTA не использует источники света, там просто малюсенькие квадратики с текстурой "огонёк". Тут названия "источников света" в игровых движках сбивают новичков с толку, т.е. они пытаются тупо расставить лампочки, получают 0 FPS и жалуются.
>динамические объекты типа персонажа перестают освещаться, выглядит всё сильно иначе, чем только с динамическим светом. А если не отключаю, их свет складывается с картой освещения, да и тормоза.
Vulkan Mobile? Нашёл твою проблему:
https://github.com/godotengine/godot/issues/85145
Что делать? Если ты на мобилки 3D игру делаешь, то вообще выключай тени, не обжигай людям руки.
>Закон Мура не про скорость
>Он про количество транзисторов на кристалле
Как это подтверждает фразу >>86726
>Олдовое быстрее. Потому что закон Мура.
Алсо, если кристалл увеличить, то и транзисторов получается больше. Это какая-то особая магия?
>А вот рост производительности замедлился
О чём речь и шла изначально (скорость алгоритма).
>объяснять про него подруге
Спасибки! Жду тебя завтра! Чмоки! <3
> Закон Мура не про скорость, дебич. Он про количество транзисторов на кристалле. И с этим пока полный порядок.
С законом Мура случился непорядок ровно в тот момент, когда заговорили о многоядерных процессорах. Именно тогда количество транзисторов перестало удваиваться, но чтобы поддерживать общемировую мурошизу, производители начали лепить несколько ядер, то есть удваивали не количество транзисторов на кристалле, а количество кристаллов в производственной единице.
>Vulkan Mobile?
Forward+. Пока что этот проект не покидал родной комп.
Я просто, видимо, чего-то не понимаю в том, как вообще работает 3д.
>Можно уменьшить размер текстуры теней
Уже уменьшил. Но есть подозрение, что это крайняя мера: если разраб лезет сюда, значит вся остальная оптимизация уже упёрлась в предел.
>источники света далеко от игрока - это не источники света в прямом смысле, а имитация текстурой
Light3D.distance_fade_enabled = true. Плюс спрайт, который имитирует размытое световое пятно. Всё это уже сделал.
А тут ещё Terrain3D, оказывается, вообще никак не умеет в статическое освещение. Зато умеет запекаться в меш, после чего можно его смело удалять из сцены. Удалил - стало сильно легче. Спрашивается: а как же я не заметил раньше, что это именно он тормозит? Скрывал же, проверял же. Оказалось: эта сука при скрытии не скрывается. И продолжает жрать фепесы, соответственно. Так что единственный вариант - бэкапнуть его в отдельную сцену, запечь геометрию и удалить нахер.
Кароч на данный момент у меня затык только в фонарях: они после запекания продолжают светить в том числе и на те поверхности, на которых их свет уже запечён. То есть, эти поверхности получаются освещены в два раза ярче. А надо чтобы они освещали только динамические объекты (персонажа, в моём случае других динамических объектов в сцене нет) и больше ничего.
Upd: ок, допустим, это сделал через light_cull_mask и выставление соответствующего слоя на персонаже. А тень теперь как отбрасывать на землю?
>Как это подтверждает фразу
Вообще никак к ней не относится. Олды охуенны, нодискасс. Тени в Думе 3 это лучшие тени в игровой индустрии (без рейтрейсинга), тут разве что первый сталкач способен что-то противопоставить, но он был позже и тормозил. Свет в ХЛ2 был сравним с современным, но динамические тени работали нормально даже тогда на любом нище-пк. Славься Пресвятой Габен! Кармак акбар!
>>86777
Распараллеливание упирается в закон Амдала. Получился смешной парадокс, чем больше ядер, тем больше ресурсов уходит на их синхронизацию.
>>86761
Зачем ты обзываешь кого-то дебичем, если сам сел в лужу? Закон Мура напрямую связан со скоростью, ради скорости всю миниатюризацию и делали (потому что сигналу проходить меньший путь по проводникам, а значит циклы переключений транзисторов быстрее = быстрее частота процессора).
Можешь описать:
- свою сцену, которая тормозит - чего там и сколько?
- характеристики ПК и что у него загружено на 100%?
Если можешь, лучше скриншоты показать:
- из игры, где сильные просадки ФПС;
- та же сцена из редактора;
- сетка (wireframe);
- overdraw.
Режимы отображения - в левом верхнем углу.
А то бесполезно гадать, что там может лагать.
>Terrain3D
Ну, это естественно, там ведь кастомный шейдер.
Для статического освещения юзается слот UV2...
>А тень теперь как отбрасывать на землю?
Создай невидимый меш, у которого только тень.
Если меши хайполи, меш тени делай лоупольным.
Вот с Control-нодами всё просто: они автоматически прилипают к краям экрана, можно настроить свои отступы от краёв, контейнеры всё сортируют. Ну да, конечно, если все спрайты статичные - в принципе TextureRect достаточно для визуальной новеллы.
Нюанс в том, что я хочу анимации а-ля Live2D, т.е. это только Skeleton2D + Polygon2D, плюс планирую потом прикрутить топдаун геймплей. Пропорции экрана на мобилках бывают самые разные и хотелось бы ещё поддерживать горизонтальную ориентацию. Короч, необходимо как-то стыковать Node2D с экраном.
Вопрос в том, как это делать лучше? Тупо спрашивать разрешение экрана и из кода подгонять спрайты? Или использовать невидимые Control в качестве якорей? И хотелось бы без проблем пользоваться Camera2D...
Кажется, что простой вопрос, но ответ не очевиден.
>Есть ли способ заебашить в годот каких-нибудь клёвый ИИ-алгосов, типо генетических алгоритмов или обучение с подкреплением?
Тебе чисто поиграться или чтоб быстро работало?
Если поиграться - запили сам на GDScript. Можно использовать видеокарту (compute shader). Вот для генетических алгоритмов тебе ничего не нужно, это тривиальная логика, которой не нужна скорость:
1. Что-то сгенерировать (код, строку, нейронку).
2. Как-либо оценить успешность экземпляров (как правило требуется выполнить какой-то код и тупо сравнить результаты с ожидаемым идеалом).
3. Отсортировать по успешности (Array.sort_custom).
4. Самых успешных скрестить (режешь на кусочки и соединяешь рандомно) и мутировать (тупо рандом).
5. Повторять цикл 2-4, пока не надоест играться.
Что-то интересное появляется через тысячи циклов.
Самое сложное в ГА - сформулировать задачу, что теоретически решаема за приемлемое время. Ибо миллиардов лет в запасе у тебя, скорее всего, нет.
Быстрое готовое решение reinforcement learning:
https://github.com/edbeeching/godot_rl_agents
Но я не знаю, как оно работает - я не пробовал.
>>86398
>У тебя не хватит мощностей и видео памяти.
>Что бы их хотя бы каждые 10 минут обучать.
Ты вообще не в теме. LLM - это жирные монстры. В реальности для обучения нейронок хватит любого тостера, просто они будут специализированными. Обучаемые нейронки уже много лет в телефонах. Успешность LLM связана с тем, что в них можно практически что угодно кинуть и получить что-то сравнительно разумное в ответ. Но классическое машинное обучение вообще не об этом, поэтому не требует какого-то сложного оборудования. Первые нейросети вроде в 1960 появились, представь себе увеличение мощности вычислений с тех пор. Плюс некоторые нейросети эффективнее крутить на ЦПУ.
>бесполезно гадать
Так я, в общем-то, и не прошу помощи. Просто ною. Весь день ебусь с какой-нибудь проблемой, а ночью, когда уже кончаются силы думать, выплёскиваю накопившееся на двач - вдруг у анона есть какие соображения на данный счёт. Есть - хорошо, воспользуюсь. Нет - ну, на следующий день со свежей головой буду курить доки и смотреть туториалы.
Правильно. Лучше ныть, чем просить.
1280x658, 0:22
Как лучше всего реализовать прыжок? умножая на дельту он выдает плавное говно, а надо что бы сохранял свои характеристики сколько бы не грузило игру
Конечно, в играх это называется downsampling.
Читай статью целиком, полезно:
https://docs.godotengine.org/en/stable/tutorials/rendering/multiple_resolutions.html
>Как лучше всего реализовать прыжок?
Примерно так, если у тебя CharacterBody3D:
>velocity.y -= gravity × delta
Момент отталкивания от земли - разовый толчок:
>velocity.y = (какое-то большое значение)
>выдает плавное говно
Какое у тебя значение гравитации?
Если хочешь резче, то увеличь это значение.
>>86910
>Пропуки пофикси
Так у него стиль игры такой - пропуковый.
>>86952
>без пропуков никак
Всё там фиксится, ты просто криворукий немножко.
Как всегда, только я написал и ответ нашелся. Один из слоев сцены блокировал мышку, я поставил filter_mouse в игнор и попустило
Маладца. В дебаггере в misc показывается куда кликает твоя мышь и кто ест ее инпут - полезно для отлавливания твоих случаев.
Спасибо добрый анон
ТАмщемто able to пропуки, я не виноват хочу что бы освещение было на всей карте
>Разве в его конкретном случае это не upsampling?
Downsampling (число образцов снижается) - синоним сжатия:
http://en.wikipedia.org/wiki/Downsampling
Upsampling (число образцов повышается) - синоним интерполяции:
http://en.wikipedia.org/wiki/Upsampling
Макросы тебе в помощь (я так в старых ммо рейдики прохожу)
Бля анон, гдскрипт элементарно на шарп переводится, вот обратно с шарпа на гдскрипт гораздо тяжелее.
Я слишком туп что бы переписать такое да еще и с английского объяснения дак еще и с гдскрипта
Легче прыжок просто выпилить лул
Ты не туп, ты просто настроил себя на сложность. А оно легко. Просто внимательно посмотри, нет там ничего сложного.
> с английского объяснения
Нейросети же, ёпт.
Кто-нибудь использовал AudioStreamGenerator?
Начал с кода из документации, разобрался с API и примерно понял, как звуки формируются. Попробовал комбинировать две синусоиды и сразу понял, что нужно делить амплитуду на число волн - по крайней мере, в простейшем случае двух одновременно играющих волн это работало нормально.
Навернул слой абстракции - чтобы можно было добавлять любое количество одновременных синусоид произвольной частоты, амплитуды, длительности - в произвольный момент времени. Ну, это ведь логично?.. Мой тестовый код добавляет рандомные волны в рандомные моменты времени. ВНЕЗАПНО я обнаружил, что звук начинает щёлкать, трещать, пердеть - но не как шум, а как какой-то артефакт или глюк. С наушниками всё в порядке, музыку слушаю без проблем. Повышение mix_rate ничего не меняет.
В целом я понял, почему возникают щелчки - из-за резкой смены амплитуды, например, с 0 до 1 и наоборот. Для этого нужно было сделать fade-in/fade-out. Сделал - для одной отдельной волны работает хорошо, щелчки исчезли. Но если одна волна хотя бы немного соприкасается с другой - опять щелчки, а в случае наслоения двух волн теперь вообще какая-то хрень получается.
Почему так? Как миксовать произвольное количество волн, которые могут начинаться и заканчиваться в произвольное время, с произвольной частотой и амплитудой, без образования щелчков и прочих артефактов? Я пробовал спрашивать нейронку, но она только максимально общие советы даёт, уровня "попробуйте выключить и выключить". В сообществах Godot обсуждают только проблемы со звуковыми файлами. А где ещё искать по этой теме не знаю.
Готовые аддоны мне не нужны, только советы в каком направлении можно двигаться... Потому что меня эта тема заинтересовала чисто самому в коде поковыряться и что-то сделать, а не просто заюзать готовое. Но вот эти артефакты в звуке сильно смутили, ибо обычно такое я слышу когда возникает какая-то серьёзная проблема с железом, а не в софте. Почему так сложно-то?
> А где ещё искать по этой теме не знаю.
> Почему так сложно-то?
Ты вскрыл тему, которую не стоило скрывать. Попробуй начать с архивов спецслужб википедии по теории звука.
Я 25 лет назад генерировал звуки на спектруме и на денди с клавиатурой и спецкартриджем с бейсиком, но мои знания тебе не помогли бы, да я и забыл уже всё.
Я в звуке не шарю, знаю только что на годоте аудиогенератор написан, покопайся, может поможет:
https://github.com/YuriSizov/boscaceoil-blue
https://github.com/YuriSizov/gdsion
Возьми тетрадь в клетку, нарисуй дискредитацию (сэмплирование) и все поймешь. Читай всякую базу по обработке сигналов. Почему то все думают что в годоте есть какой то учебник физики, поэтому будет искаться любой запрос вида годот + как сделать физическаяхуйнянейм?
Какие у тебя могут быть ошибки? Вариант 1 - ты просто сложил два числа, забыв пронормировать. А значит амплитуда достигла абсурдных значений, которые не выдерживает мембрана динамика, и начинается клиппинг. Вариант 2 - ты добавялешь новый звук не с нулевой точки синусоиды, а например прямо с единицы, с самой высокой.
Как можно заметить, совершенно в произвольные моменты так делать не получится. Как минимум выключение придется делать плавно и не мгновенно.
Ух... Ща вкину сумбуром несколько соображений.
Начнём с дебага. Запиши полученный звук и посмотри глазами, что там за волна выходит. Audacity тебе поможет, ну или средствами годота навелосипедь осциллограф. При разработке синтезатора без осциллографа никак.
С какого-то хуя buffer_length это флоат, хотя везде и всегда (в том числе и у акдиокарт) это целое число, обычно степень двойки. Это число семплов, обрабатываемых за один подход. Типичный буфер в обычной ОСи - 1024; для реалтаймового исполнения/записи музыки - 128. Что курил Хуан? Для лучшей синхронности рекомендую выставить это значение по формуле B/R, где B это количество семплов в буфере, а R - mix_rate.
Гдскрипт очень плохо подходит для генерации звука, потому что скриптовый язык, а эту задачу надо выполнять в реалтайме очень быстро, пожалей свой проц. Для такого годятся только плюсы. Когда комп не успевает обработать аудио данные, это становится слышно в виде характерного треска; единожды его поняв, потом уже ни с чем не спутаешь.
Генерируя звук, учитывай, что 1 это максимум, а так вообще волна размещается в диапазоне от -1 до 1; всё, что за пределами этого значения, вызывает клиппинг. Только не на мембране динамика, а, как правило, в драйвере аудиокарты при преобразовании в int (ЦАПы работают только с интами).
>В сообществах Godot
Синтез звука это не движко-специфичная тема, её обсуждают в самых разных местах. Попробуй искать по запросам типа "как написать синтезатор с нуля". На хабре немало находится. И ещё эта тема идёт рука об руку с ТОЭ, потому что исторически синтез делался сначала в аналоге, и зачастую цифровые синтезаторы просто повторяют аналоговые схемы.
300x150, 0:55
Вчера ночью решил-таки свою проблему. Проблема заключалась в том, что я делил амплитуду строго на количество участвующих волн, и это число резко изменялось при добавлении/удалении волн. После изменения кода на move_toward(x, y, 0.01) все эти навязчивые щелчки полностью прекратились.
Всем спасибо за ответы, но проблема оказалась совершенно не там, где я её ожидал. Лол. Даже не обращал внимания на проблемную строчку кода. Забавно, но написал я её типа "потом переделаю нормально", но потом совершенно забыл о ней...
>>87228
>Что курил Хуан?
Читай документацию внимательнее.
Со скоростью у меня всё в полном порядке, более того, мне совсем не важна производительность на данном этапе. Мне нужен простой, удобный, гибкий и понятный инструмент для моих экспериментов. С высокой вероятностью ничего не выйдет, так что вкладываться в производительный код не нужно. Переписать готовое проще, чем изобретать новое.
Ну, у тебя теперь есть AR-огибающая. Теперь надо сделать настраиваемое время нарастания и затухания. Добавь сюда настраиваемый спад после окончания нарастания (время и величину), и получится уже полноценная ADSR-огибающая, прям по классике.
Добавь разную форму генерируемой волны - звук синусоид не имеет гармоник, он скучный.
Дальше фильтр, хотя бы простейший ФНЧ (low-pass), с настраиваемой частотой среза и добротностью.
Ну и останется только управлять фильтром через ADSR-огибающую - и всё, получится полноценный синтезатор.
Дальше делаешь OS.open_midi_inputs(), ловишь InputEventMIDI через _input и по прилетающим нотам играешь звук.
Блин, аж зачесалось самому запилить...
Жаль, Годот не умеет миди аутпутать. Так бы я ему очень полезное применение нашёл, хех. Судя по обсуждению на гитхабе, тема вообще востребованная.
>по прилетающим нотам играешь звук
Почему все в этом ИТТ треде решили, что я хочу реализовать обычный музыкальный синтезатор? Физический синтезатор у меня есть, ещё пробовал множество виртуальных. Это совсем не интересно. AudioStreamGenerator позволяет услышать любой, произвольный поток данных, и это интересно. Щас поэкспериментирую, если получится - скину в тред.
Спасибо за подсказки и всё такое, конечно. Честно говоря, не ожидал, что кто-то вообще откликнется.
По-моему, чисто исторически на годоте больше всего байтоебов - часто приходится в чем то разбираться и писать свое.
Да бля, диздок пишу. Идея, сеттинг нравится, а сомнения грызут, мол, хуйню сделаю и много времени потрачу.
1920x1080, 0:29
Седня наконец игра прошла модерацию на говняндекс игры. Это было долго, мучительно, но наконец сделал это. Щас сделаю 10 клонов этой игры с мультиплеером и фермой и начну по 300к получать
Overthinking не сделает тебя успешным
Не знаю, мне кажется я нахожусь ещё на таком этапе качества, когда без разницы какой у игры сеттинг и рейтинг. И чтобы хоть как-то взлететь нужно вложить котлету зеленых. Впрочем хуй знает, я ещё знакомлюсь со всеми этими площадками и рекламами
На яндекс игорах видел игру где надо помогать человекам самоубиваться. Типичный уровень: чел идет в ванную, игрок тапает на шампунь, он разливается по полу, чел поскальзывается и его голова лопается как арбуз от удара по раковине
>все в этом ИТТ треде решили
На самом деле не все, а только я, сорьки.
И я уже даже наполовину реализовал. Дошёл до фильтров щас, но там матан начинается, пока не раскурил. А ещё гдскрипт слишком медленный, вытягивает максимум 512@22050. И я решил воспользоваться этим как поводом, чтобы наконец освоить с++. Правда, пока отдельно от годота, чисто в консольке. Но зато как освою - смогу и для годота модули писать на плюсах, и даже в самом движке ковыряться.
>услышать любой, произвольный поток данных
Будет хуита, скринь. Вангую что-то похожее на синий или даже фиолетовый шум, вне зависимости от типа входных данных.
>CollisionShape3D debug color customization
АХУЕННО
Недавно вкатился в 3д и пиздец без этого как неудобно, приходится каждый раз отключать другие колижены/модели чтобы что-то разглядеть
Теперь из коллиженов радугу сложишь.
>CSG всё
API не поменялось, ноды остаются теми же, только внутреннюю реализацию меняют на намного более надёжную и стабильную, чем раньше. Аналогично физическому движку, что некому поддерживать.
>такое дело
Да, вижу:
https://github.com/godotengine/godot/pull/99895
Ну и что? Это пока не удаляет встроенный движок.
Так-то никому не мешало раньше закинуть аддон в проект, теперь дополнительно +8? МБ из коробки. По опыту, Jolt не панацея, решает только часть проблем.
Блин... Я сам себе 2D игрушку на смартфон делаю, буквально 1 картинка только, а весит 95 МБ. Думал кастомный билд сделать без 3D, но чёт лень как-то. Получается, 4.4 будет ещё более жирным для меня, придётся делать кастомный билд, хоть мне и лень...
>как поводом, чтобы наконец освоить с++
Молодец, пригодится. А мне лень осваивать.
>вытягивает максимум 512@22050
Мне хватит всего 8 кГц, как здесь: >>87265
Или даже 4 кГц. Выше 2 кГц звуки не особо нужны.
>шум, вне зависимости от типа входных данных
Согласен, неправильно выразился. Я просто хочу максимальную свободу в плане генерации. Вообще, планировал сделать самый простой, но достаточно разборчивый на слух синтезатор голоса из формант. Обнаружил, что базовые гласные и согласные звуки генерировать проще, чем мне казалось раньше: там достаточно комбинации всего 2-3 волн и шума. Типа хочется максимально свой искусственный голос, не используя каких-то сторонних готовых решений или машинное обучение на чьих-то сторонних записях, фактически голос из "ничего" (кроме простого кода). Раньше всегда удивляли некоторые инструменты, изображающие звуки "а", "о", "у" и т.п., теперь понял.
>диздок пишу. Идея, сеттинг нравится
Молодец, так и надо с серьёзными проектами.
>хуйню сделаю
Почти что угодно может быть популярно, главное не уходить в самобичевание - считай себя крутаном и окружающие подумают, что так оно и должно быть. Неудачными проекты становятся из-за того, что их разработчик/автор был недостаточно дерзким. Разумеется, это не касается объективных проблем. Субъективные вкусы возможно навязать массам.
>много времени потрачу
Воспользуйся принципом Парето с умом:
>20% усилий дают 80 % результата, а остальные 80 % усилий — лишь 20 % результата.
Т.е. определись, что в твоём проекте принесёт 80% результата за 20% усилий и сделай это в начале. Получится играбельный прототип, на котором можно оценить перспективность до вложения 80% усилий, и маневрировать с минимальными затратами. Конечно, сложность прототипа зависит от жанра (поэтому у одиночек почти не бывает сюжетных ММОРПГ).
>>87575
>игра прошла модерацию
Молодец. Хотя не ясно, о чём вообще игра? Просто уворачиваться от падающих объектов? Алсо, она, получается, заточена на ПК/клавиатуру? По-моему, популярнее всего мобильные игры/игры, в которые несложно играть в мобильном (Яндекс-)браузере. У множества людей сегодня нет ни одного ПК, а вот смартфонов у них может быть даже несколько; в интернете попадаются люди, у которых ПК только на работе, а домой покупать лень, ведь есть смартфон.
>>87635
>Давно уже сделал. Сижу играю.
Ты тоже большой молодец!
К 4.5 или типа того обещали поработать над размером бинарников.
>Это пока не удаляет встроенный движок.
Пока. Но удалят. Он мегавсрат.
>Хотя не ясно, о чём вообще игра? Просто уворачиваться от падающих объектов?
Ну, впринципе да. Есть ещё 3 разных босса, со своими фишками, но в целом суть в том чтобы бесконечно взабираться наверх, попутно прокачиваясь за деньги высота прыжка, скорость ходьбы, площадь атаки. В целом у меня всегда какие-то проблемы с общей сутью игры.
> заточена на ПК/клавиатуру?
Ну кнопки мобильные там уже вкручены, и изначально разрешение экрана было под мобильное устройство, в ходе модерации пришлось изменить. Но чет у меня не получилось решить проблему со звуком, поэтому в браузере можно только на пк играть. А так я спокойно могу сделать апк файлы и можно на мобиле играть, ну кнопки ещё на экран перемещу.
Думаю следующее развитие игры будет с бесконечным лутингом шутингом, типа поднимаешься или спускаешься и подбираешь разные мечи с разными свойствами, а старые продаешь и качаешься
Вот что происходит с людьми, если забыл закрыть гермодверь.
Выглядит очень залипательно. Только с графоунием бы поработать, а то не совсем понятно чего там происходит - куски мяса летят, кости - а почему? Визуальный шум. Ну и разнопиксель.
АПК. Его пользователь может установить. (апк может быть под одну архитектуру, или содержать в себе несколько, кратно увеличиваясь в размере)
ААБ нужен только гуглу, его вроде нельзя установить непосредственно, гугл автоматически нарезает его на апк под устройство пользователя.
Ты умен. Спасибо.
Юзер твоей игры? Скорее всего происходит краш где-нибудь в самом начале. Годот пишет такие логи в юзерпас, пусть глянет чего там: https://docs.godotengine.org/en/stable/tutorials/io/data_paths.html#accessing-persistent-user-data-user
Подумал, что проблема может быть в протухшем 7z, в котором недавно находили эксплоит. Нет. Перепаковал в rar, сканирую архив на винде - угроз нет, заливаю на площадку, скачиваю обратно - эдж репортит вирус. Куда копать?
>угроз нет, заливаю на площадку, скачиваю обратно - эдж репортит вирус
Прикинь если площадка его встраивает в архивы?
А если серьезно - закинь оба архива на вирустотал, сразу всеми антивирями проверит. Еще знаю что в тройке помогала снятая галочка с Embed PCK.
>Прикинь если площадка его встраивает в архивы?
Это итч. Не знаю даже.
>закинь оба архива на вирустотал
Вирустотал ничего не находит.
Hybrid analysis репортит пик 2 и пик 3 для экзешника. Винда удаляет архив автоматически и репортит троян пик 3.
Гибрид выдает тоже самое для экзешника из архива, который не блокируется виндой автоматически. Я не понимаю.
В общем-то, похоже, что кто-то зарепортил false positive, и оно залетело в базы мелкомягких. Жаль.
Бывает. Многие антивири имеют форму контакта для оспаривания. Когда-то я каждую неделю такую хуиту вилкой вычищал.
Дя я соль в архив буду подсовывать. Экзешник все равно ванильный от движка. А вот с PCK придется думать, если такое будет повторяться. Не буду ж я ждать, пока там мистер антивирус решит снизойти до меня и во всем разобраться.
Хотя а как тогда он rar тоже детектил как малварь? Сложно. Но надо попробовать.
Я разобрался в общем. Надо было всего лишь снять ограничение fps и включить v-sync в настройках проекта. Настройки по умолчанию. "Майнер крипты" сразу перестает помечаться дефендером. Круто!
>снять ограничение fps и включить v-sync
Пиздец, какого хуя? У меня два проекта так же настроены, без всинка ебучего и с лимитом фпс. Да пошли они нахуй в своей винде, дегенераты.
>Да пошли они нахуй в своей винде
Во-во. У меня кап 60 стоял если что. Может, на другое значение не будет ругаться.
Счастье-то какое. Дождались! Побыстрее бы уже ИИ-чип в каждый компьютер засунули для blazingly fast заshit, а до того момента лучше вообще запретить запускать файлы не из виндус стора ради безопасности. И коляску запретят пусть, неча там администрировать. Ради нашего же блага.
Все, геймдев закончился. Итч удолили, годотю заблочили, в архивы вирусню подсадили. Пойду курьером устраиваться, пока вы меня не опередили.
>>88209
https://nightly.link/godotengine/godot-docs/workflows/build_offline_docs/master/godot-docs-html-stable.zip
Вот оффлайн дока два, если вы по ней страдаете.
Половина индюков интернета ждет когда проснется аутсорсный индус на саппорте регистратора. РИП итч.
Русские и без того шлепа гигачады и базовички. Это у русских в генах, и никакое западное влияние этого не изменит. Это ты русофоб.
> как ноды выстроить
Как диапазоны в екселе.
Ячейки инвентаря фиксированного размера. Размеры предметов выражаешь в целочисленных ячейках инвентаря, например 1х1, 2х3, 3х4 и т.п. Заполняешь сверху вниз, проверяя пустые ячейки.
Делаю такую механику: кликаем на статик боди, передаём инфу в глобальную переменную, кликаем на area3d, проверяем переменную и спавним объект, если тру. Но это же пиздец, да? А мне нужна механика ещё сложнее: из одного массива вытащить 10 разных объектов и я начинаю хуеверить с переменными, проверять их и т.д. Говнокод короче. В теории это будет работать, но таким макаром я сплошные костыли буду пилить.
Подписался на ответы. Сам такой же.
Предварительно ответ я знаю, но он мне не помог: Якобы надо смотреть как другие делают и повторять только лучшие практики. Ага. Хуй там плавал.
>А мне нужна механика ещё сложнее: из одного массива вытащить 10 разных объектов и я начинаю хуеверить с переменными, проверять их и т.д. Говнокод короче. В теории это будет работать, но таким макаром я сплошные костыли буду пилить.
Одного класса же объекты? map или any у массива используй.
>>88469
>передаём инфу в глобальную переменную
Для такого самый крайний случай - это signal/event bus. А лучше прямые сигналы и подписки и отписки при каких-либо условиях. Твой вариант и правда пиздец
>кликаем на статик боди, передаём инфу в глобальную переменную, кликаем на area3d, проверяем переменную и спавним объект, если тру
Это я бы сделал компонентом кликер-спавнер, и цеплял бы его к каждому статик боди, который ты хочешь сделать кликабельным-спавнящим. Подразумевая что у тебя таких объектов не тысячи, иначе этот подход неэффективен.
Остальное хз.
А, ну и еще.
>Как научиться нормально программировать и масштабировать механики? Это вообще метавопрос. Посмотри паттерны, в чем их идея, попробуй их потихоньку внедрять и сам начнешь понимать где, что и когда уместно использовать, где лучше абстрагировать, а где лучше перестать ебать мозг себе будущему и сделать все в лоб.
бля)
Давай ты будешь кодить, а мы руководить? Будет заебись, еще захочешь. У меня тут идея на миллион есть.
Мы. С тобой. Будем дружно жить. Ты - работать. Я - руководить. Твои - слова. Мой - закон. Я твой слуга. Ты мой гегемон.
Из меня песок посыпался, за што
800x600, 0:50
Ну теперь-то мы сделаем игры!
https://www.youtube.com/watch?v=jEWFSv3ivTg
Делай с самозамкнутым полем и камерой перемещаемой
>как ноды выстроить не соображу
Стандартными UI нодами этого не сделаешь.
Делай кастомную ноду-сетку, потомок Container.
>>88376
>например 1х1, 2х3, 3х4
А если нужны формы как в тетрисе - "Г", "Т", "Z" и т.д.?
Короче, нужно два двумерных массива:
1. Массив инвентаря, хранящий ссылки на предметы.
2. Массив предмета, хранящий ФОРМУ предмета.
Операция добавления предмета:
1. Взять форму предмета и инвентарь.
2. Проверить, что форма входит в инвентарь.
3.1. Если не входит - отменить операцию.
3.2. Если входит - скопировать форму в инвентарь.
Операция извлечения предмета:
1. Взять форму предмета и инвентарь.
2. Удалить форму из инвентаря (заполнить null).
Операция перемещения/вращения предмета:
0. Заблокировать изменения инвентаря.
1. Сделать копию массива инвентаря.
2. Извлечь из копии инвентаря предмет.
3. Попытаться разместить предмет в копии.
4.1. Если неудачно, то просто удалить копию.
4.2. Если успешно, то заменить оригинал копией.
5. Разблокировать изменения инвентаря.
Блокировка нужна в случае многопоточности игры.
>как ноды выстроить не соображу
Стандартными UI нодами этого не сделаешь.
Делай кастомную ноду-сетку, потомок Container.
>>88376
>например 1х1, 2х3, 3х4
А если нужны формы как в тетрисе - "Г", "Т", "Z" и т.д.?
Короче, нужно два двумерных массива:
1. Массив инвентаря, хранящий ссылки на предметы.
2. Массив предмета, хранящий ФОРМУ предмета.
Операция добавления предмета:
1. Взять форму предмета и инвентарь.
2. Проверить, что форма входит в инвентарь.
3.1. Если не входит - отменить операцию.
3.2. Если входит - скопировать форму в инвентарь.
Операция извлечения предмета:
1. Взять форму предмета и инвентарь.
2. Удалить форму из инвентаря (заполнить null).
Операция перемещения/вращения предмета:
0. Заблокировать изменения инвентаря.
1. Сделать копию массива инвентаря.
2. Извлечь из копии инвентаря предмет.
3. Попытаться разместить предмет в копии.
4.1. Если неудачно, то просто удалить копию.
4.2. Если успешно, то заменить оригинал копией.
5. Разблокировать изменения инвентаря.
Блокировка нужна в случае многопоточности игры.
>в случае многопоточности
А, нет... Немного запутался... Т.к. пока игрок "держит предмет мышкой в воздухе" игра может попытаться добавить другой предмет в инвентарь. Поэтому этот "висящий в воздухе" предмет не должен удаляться из оригинального инвентаря - иначе куда он вернётся?.. Однако, для вращения или смещения на 1 клеточку требуется удалить оригинал предмета... Поэтому тут придётся делать копию инвентаря и блокировать...
Или можно попробовать без копии, как-то так:
>func item_can_fit(item: Item, at: Vector2i) -> bool:
>_ for v in item.shape:
>_ _ var p := v + at
>_ _ if p not in grid or grid[p] not in [null, item]:
>_ _ _ return false
>_ return true
Принудительное размещение:
>func item_place(item: Item, at: Vector2i) -> void:
>_ for v in item.shape:
>_ _ grid[v + at] = item
Принудительное удаление:
>func item_remove(item: Item, at: Vector2i) -> void:
>_ for v in item.shape:
>_ _ grid[v + at] = null
Соответственно, предмет:
>class_name Item extends...
>var shape: Array[Vector2i] = [Vector2i(0, 0)]
Инвентарь:
>var grid: Dictionary[Vector2i, Item] # Godot 4.4
Тогда такой алгоритм перемещения, без копий:
1. Проверяем, войдёт ли предмет в новую позицию.
2. Если войдёт, сначала удаляем его из старой.
3. Потом помещаем его в новую позицию.
Отдельный вопрос - как работать с вращением?..
- Можно хранить несколько shape на все 4 поворота.
- Можно сделать функцию get_shape_rotated()...
Второе удобно тем, что форма 2x2 просто копируется.
>в случае многопоточности
А, нет... Немного запутался... Т.к. пока игрок "держит предмет мышкой в воздухе" игра может попытаться добавить другой предмет в инвентарь. Поэтому этот "висящий в воздухе" предмет не должен удаляться из оригинального инвентаря - иначе куда он вернётся?.. Однако, для вращения или смещения на 1 клеточку требуется удалить оригинал предмета... Поэтому тут придётся делать копию инвентаря и блокировать...
Или можно попробовать без копии, как-то так:
>func item_can_fit(item: Item, at: Vector2i) -> bool:
>_ for v in item.shape:
>_ _ var p := v + at
>_ _ if p not in grid or grid[p] not in [null, item]:
>_ _ _ return false
>_ return true
Принудительное размещение:
>func item_place(item: Item, at: Vector2i) -> void:
>_ for v in item.shape:
>_ _ grid[v + at] = item
Принудительное удаление:
>func item_remove(item: Item, at: Vector2i) -> void:
>_ for v in item.shape:
>_ _ grid[v + at] = null
Соответственно, предмет:
>class_name Item extends...
>var shape: Array[Vector2i] = [Vector2i(0, 0)]
Инвентарь:
>var grid: Dictionary[Vector2i, Item] # Godot 4.4
Тогда такой алгоритм перемещения, без копий:
1. Проверяем, войдёт ли предмет в новую позицию.
2. Если войдёт, сначала удаляем его из старой.
3. Потом помещаем его в новую позицию.
Отдельный вопрос - как работать с вращением?..
- Можно хранить несколько shape на все 4 поворота.
- Можно сделать функцию get_shape_rotated()...
Второе удобно тем, что форма 2x2 просто копируется.
> Короче, нужно два двумерных массива:
> 1. Массив инвентаря, хранящий ссылки на предметы.
> 2. Массив предмета, хранящий ФОРМУ предмета.
Я делал тетрис, у меня фигуры кодировались черепашкой, ЕВПОЧЯ. ЕНП, ТВС.
На новый год я хочу импорт анимации блендшейпов. Передай им, пожалуйста.
>Это иначе работает
Тогда неинтересно. Я хочу пользоваться вылизанным продуктом со всеми нужными мне фичами забесплатно, а контрибуить пусть кто-нибудь другой будет.
Звучит как что-то не из геймдева. Для геймдева есть кости, а вершины можно в самом движке кодом двигать.
Блендшейпы в годоте вообще ограниченные, например не может быть несколько копий одного меша, но с разным состоянием блендшейпа. Получается если бы ты даже добавил несколько неписей, они моргали бы и открывали рот только одновременно.
>Для геймдева есть кости
У меня аниме стиль моделек, относительно низкий полигонаж и руки-крюки. Шейпы для эмоционирования это самый подходящий вариант.
>например не может быть несколько копий одного меша, но с разным состоянием блендшейпа
Я об этом даже не знал. Звучит, конечно, не очень. Но конкретно это для меня не проблема. А вот то, что костные анимации из блендера приходится приправлять шейпами уже в годо, удручает невероятно.
Вообще я не вникал детально как это все устроено. Я так понимаю кости могут только двигать вершины вдоль линии или поворачивать и у них нет негативных весов а блендшейпы это что-то вроде интерполяции между двумя произвольными "лепками" вершин, поэтому имеют больше степеней свободы? Например можно растянуть шар во все стороны одновременно, что неочевидно как сделать костями. Хотя рот и глаза вроде и костями анимируют https://www.youtube.com/watch?v=-2jjnxiC7H0
Может быть реально сделать аддон, который сконвертирует блендшейпы в костную анимацию, хм. Ведь в принципе какую-то желеобразность костями делают
https://www.youtube.com/watch?v=o8JZdq1LqQU
>импорт анимации блендшейпов
Блендшейпы импортируются. В чём проблема?
>>89016
>не может быть несколько копий одного меша
Тебе кто-то запрещает вызов mesh.duplicate()?
>>89017
>аниме стиль моделек, низкий полигонаж
Тогда тебе нужно лица текстурой рисовать.
>приправлять шейпами уже в годо
Так в чём проблема-то? Что не работает?
>>89019
Да, предназначение блендшейпов - это, например, настройка пропорций лица персонажа. Один раз настаиваешь значение и забываешь о нём. Для анимирования блендшейпы редко используются.
Алсо, где-то читал, что нужно избавиться от всех блендшейпов после настройки - ради оптимизации. Получается дубликат меша фиксированной формы.
Примерно так:
1. Берём базовый меш с блендшейпами.
2. Даём игроку GUI для настройки пропорций.
3. Завершаем, копируя меш без блендшейпов.
4. Анимируем очищенный меш костями.
>>импорт анимации
>Блендшейпы импортируются. В чём проблема?
Он же написал - анимации. Ты чем читаешь? Даже в твоем цитировании это есть.
>Тебе кто-то запрещает вызов mesh.duplicate()?
Это же не бесплатно, значит меньше моргающих персонажей
https://www.youtube.com/watch?v=n1Lon_Q2T18
Тоже посмотрел. Зитифоно неиронично выглядит как что-то, что я бы купил.
А говнюки с paw rescuers обещали гайд про оптимизон графона под слабые мобилки, но наебали. Не куплю.
>блендшейпы это что-то вроде интерполяции между двумя произвольными "лепками" вершин
По-моему, между базисом и произвольным состоянием.
>Может быть реально сделать аддон
Можно в блендере превратить кость в контроллер шейпа. И в годо просто восстанавливать этот драйвер. Быстрее воссоздания анимации будет. Круто придумал?
>>89057
>Блендшейпы импортируются.
>Что не работает?
Анимация мне нужна. Я хочу чтоб годо переваривал пикрил в gltf. Чтоб для анимаций помимо каналов костей импортировались каналы блендшейпов.
>Тогда тебе нужно лица текстурой рисовать.
Не настолько низкий полигонаж.
>Он же написал - анимации
Хммм... Ладно, понял - данные треков анимаций.
>>89062
>значит меньше моргающих персонажей
Моргать должны персонажи на переднем плане.
Персонажи заднего плана игрока не волнуют.
>>89082
>Круто придумал?
Ты сначала убедись, что тебе это вообще нужно...
>импортировались каналы блендшейпов
https://github.com/godotengine/godot/issues/38443
Проблема, видимо, решена в 4.0, ты всё ещё на 3.x?
https://github.com/godotengine/godot/pull/53865
Ещё здесь можно посмотреть, лень разбираться:
https://github.com/godotengine/godot/issues/63198
>Не настолько низкий полигонаж.
В стиле аниме у тебя два пути:
- хайполи, иначе "лопата" лица будет рубленной;
- лоуполи с лицом-текстурой, иначе деталей мало.
Промежуточные варианты выглядят упорото.
>В стиле аниме у тебя два пути:
Самый тру путь - это относительное лоуполи + кастомные нормали + кастомные шейдеры. GGX-style один из примеров (от слова Guilty Gears 10, не от слова glass glass из PBR).
https://oceanofpdf.com/?s=godot+4
Неплохо. Сборник полезных методик и подходов, а не туториал очередного платформера.
Подожду версию от 2025 года.
Сможем, конечно. Но зачем? троллейбус_из_буханки
Я хочу симулятор приятной жизни с дередере/генки, а не очередной тупой хоррор про яндере/янгире...
Прочитал я про этот MiSide, полное разочарование. Очередное "злой прототип ИИ хочет всех убить без аргументированной причины, просто он злой".
А были надежды на что-то глубокомысленное.
Да. А ты?
> Прочитал я про этот MiSide, полное разочарование.
Очередной дурачок ждёт от игры кинца и кинцовых атрибутов типа глубокомысленного сюжета. Дурачок, там геймплей разнообразный и весёлый. Люди для этого в игры играют. А за глубокомысленным сюжетом люди берут книги почитать.
>ждёт от игры кинца и кинцовых атрибутов
Там задумка в том, что ты попадаешь в мир к своей виртуальной вайфу из симулятора отношений с ней. Сценарий линейный и насыщенный на события. Т.е. замахивались они как раз на интерактивное кинцо.
>геймплей разнообразный и весёлый
Как раз геймплей там самое слабое место, судя по многочисленным отзывам: мини-игр много, но они появляются 1-2 раза и не предоставляют никакого испытания игроку, проиграть нужно постараться, буквально игра играет сама в себя вместо тебя.
Мне кажется, они в процессе разработки осознали масштабность проекта и порезали его до уровня трёхмерной визуальной новеллы без развилок.
Но раз релиз относительно успешен, могут его ещё доработать как-то. Вроде, обещали "мирный режим".
Впрочем, ты чего возбудился-то? Фанбой что ли?
> Т.е. замахивались они как раз на интерактивное кинцо.
Хуективное хуецо. Хуле ты хопой завилял. Это игра. С геймплеем. Разнообразным и насыщенным. По существу тебе возразить нечем, чукча-читатель. Пойди ещё обзоров почитай, ебанаш.
> Впрочем, ты чего возбудился-то? Фанбой что ли?
Люблю обссыкать безыгорных теоретиков, делающих выводы космической глупости в силу глубины своей некомпетентности. А что?
Игра, не игра - не важно, меня бесит, когда:
- злодей без реальной мотивации, "просто злой";
- списывают все его злодейства на то, что он ИИ.
Это лень автора и попытка сыграть на эмоциях.
Там затронуты серьёзные темы ИИ и оцифровки человеческого сознания, а это уже не "просто игра".
Да и какой дурак будет играть в это ради мини-игр? Очевидно же, что эта конкретная игра привлекает поднимаемыми темами, а не каким-то геймплеем. Геймплей тут как раз лишь дешёвый наполнитель.
Ты ещё скажи, что в DDLC "играют" ради "геймплея".
Спасибо! У меня 4 годо. Видимо, я чего-то не так делал. Я посмотрю еще.
>>89232
Да, я на него и ориентировался. Все презентации Arc System по их стилю впитал. Но попробовал и понял, что не по силам мне такое сейчас, и отказался. Пока что обычные неосвещенные текстурки с рисованными тенями делаю.
Игори то запускаются у тебя? Может дрова коряво стоят
https://www.reddit.com/r/godot/comments/11uw6it/godot_4_unsupported_on_intel_machine_with_opengl/
https://www.reddit.com/r/godot/comments/11h4dxz/im_having_a_problem_with_godot_4_is_there_a_way/
спс за советы. Хоть и не настроилось, как хотел, мб от старья проблема, но вроде хоть быстрее открываться стал в режиме совместимости. Пока и так пойдет.
Звучит так, что у тебя он запускается не на дискретной видеокарте, а на встройке процессора. (Правда так обычно на ноуте происходит, а не на десктопе).
Вроде в панели нвидии можно указывать, на какой карточке запускать какую прогу.
Есть ли возможность восстановить проект игры, если у меня имеется index файл, который заливал на итч? Чтобы все файлы и скрипты были и норм работало в годоте. Или это всё?
Билд игры состоит из "плеера" движка + pck.
Pck декомпилируется.
https://github.com/GDRETools/gdsdecomp
Ну картинки может придется как то конвертировать потом.
Могу сейчас попробовать на каком то своем проекте.
>>89654
3.5.2, а это для чего? Я думал ты со своим проектом поэксперементируешь, свой не кину
Чтоб я на такой же проверил, а то вдруг по другому будет.
Нууу у меня есть бэкапы вообще всех файлов что я использовал в годоте, и проекты тоже, в архив кинул в тг, но те что к последней игре относятся, устаревшие, поэтому лучше восстановить как-то игру с сайта
Да, открыл старый проект в 3.5.2, экспортировал index.html+pck, декомпилировал тулзой (нажал кнопку full recover), он воссоздал прямо проект, открыл этот проект, запустил, игра работает, скрипты читаются, картинки те же. Бегло смотрел конечно.
Возьми дифф тулзу (например WinMerge, Meld, да вроде в VsCodium есть встроенная)
Раз ты говоришь что у тебя есть предыдущая версия.
Просто замержишь комменты из старой в новую и все.
У меня такой панели нет. Надо приложуху искать...
Дрова норм стоят. Эффект ощущается. Но вот годот не может найти опенгл необходимый. Да это пока и не важно. Постепенно настрою думаю. Главное, что работает.
Кстати, тестил юнити, тот без косяков запустился, что 5ый, что 2019... К слову...
Уп
Видимо, я таки не ролностью настроил карточку. Все таки. Это в кишках винды надо смотреть, наверно.
>декомпилировал тулзой (нажал кнопку full recover), он воссоздал прямо проект, открыл этот проект, запустил, игра работает
В очередной раз убедился, что сложную игру лучше делать на C++, чтобы ворам не делать уж настолько простой задачи.
>не может найти опенгл
А ты ниче не попутал? Ты уверен, что у тебя проект НЕ в форвард+ моде? Для опенгл нужен компатибилити или какой-то такой, не помню.
>сложную игру лучше делать на C++, чтобы ворам
Зачем "ворам" твоя "сложная игра"?
Если кому-то очень хочется скопировать твой код - скопируют независимо от любых твоих ухищрений.
Если кто-то скопирует и ты это знаешь - иск в суд за нарушение копирайта. Много проблем, но возможно.
Но обычно серьёзные дяди ничего не копируют, т.к. понимают все связанные проблемы (технические, юридические и т.д.). А тупые макаки, ассетфлиперы, скрипт-кидди и прочие индюки опасности для тебя не представляют, если ты хоть немного лучше них.
Просто сделай себе имя до публикации игры и тогда фанбои будут защищать тебя независимо от клонов.
Даже у грязного яндередева остались фанбои, что продолжают его защищать, несмотря на все срачи, копирование его говнокода, концепций игры и т.д.
Да - если ты параноик, то просто делай говнокод и копировать его будет себе дороже для любого, кто попытается сделать что-то рабочее на его основе. Симулятор яндере, например, с нуля переделать оказалось проще, чем поддерживать оригинал...
>копировать его будет себе дороже
Или вот Microsoft выкупили Minecraft, чтобы начать переписывать его с нуля на C++, только в итоге им пришлось поддерживать и Java-версию, что они переделывают по десятому кругу. Кто захотел бы сознательно копировать код, который даже после многомиллиардных вложений нужно переписывать буквально с нуля? Они купили только права и бренд, другими словами - ИМЯ игры/разработчика. Ибо сегодняшние игроки выбирают игры по имени...
Короч, тряска за код - сродни движкописанию с нуля.
>Если кому-то очень хочется скопировать твой код
Есть разница, между просто в два клика восстановить проект из гдскрипта, или ебаться недели над обфусцированым с++.
А дальше что? Что будешь делать с проектом?
Если это сколько-либо сложный проект, ты просто охренеешь от сложности внутренних систем, где ты неизбежно будешь копаться и что-то менять. А эти внутренние системы отражают мышление автора, отличающееся от твоего. Почему так много людей используют библиотеки через API, но так мало их модифицируют изнутри? А у игры нет своего API.
Я бы сказал, что распутывать ассемблерный клубок полезнее, чем просто взять чужие скрипты на языке высокого уровня. Тебе в любом случае придётся разбираться на глубоком уровне, а так у тебя хоть мотивация есть. Без мотивации ты можешь только скопировать 1-в-1, что немедленно удалят с любой адекватной площадки, как только кто-то заметит.
Если ты не планируешь разбираться, что мешает перезалить файлы игры совсем без изменений? Предположим, площадка вообще не следит за соблюдением копирайта, разрешая копипасту.
Это просто страшилки уровня "у меня украли игру и сделали её успешной, ничего не поменяв в файлах, однако мой оригинал совершенно никому не нужен".
так это затруднит изменение файлов.
>ты просто охренеешь от сложности внутренних систем, где ты неизбежно будешь копаться и что-то менять. А эти внутренние системы отражают мышление автора, отличающееся от твоего.
Да, бывает. Вчера был шокирован тем, как я четырехмесячной давности изящно реализовал один очень нужный мне алгоритм. В прошлый раз я этот код отложил, а вчера вот он резко понадобился. Передо мной был гдскрипт, но я так ничего и не понял. А уж чего говорить про чужой код.
Идея для стартапа. Делай.
Еще нужно вернуть аналоговые проявления всякой игровой атрибутики типа мануалов и коробков для картриджей. В одной цифре скучно и бездушно все.
Когда у меня такое случилось (года три назад), я вдруг осознал: надо сразу писать понятный код, уделять больше внимания оформлению, не сокращать имена функций и переменных, а любую фигню, которая в перспективе может оказаться хоть капельку недостаточно очевидной, подписываю комментариями. Ещё и в шапке файла пишу краткое содержание, зачем он вообще нужен и что делает в общем. Если в функции больше десяти строк - документирую краткое описание её работы.
С тех пор любой свой код открываю - и прям супер быстро понимаю его. При этом на написание тратится не сильно больше времени, часто оформлением я занимаюсь в процессе осмысления, что же делать дальше, или при мелких затупах.
Двачую. Сейчас такое осталось живо только в ретро комьюнити. Вон у чуваков коробка, инструкция, и вязаная карта.
Согласен. Вот это очень полезная фича в Godot:
https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_documentation_comments.html
Часто пользуюсь ей, с тех пор как узнал о ней.
Оно в автокомплите будет показываться? Или только в окошке документации и по crtl+click?
Для @export-параметров - в подсказках инспектора.
Ctrl+click открывает сам скрипт, а не документацию.
Сгенерированную документацию можно найти по F1.
Понятия не имею, где ты такое слышал. Требуй пруфы от тех, кто тебе такое заявлял. Считает не скрипт, а регистры процессора. Я всю жизнь так считал. Пруф ми вронг.
>всякие кликеры-идлеры с постоянным инкрементов и десятками разных мультиплаеров и калькуляциями 1000 раз в секунду лучше не делать
Это не числодробилка, а фигня. У меня аналогичная приложуха в гуглплее опубликована. Приходи когда тебе под гиг данных потребуется перебирать.
а регистры это делают по приказу ассемблерного кода. так получилось, что компилятор плюсов, например, транслирует в ассемблер практически идеально в плане эффективности.
мимо не шарю
А зачем в кликере столько рассчетов, там же таймеры на день или неделю
Ваще не парься. Если у тебя меньше 20к таких операций в секунду, можешь смело юзать гдскрипт. А если больше - переписывай на плюсах, сисярп не вывезет тоже.
К тому же у гдскрипта узкое место не математика, а вызовы годотовского апи.
>не очень подходит для числодробилок
Под числодробилками подразумеваются алгоритмы, требующие минимум десятков тысяч операций, как правило, каждый кадр или "чем раньше, тем лучше".
Для примера, когда ты генерируешь поле 100×100 клеточек один раз в самом начале игры, тебе без разницы, 1 мс на это уйдёт или 50 мс - игрок это не заметит вообще. А вот если ты генерируешь что-то громадное, типа 100000×100000, уже есть разница между "ждать 1 секунду" и "ждать 50 секунд".
>кликеры-идлеры
>калькуляциями 1000 раз в секунду
Там вычисления в лучшем случае раз в секунду, исключительно пока игрок смотрит на счётчик. Нет необходимости обновлять все рассчёты чаще. Плюс используются различные формулы для упрощения. Значительно затратнее вывод анимаций, если есть.
>у гдскрипта узкое место
>вызовы годотовского апи
В точности наоборот. Вызовы API из GDScript часто дешевле, чем из внешнего C#/C++ модуля. Вроде бы вызвано тем, как ОС накладывает ограничения на взаимодействие разных программ (exe/dll), чего нет у внутреннего интерпретатора GDScript.
Т.е. на десктопе (x86) самое оптимальное - делать внутренний модуль на C++ и пересобирать движок.
А если пишете внешний модуль - делаете расчёты локально и передаёте Godot ссылку на данные. Это позволяет избежать дорогих вызовов внешнего API.
>>90105
Думаю, имеются в виду любые обращения к API.
> Вроде бы вызвано тем, как ОС накладывает ограничения на взаимодействие разных программ (exe/dll)
> Вроде бы
Ну вот как узнаешь, как на самом деле, так и приходи.
Изучи что такое адресное пространство.
DLL подгружаются в адресное пространство вызывающего процесса и с этого момента все их функции вызываются из единого адресного пространства. Учите базу. Классику. Матчасть.
Мы всё прекрасно понимаем. Ничто не помешает нам бесконечно обсуждать байты ИТТ. Ну не игры же делать, в самом-то деле, а?
>Учите базу. Классику. Матчасть.
В сети ты герой, а лично в лицо Хуану это скажешь?
https://docs.godotengine.org/en/stable/classes/class_audiostreamgeneratorplayback.html
>bool push_buffer(frames: PackedVector2Array)
>Pushes several audio data frames to the buffer. This is usually more efficient than push_frame in C# and compiled languages via GDExtension, but push_buffer may be less efficient in GDScript.
>bool push_frame(frame: Vector2)
>Pushes a single audio data frame to the buffer. This is usually less efficient than push_buffer in C# and compiled languages via GDExtension, but push_frame may be more efficient in GDScript.
Ещё момент:
>все их (DLL) функции вызываются...
Мы обсуждаем вызов godot.exe изнутри module.dll.
Честно, не изучал GDExtension, но полагаю, что там происходит вызов по ссылке, полученной во время инициализации модуля. Это, по идее, должно быть медленнее прямого вызова "родной" функции DLL. Особенно с учётом оптимизаций компилятора, что, естественно, недоступны на стыке DLL <-> EXE.
> Честно, не изучал
Ну вот как изучишь, тогда и приходи.
> лично в лицо Хуану это скажешь?
Я в другмо гороед.
Кто здесь??
>выпадал тут на некоторое время
надеюсь не как как кишка из жопы пидора
вчера камшот 4.4 дев 7 релизнулся:
https://godotengine.org/article/dev-snapshot-godot-4-4-dev-7/
jolt теперь интегрирован в годот
подсказки из документации вылазят при простом наведении мышкой (пикрил)
хуйня для любителей запекать
и многое другое
> jolt теперь интегрирован в годот
Молодцы. Надо уметь вовремя признавать свою неправоту. Лучше вставить физику от умельцев, чем велосипедить свою.
Тоже жду, чтоб начать игры делать наконец.
Ты поехавший? Jolt 1.0 появился только в 2022 году. А нормальные фичи там еще только полгода назад завезли. По твоему всем надо было бросить разрабатывать годот и ждать, или все таки надо было иметь какую то временную физику?
Главное чтобы в 3 не ленились бекпортировать.
К новому году не успеют, многие после дев 7 уходят на новогодние каникулы. Жди после НГ.
Клаудфларовский айпишник в блоке РКНа.
Годо новогодний
Я бы поостерегся добавлять в шапку неизвестно, тут даже интерфейса редактора нет.
Там мышь без фильтрации ввода. Верный признак стоковых ФПС-контроллеров годота. Но да, надо более весомое подтверждение, что автор приложил больше усилий, чем скачивание ассетов и запуск ОБС.
Я к тому, что по одной такой галочке гадать годот это или не годот - такое себе. А потом тролль сможет гоготать, что закинул что-то левое в шапку.
Ааа... ну да.
А ну значит сразу нет. Видосики мы здесь ставим только от анонов. С других ресурсов только арт.
Кто "мы"? Много раз в шапке были не-двачерские видосы, в том числе те, которые я сам в тред приносил.
>Нас много и мы в погонах, гражданин, потише там.
Ах ты сучка, у меня колом, как игры делоть на годоти?