Двач.hk прислал битые данные.
Вы видите копию треда, сохраненную 10 сентября в 19:47.
Можете попробовать обновить страницу, чтобы увидеть актуальную версию.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Godot #68 # OP 1048979 В конец треда | Веб
Добро пожаловать в тред любви, взаимопомощи, швецов, жнецов и на дуде игрецов!
Шапка: https://hipolink.me/godothread
Предыдущий: >>1040245 (OP)
Архивный: >>1030839 (OP)
2 1048982
>>48979 (OP)
Что надо сделать, чтобы увековечиться в шапке тредю?
3 1048983
>>48982
угнать перекатить тред
4 1048989
>>48982
1. Быть интересным.
2. Напомнить о себе под бамплимит.
Ну или угнать тред, да.
5 1048992
>>48979 (OP)
Старый треллей, как-то уныло. Неужели нечем рисануться?
6 1049032
Я пришел делать игры. И вы делайте.
7 1049034
>>48979 (OP)
На случай важных переговоров с издателем вашей игры, если вдруг спросят, а как вы будете удалять элементы из головы массива? Отвечайте, что быстрее будет реверснуть и удалять с хвоста.
image62 Кб, 873x628
8 1049036
>>49032

>Я пришел делать игры

image.png5 Кб, 302x83
9 1049037
>>49034
О, я после похожих тестов пришел к такому решению. У меня там обычно массив 10к, который я шринкаю до 1к раз в минуту, потом снова отращиваю его до 10к и снова шринкаю. Можешь тоже потестить и сравнить со своими бенчами.
10 1049038
>>49034
А ну поменяй местами свои тесты
11 1049039
Вообще можно делать так:
a1 = a1.slice(a1.size() - items_to_stay, a1.size());

Но подозреваю что тест наврал по времени и-за кеширования.
15386810827320.png410 Кб, 512x512
12 1049054
>>49037

>На случай важных переговоров с издателем вашей игры, если вдруг спросят, а как вы будете удалять элементы из головы массива?


>Отвечайте, что быстрее будет реверснуть и удалять с хвоста.


Неправильно.
Нужно отвечать "А тебя это ебать не должно"
13 1049061
>>49034
Ты не поверил тому, что в документации написано?

Это проблема XY. Зачем тебе это вообще нужно?

Поясняю вкратце, исходя из исходников движка:
1. В pop_back() копирования вообще нет:
- вернуть значение последней ячейки массива;
- инициализировать массив с новым размером.
2. В pop_front() идёт копирование массива -1:
- вернуть значение первой ячейки массива;
- через for сдвинуть все значения влево.
3. В reverse() идёт копирование всего массива.
4. В slice() идёт копирование части массива.

Иными словами, если у нас есть две задачи:
А. Удалить 30 тысяч элементов в одном месте.
Б. Удалить 1 элемент из 30 тысяч разных мест.

Работа в случае задачи А:
- pop_front: 30 тыс. копирований, 30 тыс. вызовов.
- reverse+back: 2 копирования, 30 тыс. + 2 вызовов.
- slice: 1 копирование остаточной части, 1 вызов API.

Работа в случае задачи Б:
- pop_front: 30 тыс. копирований, 30 тыс. вызовов.
- reverse+back: 60 тыс. копирований, 90 тыс. вызовов.
- slice: 30 тыс. копирования части, 30 тыс. вызовов.

Итого, более точным решением будет:
Задача А: использовать API-функцию slice().
Задача Б: рефакторить архитектуру приложения.
13 1049061
>>49034
Ты не поверил тому, что в документации написано?

Это проблема XY. Зачем тебе это вообще нужно?

Поясняю вкратце, исходя из исходников движка:
1. В pop_back() копирования вообще нет:
- вернуть значение последней ячейки массива;
- инициализировать массив с новым размером.
2. В pop_front() идёт копирование массива -1:
- вернуть значение первой ячейки массива;
- через for сдвинуть все значения влево.
3. В reverse() идёт копирование всего массива.
4. В slice() идёт копирование части массива.

Иными словами, если у нас есть две задачи:
А. Удалить 30 тысяч элементов в одном месте.
Б. Удалить 1 элемент из 30 тысяч разных мест.

Работа в случае задачи А:
- pop_front: 30 тыс. копирований, 30 тыс. вызовов.
- reverse+back: 2 копирования, 30 тыс. + 2 вызовов.
- slice: 1 копирование остаточной части, 1 вызов API.

Работа в случае задачи Б:
- pop_front: 30 тыс. копирований, 30 тыс. вызовов.
- reverse+back: 60 тыс. копирований, 90 тыс. вызовов.
- slice: 30 тыс. копирования части, 30 тыс. вызовов.

Итого, более точным решением будет:
Задача А: использовать API-функцию slice().
Задача Б: рефакторить архитектуру приложения.
14 1049067
Самый быстрый вариант под эту задачу:
a1.reverse()
a1.resize(items_to_stay)
a1.reverse()
15 1049071
>>49067
>>49061
А что, с помощью реверсов, ресайзов и слайсов сможем ли мы сделать быструю замену pop_at()?
16 1049076
>>49071

>сделать быструю замену pop_at()


https://docs.godotengine.org/en/stable/classes/class_dictionary.html
17 1049089
>>49076
>>49067
>>49061
>>49039
>>49034
Вы не шарите, надо делать так:
Минимальные требования
ОС: Windows 11
Процессор (AMD): AMD Ryzen 7 3700X
Процессор (Intel): Intel Core i7-10700
Оперативная память: 16 ГБ
Видеокарта (AMD): AMD Radeon RX 6700-XT
Видеокарта (Nvidia): Nvidia RTX 3060Ti
Direct X: DX12
Подключение к Интернету: Да
Место на диске: :SSD — 80 ГиБ
Дополнительно: TPM 2.0 включён, Безопасная загрузка UEFI включена, Поддержка HVCI, Поддержка VBS
18 1049092
>>49089

> надо делать так:


Чтобы получить школоассетфлип, который запускается только на топовых печах, не обладая при этом графоном? Ну, допустим.
19 1049093
>>49071
Не, тут только ситууационно что-то придумать можно, например тебе нужно из огромного массива размером N удалить много элементов например N/2.
Тогда можно вместо удаления делать их null, потом пробежаться по массиву двумя "курсорами" делая swap для null и не null значений, а когда один курсор дойдёт до конца массива сделать resize до позиции другого курсора.
20 1049094
>>49093
Неплохо, реально неплохо. Потом реализую. А вот если мне в массиве нулль нужен, чем его заменить? Скажем, для указания на пустое место под удаление использовать класс-пустышку?
21 1049098
>>49092
Он не это имел ввиду.
Я кстати без понятия что писать в системках, если когда-нибудь настанет день релиза. Возможно просто напишу конфиг моего компа. Похуй что он игру может хоть в 100 окон запустить.
22 1049099
Не надо копировать и потом удалять. Просто не копируйте ненужные элементы.
1755871205918.png162 Кб, 365x441
23 1049101
>>49099
Если вы бездомный - просто купите дом. Если вы бесхлебный - кушайте пирожные.
24 1049103
>>49094

>А вот если мне в массиве нулль нужен, чем его заменить?


Variant() по идее можно
Можно какой-то другой массив создать, который будет хранить индексы удалённых элементов и в какой то момент его "применить" / "скоммитить"
т.е. есть исходный массив arr и массив удаляемых элементов del,
можно что-то вроде такого сделать:

>del.sort()


>var new_arr = []


>var ind = 0


>for d in del:


> new_arr.append(a.slice(ind, d))


> ind = d + 1


(не проверял, но смысл чтобы собрать новый массив из кусков старого, за счёт памяти)
25 1049106
>>49093 >>49094 >>49103
Прекращайте преждевременные оптимизации. Они усложняют код и могут оказаться хуже самого тупого решения в будущем. Если вам нужно произвольные элементы массива удалять, и код на GDScript, лучше пользоваться Dictionary и не париться. Скорость у встроенного Dictionary чуть-чуть медленнее Array, но операции добавления и удаления в середине будут значительно дешевле. Аналог обычного Array:

>var array: Dictionary[int, Variant]


Добавление элемента:

>array[key] = data


Удаление элемента:

>array.erase(key)


Проверка наличия:

>if key in array: ...


>if key not in array: ...


В других ЯП это называют associative array:
https://en.wikipedia.org/wiki/Associative_array

Dictionary может хранить null:

>array[0] = "text"


>array[1] = null


>for key in 3:


>_ if key in array: print(array[key])


>_ else: print("Key ", key, " doesn't exist!")

26 1049113
>>49106

> Прекращайте преждевременные оптимизации.


Игры делать штоле? Штоооа?
27 1049121
>>49113
У тебя шарики за ролики? Ты чекаешь ссылки, что они ссылки и ведут себя как ссылки?
28 1049122
>>49121
Я в силу глубины своей некомпетентности не понимаю, как покрывать тестами код) Эффект Даунинга-Крюгера))
29 1049125
>>49089
Так. Ни хера себе. Это кто у нас такой охуенный клоун? Рядовой Шутник, а?
30 1049127
>>49034 >>49113

>a.fill([...].pick_random())


Ты осознаёшь, что pick_random() здесь будет вызвана единожды перед вызовом fill(), а дальше fill() сделает заполнение массива единственным значением?

Если хочешь заполнить массив случайным мусором:

>a2 = a1.map(func(e): return [...].pick_random())


Правда, на тесты скорости это никак не повлияет.
31 1049136
Хочу попробовать GDExtension на C++. Подводные?

Не знаю C++, как лучше писать параллельный поток? Какими-то C++ классами или через Godot API? Хочу числодробилку параллельно Godot крутить, но чтоб излучала сигнал на сторону GDScript, когда закончит.
32 1049149
>>49127

> Правда, на тесты скорости это никак не повлияет.


Фух. Не обосрался. Ну не сильно. Обсер был, но в штанину не попало. Активно работает смена белья.
33 1049150
>>49136

> Подводные?


Будет крошиться на десктоп как скайрим с модами.

> Не знаю C++


> Не знаю как писать параллельный поток


Так ты выучи си++ чтобы его знать ДО ТОГО как придёшь в геймдев.
34 1049156
>>49136
Нейросеть напишет.
35 1049158
4.5 beta 6 вышла. Когда релиз уже?
36 1049159
>>49158
https://github.com/orgs/godotengine/projects/61/views/5
когда пропадут release blcokers и по возможности very bad и bad
37 1049166
Кто тут делал летающие острова?
Жаль тебя огорчать, анон, но такая игра уже скоро выйдет https://youtu.be/yG5vZqVVCn8?si=ZaXI1c8nYIbC2yXI
image.png201 Кб, 365x273
38 1049168
>>49166

>игра про летающие острова

39 1049170
>>49166
А почему должно быть не похуй?
40 1049184
>>49170
Ну вряд ли он будет заметен на фоне целой команды разработчиков, которые явно собираются поддерживать игру n лет. Тем более без четкой цели. Нужно менять концепцию и браться за что-то менее масштабное
41 1049185
>>49184
Пчел этих игр про летающие острова вагон еще в нулевых был. Твой пойнт это пойнт уровня "в гта люди, всем перестать делать игры про людей".

Летающие острова самый обычный дженерик фентези сеттинг. Удобен для разработки и на этом все.
42 1049188
>>49166
Всегда делаются все игры по всем возможным темам.
43 1049189
В продолжение >>49188
Я думал делать редалерт1 лайк когда-то, поискал как там что было сделано - там танки отрисовывались в 3д на самом деле и были воксельными. Ну я сделал вьюпорт в котором 3д танк рендерился и передавался в 2д мир, написао конвертор координат 2д<>3д.
А ютуб такой на ка посмотри что нормальные люди делают https://www.youtube.com/watch?v=aNHMwEOJxoY
И как-то уже и не хочется
44 1049190
>>49185
Там у них буквально полноценная постройка кораблей и полеты на них. Как раз то, что пробовал делать тот анон. В общем ему нужно допиливать концепцию и придумывать уникальные фишки.
45 1049191
>>49189
Как ты - разработчик-одиночка (как понимаю) планировал высчитывать баланс хотя бы 2-3 фракций? Зачем вы беретесь за настолько сложные проекты со сложными механиками? У вас вообще есть горизонт планирования?
46 1049193
>>49034
Зумеры пытаются изобрести двусвязный список?
47 1049194
>>49191
В редалерте баланс был на уровне у одних так с уроном 10 в других танк с уроном 10
49 1049200
>>49193
У связного индекса нет
50 1049206
>>49196
Ну теперь у того анона еще меньше идей. Верно понимаю?
51 1049207
>>49206
Нет. Идеи стоят примерно нихуя, они копируются, воруются, вдохновляются, модифицируются, и в каждой голове их бесконечное количество. Трясусны за идеи - нюфаженьки, геймдева не нюхавшие.
52 1049252
>>49200
Зачем тебе индекс если у тебя задача добавлять удалять как в очереди (алгоритм). Если у тебя и то и то нужно, та надо уже матчасть учить.
53 1049256
>>49150

>выучи си++ чтобы его знать


Я могу читать и понимать исходники движка и могу смастерить хэллоу ворлд на C++, но я не знаю всех подводных камней C++. Знаю только что это очень костыльный язык, которому почти каждый год баги пытаются пофиксить в стандарте, но делают хуже; используется только ради скорости, скрипя зубами.

Так что использовать - Godot, OpenMP или что-то совершенно другое? Насколько я понял, в C++ нет многопоточности как таковой, её костылят васяны, поэтому просто взять и написать код не получится.

>Будет крошиться на десктоп


Кстати, почему так?.. Разве в Godot не используется exception handling? Или это снизило бы скорость для внешних модулей? По-моему, если в модуле что-то сломается, основная программа не должна падать, обрабатывая возникающие исключения на ходу.

>>49156

>Нейросеть напишет.


Что напишет? Код для OpenMP?
54 1049258
>>49256

>я не знаю всех подводных камней C++


По подводным надо самому походить, иначе твое знание нихуя не стоит. Разве что в срачах в интернетике козырнешь, а на пратике сразу же еблом в подводный камень да с разбегу угодишь.

>в C++ нет многопоточности как таковой


Что ты имеешь ввиду? thread потерял?
55 1049259
>>49258

>thread потерял?


Ааа, вон оно что.

<thread> вошёл в стандарт C++11.
А OpenMP рекомендовали в 2010.

Нейронка почему-то решила, что обсуждения на StackOverflow за 2010 год более авторитетные...

Спасибо за подсказку.
56 1049263
>>49259

>Спасибо за подсказку.


1 секунда гугла c++ threads и первая же ссылка. Я просто удивился твоим словам, типа как это так ваще, вот и загуглил. Нейронки пожрали твой мозг. Да и мой тоже, часто из-за льющегося от них говна так же туплю.
57 1049265
>>49252
Иногда еще полезно бывает читать условие задачи. А там значится обьект типа массив, который обязан иметь функционал индекса, при чём не его o(n) суррогат, а нормальный вычесляемый индекс. И матчасть тут не поможет, потому что нет матчасти которая бы смогла к связному списку прикрутить индекс без прикручивания дополнительного массива для индексов элементов списка.
58 1049267
>>49252

>Если у тебя и то и то нужно, та надо


>>49265

>массив, который обязан иметь индексы


https://en.wikipedia.org/wiki/Associative_array
https://docs.godotengine.org/en/stable/classes/class_dictionary.html

>при чём не его o(n) суррогат


У Dictionary O(1) сложность доступа.
59 1049274
>>49265
Ты хочешь и булку съесть и на годот сесть. Ты уже описываешь две задачи (рандомный доступ и очередь), так сова на глобус не налезет.
Чаще всего вообще бывает, что ты обосрался в предметной области и решаешь задачу, которая поставлена ошибочно, под все остальное всегда хватает стандартных алгоритмов.
60 1049296
>>49267
Каким боком key value к связному списку? Тебе не кажется что сама задача "удалить элемент массива с конца" для такой вещи как словарь просто лишена смысла по той простой причине что словарь не имеет возможности укладывать элементы сообразно последовательности их добавления в словарь. У словарей нет индекса в его "массивном" понимании. А любые попытки его прикрутить значительно замедлят процесс добавления/удаления обьекта в словарь при этом не дав значительных преимуществ перед стандартными массивами.
>>49274

>Ты хочешь и булку съесть и на годот сесть. Ты уже описываешь две задачи


Лично я ничего не описываю, только отталкиваюсь от свойств требуемых обьектов, перечитай условие задачи еще раз. Вполне обоснованная задача, которая хоть и относительно редкая но всё же встречающаяся.
61 1049301
>>49037

> Можешь тоже потестить и сравнить со своими бенчами.


Не могу понять, где я облажался? Ресайз должен быть быстрее, но всё равно быстрее оказывается поп_бэк. Я уже на микросекунды перешёл, чтобы хоть какие-то данные увидеть.
Посмотри свежим взглядом, где неправ?
62 1049302
>>49296

> А любые попытки его прикрутить значительно замедлят процесс добавления/удаления обьекта в словарь при этом не дав значительных преимуществ перед стандартными массивами.


Вот кстати да. Полюбуйтесь.
63 1049304
>>49301

>быстрее оказывается поп_бэк.


у тебя массив пустой и длины 0
64 1049305
>>49301
Возможно в глаза ебусь, но не вижу размеров твоих тестовых массивов. Сделай там 10к элементов и обрежь их до 5к каждым методом.
65 1049307
>>49304
Не пустой.
>>49305

> Сделай там 10к элементов и обрежь их до 5к каждым методом.


Щас погодите. Всё это время (с предыдущего поста) выполняется кейс_1. Хочу дождаться конца.
66 1049308
Для каких геймплейно-дизайнерских задач вам может понадобится обрезать массив на 10к элементов?
Игры дейлайте
67 1049310
>>49308
Для истории ходов, например. Или даже для истории фреймов. Вместо постоянного дрочения на добавление-удоление обрезаешь раз в минуту.
68 1049328
>>49310

>например


Ты мне по факту расскажи, где ты это применишь
69 1049333
>>49328
Уже тащемта рассказал, например.
70 1049339
>>49310
Ты не пробовал делать как в го - слайсы делятся на чанки энного размера? Допустим у тебя кейс с историей ходов и по логике очевидно, что потребуется удалять из нее по 1к элементов за раз или близко к этому, значит делишь всю эту благодать сразу на 1к чанки либо на чанки кратные 1к, офк потребуется обертка в виде своего типа над этим говном, в любом случае ты в процессе либо рубишь на корню целыми чанками разом, либо один последний чанк хирургически, либо все вместе, но профит в том, что не ворочаешь свой массив с миллиардом элементов ради этого целиком на каждый чих. Впрочем гдскрипт массивы может внутри так и работают, это тоже глянь.
71 1049357
>>49307

>Не пустой.


На пик2

> var arr: Array


> ...


> ..


> arr.reverse()


>...



>>Не пустой.

72 1049360
>>49339
Да, идея хорошая. Я поленился ее делать. Подрезать массив раз в минуту проще. По таймингам фреймов там незначительный микро-пропук, который теряется на фоне активной игры.
73 1049374
>>49296
Если очень нужно, то это просто сделать. Но зачем?

>>49308
Годотчую. Изобретают велосипед, экономят спички.

>>49310
Решение очень простое: не хранить историю ходов.

>>49360

>Я поленился ее делать.


А считать спички в велосипеде не поленился?

>По таймингам фреймов


>незначительный микро-пропук


Он там всегда, даже на пустом проекте...
74 1049379
>>49357
Спасибо. Нашёл тупейшую ошибку копипастинга. Теперь всё заработало. И действительно, ресайз решает. Удаления по одному что в массиве, что в словаре примерно равны. Ну а pop_front() как и написано в документации - слоупок.
75 1049380
>>49379
Нашёл ещё одну ошибку. Как-то не верилось, что словарь так быстр, и действительно, я наделел лишнего, из за чего удалялись те элементы, которые должны были остаться. После исправления всё встало на свои места.
76 1049384
... А потом пришёл slice() и сделал всех как стоячих. Просто прикурили все.
77 1049385
>>49380
Увеличь arr_size на порядок ещё

>>49384
Не совсем честно замерять копирование одного и того же куска в никуда. делай дубликат потом отрезай.
78 1049387
>>49385

> в никуда


В оперативку.

> делай дубликат потом отрезай


Слайс уже возвращает дубликат.
1756059009150.png51 Кб, 1148x325
79 1049391
>>49385

> Увеличь arr_size на порядок ещё


Готово! Ещё вопросы?
80 1049393
>>49301
Как ты достал своими кодом. Иди матчасть по алгоритмам учи, это не твой ньюфаг бложик, хватит срать уже. всем насрать на твои юные исследования в программировании
81 1049395
>>49301
Не слушай его. Мне не насрать. Потестируй ещё замену pop_at() на слайсы, раз уж у тебя готовый стенд напрограммирован.
82 1049396
>>49393
Дыши глубже. Все это напрямую касается годота и игр на нем. Полезные интересные посты. Я из похожих постов узнал что switch в гдскрипте медленнее чем портянки if-else
83 1049398
>>49396
А насколько будет медленнее по ключу словаря?
84 1049399
>>49395
Результаты неочень, есличесн, пришлось сильно уменьшить входной массив, и всё равно медленно. Слайс хорош когда выполняется один раз, а тут мы возвращаемся к циклам. Остальное хоть и быстрее слайсов-в-цикле, но тоже медленное.
1756062482993.png49 Кб, 1148x325
85 1049400
>>49398
А вот же:
86 1049402
>>49396

>Дыши глубже.


Надеюсь тебе напихают репортов за флуд.
Нужно к школе готовиться, а не операторы свитч замерять. Вниманиелять.
87 1049421
>>49400
Всё-таки Dictionary выгоднее, когда нужна, например, разреженная 3D сетка - с адресацией по (X, Y, Z) и добавлением-удалением элементов в произвольных местах этой сетки. На массивах такое делать - голову ломать над адресацией, забивать память нулями/null и даже сам доступ к ячейкам трёхмерного массива может на практике оказаться медленнее Dictionary из-за особенностей GDScript (здесь до сих пор отсутствует JIT/AOT-компиляция, которая могла бы сильно ускорить множество мелких операций, таких, как вычисление адреса в массиве).

Пример:

>var grid: Dictionary[Vector3i, GridCell]


>grid[Vector3i(4, 5, 6)] = GridCell.new()


>grid[Vector3i(1, 50, -125)] = GridCell.new()


>grid[Vector3i(500, -250, 125)] = GridCell.new()


>if Vector3i(...) in grid: ...


>grid.erase(Vector3i(...))


Пусть и не идеальное решение, но достаточно эффективное в рамках GDScript.

А ещё это решение, теоретически, масштабируется на любое количество измерений, потому что под капотом Vector вроде бы те же структуры, что и у Array, и поэтому Dictionary должен мочь принимать на вход массивы любого размера и любого содержимого:

>var grid: Dictionary[Array, String]


>grid[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"]] = "16-мерное пространство"


Конечно, в данном случае вопрос не в скорости, а лишь бы оно вообще работало...
88 1049471
>>49393
>>49402
Ты его поругал и тред умер на полдня. Доволен?

>>49184

>вряд ли он будет заметен на фоне целой команды


Почему ты считаешь, что разработкой игр можно заниматься лишь ради заметности на фоне других? Большинство существующих игр никому не нужны, несмотря на уникальные концепции и хорошую реализацию. Даже от больших, дорогих студий. Они собирают ничтожные 10 тысяч отзывов и всё, пока условная Terraria побила миллион отзывов и растёт. Наиболее необычные игры вообще где-то на дне.
image.png3 Кб, 183x77
89 1049472
>>49471

>Доволен?


Конечно доволен, это же сренькальщик залетный.

Делайте игры и обсуждайте делание игр.
90 1049494
...не смог установить конпелятор C++...

Щас буду биндить Ada к GDExtension...
91 1049508
>>48979 (OP)
Кто нибудь делал мультиплеерные игры на годоте? Есть советы по архитектуре серверов?
92 1049509
>>49508
Я не делал. Зато я делал синглплеерный пиксельный платформер.
93 1049512
>>49508
Тут бывает какой-то фанатик, видимо делает что-то уровня киберкотлетской доты, аж пена изо рта идет на тему мультиплеера, особенно о том как сложно кнопки нажимать. Жди его, он занят тем, что делает синхронизации для синхронизаций. А я делал хуйни попроще только, что даже хуже, чем вообще ничего не делать.
94 1049515
>>49512

>что даже хуже, чем вообще ничего не делать.


Вронг!
95 1049517
>>49508 >>49509 >>49512
Семён, ты? Ты зачем флудишь?

Как у тебя

>мультиплеерные игры на годоте


связано с

>советы по архитектуре серверов


в твоём понимании?

Движок даёт тебе базовые инструменты, описанные здесь:
https://docs.godotengine.org/en/stable/tutorials/networking/index.html
Остальное ты должен додумывать сам под требования своей игры.
image.png8 Кб, 297x73
96 1049518
>>49517
Таблетки пей.
image.png7 Кб, 372x74
97 1049521
>>49517
Вообще я в годот тред залетел под какой-то истеричный срач о мультиплеере. Вот и запомнил шиза.
1756141747777.mp424,2 Мб, mp4,
1920x1080, 1:42
98 1049528
Чот напомнило.
image.png26 Кб, 531x246
99 1049530
>>49517
Потрогай траву.
100 1049531
>>49509
Ок, вопрос не про это.

>>49512
Ок, подожду.
101 1049536
>>49518 >>49521 >>49530
Любой может написать 3 поста с 3 разных браузеров и сделать 3 таких же скриншота.
Но только семён попытается доказать, что он не семён, запостив 3 скриншота подряд.

>>49531

>Ок, подожду.


Я тебе уже ответил. Ты ничего о своей игре не сказал - какого совета ты ждёшь?
image.png163 Кб, 1040x865
102 1049540
>>49536
Да многоче можно, родной.
Это я, кстати, сам себе ответил.
103 1049562
>>49471

>Ты его поругал


Я еще на него накляузничал (надеюсь не только я).
Чел тупо страдает фигней и вниманиелядствует в треде. Я конечно понимаю, весело вкатываться в разработку и транслировать свои изыскания, но есть для этого бложики и одноклассники.

>Ты его поругал и тред умер на полдня. Доволен?


Это хорошо, я сюда по делу и заходил, мы же не в /b чтобы тредами меряться.
104 1049568
>>49471

>Большинство существующих игр никому не нужны, несмотря на уникальные концепции и хорошую реализацию



Значит концепция/реализация говно
105 1049575
>>49562
А я на тебя, и надеюсь не только я, потому что ты срешь в треде своим вечным недовольством на все вообще, и мешаешь обсуждать напрямую релейтед темы. Так и представляю этого старого душного пердячего деда-вахтера, которому даже обсуждение гдскрипта и его подводных камней неподходящая тема. Что дальше, нельзя чейнджлог годота обсуждать? Приходить к тебе за справочкой о каждой теме? Хртьфу.

>я сюда по делу и заходил


Не, дед, судя по твоему поведению твое основное дело тут - вахтерство. Ну а мы не на работе, а ты нам не начальник.
image.png4 Кб, 365x28
106 1049580
Короче такой вопрос. Вот у меня есть этот шоу пиктуре. И там есть дефолтные вот эти вот 0, 0, 640, 520, true. И мне нужно только в конце передать не true, а false, а всё остальное по дефолту (0, 0, 640, 520). Я могу это как-то сделать не перечисляя вся остальное?
107 1049585
>>49580
В Питоне это делается с помощью named arguments, типа:

Объявление как:
func foo(a=640, b=520, c=true)
И вызов как:
foo(c=false)

Но гдскрипт в такое не умеет. Так что прописывай все.
108 1049587
>>49585
Ммм. Пиздося. Спасибо за инфу.
109 1049593
>>49580
Параметры по умолчанию.
func show_picture(a: bool, b: int = 0, c: int = 0) и так далее. Хотя точно не помню насколько хорошо гдскрипт в это умеет.
Передача дтошками.
class ShowPictureParams:
var a: bool
var b: int
var c: int
...

func show_picture(params: ShowPictureParams):
...

var params: ShowPictureParams.new()
params.a = true
show_picture(params)

Ну и методы-обертки.
func: show_picture_default(a: bool): show_picture(boo, 0, 0, 640, 520, false)
110 1049594
>>49575

>А я на тебя, и надеюсь не только я,


Я тут практически ридонли, так что кляузничай.
Это тематика, зачем флудить в тематике? Ну подыми отдельный тред со своими замерами свитчей (которые возможно разворачиваются в if...else во время интерпретации), скинь ссылку на движкосрач, собери компашку из хрюнити и возмущайтесь вместе.

Там же непочатый край, вызов функций не бесплатный, а если не указывать типы то ваще грустно. А потом окажется, что работа с полями объектов дороже работы с глобальными переменными.

Сколько же открытий ждет нас. а... нет... каникулы кончаются
111 1049595
>>49594
Репортнул тебя за превращение ИТТ в личный нытик-тред. И, надеюсь, не я один.
112 1049602
>>49580
Релейтед обсуждения на гитхабе:
https://github.com/godotengine/godot/issues/6866
https://github.com/godotengine/godot-proposals/issues/902
TL;DR: много технических сложностей, из-за которых данную фичу реализовывать не планируется. Если реализуют, то это ударит по производительности.

Заголовок функции ты не показал, зову экстрасенса:

>func show_picture(p: ImageTexture, x: float, y: float, w: float, h: float, f: bool) -> void:


Эти аргументы можно сжать так:

>func show_picture(p: ImageTexture, at: Vector2, size: Vector2, f: bool) -> void:


Можно пойти дальше:

>func show_picture(p: ImageTexture, rect: Rect2, f: bool) -> void:


Дальше тебе остаётся определить, какие параметры используются в среднем чаще других, и сортировать:

>func show_picture(p: ImageTexture, f: bool = false, rect: Rect2 = Rect2(Vector2.ZERO, Vector2(640, 520))) -> void:


Либо можно пойти ещё дальше:

>func show_picture(p: ImageTexture, args := {}) -> void:


>_ var flag := args.get("flag", false)


>_ var rect := args.get("rect", Rect2(Vector2.ZERO, Vector2(640, 520)))


>_ # Или так:


>_ var at := args.get("at", Vector2.ZERO)


>_ var size := args.get("size", Vector2(640, 520))


Но в таком случае подсказки в коде лишаешься.

По производительности костыль через Dictionary, естественно, должен быть немного медленнее, чем нормальный вызов с аргументами. Но этот костыль предназначен для твоего удобства, верно? Т.е. твоё удобство как разработчика компенсирует нехватку производительности. Зато в остальных местах всё работает быстрее, чем в каком-то там питоне.

Алсо, рекомендую не делать много аргументов в собственных функциях. Скорее всего тебе нужны свойства класса, а не аргументы функции, пример:

>class_name InventoryItem extends Control


>@export var icon: ImageTexture


>@export var rect := Rect2(Vector2.ZERO, Vector2(640, 520))


>@export var flag := false


>func show_item() -> void: ...



По этой причине, например, у CharacterBody теперь move_and_slide() вообще без аргументов - всё, что передавалось аргументами, настраивается теперь свойствами самого класса. Ибо так логичнее.
112 1049602
>>49580
Релейтед обсуждения на гитхабе:
https://github.com/godotengine/godot/issues/6866
https://github.com/godotengine/godot-proposals/issues/902
TL;DR: много технических сложностей, из-за которых данную фичу реализовывать не планируется. Если реализуют, то это ударит по производительности.

Заголовок функции ты не показал, зову экстрасенса:

>func show_picture(p: ImageTexture, x: float, y: float, w: float, h: float, f: bool) -> void:


Эти аргументы можно сжать так:

>func show_picture(p: ImageTexture, at: Vector2, size: Vector2, f: bool) -> void:


Можно пойти дальше:

>func show_picture(p: ImageTexture, rect: Rect2, f: bool) -> void:


Дальше тебе остаётся определить, какие параметры используются в среднем чаще других, и сортировать:

>func show_picture(p: ImageTexture, f: bool = false, rect: Rect2 = Rect2(Vector2.ZERO, Vector2(640, 520))) -> void:


Либо можно пойти ещё дальше:

>func show_picture(p: ImageTexture, args := {}) -> void:


>_ var flag := args.get("flag", false)


>_ var rect := args.get("rect", Rect2(Vector2.ZERO, Vector2(640, 520)))


>_ # Или так:


>_ var at := args.get("at", Vector2.ZERO)


>_ var size := args.get("size", Vector2(640, 520))


Но в таком случае подсказки в коде лишаешься.

По производительности костыль через Dictionary, естественно, должен быть немного медленнее, чем нормальный вызов с аргументами. Но этот костыль предназначен для твоего удобства, верно? Т.е. твоё удобство как разработчика компенсирует нехватку производительности. Зато в остальных местах всё работает быстрее, чем в каком-то там питоне.

Алсо, рекомендую не делать много аргументов в собственных функциях. Скорее всего тебе нужны свойства класса, а не аргументы функции, пример:

>class_name InventoryItem extends Control


>@export var icon: ImageTexture


>@export var rect := Rect2(Vector2.ZERO, Vector2(640, 520))


>@export var flag := false


>func show_item() -> void: ...



По этой причине, например, у CharacterBody теперь move_and_slide() вообще без аргументов - всё, что передавалось аргументами, настраивается теперь свойствами самого класса. Ибо так логичнее.
113 1049604
>>49602
>>49580
А, точно, можно создать вложенный класс, тогда сохраняются подсказки, правда, печатать дольше:

>class_name InventoryItem extends Control


>class SPArgs # подразумевается extends RefCounted


>_ var icon: ImageTexture = null


>_ var rect := Rect2(Vector2.ZERO, Vector2(640, 520))


>_ var flag := false


>_ func _init(i: ImageTexture) -> void:


>_ _ icon = i


>func show_picture(args := SPArgs.new()) -> void: ...


Обращение будет, правда, посложнее Dictionary:

>var args := InventoryItem.SPArgs.new(image)


>args.flag = true


>item.show_picture(args)


Тот же пример через Dictionary:

>item.show_picture(image, { flag = true })


Пример через свойства:

>item.icon = image


>item.flag = true


>item.show_item()


Выбирайте на свой вкус.

Очень жаль, что в GDScript нет оператора "with"...
114 1049631
>>49568

>Значит концепция/реализация говно


Нет, хорошие игры с интересной концепцией тоже опускаются на дно Стима, и там и остаются. Или, по крайней мере, эти игры ничем не хуже других, но не добрались до топа популярных.

Поэтому, если ищите мотивацию для разработки игр, можете сразу забыть о популярности игры. Если вы не популярный (видео)блоггер или нет бюджета на маркетинг, игра вряд ли станет популярной даже с достаточно большим бюджетом на разработку.

>>49562

>Чел тупо страдает фигней


А что такого-то, если это касается GDScript?

>и вниманиелядствует в треде.


Раньше тут было больше узнаваемых анонов, но все, к сожалению, разбежались. Или это ты их репортил? Постите о разработке своих игр на Godot почаще, а то выглядит так, будто мы тут только код обсуждаем.

>я сюда по делу и заходил


Тогда какое тебе дело до его постов?

>>49575

>своим вечным недовольством на все вообще


Ты его с кем-то путаешь, наверное. Это не он. Это я недоволен всеми, всем и всюду. А он кто-то другой.

>>49594

>отдельный тред со своими замерами свитчей


Не нужен отдельный тред. Он тут несколько тредов сидит уже, насколько я понимаю. Обычно постит интересные конструкции в коде на GDScript. Чем его производительность не устроила - не знаю, но сам вопрос оптимизации кода смысл для треда имеет.
115 1049633
Как вкатиться в кодинг? Ассеты то и спиздить можно, а вот как их работать заставить...
116 1049635
Где обсуждать скриптовый язык годота, если не в треде годота? Ща прибежит то чмо с репортами и скажет, что в /пр.
117 1049638
>>49635

>Ща прибежит


Не раскачивай лодку.

Это тред любви и взаимопомощи.

>>49633

>Как вкатиться в кодинг?


1. Интерактивный туториал по GDScript для нубов:
https://www.gdquest.com/learn-to-code-from-zero/
2. Официальная документация для продолжающих:
https://docs.godotengine.org/en/stable/tutorials/scripting/index.html
3. Некоторые крупные LLM могут ответить на многие программисткие вопросы более-менее хорошо, но конкретно в GDScript сильно заблуждаются. Лучше спрашивать теоретические вопросы, а не код. Дальше следуете в поисковик, далее Wikipedia, StackOverflow... Иногда что-то полезное бывает на Reddit, YouTube.

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

Я вот прокачал навык гуглинга за счёт кодинга...

>Ассеты то и спиздить можно


Если планируешь публиковаться и просить деньги - желательно не использовать копирайченные ассеты. Используй цветные кубы/квадратики вместо них для прототипов, иначе в будущем забудешь удалить и ВНЕЗАПНО игру удалят по DMCA от кого-нибудь. Да и нарисовать стильный программер-арт не так сложно.

>как их работать заставить


Про геймдизайн не забывай - он важнее кода и арта.
118 1049639
>>49638
Респект.

>Если планируешь публиковаться и просить деньги - желательно не использовать копирайченные ассеты. Используй цветные кубы/квадратики вместо них для прототипов, иначе в будущем забудешь удалить и ВНЕЗАПНО игру удалят по DMCA от кого-нибудь.


Так а если чел сам пишет, что можно юзать в коммерческих проектах или это такая обманка хитрая?
119 1049640
>>49639
Не обманка. Просто всегда надо смотреть лицензии ассетов. СС0 безопасно в любом виде в любом проекте, даже без указания авторства ассетов - сам под СС0 на итче выкладываю. СС-BY уже требует указания авторства, тут мутнее и хватает тонких моментов - ты авторство укажешь, а какой-нибудь мелкостример, играющий твою игру не укажет, и ему страйк прилетит от автоматизированной системы ютуба/твича, особенно это музыки касается.
120 1049641
>>49640
А, понял принял.
121 1049642
>>49639

>чел сам пишет, что можно юзать в коммерческих


Тогда у ассета свободная лицензия, чаще всего это вариант "CC". Скорее всего ты обязан в титрах игры обозначить, что используешь его ассет, добавить (не обязательно кликабельную) ссылку на его страницу. "Воровства" тут нет, "воровство" - это когда, скажем, извлекают ассет из одной игры, вставляя в другую, скачивают платные ассеты бесплатно с торрентов, нарушают условия лицензии на ассет и т.д.

Подробнее о самой популярной лицензии на ассеты:
https://en.wikipedia.org/wiki/Creative_Commons_license

>или это такая обманка хитрая?


Вряд ли. Большинство просто выкладывают своё творчество, надеясь стать популярнее, если их имя засветится в популярной игре. Но, в теории, можно провернуть манёвр, если удалить все упоминания свободной лицензии из интернета... Поэтому имеет смысл сохранять копию сайта автора в формате, который может иметь вес в суде (тут я не спец).

Главное не воруй у больших игроков (Sony, Nintendo, Rockstar, Hadbro и многие другие, кому не насрать). С рандомным Васяном из Нижнего Пердюйска скорее договоришься о компенсации без суда...

>>49640

>СС0 безопасно в любом виде


Лол, не всё так просто. Не в каждой стране автору позволено выкладывать свой контент в публичное достояние до своей смерти + сколько-то лет.

>страйк прилетит от автоматизированной системы


Это только если музыка публиковалась каким-то музыкальным лейблом и зарегистрирована в этой автоматической системе. Нужно смотреть источник.

Ещё полезно почитать про "патентный троллинг" - в геймдеве некоторые игровые механики оч жёстко запатентованы. Стрелочку рисовать на экране стало разрешено всего несколько лет назад, например. И мини-игры на загрузочном экране делать нельзя по причине какого-то патента, а не из-за лени разрабов.
122 1049643
>>49642

>мини-игры на загрузочном экране делать нельзя


А, тот патент в 2015 просрочился... Значит, можно.

Значит, это реально разработчики тупо ленятся.

Не ленитесь. Делайте игры на экран загрузки.
123 1049648
>>49642

>игровые механики оч жёстко запатентованы


Какой же это сюр нахуй. А мысли то еще запатентовали?
124 1049650
>>49648

>А мысли то еще не запатентовали?


Мысли - нет. А вот бросать шарик для призыва себе боевого питомца - это сразу иск в суд от Nintendo... Использовать питомца как глайдер тоже нельзя.
125 1049656
>>49650
И че сделал палворлд, чтобы было можно?
126 1049657
>>49656

>И че сделал палворлд


1. Удалил броски шарика - теперь тупо спавн рядом.
2. Удалил петы-глайдеры - пет даёт бонус глайдеру.
Что им придётся удалить дальше - покажет время.

Если не веришь, сам гугли.
127 1049659
>>49657
Несколько месяцев назад играл. Не обратил внимание, что шарик не бросаю для призыва. А глайдер ваще не помню, летал на пале. Ну мб, просто действительно в глаза ебался, типа не важная мне деталь. А захват шариком они не патентовали выходит? И все остальное, что полностью спизжено с покемонов?
128 1049662
Кто делает 3D игру с монитором >60 Гц, подскажите.

Вот есть Camera3D и RayCast3D. По идее, рейкаст обновляется с частотой физики, 60 Гц по умолчанию, однако, камеру предлагается вращать в _process() с частотой монитора. Как это по-хорошему решается? Необходимо плавное вращение и детект коллизий одновременно - с разными частотами обновлений.

>>49659
Там всё очень сложно. Изначально Nintendo вообще наехала без патентов, патенты зарегистрировали в процессе судебных разбирательств. Как это у них получается - непонятно, но Pocketpair им уступает.

Может, причина в том, что обе компании в Японии - кажется, это сильно упрощает судебный процесс. А Nintendo любит отжимать бабки у конкурентов...
129 1049668
>>49662
Если я правильно понял, то тебе нужна интерполяция. Глянь вот этот видос
https://youtu.be/zfIuaRzNti4?si=UX141b_swfG3Be9w
130 1049669
Что такое CSRF check failed? Нет, я гуглил. Ничо не понял.

Я джва часа заполнял форму отправки ассета на ассетлиб, и вот наконец всё готово, нажимаю отправку и получаю сабж. Вся форма сбросилась, всё что я там вписывал.
131 1049672
>>49669
Вероятно кто-то сильно накосячил в духе начала нулевых, когда делал форму. Или что там у них. Пиши заново.
132 1049674
>>49669
Это крч секьюрити, которую браузеры подкручивают в последние годы. Запрещает отдавать/запрашивать некоторые ресурсы между не-https доменами. Браузер на такое может ругаться даже если ты на локалхосте что-то хостишь, например верстаешь банальный index.html и подгружаешь в нем локальный ресурс.

Возможно ты тупил с отправкой слишком долго и csrf токен истек, или, скорее всего, бекенд успели рестартнуть.
73e0f058be8c4049ad354e344f15ba752871fea5hq-2084716373.jpg51 Кб, 1024x768
133 1049676
>>49669

>The "CSRF check failed" error usually occurs when a security token is missing or invalid during a form submission, often due to expired sessions or cookies. To resolve this, try clearing your browser's cookies or using an incognito window.



Проще говоря - ты слоупок.
download.png1 Кб, 50x43
134 1049680
>>49669
На каждую форму (открытие страницы) заводится токен. У токена есть время. Это как капча на двачах, у которой тоже есть время жизни.
135 1049682
Ебать знали бы вы, как приятно иметь хотя бы минимально успешную игру и фанатов. Я сейчас узнал что в моей игре, сделанной на годоте, кто-то нашел осмысленный сюжет. А его там нет, вообще, лол.
136 1049688
>>49662
Если проблемы не случилось а я предполагаю, что её не случилось, то просто забей. У тебя не только рейкаст вращается с частотой в 60 кадров, у тебя и детект колизий происходит с этой частотой, т.е. если ты хочешь получить детект коллизий с частотой камеры либо вращай камеру в physics_process либо увеличивай частоту физики.
137 1049690
>>49682
Представляю. Мне ваще приятно, если любую мою работу ценят, но поскольку я хуйло криворукое обычно получаю ведро говна.
138 1049691
>>49668
Чел создаёт проблему двигая физический объект (персонажа) в _process и решаёт её, гениально
139 1049692
>>49668

>нужна интерполяция


Проверил - вроде бы работает... Но _process() теперь вообще нельзя, только _physics_process().

>Глянь вот этот видос


Странное решение. Если двигать камеру в _physics_process(), движок сам всё интерполирует.

>>49688

>я предполагаю, что её не случилось


С чего ты взял? Это не из категории преждевременных оптимизаций.

>У тебя не только рейкаст вращается с частотой в 60 кадров


В том-то и дело, что камера вращается быстрее - из-за этого проблемы.

Теперь камера вращается в _physic_process() и интерполируется.
140 1049694
>>49692

>С чего ты взял? Это не из категории преждевременных оптимизаций.


>


Значит у тебя какая то странность с игрой если тебе надо успеть рейкастом поймать что то в промежутке между двух вызовов физического процесса.

Вообще есть механизм рейкаста из камеры, у неё вроде метод есть такой, скорее всего закроет твою проблему, а нода скорее всего делает это же самое но каждый физический тик, но это надо в исходники смотреть
flip.jpg40 Кб, 500x740
141 1049696
>>49694
1. Вращаешь камеру мышкой.
2. Повернув камеру, жмёшь левую кнопку мыши.
3. Рейкаст запаздывает и выбирает не то, на что смотрит камера.
4. ???
5. РРРРЯЯЯЯ, ДА КАК ТАК-ТО, Я ВЫБИРАЮ, А ОНО НЕ ВЫБИРАЕТСЯ!
Тру стори.

>inb4 трансформируй рейкаст перед кликом


Почему-то не работало. Или мне было лень...
142 1049697
>>49692

>Странное решение. Если двигать камеру в _physics_process(), движок сам всё интерполирует.


Физический процесс работает с фикс частотой в 60 тиков/сек. А камера должна вращаться с частотой fps - т.е. process.
Или я что-то не вкуриваю?
1756268499131.jpg26 Кб, 590x590
143 1049699
>>49680
>>49676
>>49674
>>49672
Спасибо, человеки, со второго раза запостилось. Алсо, мои данные запомнились в автоподстановке. СПАСИ ВАС БОГ! 🙏❣❤ ХРАНИ ГОСПОДЬ АССЕТЛИБ! 💌💦
144 1049703
>>49699
А чо там ассет стор? Туда публиковываешь?

https://store-beta.godotengine.org
145 1049704
Не появилась ли в новых версиях возможность "проксировать" свойства нод? То есть, у меня есть сцена нпс, внутри нее аудионода, и из общей сцены уровня я хочу отредачить одно свойство этой аудионоды - сейчас мне надо либо вручную геттер/сеттер на ноде нпс делать, либо ПКМ->Edit children чтобы достать до аудионоды. Было бы круто просто ставить галку рядом с любым свойством любой ноды - "передать это свойство в scene root".
1756283610347.png122 Кб, 803x704
146 1049709
А в чём неправ этот вот? Давайте думать. Подсказывайте.
1756284090596.png123 Кб, 818x699
147 1049712
>>49709
Отбой! Отбой! Смотрим на быстрофикс. Думоем.
148 1049713
>>49704
В некотором смысле появилось, опосредованно. Ты можешь унаследовать свой скрипт от SceneTree и указать его в свойствах проекта. С этого момента у тебя будет твой кастомный майнлуп, в котором ты можешь прописать свои свойства, которые хочешь юзать на топлевеле, а затем, когда аудионода загрузилась, она делает

> if get_tree() is MyZaLoop: get_tree().my_bga = self



Ну и естественно в любом другом месте, где тебе нужен доступ к аудионоде, ты делаешь

> if get_tree() is MyZaLoop and get_tree().my_bga is not null: get_tree().my_bga.volume += 5



Но есть один нюанс... Ехехе... И не один.
149 1049722
>>49697

>камера должна вращаться с частотой fps


Да. Но если ты включаешь в настройках проекта "физическую интерполяцию", все transform у Node3D интерполируются на каждый кадр, даже если ты их изменяешь очень редко. Единственный подвох - эта интерполяция линейная, т.е. если у тебя тикрейт 10, вращение камеры будет в виде "многоугольника"...

>>49709 >>49712
Задавай вопросы нормально: что ты пытаешься там реализовать и зачем, и что у тебя там не получается? Например, что за "типмиксинг" такой? Зачем нужен?

>>49704

>либо вручную геттер/сеттер на ноде нпс делать, либо ПКМ->Edit children чтобы достать до аудионоды


Другого выбора нет. Главная нода сцены - это как бы интерфейс класса ООП, т.е. то, что взаимодействует с окружающими объектами. Ноды под главной нодой - скрытые детали имплементации класса, от которых существенно зависит работа объекта. Если ты жмёшь "editable children", ты нарушаешь инкапсуляцию в ООП. Создавая геттеры и сеттеры ты создаёшь интерфейс, независящий от имплементации класса - даже удалив конкретные ноды внутри сцены, интерфейс никак не изменяется, и, соответственно, сцена будет работать.

Если ты хочешь настраивать большое количество однотипных нод из одного места, то рекомендую воспользоваться ресурсами: если не делать их явно уникальными, они будут иметь одни параметры вне зависимости от того, где используются. Пример:

>@export var audio_settings: AudioSettings


>class_name AudioSettings extends Resource


>@export var volume: float


Сохраняешь 1 экземпляр audio_settings.tres где-то в файловой системе и вставляешь его в каждую ноду, требующую AudioSettings. Тогда изменения в файле отобразятся во всех нодах, использующих его. Даже в рантайме, если ты не использовал .dublicate().

Ещё можно использовать статические поля класса.

>>49713
Ты просто переизобрёл синглтон. Зачем? Если у тебя потребуется изменить что-то в синглтоне (например, расширить функциональность игры), то потребуется изменять все места, где у тебя к нему обращение...

С ресурсами получается более гибкий подход.
149 1049722
>>49697

>камера должна вращаться с частотой fps


Да. Но если ты включаешь в настройках проекта "физическую интерполяцию", все transform у Node3D интерполируются на каждый кадр, даже если ты их изменяешь очень редко. Единственный подвох - эта интерполяция линейная, т.е. если у тебя тикрейт 10, вращение камеры будет в виде "многоугольника"...

>>49709 >>49712
Задавай вопросы нормально: что ты пытаешься там реализовать и зачем, и что у тебя там не получается? Например, что за "типмиксинг" такой? Зачем нужен?

>>49704

>либо вручную геттер/сеттер на ноде нпс делать, либо ПКМ->Edit children чтобы достать до аудионоды


Другого выбора нет. Главная нода сцены - это как бы интерфейс класса ООП, т.е. то, что взаимодействует с окружающими объектами. Ноды под главной нодой - скрытые детали имплементации класса, от которых существенно зависит работа объекта. Если ты жмёшь "editable children", ты нарушаешь инкапсуляцию в ООП. Создавая геттеры и сеттеры ты создаёшь интерфейс, независящий от имплементации класса - даже удалив конкретные ноды внутри сцены, интерфейс никак не изменяется, и, соответственно, сцена будет работать.

Если ты хочешь настраивать большое количество однотипных нод из одного места, то рекомендую воспользоваться ресурсами: если не делать их явно уникальными, они будут иметь одни параметры вне зависимости от того, где используются. Пример:

>@export var audio_settings: AudioSettings


>class_name AudioSettings extends Resource


>@export var volume: float


Сохраняешь 1 экземпляр audio_settings.tres где-то в файловой системе и вставляешь его в каждую ноду, требующую AudioSettings. Тогда изменения в файле отобразятся во всех нодах, использующих его. Даже в рантайме, если ты не использовал .dublicate().

Ещё можно использовать статические поля класса.

>>49713
Ты просто переизобрёл синглтон. Зачем? Если у тебя потребуется изменить что-то в синглтоне (например, расширить функциональность игры), то потребуется изменять все места, где у тебя к нему обращение...

С ресурсами получается более гибкий подход.
150 1049724
>>49722

>Да. Но если ты включаешь в настройках проекта "физическую интерполяцию", все transform у Node3D интерполируются на каждый кадр, даже если ты их изменяешь очень редко. Единственный подвох - эта интерполяция линейная, т.е. если у тебя тикрейт 10, вращение камеры будет в виде "многоугольника"...



Я честно говоря не очень понял. И вообще не врубаюсь зачем в движках сделано так, чтобы это все можно было по разному настроить. По моему единственная рабочая схема такая:
1) Камера двигается плавно в зависимости от FPS
2) Физический тикрейт работает 1/60
3) Как-то все работает и вместе и хорошо куда нажать, чтобы так было
И почему везде не настроено так по умолчанию? Кому блять может понадобится по другому и зачем?
151 1049725
>>49724
Здесь всё подробно описано:
https://docs.godotengine.org/en/stable/tutorials/physics/interpolation/index.html

>Физический тикрейт работает 1/60


>может понадобится по другому и зачем?


Ты знал, что у многих игр физика 30 Гц, а то и 15 Гц? И наоборот, у некоторых игр физика >200 Гц. В Godot по умолчанию установлено 60 Гц просто потому что это наиболее популярная частота обновления монитора.

С мониторами тоже не всё так просто. Давно уже существуют мониторы >120 Гц, но разница на глаз ощущается даже между 60 и 75 Гц, а 75 Гц уже очень древний стандарт в мониторах. Если у тебя физика зафиксирована на 60 Гц без интерполяции, на всех мониторах >60 Гц физ. объекты будут дёргаться.

Алсо, совет: если ты где-то в коде на мышь хочешь реагировать, накапливай смещение мыши в input и сбрасывай накопленное в process/physics_process. Поскольку у геймерских проводных мышей >2000 Гц обновление, даже у офисных беспроводных >125 Гц - ошибки с плавающей точкой и лишние вычисления...

>var mouse_movement: Vector2


>func _input(...): # вызывается 2000 раз в секунду


>_ if event is Mouse...:


>_ _ mouse_movement += event.relative


>func _process(...): # вызывается 60 раз в секунду


>_ react_on(mouse_movement)


>_ mouse_movement = Vector2.ZERO


Избавляет от лишней головной боли.
152 1049726
>>49725
Вот это годно с мышкой. Не знал.
153 1049727
>>49725

>mouse_movement += event.relative


А, в движке есть вроде как аккумулятор событий (?):
https://docs.godotengine.org/en/stable/classes/class_inputevent.html#class-inputevent-method-accumulate
Правда, я его пока не использовал. Новая фича?..
154 1049728
>>49713
Мне не нравится твой смех, поэтому этим путем я не пойду.
155 1049729
>>49725

>Если у тебя физика зафиксирована на 60 Гц без интерполяции, на всех мониторах >60 Гц физ. объекты будут дёргаться.


Я правильно понимаю, что нужно:
1) Оставить физику на 60 Гц
2) Включить (?) интерполяцию
3) Вызывать все движения физ объектов в т.ч. камеры в physics_process

И все будет тип-топ и при 30 FPS, и при 60 FPS, и при 120 FPS?

>Ты знал, что у многих игр физика 30 Гц, а то и 15 Гц?


Типа для производительности?
156 1049731
>>49725

>Ты знал, что у многих игр физика 30 Гц, а то и 15 Гц? И наоборот, у некоторых игр физика >200 Гц. В Godot по умолчанию установлено 60 Гц просто потому что это наиболее популярная частота обновления монитора.



Ну тип это не объясняет, почему интерполяция не включена по умолчанию. Тип, какая разница какой тик пер секонд у физики. Камера то все равно должна двигаться нормально
157 1049733
>>49731
Если ты меняешь позицию камеры без привязки к какому-либо физическому объекту, то тебе не нужна интерполяция, просто обновляй позицию камеры внутри _process и она отрендерится на следующем же визуальном фрейме. Но если ты например хочешь следить камерой за каким-то юнитом, то камера очевидно будет двигаться только при обновлении позиции этого юнита, т.е только при обновлении физики. И если у тебя физика обновляется раз в 1/60 секунды, то и камера будет залочена в 60 FPS, вот тут и нужна интерполяция.
158 1049735
>>49662

>Необходимо плавное вращение и детект коллизий одновременно - с разными частотами обновлений.


Детект коллизий чего с чем? Если твоей камеры с условными стенами, то ты получается хочешь сделать саму камеру физическим объектом и обновляться она будет только с частотой физики. Соответственно передвигаешь камеру внутри _physics_process и на каждом визуальном фрейме интерполируешь ее позицию чтобы визуально не лочить движение в 60 FPS, в чем проблема-то?
159 1049737
>>49733
Ну т.е. интерполяция имитирует обычное движение камеры, как внутри _process, но для камеры, которая внутри _physics_process. Т.е. по сути ее можно включать по умолчанию для всех проектов
160 1049738
>>49737
Интерполяция движения камеры нужна только в проектах, где сама камера - физический объект. Если как в моем примере, у тебя камера просто следует за каким-то физическим объектом, то там нужно интерполировать движение этого объекта, а не камеры.
161 1049739
>>49738
Если камеры следует за каким-то физ объектом, а не просто перемещается по воздуху (хотя тут тоже вопросы к, например, мыши, как писал анон выше), то она двигается в зависимости от движения этого объекта. Все равно что камеру повесить на голову игрока в игре от первого лица. Не?
162 1049740
>>49739

>то она двигается в зависимости от движения этого объекта


Ну, а объект без интерполяции его движения будет двигаться только при обновлении физики, т.е в 60 FPS по умолчанию.
163 1049754
>>49729

>Оставить физику на 60 Гц


Нужно смотреть, что нужно твоей игре. Как правило, слишком редкая симуляция пропускает коллизии; слишком частая симуляция впустую нагружает ЦПУ. Количество объектов и скорости движений влияют. Тримешам нужна точность выше, чем примитивам.

>И все будет тип-топ


Да, по идее, но в некоторых случаях нужно какое-то собственное решение, например, в мультиплеере, в хардкорных играх на высокую реакцию игрока и т.п.

>для производительности?


Да, разумеется. Это примерно как v-sync - чтобы не занимать компьютер лишними вычислениями.

>>49731

>почему интерполяция не включена по умолчанию


>>49737

>включать по умолчанию для всех проектов


Потому что:
1. Не всем подходит, добавляет инпут лаг.
2. Если у тебя 60 FPS + 60 TPS, то разницы нет.
3. Godot следит за тем, чтоб ты ничего не трогал вне _physics_process (warning отключается в настройках). Потому что тогда интерполяция просто ломается.
4. Телепортация объектов слегка усложняется.
Я ещё не полностью прочитал документацию...

>>49733

>Но если ты например хочешь следить камерой


>>49738

>проектах, где сама камера - физический объект


Во-первых, в 99% игр камера следует за каким-либо физическим объектом плюс сама имеет коллизию, предотвращающую клипинг камеры "в текстуры". Исключением будут только некоторые стратегии, фиксированная камера, простые головоломки...

Во-вторых, Godot предупреждает (warning) обо всех трансформах в проекте; скажем, MultiMeshInstance необходимо обновлять в _physics_process, если вы включили интерполяцию физики в проекте, хотя в MultiMeshInstance в принципе отсутствует физика. Достаточно странно, но, наверное, причина есть...
164 1049763
>>49754

>Нужно смотреть, что нужно твоей игре. Как правило, слишком редкая симуляция пропускает коллизии; слишком частая симуляция впустую нагружает ЦПУ.


3d игра от первого лица. Так что 60 тиков вроде как раз

>Да, по идее


Понял, спасибо

> Не всем подходит, добавляет инпут лаг.


Он там минимальный, вроде

>Если у тебя 60 FPS + 60 TPS, то разницы нет.


Ну ща игры редко лочат на макс 60 fps.

>Телепортация объектов слегка усложняется


В смысле телепортация? Там же просто меняется global_position
165 1049789
>>49763

>3d игра от первого лица


Есть разные "3д игры от первого лица": можно сделать спокойную бродилку с минимумом взаимодействий, а можно сделать скоростной паркур с кучей падающих обломков окружения... Вот второй игре рационально завысить тикрейт физики, а первой можно и снизить.

>В смысле телепортация?


В самом прямом: когда движение отсутствует.

>Там же просто меняется global_position


А движок пытается это изменение автоматически интерполировать, создавая видимое движение от предыдущей позиции к новой, которого нам здесь совершенно не нужно, т.к. мы телепортируемся.

Ты вообще ссылку выше по треду не открывал?
https://docs.godotengine.org/en/stable/tutorials/physics/interpolation/physics_interpolation_quick_start_guide.html

>Be sure to call Node.reset_physics_interpolation on nodes after you first position or teleport them, to prevent "streaking".


Конечно, это всего 1 вызов, но придётся держать постоянно в уме, когда что-то куда-то двигаешь.

>>49727

>вроде как аккумулятор событий


Вспомнил, где я его видел - в классе Input:
https://docs.godotengine.org/en/stable/classes/class_input.html#class-input-property-use-accumulated-input
Но странно, что

>Note: Input accumulation is enabled by default.


А я точно помню, что на 3.x у меня процессор сильно напрягался из-за движений мышки. Изменили что ли?

Хм... Судя по документации:
Input.use_accumulated_input существует с Godot 3.5.
InputEvent.accumulate() существует с Godot 3.1.
Значит, у меня проблемы были в 3.2-3.4...
166 1049791
>>49789

>Конечно, это всего 1 вызов, но придётся держать постоянно в уме, когда что-то куда-то двигаешь.


Речь идет именно про телепорт? Т.е. обычное перемещение, какой-нибудь apply impulse и т.п. не считается?

>Ты вообще ссылку выше по треду не открывал?


Открывал, но я не усваиваю гумозный язык документаций. Мне бы на пальцах объяснения...
167 1049792
>>49789
>>49791
Бля, открыл ссылку, прочел про Node.reset_physics_interpolation
Какое-то говно получается. Че, мне каждому объекту в physics_process после move_and_slide нужно вызывать reset_physics_interpolation?
ftigraphinterpolated.webp9 Кб, 784x592
168 1049800
>>49791

>apply impulse и т.п. не считается?


>>49792

>после move_and_slide нужно вызывать


Ещё раз. Что такое интерполяция?
https://ru.wikipedia.org/wiki/Интерполяция

Вот у тебя, допустим, 60 фпс и 30 тпс:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1)
3 - 2 - vector2(1, 2)
4 - 2 - vector2(1, 2)
Как видишь, тут кадры 2 и 4 повторяют кадры 1 и 3 - поскольку физика работает в 2 раза медленнее. Мы увидим скачкообразное движение. Как исправить?
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1.5)
3 - 2 - vector2(1, 2)
4 - 2 - vector2(1, 2.5)
Мы вычислили промежуточные значения 1.5 и 2.5 - получилось более плавное движение. Физические вычисления происходят в 1 и 3, но выходит плавное движение между этими кадрами, будто их больше.

Теперь представим, что мы телепортируемся:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1)
3 - 2 - vector2(1, 100)
Интерполяция найдёт промежуточное значение:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 50)
3 - 2 - vector2(1, 100)
Но нам это не нужно. Нам нужна точка 100, а не 50.

Поэтому при телепортации нужно сообщать движку: "интерполяция здесь не нужна, не интерполируй".

Так понятно?

>не усваиваю язык документаций


У Godot одна из лучших документаций в айти.
ftigraphinterpolated.webp9 Кб, 784x592
168 1049800
>>49791

>apply impulse и т.п. не считается?


>>49792

>после move_and_slide нужно вызывать


Ещё раз. Что такое интерполяция?
https://ru.wikipedia.org/wiki/Интерполяция

Вот у тебя, допустим, 60 фпс и 30 тпс:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1)
3 - 2 - vector2(1, 2)
4 - 2 - vector2(1, 2)
Как видишь, тут кадры 2 и 4 повторяют кадры 1 и 3 - поскольку физика работает в 2 раза медленнее. Мы увидим скачкообразное движение. Как исправить?
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1.5)
3 - 2 - vector2(1, 2)
4 - 2 - vector2(1, 2.5)
Мы вычислили промежуточные значения 1.5 и 2.5 - получилось более плавное движение. Физические вычисления происходят в 1 и 3, но выходит плавное движение между этими кадрами, будто их больше.

Теперь представим, что мы телепортируемся:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 1)
3 - 2 - vector2(1, 100)
Интерполяция найдёт промежуточное значение:
1 - 1 - vector2(1, 1)
2 - 1 - vector2(1, 50)
3 - 2 - vector2(1, 100)
Но нам это не нужно. Нам нужна точка 100, а не 50.

Поэтому при телепортации нужно сообщать движку: "интерполяция здесь не нужна, не интерполируй".

Так понятно?

>не усваиваю язык документаций


У Godot одна из лучших документаций в айти.
169 1049831
>>49722

> Например, что за "типмиксинг" такой?


А у меня встречный вопрос, зачем ты пишешь "типмиксинг"? Никто так не пишет, принято говорить либо "тайп миксин" либо "смешивание типов".

> Зачем нужен?


Код - лучшая документация ©
image.png10 Кб, 417x152
170 1049832
Годот в такое умеет? Это новое требование гугл плея. У них есть инструкции только для Юнити и Анрила.
разработка игр это.png1,5 Мб, 1440x800
171 1049843
Литературно
172 1049844
>>49800
Так понятно, да.
Спасибо большое.

И всем остальным годачерам, кто принял участие в обсуждении
173 1049847
>>49832
1) Там один и тот же текст и для анрыла и для юнити
2) Это зависит не от самих движков, а от СДК андроида
3) Начиная с андроид АПИ версии 35 это будет по умолчанию
4) Для более ранних версий просто флаг компиляции, в Годот или добавят или напишут в статье как сделать, это в любом случае будет касаться в первую очередь шаблона экспорта, а не игры из редактора
174 1049864
>>49847
А ты шаришь. Спасибо. Значит забью пока.
изображение.png45 Кб, 867x123
175 1049890
>>49864
Я текбе больше скажу, ещё в мае в разрабатываемую 4.5 её добавили https://github.com/godotengine/godot/pull/106358

И в блог посте 4.5.бета1 писали https://godotengine.org/article/dev-snapshot-godot-4-5-beta-1/
176 1049922
Лайфхак. Если вам нужно повернуть Node3D вокруг некоторой точки, обычно вы можете разместить её в потомках другой Node3D и вращать предка. Но если недопустимо менять порядок нод в дереве и лень разбираться в функциях Transform3D, то можно так:

>Important (Node3D)


>Pivot (Node3D/Marker3D)


>_ Anchor (RemoteTransform3D)


Pivot ставим в точку, вокруг которой хотим вращать; Anchor ставим в позицию Important, указываем ему Important. Вращая Pivot, видим вращение Important вокруг него, несмотря на то, что он лежит отдельно. Кажется очевидным, но я не сразу додумался.

Видео 1: вращение вокруг ног (плохо).
Видео 2: вращение вокруг рук (лучше).

>>49206

>меньше идей


Идей у меня много, но реализовать не получается.

Пример идеи: смотри видео 3. Проблемы:
1. Дизайн: одно дело - вращать машинку, другое - полноценного гуманоида. Какие анимации нужны? Процедурно-физические или хватит обычных? Как, в принципе, результат должен будет выглядеть? Стилизованно-мультяшно или реалистично? И как сглаживать переходы состояний - резко, плавно?
2. Техническое: вращать RigidBody3D легко, но тут CharacterBody3D всем управляет, как его вращать? Создавать отдельную RigidBody3D модель? Весь CharacterBody3D заменить на RigidBody3D (опять)? Физический ragdoll каким образом настраивать? А возможных глюков физики как надёжно избегать?
3. Мотивация: а нужно ли мне это вообще? В чём, собственно, фан? Может, стоит на чём-то другом сфокусироваться? Тут и без этого куча проблем... Повторение механики из GTA на гуманоиде может разочаровать, такое редко где встретишь. Если оно выглядеть будет тупо, может, и не стоит оно того...

Теперь представь, что почти каждая идея имеет как минимум столько же проблем, но чаще ещё больше. Корабли и острова - это так, мелочи. Благодаря им я значительно уменьшил масштаб игры и проблем...

>>49393

>это не твой ньюфаг бложик


А мне постить разрешаешь?
177 1049923
Корочь такая проблема. Нужно изобрести велосипед.

У меня есть окошко и оно открывается и закрывается по нажатию правой кнопки мыши. Есть вот эта вот _process(_delta) которая читает инпут (ну то есть есть ли он или нет). Проблема в том, что читает так быстро, что по нажатию кнопки окошко начинает закрываться и открываться каждый кадр.

Я уверен, что это классическая проблема, но я чёт не могу придумать элегантного решения. Да я лох.
178 1049925
>>49923
А ещё есть _input(event) которая реально читает инпут, без привязки к фреймрейту.

> if event is MouseEventButton and event.index == 1 and event.is_released(): do_left_click_stuff()

179 1049926
>>49923
Если у тебя стандартное окно из коробки с классами, то там есть свои встроенные методы. Например, есть сигнал close_requested тебе надо просто подписаться на него и делать своему окошку hide() там в подписочном коллбэке.
180 1049927
>>49925
Да. Вот это норм зашло. Спс.
>>49926
Да вот в том-то и дело, что там кастомный кал поверх кастомного кала и весь код ебаная лапша. Спасибо за предложение.
181 1049928
>>49927

> кастомный кал поверх кастомного кала и весь код ебаная лапша


Вкуснота! Пости в тред скрины лапши с пометкой "в чём он неправ?" покушоем.
182 1049930
>>49928
Лел. Да там совсем очко. Там ещё по классике кросс-референс между нодами и т.д. Я откоментил более-менее, чтоб самому не забыть нах как оно работает и пока даже всякий раз, как приходилось там что-то менять, оно даже не ломалось.

Запилил диалоговую систему (окошко с текстом ога) с возможностью выбрать кто говорит (гг или нпс), изменить позицию окошка нпс по пресетам, звук у букв, когда они печатаются и сама "анимация" печатания, ту да же кастомные теги в тексте (типа чтобы замедлить или остановить печать на секунду), ну и так по мелочёвке.

Я знаю что есть готовые системы, но я слишком ебло чтоб в них разобраться. Я лучше буду свою ломать, но знать как она работает, чем в чужом кале ковыряться.
183 1049931
>>49928
Даже больше скажу. Я как дятел ебаный перенёс в каком-то виде систему ивентов из рпгм, потому как просто не знаю как организовать сцену по другому и теперь весь сценарий сцены вытягивается в ебейшую лапшу. Вот у меня есть сцена, там люди говорят минут на 30. Так вот она 2000 строк бля.
184 1049932
>>49931

> систему ивентов из рпгм


А в чём она заключается? Можешь вкратце расписать? Ну а я рискну предложить варианты замены.
185 1049933
>>49923
Пока ты нажимаешь кнопку мыши у тебя process может и 4 раза выполниться. По правильному делай так: создай input action с кнопкой мыши, назови его CLICK и в input/ gui_input проверяй event.is_action_pressed("CLICK"), оно само срубит все ложные срабатывания, хотя при необходимости можно и их получить проверкой event.is_echo
image.png157 Кб, 1038x748
186 1049935
>>49932
Последовательность действий в сцене. У меня сейчас каждая сцена точно так же выглядит (ну не так красиво, конечно, но через классы удалось всё более-менее читаемо и красиво оформить).
>>49933
Ну дыа. Я так и сделал. Только не event.is_action_pressed, а event.is_action_just_pressed потому какой-то хер на ютубе сказал, что именно джаст прессед обрабатывает типа только нажатие, а не сам факт, что кнопка нажата вот прям сейчас.
187 1049936
>>49935

> читаемо и красиво


Это главное. Остальное - амогус.
188 1049937
>>49935
Такого метода нет у event: InputEvent, он у класса Input
189 1049938
>>49937
А бля да? Упс.
190 1049939
>>49937
А класс Input у нас синглтон. А так же InputMap у нас синглтон. Вот и думойте.
191 1049950
Я подчищаю свой проект после работы со звуком - в каталогах осталась куча sfx файлов, которых я не использовал, и они перемешаны с файлами, которые я использовал. Хочу выкинуть лишние. Как их изи отсортировать, кроме как ПКМ по каждому и view owners?
192 1049953
>>49950
Ладно, рассортировал руками с помощью кнопочки delete - показывает все используемые ресурсы. Неудобно, но штош.
193 1049954
>>49953
Скриптик написать уровня:

> for file in files: if file.owners > 0: do_do()

194 1049977
>>49923

>Нужно изобрести велосипед.


Почему ты не хочешь почитать документацию?..

Я вот так у себя сделал:

>func _unhandled_input(event: InputEvent) -> void: # будет вызываться только если ничто не "съело" событие


>— if mode == Mode.POPUP and state == State.HIDDEN: # проверяем, что меню закрыто и настроено как попап; альтернативой является, например, открытие извне


>—— if popup_shortcut and popup_shortcut.matches_event(event): # проверяем настроенный шорткат и сравниваем его с событием


>——— open() # запускаем анимацию открытия и т.п.


https://docs.godotengine.org/en/stable/classes/class_shortcut.html

>func _gui_input(event: InputEvent) -> void: # вызывается исключительно Control-нодой, если курсор над ней


>— if state in [State.OPENING, State.FOCUSED]: # реагируем на клики только если открываемся или уже открыты


>—— if event is InputEventMouse: # если это мышь...


>——— if event is InputEventMouseMotion: # ...двигается


>———— _handle_focusing_at(event.position) # передаем фокусировку кнопкам (у меня вычисляется позиция сектора круга на меню, поэтому мне это здесь нужно)


>—— _handle_action(event) # если произошёл клик и т.п.


>— accept_event() # "съедаем" событие (метод Control), скрывая его от всех остальных нод под курсором, и от остальных нод в игре, имеющих _unhandled_input


https://docs.godotengine.org/en/stable/classes/class_control.html#class-control-method-accept-event

>func _handle_action(event: InputEvent) -> void:


>— if event is InputEventMouseButton: # если кнопку...


>—— if not event.pressed: # ...отпустили...


>——— match event.button_index: ...какую именно?


>———— MOUSE_BUTTON_LEFT:


>————— _handle_click() # нажимаем кнопку меню


>———— MOUSE_BUTTON_RIGHT:


>————— _cancel() # возврат назад или скрытие меню


Делал это больше года назад, что-то могло в API измениться... Сейчас глянул, нашёл _shortcut_input и InputEventShortcut - наверное, недавно добавили. Предполагаю, что лучше будет их использовать.

Рекомендую подтверждать клик/закрывать меню конкретно при отпускании клавиши/кнопки мыши, поскольку именно такое поведение используется в Windows, Android, на веб-сайтах и т.д. Если игрок уже зажал кнопку, но передумал, то он может сдвинуть курсор в сторону от кнопки, тем самым изменив свой выбор или полностью от него отказавшись. Это, как мне кажется, ожидаемое поведение в любом GUI.

Речь, разумеется, о "виртуальных" кнопках, которые отображаются на экране/в меню/окне. Исключение составляют хоткеи/шорткаты - физические кнопки (отменить нажатие технически невозможно), и ещё кнопки, действие которых растянуто во времени (длительность нажатия кнопки влияет на результат).
194 1049977
>>49923

>Нужно изобрести велосипед.


Почему ты не хочешь почитать документацию?..

Я вот так у себя сделал:

>func _unhandled_input(event: InputEvent) -> void: # будет вызываться только если ничто не "съело" событие


>— if mode == Mode.POPUP and state == State.HIDDEN: # проверяем, что меню закрыто и настроено как попап; альтернативой является, например, открытие извне


>—— if popup_shortcut and popup_shortcut.matches_event(event): # проверяем настроенный шорткат и сравниваем его с событием


>——— open() # запускаем анимацию открытия и т.п.


https://docs.godotengine.org/en/stable/classes/class_shortcut.html

>func _gui_input(event: InputEvent) -> void: # вызывается исключительно Control-нодой, если курсор над ней


>— if state in [State.OPENING, State.FOCUSED]: # реагируем на клики только если открываемся или уже открыты


>—— if event is InputEventMouse: # если это мышь...


>——— if event is InputEventMouseMotion: # ...двигается


>———— _handle_focusing_at(event.position) # передаем фокусировку кнопкам (у меня вычисляется позиция сектора круга на меню, поэтому мне это здесь нужно)


>—— _handle_action(event) # если произошёл клик и т.п.


>— accept_event() # "съедаем" событие (метод Control), скрывая его от всех остальных нод под курсором, и от остальных нод в игре, имеющих _unhandled_input


https://docs.godotengine.org/en/stable/classes/class_control.html#class-control-method-accept-event

>func _handle_action(event: InputEvent) -> void:


>— if event is InputEventMouseButton: # если кнопку...


>—— if not event.pressed: # ...отпустили...


>——— match event.button_index: ...какую именно?


>———— MOUSE_BUTTON_LEFT:


>————— _handle_click() # нажимаем кнопку меню


>———— MOUSE_BUTTON_RIGHT:


>————— _cancel() # возврат назад или скрытие меню


Делал это больше года назад, что-то могло в API измениться... Сейчас глянул, нашёл _shortcut_input и InputEventShortcut - наверное, недавно добавили. Предполагаю, что лучше будет их использовать.

Рекомендую подтверждать клик/закрывать меню конкретно при отпускании клавиши/кнопки мыши, поскольку именно такое поведение используется в Windows, Android, на веб-сайтах и т.д. Если игрок уже зажал кнопку, но передумал, то он может сдвинуть курсор в сторону от кнопки, тем самым изменив свой выбор или полностью от него отказавшись. Это, как мне кажется, ожидаемое поведение в любом GUI.

Речь, разумеется, о "виртуальных" кнопках, которые отображаются на экране/в меню/окне. Исключение составляют хоткеи/шорткаты - физические кнопки (отменить нажатие технически невозможно), и ещё кнопки, действие которых растянуто во времени (длительность нажатия кнопки влияет на результат).
195 1050029
как ускорить рутину? вот я ща уже 8 часов с нейросетью разбираю как сделать попадание по врагам в платформере
196 1050032
>>50029
Ну если тебе требуется 8 часов с нейронкой это разбирать, значит это пока что не рутина.
Я архитектурный идиот, почти все что делаю сразу оформляю в периспользуемые компоненты/модули. В идеале делаю один раз. Типа. Так ускоряю свою "рутину". И проебываю время на никому не нужную архитектуру, о чем потом плачусь нейронке, а она меня по головке гладит и успокаивает. Но мне это доставляет удовольствие, а если делать в лоб, но быстро - наоборот. Поэтому никому не советую.
Еще для ускорения можешь нейронку подрубить прямо в проект, пусть она за тебя работает, чем пытается тебе, мясному куску дерьма, объяснить элементарные вещи.
197 1050049
>>50029
Спросить у живого человека в интернете
1754533466684085.png373 Кб, 589x1659
198 1050056
>>50049
Хорошая шутка.
199 1050072
>>50029
Что ты там разбираешь? шизло
Конкретно, как это реализовать в коде? На ютубе тысячи видео - реализуется за пол часа.
Или с точки зрения геймдизайна? Чукча не читатель, да? Пиздец. Я конечно понимаю, что нейронку можно использовать в качестве быстрого поиска или аналитики, но 8 часов...
200 1050073
>>50072
ЕРПшит с годеттой он. Там в длинных чатах у фильтра жопа отваливается.
image.png89 Кб, 1200x1200
201 1050091
1) Где удобнее делать 3D модели для годот (blender?)
2) Где удобнее тестировать для годот? (substance painter?)
3) Где удобнее делать 3D анимацию для годот? (сразу в годот, или же, скажем, в блендере?)
202 1050092
>>50091

>fix


2) Где удобнее текстурировать для годот? (substance painter?)
203 1050101
>>50091
Найми 3d моделиста и используй cascadeur
204 1050115
>>50091
Я свое 3д в блокбенче делаю. Он не только кубы, но и лоуполи. Перекидываю через глтф в годот.

Там на днях как раз 5.0 блокбенч выходит, с гитхаба уже бету взять можно.
Снимок экрана в 2025-08-30 13-36-01.png335 Кб, 1920x1200
205 1050135
Как проще всего реализовать уровни врагов в игре схожей с Inscryption.(создание карт врага после каждого хода)
206 1050136
>>50101
За софт спасибо, но совет так себе, я сам моделить собираюсь. .
207 1050137
>>50115
блокбенч - почему не блендер?
208 1050139
>>50137
Проще. Я до этого проекта с 3д вообще не работал, ни в плане моделирования ни в плане движков. А теперь этот проект близок к финалу демо.

Плюс мне нужны были пикселизированные текстуры.
209 1050141
>>50139
Можешь показать какие модельки у тебя (тоже хочу лоуполи, но не хочется в какие-то ограничение по моделингу попасть).
image.png304 Кб, 892x569
210 1050144
>>50141
Такого уровня у меня. Полистай тут чужие: https://sketchfab.com/tags/blockbench
211 1050210
Делаю прототип игры по типу шашек, нужно научить компьютер играть против игрока.
Есть написанная мною DQN нейронка, которая принимает на вход позиции фишек на доске и выдает лучший ход. Проблема: алгоритм написан и обучен на питоне, потому что по другому я не умею.

Можно ли интегрировать файл .py в проект, чтобы мой .gd-скрипт обращался к нему в реалтайме и обменивался с ним информацией?
212 1050225
>>50210
С гдскриптом мирного решения не будет. Как вариант - поднимать вебсокет клиент который будет стучаться в вебсокет сервер на питоне, и так они будут общаться. С# - ты сможешь запустить питон как дочерний процесс и обмениваться с ним данными присоединившись к его cmd и имея возможность туда писать и оттуда читать. К самому с# из гдскрипт придется коннектиться с помощью сигналов и/или годот рефлексии позволяющей мультиязычное общение.
213 1050227
214 1050229
>>50225

>С гдскриптом мирного решения не будет


Не говори ерунды, ты с движкосрача сбежал?

>>50210
Можно через сокеты, а можно вот так:
https://docs.godotengine.org/en/stable/classes/class_os.html#class-os-method-execute-with-pipe
По идее, должно запускаться вот так:

>var pipes := OS.execute_with_pipe("py", ["script.py"], false)


Дальше ты должен обмениваться через:

>pipes.stdio


API к которому здесь:
https://docs.godotengine.org/en/stable/classes/class_fileaccess.html
Подробнее про пайпы читай тут:
https://en.wikipedia.org/wiki/Anonymous_pipe

Также ты можешь подключить сам Python к Godot.

Но если хочешь портативности (опубликовать игру), рекомендую переписать нейронку на C++ и затем подключить её как GDExtension. Иначе придётся устанавливать Python каждому игроку...
215 1050251
>>50210
Как самое мирное решение все же будет поднять нейронку в виде отдельного сервиса и общаться с ней как твоей душе угодно. Способов тут описали множество, но этот самый бесхитростный, одноклеточный и универсальный. Остальное скорее про умственную гимнастику, потому что на выходе лучше не будет.
image.png493 Кб, 598x420
216 1050345
Делайте игры.
217 1050346
>>50345
Скоро в школу, времени будет не хватать...
218 1050354
>>50072
так я код не пишу, я в основном ищу пиздатые ассеты и пытаюсь из этого игру сделать. пока тяжело чёт.
219 1050356
Делаю игру на годоте. Для метроидвании лучше автосохранение каждые х секунд, или сохранение по чекпоинтам аля костры из соулсов?
220 1050358
>>50356
Это часть дизайна игры. Как ты задумал - так и должно быть. Но если ты хочешь совета, делай по чекпойнтам перед боссами, костры не делай, они всем уже надоели, за костры тебя захейтят.
>>50354

> я в основном ищу пиздатые ассеты


Мой дед говорил, делай пиздатые ассеты и бросай их в ассетлиб. Они не пропадут, игорами тебе вернутся.
221 1050364
>>50356
Это к движку отношения не имеет. Кури основы геймдизайна, ИГРАЙ в игры сам, пиши дизайн-документы, займись левелдизайном - узнаешь ответ
222 1050370
>>50356
Что бы ты не выбрал - всегда помни про транзакционность сохранений, чтобы ты всегда мог гарантировать что если сохранение не смогло записаться по любым причинам - всегда могло открыться предыдущее. В остальном че хошь то и делай.
223 1050371
>>50370
Скопировал твой пост в список дел.
224 1050372
>>50371
Двачую
225 1050380
>>50029
пишу отчёт, я так нихуя и не понял как делать нормальное столкновение фаерболов с монстриками. они либо улетают нахуй все либо ничего не происходит
226 1050383
>>50135
func koneц_kazhdogo_hoda() -> void:
____sozdat_cartы_vraga()
227 1050389
>>50380
Эх, нейронки ещё не могут. Всё надо делать самому.
228 1050399
>>50389
Нужно просто выработать особое программисткое мышление и уметь юзать нейронки, тогда всё получится.
229 1050400
>>50399
Нейронки не нужны. Это база.
230 1050401
>>50400
Это база для необучаемого луддита. У реальных волков-базовичков имеющих за плечами крупный бэкграунд сразу в нескольких областях база совершенно другая.
231 1050402
>>50401
Игры свои покажи, вайбкодир, лол.
232 1050403
>>50402
Я не геймдев по основной работе, так что показывать кроме одного прототипа особенно нечего.
233 1050405
>>50403
Ммм... Ясненько. Вот такие у нас базовики закатываются в тред и поучают, как нам игры делать.
234 1050406
>>50405
А какая разница? Нейронки везде хороши, особенно в играх. Можешь свои ненейроночные игры показать, в противовес так сказать.
235 1050413
>>50370

>помни про транзакционность сохранений


Поясняю нормальным человеческим языком:
1. Сохраняешь данные в save2.data
2. Файл создался? Данные корректны?
ДА: если хочется, удаляем save1.data
НЕТ: сообщаем об ошибке сохранения

Всё. Больше про это вспоминать не нужно.
236 1050416
>>50413
Выкинул его пост из списка задач, добавил твой.
237 1050454
>>50380
Ты нормально можешь пояснить, че ты хочешь? Ты че там, пытаешься реальную симуляцию физики приделать к 2d игре? Ты совсем ебобо?
238 1050458
>>50454
Он не программист и делает игру заказывая код у чат-бота.
239 1050464
>>50454
да я ебу, гопота пишет добавь коллайдер и коллайдер и там как не тыкай они вообще нихуя не соприкасаются урона то есть нет нихуя.
240 1050467
>>50464
не коллайдер а ригидбоди и коллайдер фикс
image.png8 Кб, 247x171
241 1050468
Не зря выходят ресерчи, утверждающие что нейронки, вопреки ожиданиям, в среднем разработку замедляют, а не ускоряют.

>>50464
Сделай пару шагов назад и пройди официальный туториал на сайте годота. Чтобы нейронка была полезна тебе нужно хотя бы в общих чертах понимать то, что она тебе говорит, и знать как это применять. Это будет быстрее, чем каждый день по 8 часов вслепую получать изнасилование от нейрокода.

https://docs.godotengine.org/en/stable/getting_started/introduction/index.html - на английском.
https://docs.godotengine.org/ru/4.x/getting_started/introduction/index.html - на русском.
242 1050472
>>50413
Вспоминать не нужно только если изначально знаешь о таких ньюансах, а вот помнить о таком стоит.
15283215715110.webm496 Кб, webm,
1280x720, 0:10
243 1050478
>>50464
Лол. Ебало этого вайбкодера представили? То, что можно сделать по туториалу из ютуба за пол часа он уже несколько дней пытается с помощью нейронки сотворить.
244 1050482
>>50468
ну попробую, но мне не нравится что там дохуя знать надо для того чтобы что-то сложнее примеров сделать
>>50478
ну это если ты опытный то тебе легко конечно, у меня бэкграунда в айти нет я чисто работяга как могу на волевых.
15256291318520.webm2,9 Мб, webm,
640x480, 0:17
245 1050488
>>50482
Лол, а ты че, думал, что ща напишешь два-три промта и игра готова? Вот ты ахуеешь, когда если дойдешь до момента, где поймешь, что движение - это не просто velocity менять.

>ты опытный то тебе легко конечно


Я нихуя не опытный. И мне постоянно приходится курить туториалы и мануалы, как и всем тут.

>как могу на волевых.


Сидеть пердеть в кресло и ныть нейронке "зделай мне збс игру" - это на волевых?

>мне не нравится что там дохуя знать надо для того чтобы что-то сложнее примеров сделать


Не нравится? Вебм релейтед
246 1050489
>>50482

>мне не нравится что там дохуя знать надо


С нейронкой тоже дохуя знать надо. Они пока не на уровне кнопочки "сделай заебись".
1756720587762.png371 Кб, 536x864
247 1050499
Раньше тут сидел аутичный кодер, который постил скрины кода и спрашивал, в чём он неправ. Жаль, что он ушёл, канешн. Теперь какие-то нейронки ебутся.
248 1050512
>>50482

>но мне не нравится что там дохуя знать


Твой юношеский максимализм радует. Как линейка прошла?
249 1050514
>>50499
Измеритель свитча, это ты? Не скучаем.
250 1050515
>>50514
Нет, измеритель свитча это я. А ты мультиплеерные кнопки или антипаттерн-синглтон?
251 1050517
>>50464
Ты пока брал за щеку у чатагпт похоже маски и слои у чегото вырубил.
изображение.png43 Кб, 264x300
252 1050524
253 1050531
Кароче. Только что узнал, что оказывается порядок нодов в сцене, влияет на их загрузку, и типа если их поменять местами, всё может работать по другому. Узнал чисто из интереса когда уже устал думать что делать.

Если что, знайте.
254 1050549
>>50531
Можно же документацию немножко почитать, она даже частично переведена, там много интересного.
255 1050552
>>50549

>там много интересного


Что самое интересное ты видел в документации? Я помню удаленную страницу про зашифрованные сейвы.
The World Today is not the World of Yesterday.png103 Кб, 451x1984
256 1050558
>>50552

>удаленную


Литералли...
image.png111 Кб, 756x421
257 1050562
>>50558
Йес, литералли.
258 1050563
>>50552
Всё, если ты

>узнал, что оказывается порядок нодов в сцене, влияет на их загрузку



Персонально советую изучить раздел "Руководство-Лучшие практики"
259 1050608
>>50549

>она даже частично переведена


Ох, эти вечные обсеры ленивых помогаторов. Везде этот частичный перевод 100 летней давности. Самое ленивое комьюнити, зачем вообще браться за это?
260 1050620
>>50608
Документация разбита на абзацы. Когда в оригинале изменяется один абзац, во всех переводах этот один абзац "слетает" - становится неактуальным. Оригинал обновляют англоговорящие люди, поэтому просто не способны обновить всё языки сразу. А энтузиасты не обязательно доступны 24/7. Вот перевод и неполный.

Вообще, в 2025 мог бы и с автопереводчиком во всём разобраться; они достаточно хороши для технической литературы. Но термины по-прежнему лучше всего в интернете искать на английском, а не на русском: там больше актуальных обучающих материалов/новостей.

С LLM тоже лучше только на английском общаться. Ломанный английский они понимают лучше русского. Возможно, из-за сложности русского языка, но точно недостаточно тренировочных данных в интернете...

ПО на ПК тоже лучше на английском держать. А то насрут в UI непонятными терминами, которые никак не переводятся обратно на английский и на русском не находятся нигде, и сиди ломай голову весь день...

Такова реальность всего айти, к сожалению.
261 1050628
>>50620
Один стандартизированный технарский язык это не так уж плохо и даже логично. Но думаю настало время хуячить нейроперевод прям с самого начала, а не ждать пока вася почешется для перевода на русский, а выньхуй на китайский. Все же автоматически, переводят они не хуже богомерзких людишек, судя по докам годота.
262 1050638
>>50620

>Вообще, в 2025 мог бы и с автопереводчиком во всём разобраться; они достаточно хороши для технической литературы.


С чего ты решил что я не знаю англ? Я офигеваю над ленивым комьюнити, так везде, не только в годоте.
263 1050642
>>50638

>Я офигеваю над ленивым комьюнити, так везде


Потому что переводить с английского на локальные языки - самая бесполезная и неблагодарная трата своего времени, как бывший переводчик говорю. Всегда все отстает, всегда что-то будет неполным или коряво переведенным, всегда твоему читателю потребуется дополнительная инфа из гугла и сторонних ресурсов, а они ведь тоже не переведены, а весь интернет не переведешь - и в этом плане перевод даже вреден, гугля ошибку "Interpolated triggered from outside physics process" человек получит гораздо более полную выдачу чем по "интерполяция вызвана извне физического процесса". Больше пользы пытаться обучить весь мир английскому, чем пытаться перевести все необходимое.
image.png28 Кб, 522x487
264 1050654
>>50642
Ленивая бесполезная, оправдывается.

Тут проблема в том, что ты начинал переводить и забросил, зачем тогда вообще начинал? Зачем этим маневры?

Перевод нужен для популяризации среди вкатунов. Тебе нравится теха/яп? Хочешь чтобы она стала популярнее? Берешь и облегчаешь вкат (например учить язык программирования с нуля и английский с нуля - непосильная задача). Даже хорошо владеющий английским, будет комфортнее прочитать на родном языке бегло вечерком (что опять увеличивает популяризацию).

сейчас опять сработает макакин-триггер и набегут постеры с рекомендациями чтобы я использовал переводчик или учил английский
265 1050655
>>50654
Учи английский. Твоя проблема в том, что ты его начинал учить и забросил, и теперь тебе некомфортно, а другие тебя спасать должны.
266 1050669
>>50628

>Один стандартизированный технарский язык это не так уж плохо и даже логично.


Никто не спорит. Печаль в том, что, скажем, в СССР существовало локальное сообщество IT с языками программирования на русском, ЭВМ на русском, всё на русском. Что от этого осталось? 1С? КуМир?..

>нейроперевод прям с самого начала


В браузерах автоперевод страниц много лет есть.

>>50638

>офигеваю над ленивым комьюнити


Перевести могут лишь те, кто уже знает английский, но перевод необходим лишь тем, кто его не знает... Предположим, для друга ты переведёшь, а зачем переводить для каких-то рандомных школьников?

>>50642
Верно. Хотя вместо английского пытались что-то изобрести с нуля, но те языки так и не взлетели.

>>50654

>забросил, зачем тогда вообще начинал?


99% игр не доходят до релиза по массе причин. Ты предлагаешь 99% начинающим не начинать? И так с абсолютно любым занятием человека. Не все люди рождены достигаторами, всегда идущими до конца. Перевод документации вообще бесконечен, пока разработка движка продолжается. Ты платил им за перевод? Нет? Тогда в чём твоя претензия сейчас?

>Берешь и облегчаешь вкат


Без английского вкат всё равно будет сложным. Как минимум потому, что языки программирования на английском. Или предлагаешь 1С в Godot встроить?

>английский с нуля - непосильная задача


В нормальных школах английский вторым языком начинают преподавать где-то в 5-6 классе, я думаю. Настолько молодым вкатунам Godot не по силам. А старикам за 50, которые немецкий учили в школе, наверное, вообще геймдев не интересен, либо они постараются выучить английский без нытья. Так-то программирование учить лучше на том же КуМире, особенно если ты английский ещё не знаешь...

>комфортнее прочитать на родном языке бегло


У меня вот были двойки-тройки в школе за уроки английского, но техническую документацию бегло просматривать мне проще на английском.

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

Например, у "anti-aliasing" официальный перевод в Википедии "экранное сглаживание", но я его так не называю никогда. И если в настройках игры увижу "экранное сглаживание", буду ломать голову. А вот недавно я ломал голову над словом "свечение" в переведённых настройках игры. Свечение чего?.. Источников света?.. Ааа, так это же "bloom", лол!..

Кстати, там на твоём скриншоте один язык долго болтался где-то внизу с остальными. Его подняли, видимо, по политическим причинам, где-то между концом 2024 и началом 2025. А один из носителей данного языка ведёт агрессивную борьбу против движка Godot - ненавидит и стремится уничтожить.
266 1050669
>>50628

>Один стандартизированный технарский язык это не так уж плохо и даже логично.


Никто не спорит. Печаль в том, что, скажем, в СССР существовало локальное сообщество IT с языками программирования на русском, ЭВМ на русском, всё на русском. Что от этого осталось? 1С? КуМир?..

>нейроперевод прям с самого начала


В браузерах автоперевод страниц много лет есть.

>>50638

>офигеваю над ленивым комьюнити


Перевести могут лишь те, кто уже знает английский, но перевод необходим лишь тем, кто его не знает... Предположим, для друга ты переведёшь, а зачем переводить для каких-то рандомных школьников?

>>50642
Верно. Хотя вместо английского пытались что-то изобрести с нуля, но те языки так и не взлетели.

>>50654

>забросил, зачем тогда вообще начинал?


99% игр не доходят до релиза по массе причин. Ты предлагаешь 99% начинающим не начинать? И так с абсолютно любым занятием человека. Не все люди рождены достигаторами, всегда идущими до конца. Перевод документации вообще бесконечен, пока разработка движка продолжается. Ты платил им за перевод? Нет? Тогда в чём твоя претензия сейчас?

>Берешь и облегчаешь вкат


Без английского вкат всё равно будет сложным. Как минимум потому, что языки программирования на английском. Или предлагаешь 1С в Godot встроить?

>английский с нуля - непосильная задача


В нормальных школах английский вторым языком начинают преподавать где-то в 5-6 классе, я думаю. Настолько молодым вкатунам Godot не по силам. А старикам за 50, которые немецкий учили в школе, наверное, вообще геймдев не интересен, либо они постараются выучить английский без нытья. Так-то программирование учить лучше на том же КуМире, особенно если ты английский ещё не знаешь...

>комфортнее прочитать на родном языке бегло


У меня вот были двойки-тройки в школе за уроки английского, но техническую документацию бегло просматривать мне проще на английском.

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

Например, у "anti-aliasing" официальный перевод в Википедии "экранное сглаживание", но я его так не называю никогда. И если в настройках игры увижу "экранное сглаживание", буду ломать голову. А вот недавно я ломал голову над словом "свечение" в переведённых настройках игры. Свечение чего?.. Источников света?.. Ааа, так это же "bloom", лол!..

Кстати, там на твоём скриншоте один язык долго болтался где-то внизу с остальными. Его подняли, видимо, по политическим причинам, где-то между концом 2024 и началом 2025. А один из носителей данного языка ведёт агрессивную борьбу против движка Godot - ненавидит и стремится уничтожить.
267 1050670
>>50669

>ведёт агрессивную борьбу против движка Godot - ненавидит и стремится уничтожить


Как и за многими шизами за ним было прикольно наблюдать. Похожее сейчас с UE5 происходит, только масштабнее. Некий техноблохир Threat Interactive натравил своих миньонов на даунвотинг всех UE5 игр в стиме. Индюки на реддите плачутся.

Наш годотовский, по сравнению с, просто милый беззубый малыш.
268 1050676
>>50670
Безыгорным нет покоя.
269 1050687
>>50229

> если хочешь портативности (опубликовать игру), рекомендую переписать нейронку на C++ и затем подключить её как GDExtension


This. Эхх, а так хотелось легкого пути.
Спасибо за советы, ананасы
270 1050730
>>50669
Можно сколько угодно маняврировать, но перевод это популяризация техи.
271 1050760
Что прикольно - работая с контекстным меню, например копируя-вставляя в редакторе материалы, ПКМ можно зажать, выбрать нужный элемент меню (copy), и отпустить - вместо кликанья ПКМ->ЛКМ. И так же на вставку. Охуенно. А еще драг-н-дроп работает на дубликацию, из слота в слот перетягиваешь и каеф.
272 1050783
Кто-нибудь юзал GDExtension для биндинга языков?

Я не понимаю, почему там всё так СЛОЖНО. Какие-то ГИГАНТСКИЕ имена переменных и типов - мне что, их придётся так и использовать всегда? Почему нельзя использовать встроенные переменные целевого ЯП? Память компьютера всё равно одинаковая же.

Я уже делал DLLки на Delphi/FreePascal и понимаю принципы их использования: DLL экспортирует свои функции, а EXE их импортирует через API системы. В GDExtension же происходит какой-то странный хаос - инициализация, деструкция, бла-бла-бла, 6 МБ json с непонятными данными, 170 Кб непонятный хэдер... Понаставили каких-то избыточных преград, имхо.

Всё, что я хотел добиться от Godot, это:
1. Вызвать dll = LoadLibrary("my.dll");
2. Вызвать my_func = GetProcAddress(dll, "MyFunc");
3. Позволить мне вызывать my_func() из GDScript;
4. Вызвать FreeLibrary(dll) перед закрытием игры.
ВСЁ! Буквально 4 строчки кода на любом языке.

Так почему я должен копаться в GDExtension?

Туториал для ньюфагов, кто не знал про DLL:
https://learn.microsoft.com/en-us/cpp/build/linking-an-executable-to-a-dll?view=msvc-170#how-to-link-explicitly-to-a-dll
Видите, всё чрезвычайно просто и понятно, так ведь?

А теперь сравните с тем, как юзать GDExtension:
https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_c_example.html
Я потерял смысл жизни за первые 5% этой страницы.

Кажется, что будет проще скачать исходники Godot и запилить велосипед, но что-то подсказывает, что создание встроенных модулей сделали ещё более сложным, чем тривиальное подключение DLL.

Есть объяснение этой проблеме? Без движкосрача.

Я использую Godot только из-за его простоты. И я надеялся, что GDExtension тоже будет крайне прост: подключился, используешь, отключился, легко же?

Алсо, в Godot есть класс OS:
https://docs.godotengine.org/en/stable/classes/class_os.html
Что им мешает сделать всего ТРИ функции:

>OS.load_library(path: String) -> int


>OS.get_proc_address(dlib_id: int, func_name: StringName) -> Callable


>OS.free_library(dlib_id: int) -> void


Это было бы чрезвычайно круто и очень просто.

Альтернативно, предлагаю класс DynamicLibrary:

>static DynamicLibrary.load(path: String) -> int # error


>DynamicLibrary.get_func(fname: StringName) -> Callable


>DynamicLibrary.free() # то же самое, что Object.free()


Почему этого всё ещё нет в GDScript? Это ж просто.

Извините за нытьё...
272 1050783
Кто-нибудь юзал GDExtension для биндинга языков?

Я не понимаю, почему там всё так СЛОЖНО. Какие-то ГИГАНТСКИЕ имена переменных и типов - мне что, их придётся так и использовать всегда? Почему нельзя использовать встроенные переменные целевого ЯП? Память компьютера всё равно одинаковая же.

Я уже делал DLLки на Delphi/FreePascal и понимаю принципы их использования: DLL экспортирует свои функции, а EXE их импортирует через API системы. В GDExtension же происходит какой-то странный хаос - инициализация, деструкция, бла-бла-бла, 6 МБ json с непонятными данными, 170 Кб непонятный хэдер... Понаставили каких-то избыточных преград, имхо.

Всё, что я хотел добиться от Godot, это:
1. Вызвать dll = LoadLibrary("my.dll");
2. Вызвать my_func = GetProcAddress(dll, "MyFunc");
3. Позволить мне вызывать my_func() из GDScript;
4. Вызвать FreeLibrary(dll) перед закрытием игры.
ВСЁ! Буквально 4 строчки кода на любом языке.

Так почему я должен копаться в GDExtension?

Туториал для ньюфагов, кто не знал про DLL:
https://learn.microsoft.com/en-us/cpp/build/linking-an-executable-to-a-dll?view=msvc-170#how-to-link-explicitly-to-a-dll
Видите, всё чрезвычайно просто и понятно, так ведь?

А теперь сравните с тем, как юзать GDExtension:
https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_c_example.html
Я потерял смысл жизни за первые 5% этой страницы.

Кажется, что будет проще скачать исходники Godot и запилить велосипед, но что-то подсказывает, что создание встроенных модулей сделали ещё более сложным, чем тривиальное подключение DLL.

Есть объяснение этой проблеме? Без движкосрача.

Я использую Godot только из-за его простоты. И я надеялся, что GDExtension тоже будет крайне прост: подключился, используешь, отключился, легко же?

Алсо, в Godot есть класс OS:
https://docs.godotengine.org/en/stable/classes/class_os.html
Что им мешает сделать всего ТРИ функции:

>OS.load_library(path: String) -> int


>OS.get_proc_address(dlib_id: int, func_name: StringName) -> Callable


>OS.free_library(dlib_id: int) -> void


Это было бы чрезвычайно круто и очень просто.

Альтернативно, предлагаю класс DynamicLibrary:

>static DynamicLibrary.load(path: String) -> int # error


>DynamicLibrary.get_func(fname: StringName) -> Callable


>DynamicLibrary.free() # то же самое, что Object.free()


Почему этого всё ещё нет в GDScript? Это ж просто.

Извините за нытьё...
273 1050784
>>50783

>класс DynamicLibrary


Не, без статика. Примерно вот так было бы:

>var dll = DynamicLibrary.new() # без загрузки


>dll.load("my.dll") # попытка загрузки


>if not dll.error: # успешно найдена и подключена


>_ var my_func: Callable = dll.get_func("MyFunc")


>_ if my_func: # если не null - нашли функцию


>_ _ result = my_func.call(arg1, arg2)


>_ dll.unload() # чтоб освободить память заранее


>dll.free() # если это потомок Object...


Остаётся только адаптировать под Linux (если вдруг понадобится написать игровой сервер на Godot), но, предполагаю, загрузка ".so" ничем не отличается.

GDExtension оставить для более сложных плагинов.
274 1050785
>>50783 >>50784
Поискал, кое-что нашлось.

Обсуждение предложения загружать DLL:
https://github.com/godotengine/godot-proposals/issues/1917
Недоделанный пулл-реквест:
https://github.com/godotengine/godot/pull/85741
Плагин GDExtension...
https://github.com/gilzoide/cffi-gdextension
...который подключает это:
https://github.com/libffi/libffi

>The libffi library provides a portable, high level programming interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run time.


Нужно попробовать...
275 1050786
>>50783

>Так почему я должен копаться в GDExtension


1) Ты не в курсе о соглашении о вызовах и существовании ABI
2) Ты не задумываешься, что цель GDExtension не просто загрузиться, а иметь представление о его классах Godot и уметь работать с ними
3) Ты смотришь пример на C - тут накладывается ещё один уровень усложнения, т.к. сам Godot написан на C++ и оперирует классами, а в Си их нет

Технически от Dll требуется только экспорт функция инициализации, но что ты потом будешь делать - неясно. В обычной ситуации в функции инициализации происходит регистрация новых классов, а у тебя не будет к этому доступа.
276 1050787
>>50785

>Нужно попробовать...


Явно не то что тебе нужно

Самое простое - на C++ написать GDExtension который даст в GDScript класс с нужными методами.

И вот вспомнил, если ты думаешь об одной ОС - винде, то можешь попробовать:

>OS.execute("rundll.32 my.dll,MyFunc arg1,arg2")


Надеюсь ты там не вирус делаешь
277 1050789
>>50786

>иметь представление о его классах Godot


Но зачем? Это ж library - библиотека функций. Я не собираюсь обращаться к функциям Godot изнутри библиотеки. Мне нужно наоборот, обращаться из GDScript к своему коду на каком-то другом языке.

>>50787

>Самое простое - на C++ написать


Не смог установить подходящий компилятор...

>OS.execute("rundll...


В таком случае проще будет написать классическую консольную утилиту и общаться с ней по "трубам"...

А что, идея-то вроде норм. Изучал эту тему - по идее, анонимные трубы будут по скорости не хуже прямого чтения/записи в оперативную память. Впрочем, если потребуется удалённое подключение, TCP лучше...

Ладно, нужно поэкспериментировать.
278 1050794
>>50789

>Не смог установить подходящий компилятор...


Может стоит разобраться?! Тогда есть возможность даже лучше, называется CustomModule, это почти как GDExt только больше возможностей и вшито в сам движок.
https://docs.godotengine.org/en/4.4/contributing/development/core_and_modules/custom_modules_in_cpp.html

Навскидку, нужно поставить:
- Python посвежее
- scons (после установки питона выполнить команду `pip install scons` кажется )
- VSCode как редактор, он поддерживает с++ из коробки
- Компилятор - или MS Studio Community или попробовать CLang установить

Если у тебя винда после 2019 года версии (10 или 11) там есть WSL - эмулятор колнсоли линукса, там по идее через неё можно поставить

В общем думой, как-бы что не нравилось, выходы только такие.

И умпомяну что есть биндинги и под другие языки - rust, Go, Dart и на самом деле много других, если тебе с чем-то будет легче может
279 1050795
>>50789
И ещё цикл видео о GDExt который много вопросов закрывает, от установки до примеров
https://www.youtube.com/watch?v=q2-dbwdTvck&list=PLhixpuPeRv9aDdsZbhTpsXguYRvMgyVQ-
280 1050797
>>50783

> Видите, всё чрезвычайно просто и понятно, так ведь?


> А теперь сравните с тем, как


> Есть объяснение этой проблеме?


Да есть. Типобезопасность. Потокобезопасность. Годот по моему опыту намного сложнее уронить с крошем на десктоп. Все эти сложности с ГДЕ ящитаю сделаны для того, чтобы по максимуму сделать так, чтобы у тебя крошнулось во время девелопа, чтобы крошнулось у тебя, а не у твоих игроков.
WTF-8 encoding.png15 Кб, 530x380
281 1050835
>>50794

>Python


>scons


Давно есть...

>VSCode


Не хочу...

>CLang


Не нашёл...

>rust, Go, Dart


C-подобные...

>>50797

>безопасность


В геймдеве?..
GzdLZjQWIAAMb18.jpeg82 Кб, 500x756
282 1050851
Игры-то делаете?
283 1050852
>>50851
Сижу на работе, пробую в свободную минуту начать хоть чета
Пока вот разбираюсь с базой, докуменатацию читаю когда ищу как че делать...
284 1050853
>>50852
Маладца. Начни с туториалов если еще не.
285 1050854
>>50851
У меня мотивация пропала. ХЗ, просто ушла куда-то. Тупо скроллю треды.
286 1050855
>>50853
Глянул один, но стараюсь всё дополнительно разбираться че да как
В туторе иногда не совсем ясно как именно что-то работает, нужно лезть и читать как функция работает какая-нибудь
Сделал вот в меню 2 кнопки и пустой лвл с камерой
Щас вот буду перса делать. Как я понял, нужно его сделать отдельной сценой и добавить скрипт ему просто
287 1050866
>>50854
Вчера вытянул мотивацию из какого-то рандомного чела.
Были покалывания в кончиках пальцев? Я прям перетянул мотивации вчера.
288 1050868
Самая крутая мотивация, ящитаю, это отзывы на предыдущие игры.
289 1050869
>>50851
Сколько то дней круглыми сутками кувыряю го вместо того, чтобы игорь писать. Нужда. На го может когда-нибудь смогу устроиться. Но так погано, пока этой херней страдаю забуду че у меня там как работает.
image.png273 Кб, 480x300
290 1050870
>>50869
Я секунд 30 не мог понять что ты про ЯП
Я подумал, что в эту байду гоняешь сутками
291 1050871
>>50869
Го благое дело, хотя бы потому что является частью нашего названия. И нам нем тоже игры делают. Иногда.

>>50870
Эта байда тоже полезна. Лудшая настолка.
292 1050873
>>50851
Ебашу как бульдозер
293 1050875
>>50871
У говна, нет ООП и нет проверки повторного включения файлов (проблема рекурсии лежит на программисте, лол), это хрень меньше всего подходит для разработки игр.
294 1050876
>>50851
Завис в 3D моделинге, теперь мне это нравится больше чем разработка игр, хотя делаю модели онли для игры.
295 1050878
>>50876
показывай модели
296 1050880
>>50875
Диды на ассемблере ебашили, а тебе тут бирочки-оборочки мешают. Записываю в очередные оправдания ничегонеделания.
298 1050883
>>50875
А если бек к игре? Например не чат, а гигачатище. Ну типа он как раз для бекендских задач.
gobestlang.png426 Кб, 770x478
299 1050884
>>50880
Ну, говно тоже можно съесть, никто не говорит что нельзя, но зачем?
300 1050885
>>50880

> Диды на ассемблере ебашили


Что они ебашили? Сказал А, говори Б. Сравни софт 80х и софт 2010х.
301 1050886
>>50883
У го есть зеленные треды и при этом парадигма одноцветных функций (встроенная асинхронщина, спрятанная под капотом). Для такого бэка он подходит очень хорошо.
302 1050887
>>50885
мимо писал на ассемблере
Что угодно в общем то, в 80х в основном был TUI (текстовый юзер интерфейс) и сейчас он встречается. А потом что, текстовые редакторы или кнопочки в браузере, которые потребляют ресурсы видеокарты а без неё нагружают процессор?!
image.png2,2 Мб, 1200x675
303 1050891
2025.08.29.mp44 Мб, mp4,
638x360, 1:06
304 1050894
>>50851

>Игры-то делаете?


Нет, я опять забросил.

29 августа наконец-то начал рефакторить лапшу в контроллере персонажа; ещё по-быстрому сделал замедление падения в воздухе; потом планировал реализовать наклоны с вращением через WASD... Вынужденно убрал прототип компаньона игрока - планировал сделать новую отдельную модельку.

Хочется заняться чем-то более существенным.

Как-то хочется сделать и обучить собственную специализированную языковую модель, но эти трансформеры зафлудили интернет совершенно бесполезными статьями о тупиковой архитектуре, повторять ошибки которой мне точно не хочется. Стандартные решения мне вообще не подходят.

Даже не знаю, как сформулировать свою задачу.
Непонятно, чего я хочу, но это вгоняет в тоску...
305 1050895
>>50894
Похоже на еще одну игру про атаку титанов. Мне нравилась одна такая много много лет назад.
306 1050898
>>50894
Попробуй создать лор к игре. Не факт что поможет, но это может возвратить к разработке старой игры.
307 1050914
>>50898
У меня с лором/сценарием/диалогами труднее всего идет. Даже музыку ляпать кое-как осилил.
308 1050915
>>50914
Без четкой идеи (не просто мысли "было бы круто", описанной во всех подробностях концепции) ты далеко не уедешь. Попробуй спиздить чужой концепт и подумать, что бы ты хотел сделать по другому. А если уж и с этим плохо, то ищи компашку из индюков, где будешь в роли программиста. Но этой так себе вариант, конечно
309 1050925
Кто-то с проблемой со звуком в вебе сталкивался? Чисто на некоторых мобильных устройствах звук лагает дико. Использую Sample и latency выкрутил на максимум, нихуя не помогло. 4.4.1
310 1050926
>>50925
При экспорте галочку Support Threads ставишь?
311 1050927
>>50926
Ставил, без изменений.
Причём только в этой игре так, в других всё ок было. Впервые вынес фон музыку в отдельную сцену, мб в этом проблема?
312 1050928
>>49034
Какие вопросы задает издатель во время переговоров? Как вообще с ними переговариваться?
313 1050929
>>50894

>Видео


Прикольно, но я не буду в это играть из-за персонажа. Если бы он был харизматичным и интересным, а так дешевка какая-то. Работай. Отечественный геймдев сам себя с колен не поднимет.
314 1050930
>>50882
Давай я тебе расскажу кое-что: Python в базовом исполнении как программа-интерпретатор написан C, потому он и называется высокоуровневым языком программирования, т.е когда ты используешь команды Python ты на самом деле используешь скомпилированные функции, написанные на C. Как бы такая надстройка. Базовое исполнение называется CPython (стандартный который ты скачиваешь в оф-сайта), есть еще Jython (написан на Java), IronPython (написан на .NET/C#). Т.е. по сути ты можешь сделать свой язык сам, создав собственно сам синтаксис и написав программу-интерпретатор к нему, если выучишь низкоуровневый язык программирования.
На создание низкоуровневого русского языка программирования у тебя уйдут десятилетия, и выхлоп будет не очень большой, поэтому этим никто не занимается.

Однако моя идея состоит в том, чтобы сделать набор функций, не привязанных к национальному языку - нейросеть, которая будет включать название функций на родном языке пользователя для оперирования ими. Нейросеть будет автоматизировать нейминг функций для языка. И делать это со 100% строгостью(без расхождений у разных пользователей). Допусти, для англа это будет start(), а для русского начать(), для турка başlat() и так далее. Чтобы русский смог прочитать код турка, нейросеть вернет команды в русский язык. Только так можно победить засилье гегемонии англосаксов в технологиях IT. Считаю что это первостепенная задача россиянина в этой эволюционной войне на выживание.

мимо

Платформа 1С и ее язык написаны на С++
315 1050931
Блять, не тому юшку дал
Фикс: >>50930 ----> >>50669
316 1050933
>>50930

>На создание низкоуровневого русского языка программирования у тебя уйдут десятилетия


Палю супер-имбу, которую можно сделать полностью на русском языке за неделю-другую расслабленного кодинга на ассемблере (если уже разбираешься в нужных темах), с производительностью как у чистого машинного кода и способностью собирать всё, что пожелаешь, как пожелаешь и из чего пожелаешь:
https://en.wikipedia.org/wiki/Forth_(programming_language)

>One of the early benefits of Forth was size: an entire development environment—including compiler, editor, and user programs—could fit in memory on an 8-bit or similarly limited system.


>The highest level of Forth code may resemble an English-language description of the application. Forth has been called a meta-application language: a language that can be used to create problem-oriented languages.


Спросил нейронку (DuckDuckGo):

>Are Forth language low-level?


>Forth is considered a low-level programming language because it operates closely to the hardware, allowing for direct manipulation of memory and efficient control of system resources. Its stack-based architecture and minimalistic design make it suitable for low-level programming tasks, especially in embedded systems.


Минусы языка? Это язык велосипедистов - и их велосипеды друг с другом несовместимы. Всё из-за чрезвычайной гибкости языка, в котором ничего кроме "слов" нет и можно переопределить даже символ, разделяющий слова. Программистов нужно держать под строгим контролем, иначе навелосипедят такое, что некому поддерживать...

>Нейросеть


Текущие языковые модели слишком ненадёжны для задач, где требуется точная передача смысла. Если в художественном тексте есть много пространства для манёвров - синонимов и иносказаний - то от программного кода любой адекватный человек ожидает чёткое следование заданным инструкциям, а не произвольную интерпретацию. Искусственные языки разрабатываются так, чтоб избежать любой двусмысленности (за редким исключением - не надо упоминать JS), тогда как в натуральных языках двусмысленность повсюду встречается, и в разных языках она разная. Короче, не нужно это. Оставь непредсказуемый вайб-кодинг тем, кому нравится бегать по граблям...

А когда нейронки станут очень умными и смогут писать чёткий код - программистами будут уже не люди, а машины, созданные людьми. Вот ты когда-нибудь задумывался, что такое "программатор"? Хотел бы забивать программу в память микроконтроллера ритмичным замыканием электрической цепи иголкой? Нет? Вот видишь, ты самостоятельно и безболезненно отказался от "профессии программатора". Так и от "программистов" избавимся...
316 1050933
>>50930

>На создание низкоуровневого русского языка программирования у тебя уйдут десятилетия


Палю супер-имбу, которую можно сделать полностью на русском языке за неделю-другую расслабленного кодинга на ассемблере (если уже разбираешься в нужных темах), с производительностью как у чистого машинного кода и способностью собирать всё, что пожелаешь, как пожелаешь и из чего пожелаешь:
https://en.wikipedia.org/wiki/Forth_(programming_language)

>One of the early benefits of Forth was size: an entire development environment—including compiler, editor, and user programs—could fit in memory on an 8-bit or similarly limited system.


>The highest level of Forth code may resemble an English-language description of the application. Forth has been called a meta-application language: a language that can be used to create problem-oriented languages.


Спросил нейронку (DuckDuckGo):

>Are Forth language low-level?


>Forth is considered a low-level programming language because it operates closely to the hardware, allowing for direct manipulation of memory and efficient control of system resources. Its stack-based architecture and minimalistic design make it suitable for low-level programming tasks, especially in embedded systems.


Минусы языка? Это язык велосипедистов - и их велосипеды друг с другом несовместимы. Всё из-за чрезвычайной гибкости языка, в котором ничего кроме "слов" нет и можно переопределить даже символ, разделяющий слова. Программистов нужно держать под строгим контролем, иначе навелосипедят такое, что некому поддерживать...

>Нейросеть


Текущие языковые модели слишком ненадёжны для задач, где требуется точная передача смысла. Если в художественном тексте есть много пространства для манёвров - синонимов и иносказаний - то от программного кода любой адекватный человек ожидает чёткое следование заданным инструкциям, а не произвольную интерпретацию. Искусственные языки разрабатываются так, чтоб избежать любой двусмысленности (за редким исключением - не надо упоминать JS), тогда как в натуральных языках двусмысленность повсюду встречается, и в разных языках она разная. Короче, не нужно это. Оставь непредсказуемый вайб-кодинг тем, кому нравится бегать по граблям...

А когда нейронки станут очень умными и смогут писать чёткий код - программистами будут уже не люди, а машины, созданные людьми. Вот ты когда-нибудь задумывался, что такое "программатор"? Хотел бы забивать программу в память микроконтроллера ритмичным замыканием электрической цепи иголкой? Нет? Вот видишь, ты самостоятельно и безболезненно отказался от "профессии программатора". Так и от "программистов" избавимся...
317 1050934
>>50930

>нейросеть вернет команды в русский язык. Только так можно победить засилье гегемонии англосаксов в технологиях IT. Считаю что это первостепенная задача россиянина в этой эволюционной войне на выживание.


Ну ты шиз чтоли? На русском кринжово писать, потому что язык для сухой передачи смыслов подходит херово. Русский это про охуевшее и потерявшее берега словообразование, речевые обороты и эмоциональный окрас, как под котиками. И многие языки так же этим грешат. Язык эмоций, а не логики. Английский же лучше подходит для логики. Глянь только переводы признанных классиков мировой литературы типа шекспира, где фразу типа He kiss her на русский переводят в 40 блядь слов, потому что иначе просто сухо. Так вот, эта сухость английского и его распространенность и делают его подходящим языком для технической литературы и для кода больше, чем другие языки. Даже забыв о русском на том же китайском китайцы ебали рот писать, хотя их так дохуища и они настолько дохуя айтишат, что россия со своими иванами пусть не самыми глупыми и претензией на вклад в айтишку вообще лучше бы не вякала, суньцзы++ искусство вайти. И это еще к индусам относится, на хинди не пишут, хотя индусы безоговорочные лидеры всей отрасли. Правда для образованных у них англ родной, в отличие от хинди.
Всех устраивает англ для всего, кроме нескольких идиотов. Перевод доков на другие языки как плюсик в карму, а не необходимость. И сейчас этот плюсик может сделать нейронка переведя весь док за минуту на все языки мира с меньшими косяками, чем у реальных людей.
318 1050935
>>50934

>на том же китайском китайцы ебали рот писать


https://en.wikipedia.org/wiki/Easy_Programming_Language
На китайской версии страницы больше информации о нём.
Гугли "易语言", если хочешь посмотреть скриншоты кода...
319 1050936
>>50935
А популярен? Великий нефритовый стержень на нем пишет? Вичат на чем? Вуконг? Дипсик?
320 1050937
>>50914

>У меня с лором/сценарием/диалогами труднее всего идет.


На мой взгляд, большинство игроков (судя по отзывам, форумам, обсуждениям, мемам и т.д.) пропускают сюжет игры и вообще не любят много читать. А большинство игр не отличаются особой глубиной сюжета, тем более инди. Так что делай увлекательный геймплей и старайся не грузить игрока лишними стенами текста, что только зря отвлекают от геймплея. Кроме того, многие истории можно передать элементами окружения - вообще без слов, так что не нужно быть Львом Толстым, достаточно уметь изображать на экране что-то узнаваемое. И помнить, что большинство игроков всё равно всё пропустят и не оценят твоих усилий... Игра - композиция из многих движущихся частей, и гармоничность этой композиции важнее качества проработки отдельных деталей.

>>50898

>может возвратить к разработке старой игры


Вопрос в том, а нужно ли вообще возвращаться?.. Меня всегда мучает проблема "а стоит ли этим вообще заниматься". Одно дело - когда ты получаешь удовольствие прям в процессе какого-то дела, как в случае с играми или сидением в интернете. Другое - стиснув зубы продираться сквозь унылую рутину и интеллектуально трудные задачи, и всё ради... Собственно, ради чего это делать? Одобрения? Славы? Денег? К чему мне всё это... Да и если бы хотел - мне никогда ничего не добиться, если смотреть на вещи реалистично.

>>50915

>Без чёткой идеи ты далеко не уедешь.


Без идеи можно сделать песочницу - что я и собирался изначально сделать, потому что люблю песочницы без сюжета, где можно часами ковыряться в песочке и не отвлекаться на лишние ничего не значащие в реальной жизни стены текста. А вот без реализации я точно никуда не уеду. Всё-таки плохой из меня программист... Как был любителем, так и останусь.

Если интересно, то лор игры на данный момент примерно такой:

1. Действие происходит на гигантском газовом торе, вращающемся вокруг звезды в виде чего-то среднего между газовой планетой и поясом астероидов. Он всегда таким был (в реальности из примерно похожих колец формируются планеты) и останется стабильным в обозримое время, но мощные потоки воздуха постоянно перемешивают всё, что попадает в атмосферу, а ядро горячее и плотное - всё перемалывает. В общем, тор собирает всё в себя и не отпускает.

2. У этого тора с древних времён своя особенная биосфера, приспособленная жить на куче раздробленных и постоянно перемешивающихся астероидов. В основном это растения, которые накапливают газ легче воздуха и взлетают в верхние слои атмосферы, унося на корнях клочки почвы и всё, что на них окажется. Долго они парить не могут, теряя газ и возвращаясь обратно в плотные и опасные слои атмосферы, замыкая цикл. Из животных могут быть только те, что умеют летать или парить в воздухе, перебираясь с острова на остров, или способные выжить в плотных слоях атмосферы. Некоторые обосновались с внешней стороны тора (в тени), которая более спокойная, но холодная, сырая и тёмная. Цивилизованных аборигенов никогда не было - биосфера хоть и стабильна, но слишком нищая и в вечном цикле саморазрушения. Многие животные - агрессивные паразиты в вечной борьбе за скудные ресурсы, но могут встречаться полезные и достаточно умные.

3. Всё это так или иначе привлекло много разведывательных кораблей и роботов-разведчиков со всей галактики/ближайшей вселенной, а кого-то просто по ошибке засосало из-за сбитого курса навигации, т.к. гравитационное поле системы необычное. Космические корабли быстро разносит в хлам. Из-за суровых местных условий гуманоиды погибают, а роботы изнашиваются, теряют контроль и отключаются. Это, в свою очередь, заполняет тор инородным искусственным хламом, как очень древним, так и всё ещё шевелящимся. Но абсолютное большинство машин нейтральны или дружелюбны, так что игрок может принять их на свою сторону, если сможет извлечь их из руин, починить и помочь им выжить. Также можно найти бортовые журналы, записки, сигналы о помощи и всё такое, что мы так любим собирать в каждой первой инди-песочнице про коллекционирование барахла.

4. А главным героем является серийная модель робота-разведчика с Земли, отправленная для исследования землеподобных планет и первого контакта с внеземными цивилизациями, так что это практически человек, только компактный (условно 5 кг весом). Короче, её тоже сбило с маршрута и засосало в этот тор, так что теперь её задачей является выжить, исследовать что есть и попытаться свалить. Корабль развалился от удара об астероид и поэтому приходится мастерить хоть что-то из имеющихся поблизости ресурсов. Также у неё есть базовые спутники-помощники, одна из которых регулярно спасает резиновую задницу героини от падения в пропасть, поэтому гейм овера в игре нет.

5. Если когда-нибудь будет мультиплеер: среди обломков можно найти аномальные камни, создающие портал в параллельную реальность. Если собрать устройство на дирижабле, то его целиком можно переместить в параллельный мир, вместе со всеми пассажирами. При этом локальная игра сохраняется без изменений, и даже если в PvP игрока полностью разгромили, возвращается он к локальному чекпойнту, и может снова выйти в мультиплеер на той же копии дирижабля. Но в случае успешного выхода, например, после кооперативной игры, игроки забирают в локальную игру свои достижения. Вряд ли когда-либо я до этого доберусь, но мне хотелось бы заранее заложить в игру кастомизацию: игрок может настраивать внешность персонажа, коллекционировать элементы одежды из хлама и всё такое - юбочки, колготочки, платья горничной, в общем всё, что чрезвычайно важно роботу-разведчику для маскировки среди инопланетян.

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

В остальном ты прав, анон - чёткой цели нет, только абстрактное "было бы круто".

>>50929

>из-за персонажа


Это плейсхолдер пока что. Стараюсь следовать принципам итеративной разработки: делать лишь необходимый минимум, чтобы протестировать задуманное на практике и скорректировать планы. Наверное, я бы мог сразу проработать персонажа целиком со всеми опциями кастомизации, но... зачем? И так работает. Главное, что я тестирую переключение анимаций и то, как это будет выглядеть на чём-то более детальном, чем примитивы. Прикрутил лицо к голове, например, чтоб протестировать блендшейпы и как вообще будет выглядеть 3D лицо с имеющейся камерой. До этого несколько лет она бегала совсем без лица - думал сделать 2D лицо как в ряде мультяшных игр, но мне не понравилось - поэтому оставил без лица. А ещё раньше использовал плейсхолдер из кубиков совсем без анимаций, лишь бы было видно пропорции человеческого тела... Я понимаю, что по видео нельзя сказать, что является плейсхолдером, а что - реализацией идеи, но я эти видео не для игроков записываю.

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

Вообще, главный герой изначально планировался как аватар игрока из ММОРПГ, то есть чтобы можно было всё подробно настраивать, а не только выбирать из пресетов. Но, поскольку я всё время теряю желание заниматься игрой, я до сих пор не дошёл до той стадии, когда можно делать настолько продвинутый редактор персонажа. И никогда не дойду такими темпами. Но это и не страшно. Главное не цель, а пройденный путь... Желательно с удовольствием. Делайте игры, только если вам нравится сам процесс создания игры, а не конечная цель, до которой мало кто дойдёт.
320 1050937
>>50914

>У меня с лором/сценарием/диалогами труднее всего идет.


На мой взгляд, большинство игроков (судя по отзывам, форумам, обсуждениям, мемам и т.д.) пропускают сюжет игры и вообще не любят много читать. А большинство игр не отличаются особой глубиной сюжета, тем более инди. Так что делай увлекательный геймплей и старайся не грузить игрока лишними стенами текста, что только зря отвлекают от геймплея. Кроме того, многие истории можно передать элементами окружения - вообще без слов, так что не нужно быть Львом Толстым, достаточно уметь изображать на экране что-то узнаваемое. И помнить, что большинство игроков всё равно всё пропустят и не оценят твоих усилий... Игра - композиция из многих движущихся частей, и гармоничность этой композиции важнее качества проработки отдельных деталей.

>>50898

>может возвратить к разработке старой игры


Вопрос в том, а нужно ли вообще возвращаться?.. Меня всегда мучает проблема "а стоит ли этим вообще заниматься". Одно дело - когда ты получаешь удовольствие прям в процессе какого-то дела, как в случае с играми или сидением в интернете. Другое - стиснув зубы продираться сквозь унылую рутину и интеллектуально трудные задачи, и всё ради... Собственно, ради чего это делать? Одобрения? Славы? Денег? К чему мне всё это... Да и если бы хотел - мне никогда ничего не добиться, если смотреть на вещи реалистично.

>>50915

>Без чёткой идеи ты далеко не уедешь.


Без идеи можно сделать песочницу - что я и собирался изначально сделать, потому что люблю песочницы без сюжета, где можно часами ковыряться в песочке и не отвлекаться на лишние ничего не значащие в реальной жизни стены текста. А вот без реализации я точно никуда не уеду. Всё-таки плохой из меня программист... Как был любителем, так и останусь.

Если интересно, то лор игры на данный момент примерно такой:

1. Действие происходит на гигантском газовом торе, вращающемся вокруг звезды в виде чего-то среднего между газовой планетой и поясом астероидов. Он всегда таким был (в реальности из примерно похожих колец формируются планеты) и останется стабильным в обозримое время, но мощные потоки воздуха постоянно перемешивают всё, что попадает в атмосферу, а ядро горячее и плотное - всё перемалывает. В общем, тор собирает всё в себя и не отпускает.

2. У этого тора с древних времён своя особенная биосфера, приспособленная жить на куче раздробленных и постоянно перемешивающихся астероидов. В основном это растения, которые накапливают газ легче воздуха и взлетают в верхние слои атмосферы, унося на корнях клочки почвы и всё, что на них окажется. Долго они парить не могут, теряя газ и возвращаясь обратно в плотные и опасные слои атмосферы, замыкая цикл. Из животных могут быть только те, что умеют летать или парить в воздухе, перебираясь с острова на остров, или способные выжить в плотных слоях атмосферы. Некоторые обосновались с внешней стороны тора (в тени), которая более спокойная, но холодная, сырая и тёмная. Цивилизованных аборигенов никогда не было - биосфера хоть и стабильна, но слишком нищая и в вечном цикле саморазрушения. Многие животные - агрессивные паразиты в вечной борьбе за скудные ресурсы, но могут встречаться полезные и достаточно умные.

3. Всё это так или иначе привлекло много разведывательных кораблей и роботов-разведчиков со всей галактики/ближайшей вселенной, а кого-то просто по ошибке засосало из-за сбитого курса навигации, т.к. гравитационное поле системы необычное. Космические корабли быстро разносит в хлам. Из-за суровых местных условий гуманоиды погибают, а роботы изнашиваются, теряют контроль и отключаются. Это, в свою очередь, заполняет тор инородным искусственным хламом, как очень древним, так и всё ещё шевелящимся. Но абсолютное большинство машин нейтральны или дружелюбны, так что игрок может принять их на свою сторону, если сможет извлечь их из руин, починить и помочь им выжить. Также можно найти бортовые журналы, записки, сигналы о помощи и всё такое, что мы так любим собирать в каждой первой инди-песочнице про коллекционирование барахла.

4. А главным героем является серийная модель робота-разведчика с Земли, отправленная для исследования землеподобных планет и первого контакта с внеземными цивилизациями, так что это практически человек, только компактный (условно 5 кг весом). Короче, её тоже сбило с маршрута и засосало в этот тор, так что теперь её задачей является выжить, исследовать что есть и попытаться свалить. Корабль развалился от удара об астероид и поэтому приходится мастерить хоть что-то из имеющихся поблизости ресурсов. Также у неё есть базовые спутники-помощники, одна из которых регулярно спасает резиновую задницу героини от падения в пропасть, поэтому гейм овера в игре нет.

5. Если когда-нибудь будет мультиплеер: среди обломков можно найти аномальные камни, создающие портал в параллельную реальность. Если собрать устройство на дирижабле, то его целиком можно переместить в параллельный мир, вместе со всеми пассажирами. При этом локальная игра сохраняется без изменений, и даже если в PvP игрока полностью разгромили, возвращается он к локальному чекпойнту, и может снова выйти в мультиплеер на той же копии дирижабля. Но в случае успешного выхода, например, после кооперативной игры, игроки забирают в локальную игру свои достижения. Вряд ли когда-либо я до этого доберусь, но мне хотелось бы заранее заложить в игру кастомизацию: игрок может настраивать внешность персонажа, коллекционировать элементы одежды из хлама и всё такое - юбочки, колготочки, платья горничной, в общем всё, что чрезвычайно важно роботу-разведчику для маскировки среди инопланетян.

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

В остальном ты прав, анон - чёткой цели нет, только абстрактное "было бы круто".

>>50929

>из-за персонажа


Это плейсхолдер пока что. Стараюсь следовать принципам итеративной разработки: делать лишь необходимый минимум, чтобы протестировать задуманное на практике и скорректировать планы. Наверное, я бы мог сразу проработать персонажа целиком со всеми опциями кастомизации, но... зачем? И так работает. Главное, что я тестирую переключение анимаций и то, как это будет выглядеть на чём-то более детальном, чем примитивы. Прикрутил лицо к голове, например, чтоб протестировать блендшейпы и как вообще будет выглядеть 3D лицо с имеющейся камерой. До этого несколько лет она бегала совсем без лица - думал сделать 2D лицо как в ряде мультяшных игр, но мне не понравилось - поэтому оставил без лица. А ещё раньше использовал плейсхолдер из кубиков совсем без анимаций, лишь бы было видно пропорции человеческого тела... Я понимаю, что по видео нельзя сказать, что является плейсхолдером, а что - реализацией идеи, но я эти видео не для игроков записываю.

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

Вообще, главный герой изначально планировался как аватар игрока из ММОРПГ, то есть чтобы можно было всё подробно настраивать, а не только выбирать из пресетов. Но, поскольку я всё время теряю желание заниматься игрой, я до сих пор не дошёл до той стадии, когда можно делать настолько продвинутый редактор персонажа. И никогда не дойду такими темпами. Но это и не страшно. Главное не цель, а пройденный путь... Желательно с удовольствием. Делайте игры, только если вам нравится сам процесс создания игры, а не конечная цель, до которой мало кто дойдёт.
321 1050939
>>50937

>Вопрос в том, а нужно ли вообще возвращаться?..


А что еще делать? Ну сядешь ты скроллить инет и игры играть - надоест снова и снова будет ощущение что ты протухаешь. И снова появиться желание в положительном созидании.

Что еще делать, найди другое хобби раз сжег все нервы на играх.
322 1050940
>>50914
Ну так как минимум уже создал отдельную вселенную с островами, значит не все так плохо с креативом.
323 1050941
>>50894
За полосатые трусы - респект))
Goodwin!!7eWTA3T6JgqVOa4V 324 1050942
>>50937

>1. Действие происходит на гигантском газовом торе...


Ну вот тебе и лор, ппц у тебя самокритика.

>Стараюсь следовать принципам итеративной разработки: делать лишь необходимый минимум


Мне думается ты выгораешь на минимумах. Представь игру в голове, поиграй в нее в голове, запиши ключевые моменты и только потом пробуй делать. На минимумах ты так и так будешь буксовать и в итоге игра будет ощущаться непосильным калом из плейсхолдеров и сплошных препятствий + незаконченных дел.
А так у тебя будет идеальная игра (цель) хотя бы в голове.
325 1050946
>>50927
Да блять, ебанный годот. Перенёс плеер в сцену с теми же настройками и всё заработало. Ну и хуита. Просто пиздос.
326 1050947
>>50946
Главное, что заработало
327 1050948
>>50947
Да, только я сцену перезапускаю, чтобы не прописывать логику перезапуска раунда. Из-за этого музыка заново начинается. Идея и была вынести в отдельную сцену, чтобы такого не происходило.
328 1050956
>>50948
У тебя отдельная сцена с музыкой (AudioStreamPlayer) в автозагрузке стоит (Синглтон), а сцену ты перезапускаешь через

> get_tree().reload_current_scene() ?

329 1050958
>>50956
Да. На Пк в вебе всё норм работает так, на мобилках в вебе сразу же лагает звук из этой сцены
330 1050960
>>50958
Если проблема только на некоторых мобилках, может их браузеры старые или памяти мало, хз тогда. Ну как вариант отказаться от reload_current_scene, это в принципе не сложно или потыкать что нибудь: порядок загрузки синглтонов, preload аудио файлов, поменять формат файлов mp3<>ogg
331 1050961
>>50958
А, ещё как вариант попробовать:

> get_tree().reload_current_scene.call_deferred()


мало ли
332 1050964
>>50960

> порядок загрузки синглтонов, preload аудио файлов, поменять формат файлов mp3<>ogg


Это делал уже всё, да, ничего не помогло.

>>50961

>get_tree().reload_current_scene.call_deferred()


Попробую, спасибо. Но в целом, перезагрузка музыки несильно мешает
333 1050989
Загадка:
В сцену динамически добавляются ноды, которые выполняют действия в зависимости от состояния одного из нод выше по дереву скажем, при наступлении time = night враги типа "вампир" получают бонус к атаке, а костры сжимают зону регена здоровья вокруг них. Таких сущностей много, обращаться к ним напрямую через get_node() геморно.

Окей ли передавать данные к таким дочерним узлам через сигналы, или есть более элегантный способ? Я потестил, ошибок такая связь не выкидывает, но в документации сигналы "сверху вниз" обозначены как bad practice, и я озадачен.
334 1050990
>>50989
При генерации нод добавь их в массив, потом лупом обновляй.
Да и сигналом норм тема, пусть при создании подпишутся и все. Но в таком случан меньше контроля доставки нужного.
335 1050992
>>50948

>только я сцену перезапускаю


Делаешь сцену game.tscn:

>Game: Node


>— Music: Player...


>— Level: Node...


Когда тебе нужно "перезапустить сцену":

>game.gd


>extends Node


>var level: Node


>func restart_level(path := "level.tscn") -> void:


>_ if level: level.queue_free()


>_ level = load(path).instantiate()


>_ add_child(level)


Должно работать без проблем.

Для красоты можно сделать так, например:

>level.gd


>extends Node


>signal restart_request()


>func _ready() -> void:


>_ restart_request.connect(


>_ _ get_parent().restart_level.bind(scene_file_path))


>...


>func...


>_ restart_request.emit()

336 1050995
>>50989

>Таких сущностей много, обращаться к ним напрямую через get_node() геморно


1) Можно обратиться к самой ноде выше в @onready/_ready самой сущности
2) Используй группы, т.е. вампирам и кострам просто назначь группу "TIME_DEPENDENT"
И в срипте изменения дня / ночи

> var td = get_tree().get_nodes_in_group("TIME_DEPENDENT") # Все ноды зависимые


> for td_node in td:


> if td_node.has_method("on_day_changed"): td_node.on_day_changed(var_daynight)



или более просто

> get_tree().call_group("TIME_DEPENDENT", "on_day_changed", var_daynight)

337 1050996
>>50989

>есть более элегантный способ?


Малоизвестная фича, хотя у неё целый GUI есть:
https://docs.godotengine.org/en/stable/tutorials/scripting/groups.html

>get_tree().call_group("vampires", "sucky_sucky_mode")


Только учитывай, что:
https://docs.godotengine.org/en/stable/classes/class_scenetree.html#class-scenetree-method-call-group

>Note: This method acts immediately on all selected nodes at once, which may cause stuttering in some performance-intensive situations.


В целях оптимизации, если у тебя сотни одинаковых сущностей, их стоит разбивать на маленькие группы, оповещая каждую группу на отдельном кадре/тике:

>func _process():


>_ var next_group := groups_to_call.pop_back()


>_ if next_group: # пустой массив => null = false


>_ _ get_tree().call_group(next_group, method_name)


Ну или что-то подобное, смотри по ситуации.

>сигналы "сверху вниз" обозначены как bad practice


Просто так с ними неудобнее работать... Родители щупают детей напрямую через get_children(), а вот родителям дети сообщают о событиях сигналами.

>get_node() геморно


Чем тебя не устраивает get_children()/get_child()?

>>50990

>потом лупом обновляй


Интуиция подсказывает, что вызов сигнала/метода группы будет дешевле отдельных вызовов в цикле, поскольку в первом случае цикл на C++, во втором - интерпретатор GDScript каждую итерацию бегает...

На практике разница может быть несущественной.
338 1051018
>>50992
>>50961
>>50960
>>50956
>>50947
Спасибо пачаны всем, я разобрался. Лагало потому что ссылку кидал себе в вк и открывал через вк. Я не ебу как это устроено, но игра открывалась во вкладке вк на телефоне. Стоило лишь скопировать ссылку и открыть её в гугле/яндексе и всё стало заебись. Я 3 дня боролся с проблемой, которой не было
339 1051020
>>51018

>во вкладке вк на телефоне


Игра открывалась через этот браузер:
https://en.wikipedia.org/wiki/WebView
На Android он часто устаревший/глючный.

Да и само приложение ВК может тормозить.
340 1051026
>>50996
группы годная вещь, однако контроля мало. Я группы использовал как признак максимум для проверки чего-то. А так собирал массивы всегда с ссылками на сгенерированные обьекты. Мб и медленее, яне замечал, но надежнее точно.
341 1051043
>>51026
А мне метадата нравится. Удобно пиздец.
1757141351896.png102 Кб, 863x681
342 1051045
>>51043
А мне нравится синглтон. Ещё удобнее.
343 1051052
>>51045
Да главное чтоб игра делалась, а не дроч кода
344 1051053
>>51052
Я так и не осилил, ни моделинг, ни риггинг, ни арт, ни звук. Вот и приходится дрочить код бессмысленно и беспощадно. Я проиграл.

> не делай сам, скачай бесплатно, сгенерируй нейронкой


Фу. Буэ.
345 1051055
>>51053

>модделинг


Лоу-поли делать очень быстро. Можешь начать с блокбенча

>риггинг


Римминг. Реально дело пару видео разобраться.

>арт


Качай паралелльно. Тут нужно много тренить рисовать стадики и все время обращать внимание на теор базу. Сама база не сложная, но красиво рисовать быстро не начнешь. Можешь применять теорию на простом арте типа вектора или пиксель-арте (именно простом векторе и простом пиксель арте).

> звук


качаешь звуки - генеришь в элевен лабс. Вот делать примитивные зыук и музыку - это вообще не сложно.

Везде речь идет не про высшие формы - аля 3д как в рдр или музыку как в синематиках. За год-два можно все выучить на среднем - начинающем уровне и делать гамесы
346 1051057
>>51055
С артом немного звездешь. Главная пропасть - перспектива. И единственный способ натренить до автомата это рисовать кубы с точками на горизонте. Талантом это не дается.
Поэтому лучше сразу в 3Д и текстуринг. Там бесплатная свето-тень и перспектива.

Про звук тоже, единственное наковыряешь из сэмплов если медведь в детстве ухо не сжувал.
347 1051058
>>51045
А мне сигнал басы.
348 1051059
>>51057
Перспектива - это элементарная херня. Точки рисуешь и к ним линии. Там сложно только в ебейших ракурсах. В арте сложно с формой - там основной дроч - но его можно упростить.
349 1051060
>>51053
Я на кубах делаю. Правда я и выбрал игру, где такое возможно, космическая тема, космические тела знаете ли. Это, конечно, печально, но зато так можно делать хоть что-то. Потом буду осторожно и скорее всего безуспешно пробовать лоуполи. А может и нет, посмотрим, пока что у меня времени нет совсем, чтобы полностью погрузиться в игру. А хочется.
350 1051063
>>51059
Да, конечно, расскажешь. Она элементарная в теории, а на практике когда у тебя объект сложной формы (не куб, да?) в пространстве - ты даже в векторе затрахаешь подгонять.
351 1051066
>>51059
Не, пчел выше прав, если ты в визуале ноль то лоу поли 3д самый доступный медиум для вкатуна. Главное не охуевать с анимациями. Рисовка сложнее, даже пиксельная.
352 1051083
чё-то пиздец пот погромировать на последних вопросах уже сыплюсь в упражниловке которая на сайте официальном
Видео-06-09-2025 162214.mp430,3 Мб, mp4,
1150x644, 0:46
353 1051086
Недавно кароч купил earth defense force 5 на распродаже, и она мне прям люто зашла, теперь хочу тоже что-то такое сделать, чтобы ммочишь орды монстров и повсюду куски мяса и кровь, но хз как это можно сделать не перегрузив компьютер, впрочем пока что вроде 100 болванчиков компик выдерживает. А пока что запилил какой никакой мувмент для игрока
354 1051090
>>51086
Ппц ты сделал игру на денди The Legend of Kage, у меня сейчас флешбеки накрыли, даже музыка почти такая же.

Жесть как матрица сбоит, столько разработчиков игр стала, что матрице приходится из NES игры доставать.
355 1051091
>>51086
СЮДА НАХУЙ КРЫСЫ ЕБАНЫЕ
356 1051092
>>51086
О, новый длц к Элден Рингу.
357 1051098
>>51086
О, джашная боевка самая лучшая, это мы играем.
358 1051100
https://godotengine.org/article/release-candidate-godot-4-5-rc-1/

Релиз кандидаты пошли. Скоро.
359 1051102
>>51100
Опять заново все учить...
360 1051111
Как в этом многоуважаемом движке можно сделать густую струю жидкости в 3д? Чтоб не шибко душно по производительности было. Партиклы ведь? Будьласковы, подскажите, чего почитать-посмотреть по ним кроме оф. доки, чтоб максимально быстро прийти к решению. Ищутся только всякие видосы и аддоны про симуляции, что для меня ту мач. Ну и, может быть, кто-то конкретно подскажет:
Какие там параметры крутить чтоб струя визуально на разделялась на отдельные частицы? Если увеличивать количество частиц, то какое количество можно считать потолком для лоу-энд целевых машинок?
Велика ли разница в производительности между лоу-поли объемной 3д мешкой и 2д билбордом для партикла?
Для лоу-энд машинок лучше использовать ГПУ или ЦПУ партиклы? В интернетах мнения разнятся.
GTA SA.gif804 Кб, 300x225
361 1051112
>>51111

>густую струю жидкости в 3д


Чего ты хочешь добиться геймплейно?

Если как в GTA SA, то, думаю, тут две части:
1. Изгибающийся процедурный меш с текстурой:
https://docs.godotengine.org/en/stable/tutorials/3d/procedural_geometry/immediatemesh.html
2. Брызги/пар, разлетающиеся от струи воды:
https://docs.godotengine.org/en/stable/tutorials/3d/particles/index.html
Также пригодится генерация шума:
https://docs.godotengine.org/en/stable/classes/class_noisetexture2d.html

>Для лоу-энд машинок


Зависит от того, что для тебя "лоу-энд"...
Всё сильно зависит от... всего. Тестируй сам.

Вот здесь пример с огнём: >>958103 →
362 1051113
>>51112

>Чего ты хочешь добиться геймплейно?


Вообще ничего. Это для декораций только. Красивые однородные густые струи нужны, которые будут выглядеть естестевенно. Спасибо за ссылки.
363 1051114
>>51113

>Это для декораций только.


Статичных или интерактивных?
Где-то далеко на фоне или вблизи?
Стилизованно или фотореалистично?

Если тебе нужно что-то вроде водопада, то:
1. Делаешь в Blender меш в форме водопада.
2. Пишешь свой шейдер (примеры не точные):
2.1. Внутри vertex() двигаешь вершины:

>float wave = sin(VERTEX.y + TIME); # бегущая волна


>VERTEX = VERTEX + vec3(wave, 0.0, wave);


2.2. Внутри fragment() двигаешь текстуру:

>ALBEDO = texture(noise, UV + vec2(TIME, 0)); # поток


3. Добавляешь пар и/или брызги частицами.
4. Долго подгоняешь параметры по вкусу...
Советую поискать визуальные референсы.

Про шейдеры читать тут:
https://docs.godotengine.org/en/stable/tutorials/shaders/index.html
Особенно это:
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shading_language.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shader_functions.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/spatial_shader.html

Совет. Прежде, чем писать свой шейдер:
1. Создай StandardMaterial3D в поле инспектора.
2. Выбери нужные настройки (см. uv1_triplanar).
3. В выпадающем меню жми "convert to shader".
4. Открой шейдер и правь его как пожелаешь.
Бояться шейдеров не стоит, тебе хватит простого.
Есть "визуальные" шейдеры - ИМХО, неудобные...
363 1051114
>>51113

>Это для декораций только.


Статичных или интерактивных?
Где-то далеко на фоне или вблизи?
Стилизованно или фотореалистично?

Если тебе нужно что-то вроде водопада, то:
1. Делаешь в Blender меш в форме водопада.
2. Пишешь свой шейдер (примеры не точные):
2.1. Внутри vertex() двигаешь вершины:

>float wave = sin(VERTEX.y + TIME); # бегущая волна


>VERTEX = VERTEX + vec3(wave, 0.0, wave);


2.2. Внутри fragment() двигаешь текстуру:

>ALBEDO = texture(noise, UV + vec2(TIME, 0)); # поток


3. Добавляешь пар и/или брызги частицами.
4. Долго подгоняешь параметры по вкусу...
Советую поискать визуальные референсы.

Про шейдеры читать тут:
https://docs.godotengine.org/en/stable/tutorials/shaders/index.html
Особенно это:
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shading_language.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/shader_functions.html
https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/spatial_shader.html

Совет. Прежде, чем писать свой шейдер:
1. Создай StandardMaterial3D в поле инспектора.
2. Выбери нужные настройки (см. uv1_triplanar).
3. В выпадающем меню жми "convert to shader".
4. Открой шейдер и правь его как пожелаешь.
Бояться шейдеров не стоит, тебе хватит простого.
Есть "визуальные" шейдеры - ИМХО, неудобные...
364 1051127
>>51086
Кароче, скачал плагин и адаптировал под свой проект. Теперь можно косплеить райдена из мгр
365 1051131
>>51127
Сделай как в старенькой Rune - возможность отрубить вражине руку/ногу, подобрать ее как оружие и опиздюлить еще живую вражину его же конечностью, пока он, немощный, уматывает от тебя заливая все вокруг кровью.
366 1051133
>>51131

>пока он, немощный, уматывает от тебя заливая все вокруг кровью.


Я лох, не смогу такое сделать не загадив проект на данном этапе. В будущем запилю всякие состояния на отрубленные конечности
367 1051134
>>51131
И это 99-2001 годы. С мультиплеерным режимом. Геймплей, который мы проебали.
368 1051154
Ребят, что делать с этой ебаной хуитой? В один момент годот на запуске начинает жаловаться на отсутствие файлов, которые на самом деле есть. Кнопка "fix dependencies" ничего не делает, проект дохнет.
Я из-за этой хуиты год или два как геймдев забросил, работать дальше хочется но в один момент любой новый проект опять ломается. Бекапил с гит но возврат к предыдущим коммитам ничего не чинит.
369 1051155
>>51154

>Я из-за этой хуиты год или два как геймдев забросил


А Blender стоит, прописан путь к нему в настройках Godot? (Настройки -> FileSystem -> Import)
Открой Pepe.tscn текстовым редактором, найди там по тексту pepe.blend, может что-то в глаза бросится, путь какой то или ещё что-то
Screenshot102.png17 Кб, 1233x124
370 1051157
>>51155

>А Blender стоит, прописан путь к нему в настройках Godot?


Конечно, я даже пробовал совсем от блендера отказаться и сразу в gltf экспортить, в один момент так же ломается.

>может что-то в глаза бросится, путь какой то или ещё что-то


Ничего неожиданного, правильный путь, присвоение id, дальше использование id в файле. Он ведь еще и на скрипты жалуется, а с ними что может быть не так то епрст, все на месте.

Как же это заебало.
371 1051158
Зачем внутри годота вообще бленд файлы запихивать? Я просто через глтф закидываю, ни разу проблем не было.
372 1051163
>>51157
А тебя у годота есть права на чтение вообще? Как он установлен? А у юзера?
373 1051164
>>51163
Как они могут исчезнуть? Что годот, что проект вне диска с виндой, запуск от администратора ничего не дает. Что еще тут можно сделать? Прописывал команду fsutil file setcasesensitiveinfo для дериктории проекта чтобы все содержимое проекта было чувствительно к регистру (когда-то напарывался), так что вариант с тем что годот воспринимает Pepe за pepe отпадает.
374 1051165
>>51164
Я на линух подумал, про винду нет предположений.
В линухе можно в контейнер запихнуть прилогу и она ваще нихуя дальше контейнера видеть не будет без особых извратов с правами на каждый чих, популярно у некоторых параноидальных извратов, сам годот так не распространяется канеш, но вдруг обернул в какой-нибудь флатпак.
Посмотри еще папку (хз где на винде) где годот хранит локальные настройки проектов. В линухе это был бы .local/share/godot вроде как, на винде какаянибудь AppData.
375 1051166
>>51154
Есть подозрение что uid говно от хуана сломалось. Попробуй свичнуться с юид на "путевЫе" ссылки, возможно починится. Сижу на пингвине годот3, вижу такое впервые, хотя проект ездит по гиту сразу по нескольким машинам. Мейби в какой-то момент перезаписались юиды у этих ресурсов, но в сцену эта перезапись не попала.
376 1051167
>>51154
Ну или сам попиздуй в директорию с этими ресами и посмотри на файл uid (хз как он называется, но он точно содержит в своем названии название ресурса, к которому он привязан), и там посмотри что прописано. Возможно есть маза с кодировками в файле сцены и в файле юид, они например почему-то разьебались. Или сам файл юид скорраптился.
Screenshot104.png1,8 Мб, 1594x1011
377 1051168
Короче, удалил все годотовское что смог найти и переоткрыл с долгим-долгим реимпортом и океаном красных сообщений в консоли и сукаааа, заработалоооооо. Сколько крови оно выпило. Год или полтора я не мог его открыть и вот оно наконец, бляяяяя. Я даже боюсь что-то сохранять сейчас опять все накроется.
378 1051169
>>51168
Таки выясни, что там произошло, заодно тред предупредишь.
379 1051171
>>51168
О, помню тебя. Велком бэк
380 1051172
Другой вопрос анон, нужно обновить железо. Я сижу на агрегате 2010-го года, соответсвенно никаких Cuda, Vulkan нет, я могу запустить редактор только в режиме совместимости, а значит не могу даже запечь свет просаживая фпс.
Может кто подскажет максимально бюджетный вариант обновления чтобы использовать базовые свистоперделки? Текущие параметры на картинках. Готов брать подержанное.

>>51171

>Велком бэк


Пасибо, я весь запал растерял из-за этого косяка.
381 1051173
>>51158
Они одинаково экспортируются, blend удобнее тем что сам Godot через блендер его превращает в gltf и тогда экспортирует

>>51168
ты бы обновился ещё на 4.4.1, всё же какие то баги фиксят, а у тебя вроде 4.2.2
382 1051175
>>51172
с такой мамашей тебе нихуя не светит. Найди какую-нибудь относительно свежую мать с am4 чтобы встали 4-5 тысячные рязани, тогда уж можно на что-то рассчитывать.
383 1051176
>>51172
Можешь рузен бюджетный взять, если ты в РФ сейчас неплохой момент для покупки железа благодаря курсу. А вообще есть /hw, там тебе соберут пеку.
384 1051178
Какие подводные у годота для 3D? Слышал что есть проблемы на множество объектов (мобов)?

1) Если правда, с чем это связанно в сравнение с другими движками?
2) Какие еще подводные есть?
385 1051180
>>51173

>ты бы обновился ещё на 4.4.1


Да вот не знаю как проект отреагирует. Едва ли оно спокойно откроется. Но да, там есть фичи которых не хватает, хотя бы типизированные словари.

>>51175

>с такой мамашей тебе нихуя не светит.


Да, наверно. Я даже хз насколько соотносится важность процессора к видюхе, но у меня в любом случае формфактом матери меньше стандартного и видеокарта побольше просто не влезет, да и этот 960T это лучшее что вообще нашел на am3.

>>51176

>А вообще есть /hw, там тебе соберут пеку.


Если для них понятна задача "бюджетный для геймдева".
386 1051187
>>51168
Это все потому что ты лягушонка заменил, вот он тебя и проклял.
387 1051190
Как же я обосрался (точней не я)

> var adr = read_byte() << 8 + read_byte()


Годот интерпретирует как

> var adr = read_byte() << (8 + read_byte())


т.е. у плюса больше порядок, чем у операции>>51180

>Да вот не знаю как проект отреагирует.


сдвига, хотя сдвиг это умножение

>>51180

>Да вот не знаю как проект отреагирует.


Ст авишь новую версию годота, делаешь резервную копию проекта, открываешь, он там скажет что надо под новый формат поменять (после 4.3 такое) и потребует перезапуск, профит
388 1051214
Накидал механику, которую давно откладывал. Идея заключается в том, что игроку нужно пять ресурсов:
- газ из листвы деревьев, без которого всё падает;
- древесина из деревьев, без которых всё падает;
- руды из почвы, без которой деревья улетают;
- разный лут из сундуков, редкие чертежи и т.п.;
- мобы, держащиеся на/возле самих островов.
Т.е. у игрока выбор: что собрать, а что улетит? Это, по задумке, должно разнообразить гринд ресурсов.

Давно чувствую, что зря взялся за жанр survival... Песочницы мне нравятся, выживать прикольно, но разрабатывать до играбельной стадии очень долго. Планировать архитектуру такого проекта сложно...

>>50940

>создал отдельную вселенную с островами


>>50942

>Ну вот тебе и лор, ппц у тебя самокритика


Вы хоть поняли, что ответили разным людям?

Это мои посты: >>50894 >>50937
Обычно они либо длинные, либо с видео.
Я тут более 5 лет, могли бы и узнавать...

А это пост другого анона: >>50914

>с лором/сценарием/диалогами труднее всего


Нет, у меня всё в порядке в этом плане - если нужно, нафантазировать лор/сценарий/диалог я могу без проблем, просто мне это НЕ НУЖНО. Ненавижу игры, заточенные на сюжет, ведь я играю в игры ради их интерактивного виртуального мира, а не фантазий сценаристов, что в "сюжетных" играх навязывают. Я лучше буду 1000 часов в GTA Online возить ящики по маршруту, чем слушать диалоги GTA V/IV/SA/VC/III...

>музыку ляпать кое-как осилил


Нет, я вообще никак не разбираюсь в музыке. Да и ненавижу музыку в играх, ведь она часто отвлекает, нарушает погружение в игру - так же, как и сюжет. Я предпочту играть в игру совсем без звуков чем если придётся слушать раздражающие звуки на повторе, доносящиеся из ниоткуда на сцене, где ничего нет (серьёзно, кто придумал эту "фоновую музыку"?)... Наихудший пример: Minecraft. Тишина-тишина... БУМ саундтрек в дикой глуши/глубоко в пешере. Зачем?!! Приходится эту музыку выключать в настройках.

>Мне думается ты выгораешь на минимумах


Ты не понял... Если бы я фокусировал свои силы на отдельном компоненте, у меня через какое-то время получился бы почти идеальный компонент, но игры вообще не было бы, даже недоделанной. Ну и зачем разрабатывать компонент без всего остального? Я стараюсь избавиться от своего перфекционизма, заставляющего ковыряться в одном компоненте до бесконечности, из-за чего целая игра не получается. Выгорание как раз происходит от фокусировки на полировании одного компонента игры до идеала.

>Представь игру в голове, поиграй в нее в голове


>будет идеальная игра (цель) хотя бы в голове


Я легко представляю себе игру, которую я не смогу реализовать в реальности; да никто не сможет. Это расстраивает, когда видишь, что в реальности всё значительно хуже получается. Т.е. в моём случае фантазирование лишь ухудшает настроение, когда осознаю, что этим фантазиям суждено оставаться бесплодными фантазиями. Это очень больно...

Ты-то сам новичок, я читаю твой тред иногда. А я в геймдев самоучкой вкатился около 16-17 лет назад, перекатился на Godot около 5.5 лет назад. Многое перепробовал и прочитал на тему геймдева...

Я, если что, один из немногих, кто реально старается помогать анонам в разных тредах, чаще всего Godot. Допускаю, что мои советы не всегда правильные...

>>50939

>снова будет ощущение что ты протухаешь


Всё именно так, потому и возвращаюсь к играм.

>найди другое хобби раз сжег все нервы на играх


Да я пытался, только у меня других навыков нет.

>>50941

>полосатые трусы


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

>>50895

>игру про атаку титанов


Не знаю, про что ты, какая-то официальная? Игр про "grappling gun" на самом деле очень много, особенно новичковых проектов, где кроме него ничего нет. Я реализовывал свою версию с нуля, только какую-то формулу для стимуляции изгиба где-то подсмотрел. Кажется, это называется "verlet integration". У меня багнутая версия, правда, надоело в ней копаться.

>>51154

>возврат к предыдущим коммитам


Откатывай в новую папку или удаляй /.godot/. Вся информация в этой папке генерируется заново из имеющихся файлов проекта, поэтому она никак в репозитории не хранится. Но если ты хочешь откат, необходимо удалить старые файлы в /.godot/, иначе получится, что у тебя файлы проекта расходятся со сгенерированными редактором файлами. Это всё нормально и нужно понимать в самом начале.

>>51168

>переоткрыл с долгим-долгим реимпортом


Это всё из-за .blend -> .gltf. Объясняю: внутри .blend анимации хранятся сжато, а в .gltf Blender их должен покадрово запечь и оптимизировать, на что уходит достаточно долго времени. Тем более у тебя старый процессор, а задача эта выполняется в один поток. Поскольку папку /.godot/ нужно сбрасывать, лучше использовать формат .gltf вместо .blend - так Godot значительно быстрее импортирует проект заново.

>>51180

>Да вот не знаю как проект отреагирует


Копируешь папку "My Game" в "My Game (копия)" и открываешь "(копия)" в Godot. Если не получилось и захотелось откатиться назад - просто удаляешь эту скопированную папку и всё. Если получилось, тогда удаляешь оригинальную папку. Никаких проблем. Встроенный менеджер проектов не использую, но, кажется, там отдельная кнопка "скопировать" есть.

>>51172
На счёт компьютера: твоя видеокарта вроде может поддерживать версию Vulkan до 1.2, но у тебя там устаревший драйвер, в котором только Vulkan 1.0. Официально GT 630 больше не поддерживается, но возможно установить драйвер 474, там Vulkan 1.2. Возможно, он будет глючным - то 472 или старше... Страница скачивания показывает версии карт, что официально поддерживаются версией драйвера.

Если будешь обновлять видеодрайвер, то заранее скачивай несколько версий. Ставишь самую новую, перезагружаешься, тестируешь тяжёлой игрой. Если Windows не падает с BSOD - радуешься, если падает, откатываешься на версию драйвера чуть постарше. Возможно, тебе придётся перезапускать Windows в безопасном режиме, но это всё несложно. Всего за несколько дней найдёшь оптимальный драйвер...

Процессора достаточно для Godot 4.4.1, но с 4.5 x64 потребуется набор инструкций SSE4.2, а значит твой процессор не запустит Godot 4.5 x64. Но ты можешь использовать Godot 4.5 x32 или собрать Godot из исходников без SSE4.2. Подробнее читай на GitHub.

Если хочешь купить самый дешёвый компьютер с поддержкой Godot - смотри на наборы инструкций процессора (SSE4.2 теперь обязателен, но заранее желательно иметь AVX2) и поддержку Vulkan. По оперативной памяти 8 GB пока хватает, а по видео желательно минимум 2-4 GB, но больше - лучше.

Алсо, если собирать, то лучше на AM5. Как я понял, ценники на AM4 не сильно ниже, а характеристики значительно слабее и нового ничего не выйдет. У оперативной памяти DDR5 скорость раза в 2 выше. Современный софт упирается в горлышко памяти - мощные процессоры простаивают в ожидании.

С другой стороны, сохрани текущий компьютер в относительно рабочем состоянии, чтоб тестировать оптимизации в своей игре. А то потом будут игроки жаловаться, что на их "2 гига 2 ядра" всё тормозит. Поэтому собирать новый комп в новом корпусе, с отдельным блоком питания и новым SSD под ОС.

Сам я хочу купить мини-пк на AMD AI MAX+ 395... Но, наверное, подожду, пока цены спадут. Может быть, вообще подожду Medusa Halo в конце 2027? Лол. Не хочется переплачивать за хайп в первый год релиза. Текущий ПК из 2007 устраивает, так зачем менять... Только ради запуска мощных нейронок локально...

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

...не обращайте внимания, у меня опять эта фаза...

Решил пока ждать до ноябрьской распродажи...
388 1051214
Накидал механику, которую давно откладывал. Идея заключается в том, что игроку нужно пять ресурсов:
- газ из листвы деревьев, без которого всё падает;
- древесина из деревьев, без которых всё падает;
- руды из почвы, без которой деревья улетают;
- разный лут из сундуков, редкие чертежи и т.п.;
- мобы, держащиеся на/возле самих островов.
Т.е. у игрока выбор: что собрать, а что улетит? Это, по задумке, должно разнообразить гринд ресурсов.

Давно чувствую, что зря взялся за жанр survival... Песочницы мне нравятся, выживать прикольно, но разрабатывать до играбельной стадии очень долго. Планировать архитектуру такого проекта сложно...

>>50940

>создал отдельную вселенную с островами


>>50942

>Ну вот тебе и лор, ппц у тебя самокритика


Вы хоть поняли, что ответили разным людям?

Это мои посты: >>50894 >>50937
Обычно они либо длинные, либо с видео.
Я тут более 5 лет, могли бы и узнавать...

А это пост другого анона: >>50914

>с лором/сценарием/диалогами труднее всего


Нет, у меня всё в порядке в этом плане - если нужно, нафантазировать лор/сценарий/диалог я могу без проблем, просто мне это НЕ НУЖНО. Ненавижу игры, заточенные на сюжет, ведь я играю в игры ради их интерактивного виртуального мира, а не фантазий сценаристов, что в "сюжетных" играх навязывают. Я лучше буду 1000 часов в GTA Online возить ящики по маршруту, чем слушать диалоги GTA V/IV/SA/VC/III...

>музыку ляпать кое-как осилил


Нет, я вообще никак не разбираюсь в музыке. Да и ненавижу музыку в играх, ведь она часто отвлекает, нарушает погружение в игру - так же, как и сюжет. Я предпочту играть в игру совсем без звуков чем если придётся слушать раздражающие звуки на повторе, доносящиеся из ниоткуда на сцене, где ничего нет (серьёзно, кто придумал эту "фоновую музыку"?)... Наихудший пример: Minecraft. Тишина-тишина... БУМ саундтрек в дикой глуши/глубоко в пешере. Зачем?!! Приходится эту музыку выключать в настройках.

>Мне думается ты выгораешь на минимумах


Ты не понял... Если бы я фокусировал свои силы на отдельном компоненте, у меня через какое-то время получился бы почти идеальный компонент, но игры вообще не было бы, даже недоделанной. Ну и зачем разрабатывать компонент без всего остального? Я стараюсь избавиться от своего перфекционизма, заставляющего ковыряться в одном компоненте до бесконечности, из-за чего целая игра не получается. Выгорание как раз происходит от фокусировки на полировании одного компонента игры до идеала.

>Представь игру в голове, поиграй в нее в голове


>будет идеальная игра (цель) хотя бы в голове


Я легко представляю себе игру, которую я не смогу реализовать в реальности; да никто не сможет. Это расстраивает, когда видишь, что в реальности всё значительно хуже получается. Т.е. в моём случае фантазирование лишь ухудшает настроение, когда осознаю, что этим фантазиям суждено оставаться бесплодными фантазиями. Это очень больно...

Ты-то сам новичок, я читаю твой тред иногда. А я в геймдев самоучкой вкатился около 16-17 лет назад, перекатился на Godot около 5.5 лет назад. Многое перепробовал и прочитал на тему геймдева...

Я, если что, один из немногих, кто реально старается помогать анонам в разных тредах, чаще всего Godot. Допускаю, что мои советы не всегда правильные...

>>50939

>снова будет ощущение что ты протухаешь


Всё именно так, потому и возвращаюсь к играм.

>найди другое хобби раз сжег все нервы на играх


Да я пытался, только у меня других навыков нет.

>>50941

>полосатые трусы


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

>>50895

>игру про атаку титанов


Не знаю, про что ты, какая-то официальная? Игр про "grappling gun" на самом деле очень много, особенно новичковых проектов, где кроме него ничего нет. Я реализовывал свою версию с нуля, только какую-то формулу для стимуляции изгиба где-то подсмотрел. Кажется, это называется "verlet integration". У меня багнутая версия, правда, надоело в ней копаться.

>>51154

>возврат к предыдущим коммитам


Откатывай в новую папку или удаляй /.godot/. Вся информация в этой папке генерируется заново из имеющихся файлов проекта, поэтому она никак в репозитории не хранится. Но если ты хочешь откат, необходимо удалить старые файлы в /.godot/, иначе получится, что у тебя файлы проекта расходятся со сгенерированными редактором файлами. Это всё нормально и нужно понимать в самом начале.

>>51168

>переоткрыл с долгим-долгим реимпортом


Это всё из-за .blend -> .gltf. Объясняю: внутри .blend анимации хранятся сжато, а в .gltf Blender их должен покадрово запечь и оптимизировать, на что уходит достаточно долго времени. Тем более у тебя старый процессор, а задача эта выполняется в один поток. Поскольку папку /.godot/ нужно сбрасывать, лучше использовать формат .gltf вместо .blend - так Godot значительно быстрее импортирует проект заново.

>>51180

>Да вот не знаю как проект отреагирует


Копируешь папку "My Game" в "My Game (копия)" и открываешь "(копия)" в Godot. Если не получилось и захотелось откатиться назад - просто удаляешь эту скопированную папку и всё. Если получилось, тогда удаляешь оригинальную папку. Никаких проблем. Встроенный менеджер проектов не использую, но, кажется, там отдельная кнопка "скопировать" есть.

>>51172
На счёт компьютера: твоя видеокарта вроде может поддерживать версию Vulkan до 1.2, но у тебя там устаревший драйвер, в котором только Vulkan 1.0. Официально GT 630 больше не поддерживается, но возможно установить драйвер 474, там Vulkan 1.2. Возможно, он будет глючным - то 472 или старше... Страница скачивания показывает версии карт, что официально поддерживаются версией драйвера.

Если будешь обновлять видеодрайвер, то заранее скачивай несколько версий. Ставишь самую новую, перезагружаешься, тестируешь тяжёлой игрой. Если Windows не падает с BSOD - радуешься, если падает, откатываешься на версию драйвера чуть постарше. Возможно, тебе придётся перезапускать Windows в безопасном режиме, но это всё несложно. Всего за несколько дней найдёшь оптимальный драйвер...

Процессора достаточно для Godot 4.4.1, но с 4.5 x64 потребуется набор инструкций SSE4.2, а значит твой процессор не запустит Godot 4.5 x64. Но ты можешь использовать Godot 4.5 x32 или собрать Godot из исходников без SSE4.2. Подробнее читай на GitHub.

Если хочешь купить самый дешёвый компьютер с поддержкой Godot - смотри на наборы инструкций процессора (SSE4.2 теперь обязателен, но заранее желательно иметь AVX2) и поддержку Vulkan. По оперативной памяти 8 GB пока хватает, а по видео желательно минимум 2-4 GB, но больше - лучше.

Алсо, если собирать, то лучше на AM5. Как я понял, ценники на AM4 не сильно ниже, а характеристики значительно слабее и нового ничего не выйдет. У оперативной памяти DDR5 скорость раза в 2 выше. Современный софт упирается в горлышко памяти - мощные процессоры простаивают в ожидании.

С другой стороны, сохрани текущий компьютер в относительно рабочем состоянии, чтоб тестировать оптимизации в своей игре. А то потом будут игроки жаловаться, что на их "2 гига 2 ядра" всё тормозит. Поэтому собирать новый комп в новом корпусе, с отдельным блоком питания и новым SSD под ОС.

Сам я хочу купить мини-пк на AMD AI MAX+ 395... Но, наверное, подожду, пока цены спадут. Может быть, вообще подожду Medusa Halo в конце 2027? Лол. Не хочется переплачивать за хайп в первый год релиза. Текущий ПК из 2007 устраивает, так зачем менять... Только ради запуска мощных нейронок локально...

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

...не обращайте внимания, у меня опять эта фаза...

Решил пока ждать до ноябрьской распродажи...
389 1051215
>>51187

> вот он тебя и проклял


Его прокляло то, что он вместо блокинга КАК Я И МНОГИЕ АНОНЫ ЕМУ СОВЕТОВАЛИ, полез импортировать кучу ВСЖ-ассетов. Результат немного предсказуем. Дизайните уровни блокингом, отрабатывайте механики, а потом уже завозите контент. И резервные копии делайте! И перемещайте файлы только редактором!
390 1051216
>>51214
Хорошо расписал, спасибо большое, я как полез в /hw и на сайт днс вообще потерялся, что брать и к какому ценнику гатовиться вообще непонятно.
Из-за набора инструкций процессора да, у меня уже не запускает новый блендер.

>>51215

> полез импортировать кучу ВСЖ-ассетов


Хз что такое ВСЖ. Там половина ассетов мои, вторая половина собрана из чужих наработок, но каждая моделька обрабатывалась вручную.
391 1051221
Как бы вы реализовали функцию для ai, которая обнаруживает другого игрока в радиусе, доступным для стрельбы, если это worms-like игра, и у снаряда есть гравитация? Грубо говоря у снаряда есть (пик 1 и пик 2), оружие заряжается, и имеет угол стрельбы(пик 3) ну и у оружия есть максимальная и минимальная сила заряда (пик 4)
392 1051222
Окей, миграция на 4.4.1, внезапно, прошла гладко, хоть какие-то элементы интерфейса немного съехали и фпс скачет между 10 и 50. Заодно переписал последний скрип с шарпа на гдскрип и полностью перешел на безмоновский годот.

Появилась идея не конструировать пк с нулины а обновить плату + карту + цпу. Текущая имеет формфактов Micro-ATX, видеокарта скорее всего влезет в старый корпус, а вот охлаждение цпу даже не знаю.

Анон, не знаешь какую-площадку где можно модели заказывать чтобы из РФ оплачивать можно было? Фурнитуру я и сам намоделю, но персонажи это не мое. Заказал бы чего под SH3 или 4
393 1051223
>>51216

> что такое ВСЖ


Спроси у своего ИИ-ассистента.
394 1051225
>>51223
У меня нет ИИ ассистента.
395 1051227
>>51225
Плохо-плохо. Лет ми аск май ассистент зат фо ю.
396 1051228
>>51222

>чтобы из РФ оплачивать можно было


С этим до сих пор все плохо. Либо российские площадки (дорогие, хуевые, дохлые), либо крипта (мало кто берет), либо обойти санкции и сгонять в Казахстан/Грузию чтобы банк открыть. Слышал есть сервисы которые делают последнее за тебя, удаленно, но хуй знает про доверие. Сам пользуюсь третьим способом, через иностранный банк.
397 1051240
>>51214

>значительно слабее и нового ничего не выйдет. У оперативной памяти DDR5 скорость раза в 2 выше


Скорее латенси в 2 раза выше. А планки без этой проблемы стоят в 3 раза больше чем ддр4.

Ну и новые мамки по цене разумеется не сильно ниже, но вот свежие процы уже сильно выше чем ам4 процы. Так что если цель на апгрейде не сильно потратиться, иметь pci куда входят свежие карточки - лучше собирать на чем-то стабильно рабочем пусть и прошлого поколения.

>Только ради запуска мощных нейронок локально...


>Как же хочется запускать модельки оффлайн. Ещё и тренировать что-нибудь интересное можно было бы, наверное.



Ахах, на проце тренировать? С дуба рухнул? Какой бы там проц нейро аи хуи ультра максима не был - он с заглотом возьмет даже у 3060. Хочешь текстовые нейронки (а уж тем более тренировать) - скупай по ебеям 3090 и собирай ферму.
398 1051246
>>51222

>переписал последний скрип с шарпа на гдскрип


Зря. Тем более раз уже начинал на шарпе, потому что в обратную сторону все равно придется переписывать, если игра до релиза дойдет. Имаджинируй свое ебало, когда релизную портянку кода придется на шарп мигрировать.
399 1051247
>>51246
Чего за тупые набросы? Три игры в релизе, одна приносит ок деньги, ничего на шарпе нет. Если ты не пишешь еба-числодробилки, а он явно не пишет, то гдскрипт идеален. А для числодробилок все равно лучше на плюсах кусок переписать, а не на шарпе.
400 1051252
>>51247
Пишу еба архитектуро-дробилки, шарп лучший. Но да, не призываю, кто как хочет.
401 1051253
>>51247
Дело не в этом, хотя как бонус как бы тоже лучше пусть будет, чем его не будет. Даже не влезая в реальную киллерфичу шарпа над гдскриптом (не скорость и не ооп, ничто из очевидного) - при прочих равных если похуй на синтаксис языка, его возможности и выразительность - брать гдскрипт нет ниодного плюса, тот анон выше сделал литерали даунгрейд ненужный.
402 1051254
>>51253
В четверке гдс работает не с гднатив апи, а с более низкоуровневым, за счёт чего обращения к движку дешевле. Если есть план просто юзать движок и не изобретать какие нибудь йоба колеса колдуя напрямую с апи движка без нод и скриптов и без желания сильно чето архитектурить - шарп только проблемы создает. Захочешь с++ модуль всунуть - будь добр пересобери моно привязки, я на этом сломался в 3 годоте, эта хуйня просто не хотела под васм собираться. В 4 годоте возможно проще но на мобилках (на правах слухов) есть неочевидные проблемы, с которыми есть риск столкнуться при массовом релизе.
403 1051258
Напомню реальную статистику по языкам в годоте. Пик 1 - 2024, пик 2 - 2025.
404 1051260
>>51258
Надо убрать из этой статистики безигорников и прочих твг/джемо серунов, тогда будет интереснее. Там есть еще один график где видно что процентов 70 из всех годот юзеров по факту безигорки.
405 1051263
>>51260
Тогда любителей вылизывать яйца, по сотне раз переписывая с языка на язык и воюя с мультиплеерными антипаттерными синглтоновыми кнопками точно выкинуть стоит - эти так и помрут ничего не релизнув. У джемосерунов хоть что-то есть.
406 1051264
>>51263
Так и их тоже. Только релизеров платных вылизанных игр ну или крутых джемов типа блендерского dogwalk.
407 1051271
>>51264

>dogwalk


Который, кстати, и сам на гдскрипте.
408 1051277
>>51246

>Имаджинируй свое ебало, когда релизную портянку кода придется на шарп мигрировать.


Мое ебало достаточно крючило когда я писал в годот на шарпе с
https://github.com/godotengine/godot/issues/78513
залупой в устранении которой с выхода годот 4 ни на шаг не продвинулись. Посему было принято решение переписать проект в гдскрипт.
409 1051280
>>51277
Да это ли страх. У меня годот 3 моно на пингвине рандомно вылетает при ребилде проекта раз на 5-15 ребилдов по непонятной причине (монокраш) и в целом похуй, жить можно. Главное сейвиться перед ребилдом (годот сам всё автосейвит)
410 1051293
>>51258
>>51277
Шарпы в хрюньке тоже моно огрызок. Дотнет, конечно, хорошая теха, но что он делает в геймдеве я не понимаю.
Имхо, лучше был какой-то js/ts
411 1051294
>>51293
Можешь срыгнуть на cocos, там как раз всё что нужно есть.
412 1051299
>>51294
Подумываю забить на геймдев и сделать узкоспецифичный движок - прикрутив lua или js. Оказалось разбираться в том как все работает куда интереснее чем двигать спрайты для стимпомойки.
413 1051301
>>51299
Успехов на кладбище никому ненужных движков, на котором ничего никогда не выйдет. Я такое сообщение каждый день вижу, но не вижу движков, а игр тем более
414 1051303
>>51299

>прикрутив lua


Defold существует.
415 1051305
>>51240

>Ахах, на проце тренировать?


Ты ничего кроме transformer никогда не видел?

>он с заглотом возьмет даже у 3060


https://technical.city/en/video/GeForce-RTX-3060-vs-Radeon-8060S
1. RTX 3060: 12 GB (360 GB/s), 170 W, 38 попугаев.
2. Встройка: 96 GB (256 GB/s), 55 W, 40 попугаев.

>скупай по ебеям 3090 и собирай ферму


https://technical.city/en/video/GeForce-RTX-3090-vs-Radeon-8060S
1. RTX 3090: 24 GB (936 GB/s), 350 W, 60 попугаев.
2. Встройка: 96 GB (256 GB/s), 55 W, 40 попугаев.

Вывод: встройка топ, если не нужно греть воздух.
416 1051306
>>51221

>worms-like игра, и у снаряда есть гравитация


1. Берёшь позиции врагов из списка врагов.
2. Строишь траектории снарядов до каждого.
3. Отбрасываешь плохие траектории (в стену).
4. Из оставшихся, выбирай самую слабую цель.
Если целей не осталось - бери рандомную.

Можно ещё добавить приоритет на толпу...
417 1051307
>>51301

>Успехов на кладбище никому ненужных движков, на котором ничего никогда не выйдет. Я такое сообщение каждый день вижу, но не вижу движков, а игр тем более


О, я даже не думаю что это будет когда-нибудь product ready.
418 1051308
>>51293 >>51299 >>51307
Главное, чтобы тебе самому приятно было. Всё-таки геймдев - это всего лишь игра. А игры должны всем приносить удовольствие. Так нейронка сказала...
419 1051310
>>51307
Ты лучше бы не занимался этой хуйней. Погоняй спрайтики лучше - хоть выхлоп будет. Поверь, уже есть движок для твоей игры
image.png3,4 Мб, 1024x1536
420 1051315
>>51308

>Так нейронка сказала...


Ну раз нейронка, ок

>>51310

>Поверь, уже есть движок для твоей игры


Кто-нибудь тут копался в коде годота? Какие впечатления?
421 1051316
>>51305

>1. RTX 3060: 12 GB (360 GB/s), 170 W, 38 попугаев.


>2. Встройка: 96 GB (256 GB/s), 55 W, 40 попугаев.


Нахуй твоих попугаев. Как ты думаешь, почему под иишку берут строго нвидию до сих пор? Сколько бы там попугаев не рисовали, оно будет медленее раза в полтора просто потому что нету cuda и оптимизаций это точно, а бонусом еще латенси памяти это дельце умножит ровно настолько, насколько ддр хуже гддр.

>1. RTX 3090: 24 GB (936 GB/s), 350 W, 60 попугаев.


>2. Встройка: 96 GB (256 GB/s), 55 W, 40 попугаев.


Анон, подучи матчасть по нейронкам. Спасет от необдуманных трат на кал, который ты за тем на манер soc эплоблядей будешь толкать на вторичке, потому что внезвпно процессор даже мощный не может обойти ссаную 3060 и сосёт с 0.5 t/s даже на м4 pro.
422 1051319
>>51315

>Кто-нибудь тут копался в коде годота? Какие впечатления?


Обычный ооп франкенштейн, а плюсы только дополняют антураж. Просто у юнитеков и прочих студий есть бабки гонять тесты, иметь тестовые стенды в виде разных устройств, писать свои собственные форки языков типа уе++ или юнитимоно, а у годота нихуя этого нет, потому его ооп франкенштейн порой срет под себя и зачастую не по своей воле.
423 1051326
>>51319
ООП позволяет качественней инкапсулировать код и организовать работу множества человек (100...1000...) в одном монолите, за счет полиморфизма интерфейсов. Процедурное программирование такое не может, отсюда и успех ООП в свое время (а ФП это вообще оторванный от реальности дроч, код ради кода).

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

В общем, лучше когда ООП есть, чем когда его нет. Зумерам сейчас это сложно и микросервисы позволяют срать круды как угодно. Но лучше когда язык мультипарадигменный и есть полноценное ООП.
424 1051327
>>51316
С чего у тебя так горит? Ты что-то не то купил?

>просто потому что нету cuda


Да нафиг эту куду, в Godot Vulkan Kompute есть!
https://kompute.cc/overview/game-engine-godot.html

>насколько ддр хуже гддр


Там LPDDR5x в 8 каналов @ 8 GHz, до 128 GB.
RAM для игрушек тоже, внезапно, требуется.

>не может обойти ссаную 3060


Qwen3: 235b, 22b активных:
3060: не влезет в VRAM, будет 0.01 t/s.
8060s: 10 t/s, можно сразу читать.

Llama 4 Scout: 120b, 17b активных:
3060: не влезет в VRAM, будет 0.01 t/s.
8060s: 13 t/s, можно сразу читать.

GPT-OSS: 120b, 5b активных:
3060: не влезет в VRAM, будет 0.01 t/s.
8060s: 19 t/s, можно сразу читать.

И так далее. Размер RAM >>>> скорость.
Или лучше на Xeon E5 собрать с 1TB RAM?..
425 1051329
>>51315
Они используют несколько ограниченный сабсет плюсов, чтобы не ебать мозги контрибьютерам сложными плюсофичами. Нормальный приятный код, комментов хватает, доки окей, можно вкатиться в их рокет чат и поспрашивать если что. Патчил себе движок пару раз. А этот >>51319 ящитаю лох сренькающий залетный движкосрачерский безыгорный нешарящий, весь день тут серет.
426 1051330
>>51327

> Да нафиг эту куду


Отставить пиздеть на куду, без неё у меня нейроночки не запускаются
427 1051331
>>51319
Всё так, двачую
часто копаюсь в исходнике движка

>>51326

>Процедурное программирование такое не может


В процедурном это и не нужно, но если очень хочется ,то в том же Си делают и интерфейсы, т.к. он ниже уровнем делают руками то, что за тебя делает компилятор цэ++ - структуру функций (VTable)
428 1051332
>>51326

> Но лучше когда язык мультипарадигменный и есть полноценное ООП.


К сожалению 99% современных языков ООП-первичные. Распознаются по ключевому слову static означающему что весь текст кода обязательно описывает ООП-класс, а необходимость писать вне ООП прибита гвоздём.
429 1051333
>>51329

>комментов хватает


очевидный брехун, комменты в сорцах это редкость
image.png205 Кб, 600x500
430 1051334
ну и зачем я это сделал.mp41,2 Мб, mp4,
640x420, 0:40
431 1051339
>>51330

>без неё у меня нейроночки не запускаются


Что ты там тренируешь, что тебе CUDA нужна?

Я что-то сделал, но не пойму, зачем мне это.

Это на 100% GDScript в реальном времени...
432 1051340
>>51327
Очень интересная стена текста. Возможно для тебя будет открытием, но llm умеют параллелиться сразу на несколько видюх, потому стак из 3060 в которую влезет ллм разьебет любой проц по производительности. Но проще взять 3090, выйдет дешевле.

> 10 t/s


И на этом ты собрался тренить нейронки?))
433 1051341
>>51333
Ты бы хоть на гитхаб сходил, ленивая жопа, прежде чем дристать тут. Совсем одебилил в своем движкосрачерском загоне, последние поинты интеллекта всрал. У меня было ровно ноль проблем найти и исправить в сорцах то, что мне нужно.
434 1051343
>>51340
>>51327
Ну и забыл дописать - копирование в ддр раму фулл модели и ее гонка по частям по pci в 3090 всё так же покажут куда больший перфоманс чем проц. С шиной у 3090 полный порядок.
435 1051346
>>51341
Надристал тебе защеку с твоими комментами к функции принт, я не сказал что их нет, я сказал что они - редкость, зайди в папку с рендерами и посмотри там , а коменты уровня

> for i in 10 # цикл по I от 0 до 9


это для малышей вроде тебя
436 1051347
>>51340

>стак


Если у тебя есть желание выделять под одни только видеокарты несколько 220V/30A линий и обустраивать в 6м2 спальне HVAC, чтобы в зимние -30C морозы охлаждать кровать, разложенную на серверных стойках с твоими видеокартами, до комфортных 40C, пока нейроночки обсуждают что-то между собой на своём нейроночном круглые сутки напролёт, и у тебя есть лишние миллионы рублей на всё это дело - вперёд и с песней, никто тебя не отговаривает. Не все настолько энтузиасты, чтобы этим заниматься.

>тренить нейронки


Нейронки изобрели в 1950-1960, тогда всё основное сделали, и даже тренировали успешно - ручками, то есть настоящими рукоятками устройств, прям пощупать можно было, словно живой мозг. Пики нейросетей пришлись на 1980, 1990, 2000... Когда видеокарты вообще появились, это был OpenGL 1.0 с фиксированным пайплайном. По сравнению с процессорами тех лет эта 50 Ватт малышка настоящий суперкомпьютер в компактном корпусе и без лишних проводов.

На самом деле, в турбо-бусте она потребляет до 140 Ватт, но если бы я приобрёл такой девайс, то держал бы в экономном режиме, чтобы не перегревалась попусту. Я вот так и не нашёл причины использовать нейронки в максимальной загрузке/скорости, это инструмент без задач...

>>51343

>шиной


У меня PCI-E 2.0. Ты осознаёшь, что мне полностью новый компьютер нужен, а не твоя списанная с васянской криптофермы перегретая видиокарта, которая только матрицы перемножать умеет? Вот я могу получить полный фарш за 150 тысяч рублей с большой и быстрой оперативной памятью, полноценным и быстрым 16-ядерным процессором, достаточно мощным видеоядром, и всё это в компактном корпусе с минимальным тепловыделением и энергопотреблением. А могу собрать серверную башню, в которую придётся поставить процессор с водянкой, натыкать горячих DDR5 с радиаторами, натыкать туда 4 PCI-E 3090 карты с 3 гудящими вентиляторами каждая, каждая из которых в изношенном виде стоит как половина нового мини-компьютера и потребляет как минимум в два раза больше энергии, а умеет на порядки меньше - видеокарта же, "настоящего" процессора в ней нет, только тысячи огрызков. При этом на практике использовать все эти 4 видеокарты мне придётся раз в несколько дней в лучшем случае, если сравнивать с тем, как я использую бесплатный доступ через duck.ai. Ну и во что лучше вложиться?
436 1051347
>>51340

>стак


Если у тебя есть желание выделять под одни только видеокарты несколько 220V/30A линий и обустраивать в 6м2 спальне HVAC, чтобы в зимние -30C морозы охлаждать кровать, разложенную на серверных стойках с твоими видеокартами, до комфортных 40C, пока нейроночки обсуждают что-то между собой на своём нейроночном круглые сутки напролёт, и у тебя есть лишние миллионы рублей на всё это дело - вперёд и с песней, никто тебя не отговаривает. Не все настолько энтузиасты, чтобы этим заниматься.

>тренить нейронки


Нейронки изобрели в 1950-1960, тогда всё основное сделали, и даже тренировали успешно - ручками, то есть настоящими рукоятками устройств, прям пощупать можно было, словно живой мозг. Пики нейросетей пришлись на 1980, 1990, 2000... Когда видеокарты вообще появились, это был OpenGL 1.0 с фиксированным пайплайном. По сравнению с процессорами тех лет эта 50 Ватт малышка настоящий суперкомпьютер в компактном корпусе и без лишних проводов.

На самом деле, в турбо-бусте она потребляет до 140 Ватт, но если бы я приобрёл такой девайс, то держал бы в экономном режиме, чтобы не перегревалась попусту. Я вот так и не нашёл причины использовать нейронки в максимальной загрузке/скорости, это инструмент без задач...

>>51343

>шиной


У меня PCI-E 2.0. Ты осознаёшь, что мне полностью новый компьютер нужен, а не твоя списанная с васянской криптофермы перегретая видиокарта, которая только матрицы перемножать умеет? Вот я могу получить полный фарш за 150 тысяч рублей с большой и быстрой оперативной памятью, полноценным и быстрым 16-ядерным процессором, достаточно мощным видеоядром, и всё это в компактном корпусе с минимальным тепловыделением и энергопотреблением. А могу собрать серверную башню, в которую придётся поставить процессор с водянкой, натыкать горячих DDR5 с радиаторами, натыкать туда 4 PCI-E 3090 карты с 3 гудящими вентиляторами каждая, каждая из которых в изношенном виде стоит как половина нового мини-компьютера и потребляет как минимум в два раза больше энергии, а умеет на порядки меньше - видеокарта же, "настоящего" процессора в ней нет, только тысячи огрызков. При этом на практике использовать все эти 4 видеокарты мне придётся раз в несколько дней в лучшем случае, если сравнивать с тем, как я использую бесплатный доступ через duck.ai. Ну и во что лучше вложиться?
437 1051348
>>51346
Хуя, ты уже на что-то способен, в папки какие-то заходишь. Еще пару раз потыкать тебя носом в твое же говно и глядишь реально игры делать начнешь.
438 1051350
>>51347
Буду честен, я стриггерился на слово "тренить". Тренить на проце это самая конченая идея, я просто надеюсь ты это осознал. Запускать какой нибудь кал типа квантованого дипсика или квена окей, но нахуя, а главное зачем? Поиграешься ты с этими тупыми ллмками, а дальше наступит понимание что они не всрались (потому что тупые, в тысячи раз тупее любого онлайн аналога) а генерить картинки будет больно потому что я уже обьяснил почему, если нейронка влезет в 3060 - она разьебет любой проц. В 3060 влазит флюкс bf16, влазит хрома, влазят все sdxl'и, плюс на ней реально можно тренить, пусть что-то уровня sd1.5. Может я конечно что-то в этой жизни не понимаю и не знаю кайфа запуска тупых обрезаных ллм с хагги, но подозреваю обратное.
439 1051351
>>51346

> с твоими комментами к функции принт


> print.bind("A").bind("B").unbind().bind("C").call()


Сможешь без комментов (и без запуска) вычислить, что напечатает?
440 1051352
>>51351
Ничего, жидко
441 1051356
>>51350
Создаётся впечатление, что ты вообще не знаешь, о чём идёт речь. Речь не столько о центральном процессоре (но и о нём тоже, потому что в видеокартах его просто нет, нужен внешний), сколько о "встроенном" видеоядре - это отдельный чип, который физически находится рядом с процессором, но он сам по себе работает, независимо от процессора. То есть это то же самое, что и "видеокарта", только без "карты", потому что у неё общий корпус с процессором и общие линии к оперативной памяти.

Так вот по чистой производительности видеочип 8060s обгоняет видеочип RTX 3060. То есть если ему дать графическую задачу, он её решит быстрее дискретной видеокарты и при этом потратит намного меньше энергии. По скорости памяти мини-пк (материнка + RAM) с его использованием чуть-чуть отстают от 3060, поэтому это не важно. Главное, что ему доступно в 8 раз больше "видео"-памяти, а это значит, что Mixture of Experts могут умещаться целиком в память вместо перекачивания туда-сюда. Активных параметров у них относительно мало и поэтому они быстрые и одновременно с этим умные. Для примера, Llama 4, имея всего лишь 17 миллиардов активных параметров, по интеллекту примерно как Llama 3, которой нужно активировать все 70 миллиардов параметров на генерацию каждого токена. Но у Llama 4 общее число параметров - 120 миллиардов, поэтому она в твою 3060 просто не поместится (Llama 3 70b тоже), а вот встроенный видеочип имеет доступ к просторным 96 Гб оперативки и поэтому всё у него умещается.

По генерации графики я без понятия, меня это не интересует, но предположу, что если вся эта генерация графики когда-нибудь сдвинется с мёртвой точки, там тоже найдут способ применить Mixture of Experts для ускорения (если ещё не применяют). Другого пути нет - даже биологические мозги самых разных животных эволюционировали именно по этому пути, а искусственные сети идут по пути подражания.

Про "тренировку" я тебе уже всё объяснил - тренировать можно не только "трансформеры". Что тут ещё объяснять? Даже если у тебя 1 нейрон с 1 входным параметром (в буквальном смысле одно число) и ты его ручками изменяешь (буквально с клавиатуры вводишь) - это в терминах "искусственного интеллекта" (науки, а не того, что маркетологи навесили на уши) будет считаться "тренировкой" (не "глубокой", а просто "тренировкой", потому что нет нескольких скрытых слоёв). Не нужно рассказывать о том, что для осмысленного изменения триллионов параметров за приемлемое время с текущими алгоритмами и ограничениями железа потребуется целый склад с видеокартами - это всем очевидно.

Если хочешь попробовать, вот: http://playground.tensorflow.org/ - тренировка нейронной сети прямо в браузере на любом телефоне, без регистрации и СМС, результат видно за считанные секунды. Не нужно скупать кластер из списанных 3090, чтобы "натренировать искусственную нейронную сеть", понимаешь?
441 1051356
>>51350
Создаётся впечатление, что ты вообще не знаешь, о чём идёт речь. Речь не столько о центральном процессоре (но и о нём тоже, потому что в видеокартах его просто нет, нужен внешний), сколько о "встроенном" видеоядре - это отдельный чип, который физически находится рядом с процессором, но он сам по себе работает, независимо от процессора. То есть это то же самое, что и "видеокарта", только без "карты", потому что у неё общий корпус с процессором и общие линии к оперативной памяти.

Так вот по чистой производительности видеочип 8060s обгоняет видеочип RTX 3060. То есть если ему дать графическую задачу, он её решит быстрее дискретной видеокарты и при этом потратит намного меньше энергии. По скорости памяти мини-пк (материнка + RAM) с его использованием чуть-чуть отстают от 3060, поэтому это не важно. Главное, что ему доступно в 8 раз больше "видео"-памяти, а это значит, что Mixture of Experts могут умещаться целиком в память вместо перекачивания туда-сюда. Активных параметров у них относительно мало и поэтому они быстрые и одновременно с этим умные. Для примера, Llama 4, имея всего лишь 17 миллиардов активных параметров, по интеллекту примерно как Llama 3, которой нужно активировать все 70 миллиардов параметров на генерацию каждого токена. Но у Llama 4 общее число параметров - 120 миллиардов, поэтому она в твою 3060 просто не поместится (Llama 3 70b тоже), а вот встроенный видеочип имеет доступ к просторным 96 Гб оперативки и поэтому всё у него умещается.

По генерации графики я без понятия, меня это не интересует, но предположу, что если вся эта генерация графики когда-нибудь сдвинется с мёртвой точки, там тоже найдут способ применить Mixture of Experts для ускорения (если ещё не применяют). Другого пути нет - даже биологические мозги самых разных животных эволюционировали именно по этому пути, а искусственные сети идут по пути подражания.

Про "тренировку" я тебе уже всё объяснил - тренировать можно не только "трансформеры". Что тут ещё объяснять? Даже если у тебя 1 нейрон с 1 входным параметром (в буквальном смысле одно число) и ты его ручками изменяешь (буквально с клавиатуры вводишь) - это в терминах "искусственного интеллекта" (науки, а не того, что маркетологи навесили на уши) будет считаться "тренировкой" (не "глубокой", а просто "тренировкой", потому что нет нескольких скрытых слоёв). Не нужно рассказывать о том, что для осмысленного изменения триллионов параметров за приемлемое время с текущими алгоритмами и ограничениями железа потребуется целый склад с видеокартами - это всем очевидно.

Если хочешь попробовать, вот: http://playground.tensorflow.org/ - тренировка нейронной сети прямо в браузере на любом телефоне, без регистрации и СМС, результат видно за считанные секунды. Не нужно скупать кластер из списанных 3090, чтобы "натренировать искусственную нейронную сеть", понимаешь?
442 1051360
>>51346

>ваши комменты не комменты яскозал


Ясно-понятно.
443 1051361
>>51356
Ну нравится тебе коупить, что ддр обойдет гддр а видеочип не от зеленых с уменьшенным количеством тензорных блоков выебет графический дискретный чип - коупи дальше. Я бы обьяснил, но мне похуй, в конце концов бабки не мои.
444 1051364
>>51361

>бабки не мои


Свои-то ты уже потратил на малополезную печку? Или две?

Не беспокойся, я не собираюсь ничего покупать. Мне лень.
445 1051365
>>51364
Ну я на своей печке могу внатуре полезными мне делами заниматься (например рисовать картиночки, так как они влазят мне в vram), а не запускать квен и радоваться 10 тупейшим токенам в секунду. Имхо лучшей инвестицией будет поддержать группу складчиков в которой я покупаю онлайн ллм сервисы за 1/5 цены имея умнейшие нейронки в прямом своем распоряжении, которые мне реально помогают работать, а не тешат меня фактом своего старта. Ну это мое видение, не вижу смысла его навязывать.
446 1051371
>>51365
Т.е. ты ассеты флипаешь, а не разрабатываешь оригинальные технологии искусственного интеллекта специально для своих игр... Ты хотя бы пробовал подключать заранее обученные LLM внутрь своей игры? Я пробовал, мне не понравилось - мне не нравится то, чему они обычно обучены, и то, что они полностью зафиксированы/заморожены, и поэтому я хочу делать полностью кастомную архитектуру с нуля, без pretrain весов, чтобы там лишнего ничего не было, и чтобы можно было обновлять веса в реальном времени, во время игры, как в реальной жизни... или даже не игры, не важно, игра - это просто оболочка, виртуальная площадка для экспериментов, выдуманный интерактивный мир.

Но это, конечно, всё просто мой шизофренический бред, и поэтому я этого делать не буду...
447 1051373
>>51371

>Ты хотя бы пробовал подключать заранее обученные LLM внутрь своей игры


А нахуя так делать? Ну, рил, какие плюсы от ллм в игре? Я понимаю там если на базе трансформеров обучить что-то типа npc иишки (на обучение которой понадобится покупать runpod), но просто генератор текста мне нахер в игре не упал. Возможно имеет смысл для каких-то целей пихать vision модели, но опять же, мне трудно представить куда и зачем.

>поэтому я хочу делать полностью кастомную архитектуру с нуля, без pretrain весов


Удачи, лол. Особенно зная что прогресс обучения не детерминирован (от забора до обеда) и в процессе обучения придется выбраковывать целые эпохи, потому что почему-то всё идет по пизде на текущем шаге и узнать об этом можно только постфактум. На проце занятие будет еще более увеселительное чем обычный файнтюн. Даже разрабы первых русских ллм не выебывались а взяли дипсик и его отфайнтюнили, а ты тут решил с нуля хуйнуть ллм с блекджеком и шлюхами.

>обновлять веса в реальном времени, во время игры, как в реальной жизни...


Потужность зашкалила за пределы разумного
А меня генерация картинок устраивает, я с помощью лор и openpose выставляю персонажей в нужных позах, затем генерирую, после буду анимировать в anime effects и будут готовые персы. Одежда туда же. Имхо моя 3060 полностью отрабатывает свою пайку, еще и фапконтент поставляет такой какой я хочу на сдачу.
448 1051375
>>51373

>какие плюсы от (искусственного интеллекта) в игре?


А ты точно занимаешься геймдевом? Или только картинки генерируешь?

>на обучение которой понадобится покупать runpod


Чатботам 90-х/00-х не требовалось, а в 2020-х ВНЕЗАПНО потребовалось?
Опять же, никто не требует быть гигамозгом с 2500 ICQ на бенчмарках...

>прогресс обучения не детерминирован


>в процессе обучения придется выбраковывать целые эпохи


Проблема архитектуры и/или алгоритма обучения (бэкпроп нестабилен).

>ллм с блекджеком и шлюхами


LLM - это LARGE language model. Сами language model - старая технология.

>за пределы разумного


Учи мемы: https://en.wikipedia.org/wiki/Online_machine_learning

>...where it is computationally infeasible to train over the entire dataset...


Т.е. онлайн лёрнинг - это, внезапно, оптимизация машин лёрнинга. Лол!

>А меня генерация картинок устраивает


Ну, устраивает и устраивает. А меня интересуют конфетки, а не фантики.
449 1051382
10 лет назад в тредах по моддингу ТЕС мы мечтали, что вот создадут ИИ, и все неписи в играх будут как живые, реалистично реагировать на ебланскую клоунаду игрока с развешиванием вёдер на головы, например.

И вот будущее наступило.
Нейросети растянивают 540р на 4к. Генерация фреймов делает 240 ФПС из 15-ти, только вот фреймы инпута так и остались в пределах 15-ти. Наслаждайтесь, кушойте.
450 1051383
>>51382

>ТЕС мы мечтали, что вот создадут ИИ, и все неписи в играх будут как живые


>ТЕС


Есть такое уже, канал "ролеплей для души". Дождались. Покекали. Оказалось интересным цирком, но неиграбельно.
451 1051384
>>51383
Вот-вот. Бойтесь желаний своих, ибо исполняются.
Настоящий ролеплей - это диалоговые шахматы, где каждая строчка и игрока и неигрока заранее прописана АВТОРОМ и игрок, жонглируя строчками диалогов разыгрывает партию, в игре, по правилам, а дурачки всё мечтают о какой-то там реалистичности. Чтобы неписи с ними о погоде, значит, рассуждали.
452 1051385
>>51375
Какой-то троллинг тупостью пошёл, неудивительно что ты собрался тренировать нейронки уровня квен на проце с нуля ебать.
453 1051404
Что у меня получилось
https://www.dns-shop.ru/conf/3737f0e43b2bbf0c/
1 ссд для системы, 1 ссд для геймдева, 1 хард для порно.
И это уже конечно звиздос по 70 тысяч.

Самая дешевая сборка днс
https://www.dns-shop.ru/user-pc/configuration/3c835d1bee3f1578/
Добавить оперативы и ссд получится не меньше 50к.
Никогда мне хобби столько не стоило.

Теперь хз стоит ли вообще брать ам5 вместо ам4 если я не участник пс-мастер-рэйс и мне по факту один годот нужен и максимум может быть когда-нибудь юнити.
454 1051413
>>51404
Нахуй эти слоудиски в 2к25 нужны? ХДД, ССД, вообще охуеть. У тебя на мамке 2 слота m2 nvme, вот два nvme диска и возьми как нормальный современный человек. Я прям физически ощущаю когда работаю за системой с обычным ССД и тем более с ХДД - все пиздос какое слоу, а если уж игори гонять то за эти долгие лоадинг скрины чай успеваю сделать.
455 1051415
>>51413

> У тебя на мамке 2 слота


Мне оно не уперлось, я просто пересажу имеющиеся ссд/хдд с текущего пк чтобы сэкономить. В список добавил для полноты картины.
По факту мне нужен копрус, плата, бп, цп, видео.
456 1051419
>>51415
Возьми один нормальный современный nvme, поставить на него систему и держи на нем самые частоиспользуемые файлы - охуеешь с того, насколько все шустрое и отзывчивое.
image.png68 Кб, 847x412
457 1051422
Какие подводные использовать parse_input как глобальный сигнал? После получения где надо ставим set_input_as_handled.

Разве что дополнительные аргументы передать нельзя. Или можно?
458 1051426
>>51422
Выглядит как грязный хак уровня синглтонов.

>Какие подводные


У ТЕБЯ ДЖВА ОБЪЕКТА
@
НО ОНИ СЛИШКОМ ДАЛЕКО
@
ОХ, КАК ЖЕ ЛЕНЬ ДЕЛАТЬ НОРМАЛЬНО
@
ЛУЧШЕ ПРОБРОШУ ГЛОБАЛЬНЫЙ СИГНАЛ
@
СПУСТЯ НЕСКОЛЬКО ДНЕЙ/НЕДЕЛЬ/МЕСЯЦЕВ
@
ТАК, ЗДЕСЬ У НАС СИГНАЛ... НО ОТКУДА???
@
ВСЁ ЧТО МОЖНО ВЫПИЛИЛ, А ОН ЕСТЬ!?
@
УУУУУ, КАКОЙ ДЕБИЛ ЭТО ПРИДУМАЛ?!
@
ИДУ ЖАЛОВАТЬСЯ НА БАГ ДВИЖКА
@
В СМЫСЛЕ В ДВИЖКЕ ЭТОГО НЕТ?
@
В СМЫСЛЕ ЭТО В МОЁМ КОДЕ???
@
Я ЧТО, ПЬЯНЫМ КОД ПИСАЛ???
@
ААААААААААААААААААА!!!
@
TODO: ВЫРЕЗАТЬ <ЭТО>
@
СПУСТЯ НЕСКОЛЬКО...
458 1051426
>>51422
Выглядит как грязный хак уровня синглтонов.

>Какие подводные


У ТЕБЯ ДЖВА ОБЪЕКТА
@
НО ОНИ СЛИШКОМ ДАЛЕКО
@
ОХ, КАК ЖЕ ЛЕНЬ ДЕЛАТЬ НОРМАЛЬНО
@
ЛУЧШЕ ПРОБРОШУ ГЛОБАЛЬНЫЙ СИГНАЛ
@
СПУСТЯ НЕСКОЛЬКО ДНЕЙ/НЕДЕЛЬ/МЕСЯЦЕВ
@
ТАК, ЗДЕСЬ У НАС СИГНАЛ... НО ОТКУДА???
@
ВСЁ ЧТО МОЖНО ВЫПИЛИЛ, А ОН ЕСТЬ!?
@
УУУУУ, КАКОЙ ДЕБИЛ ЭТО ПРИДУМАЛ?!
@
ИДУ ЖАЛОВАТЬСЯ НА БАГ ДВИЖКА
@
В СМЫСЛЕ В ДВИЖКЕ ЭТОГО НЕТ?
@
В СМЫСЛЕ ЭТО В МОЁМ КОДЕ???
@
Я ЧТО, ПЬЯНЫМ КОД ПИСАЛ???
@
ААААААААААААААААААА!!!
@
TODO: ВЫРЕЗАТЬ <ЭТО>
@
СПУСТЯ НЕСКОЛЬКО...
459 1051427
>>51426
Просто ctrl+shift+f, signalname, и все находится куда и откуда.
460 1051428
>>51422

>дополнительные аргументы передать


Я не пробовал, но должно сработать:
1. Делаешь свой класс:

>class_name SchizoEvent extends InputEvent


>var arguments: Array # или что-то другое


2. Отправляешь его этой функцией:

>var event := SchizoEvent.new()


>event.arguments = ["bla bla bla"]


>Input.parse_input_event(event)


3. Принимаешь в другом месте:

>func _input(event: InputEvent) -> void:


>_ if event is SchizoEvent:


>_ _ hallucinate(event.arguments)


>_ _ get_viewport().set_input_as_handled()


>_ else: print("what the %s???" % event)


Но так лучше не делать - лишние _input().

>>51427

>ctrl+shift+f


Ты на Visual Studio сидишь? Сочувствую...
image.png6 Кб, 609x99
461 1051429
>>51428
Дефолтные годотовские хоткеи.
462 1051430
>>51428

>Я не пробовал, но должно сработать:


Работает. Заебись. А принимать буду в _unhandled_input. Люблю годот.
463 1051432
>>51429
Спасибо, не знал. Недавно добавили?..

Но всё равно не всё можно найти по имени. И даже найдя, не всегда понятно, как оно используется, что произойдёт, если его выпилить, чем заменить. Это и называется "лапша", которую рано или поздно долго распутывать придётся, чтобы воткнуть что-то новое, починить старое или просто понять, что происходит.

Поэтому лучше стремиться к локальным связям и организовать дальние связи как можно реже, по определённым соглашениям ("signal up, call down"). Натыкать дальних вызовов всегда успеешь, а вот распутывать этот клубок в будущем будет трудно.

Знаешь, что меня удивляет в современных кодерах? "Слишком долго печатать", говорят они, обсуждая тривиальную фичу, что они давно могли бы себе разработать и иметь в одном из своих модулей, т.е. обращаясь через API, а не печатая всё с нуля. Я вот восхитился гениальности модулей/библиотек в коде программ, когда узнал, что я сам мог бы написать универсальный код и потом просто его вызывать... Перетаскивая с проекта на проект как инструмент. Развесистую лапшу так переносить очень сложно.

>>51430

>_unhandled_input


Этот обработчик вызывается после всех остальных вариантов инпута и поэтому твоё событие, вероятно, вызовет много лишних if event is... в других _input(). Посмотри на мониторах производительности, что вызывается и сколько раз (там прям счётчики есть).
464 1051433
>>51426

> грязный хак уровня синглтонов


Главное чтобы была игра.

> СПУСТЯ НЕСКОЛЬКО ДНЕЙ/НЕДЕЛЬ/МЕСЯЦЕВ


Документируй. Следуй соглашениям (и своим внутренним, и общепринятым, и авторов движка). И никогда не потеряешь свой синглтон. При должной сноровке даже через 10 лет открывая свой код, всё прекрасно находишь.

>>51422

> Какие подводные


Дичайший оверхед. Несколько тредов назад рассматривали уже. Вместо этого, у тебя уже есть глобальный кандидат на глобальную шину данных, доступный отовсюду из любого файла проекта !без дополнительных настроек! и это - get_tree() - по вызову которой возвращается ссылка на главный цикл приложения. Туда тебе достаточно пробросить своих юзер-сигналов и не надо ни с каким инпутом возиться:

> if not get_tree().has_user_signal(&"shizo_event"): get_tree().add_user_signal(&"shizo_event")


Всё, готово, у тебя есть глобальный сигнал на глобальной шине. Чтобы его испустить делаешь так:

> if get_tree().has_user_signal(&"shizo_event"): get_tree().emit_signal(&"shizo_event")


А чтобы на него подписаться

> if get_tree().has_user_signal(&"shizo_event"): get_tree().connect(&"shizo_event", on_shizo_event)



Ну и всё. Это будет работать без дополнительных телодвижений. Единственное неудобство, слишком длинно и неуклюже записывается. Можешь сделать классы-обёртки над этим кодом и удобно расставлять их по сцене, так уж точно не забудешь, где твои сигналы. Можешь еще посмотреть на ассетлибе, я там недавно похожий аддон видел с готовыми нодами-обёртками. Сам не юзаю, это же антипаттерн.
465 1051436
>>51433

>Главное чтобы была игра.


Это в самом начале, а потом наступит рефакторинг. Особенно если делаешь игру сложнее гиперказуала. Технический долг - это не просто смешной мем от энтерпрайз бэкэнд программистов, к сожалению.

>Документируй.


Главная проблема документации - она устаревает. Т.е. хаотичные изменения в коде быстро делают все твои комментарии неправильными, особенно если они описывают взаимодействие между системами. А лапшичный код - путь к хаотичным изменениям.

>При должной сноровке...


Для неё не обязательно бегать по граблям 10 лет.

>Дичайший оверхед


Тут ты прав. Но дальше я не согласен:

>get_tree().add_user_signal()


>get_tree().emit_signal()


Откуда ты это делаешь? Из рандомных файлов? Следовательно, обвешиваешь проект "лапшой". Следовательно, накапливаешь технический долг. Следовательно, потом будет тяжело разгребать...

>Сам не юзаю, это же антипаттерн.


Зачем ты тогда это предлагаешь? Шило на мыло...
466 1051438
>>51436
Разгребать ничего не нужно. Ты просто релизишь и идешь дальше. Уж сколько этого "технического долга" и черезжопных решений в ААА проектах видели, ууу бля, возьмешься моды делать и охуеваешь.
1757509451359.png684 Кб, 929x711
467 1051440
>>51436
Технического долга у нас мало. Оттого и игор нет.
2025.09.09.mp43,8 Мб, mp4,
640x360, 1:06
468 1051456
Давно собирался спросить. Есть такие идеи:

1) Мне хочется куски земли произвольной формы, с достаточно точной физикой, но чтобы они могли "покачиваться на ветру" независимо друг от друга. Прототип сейчас состоит из StaticBody3D и trimesh коллизий... Оно вроде бы работает, но хорошо ли? Я понимаю, trimesh дорогой и полый - внутрь можно провалиться, но есть ли альтернативы? Генерация выпуклых (convex) шейпов уж больно глючная - не описывает все необходимые изгибы как я хотел.

2) Пробовал цельные большие куски островов, но хочется разделить их на мелкие детали всё-таки. Возникает вопрос, как маскировать стыки? Часто получается резкий ненатуральный перелом. Очень хотелось бы сэкономить на шейдерах... поэтому сложные решения использовать не хочется. Вроде некоторые игры стыки не маскируют совсем, но выглядит это, на мой взгляд, как-то не очень.

3) И если уж буду делать из мелких частей, тогда хотелось бы разделять их на RigidBody3D в момент разрушения почвы, т.к. эффект частицами унылый. Вопрос в том, оставить ли StaticBody3D или лучше использовать RigidBody3D.freezed = true? На дереве сейчас шарик как раз в таком виде... Но, вообще, поддерживает ли RigidBody3D trimesh'и? Раньше жаловался на это, но теперь я использую Jolt. Не хочется делать везде отдельные convex шейпы...

Не смотрите на провал верёвки в почву - это моя преждевременная оптимизация виновата. Сделал слежение верёвки за объектом сцепления только при условии что этот объект RigidBody3D. Т.е. там достаточно одну строчку удалить для фикса.

Ещё планирую позже сделать потоки атмосферы, передвигающие архипелаги островов целиком, но, наверное, это будет мнимое движение, т.к., по идее, скорости получаются выше обычных в физике. Т.е. реализую через изменение горизонта и биомов.

Правда, как рисовать горизонт и облака я пока не определился, всё слишком сложно или не так, как хотелось бы. Да я и не уверен, как хотелось бы...
469 1051458
>>51456
1. Я леплю более сложные шейпы из BoxShape и ConcaveShape.
470 1051463
>>51456
2. Неоднократно видал на ютубе видосы, как сделать автотайловые меши в тридэ. Возможно тебе подойдёт такой способ? Минус этого способа очевиден, будет угадываться ячеистость под поверхностью, кубизм.
Вот один из https://www.youtube.com/watch?v=bwcEh2HffoY
471 1051465
>>51458

>ConcaveShape


Concave (вогнутый) - это и есть trimesh:

>ConcavePolygonShape3D


>A 3D trimesh shape used for physics collision.


Документация рекомендует ConvexPolygonShape3D:
https://docs.godotengine.org/en/stable/classes/class_convexpolygonshape3d.html
Но их сложно делать вручную, а генерация, как минимум та, что в Godot, как-то не справляется.

>>51463

>GridMap3D


Да это знаю, пробовал давно. Это вообще никак не касается визуальных швов на мешах: если меши не идеально стыкуются, то по нормалям (отражённому поверхностью свету) видно, где находится стык... Кажется, можно в шейдерах замаскировать, но не хочется натягивать тяжелый шейдер на всё сразу.

Представь себе склон горы... А, лучше нарисую. Вот визуально хочется 1, а на практике удобнее иметь 2.
472 1051466
>>51465

>Вот визуально хочется 1


А если поставить в угол куб и повернуть его на 45 градусов?
473 1051472
>>51456
Сделай уже реактивные ранцы, хватит башкой биться об острова, даже на видео это утомительно смотрится. У тебя же sci-fi, а не игра про внебрачную дочь человека паука.
474 1051476
>>49166

> уже скоро выйдет


Любимые слова безигорника
Обновить тред
Двач.hk прислал битые данные.
Вы видите копию треда, сохраненную 10 сентября в 19:47.
Можете попробовать обновить страницу, чтобы увидеть актуальную версию.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски