Главная | Настройки | NSFW
Тема:
Доски


[Ответить в тред] Ответить в тред

[Назад] [Обновить тред] [Вниз] [Каталог] [ Автообновление ] 187 / 79 / 92

Gamedev тред !tsGpSwX8mo No.120101
15931632080020.jpg (12 KB, 474x405)
15931632080191.png (34 KB, 1200x800)
15931632080562.webp (62 KB, 789x728)
15931632082133.webm (7523 KB, 1320x1040, 00:00:11)
Gamedev тред #1
Прошлый: >>96153 (OP)
В этом треде обсуждаем GaaaaaameDeeeev! Тут уже где-то 40 тредов про создание компьютерных видеоигр, а есть объединённый. Началось с того, что я, команда PredposledniyRubikon мучился во сне, мне снилось, что я в своей игре на 0,0,0 блоке на адресе 0x5XXXXXXX..., в итоге я выпустил игру и написал об этом на тучке-пучке.
Но я также продолжу и новые игры делать, когда закончу █████████████ и ██████████ спойлер: уже.
И вы тоже пишите в этот тред про свои игры и наработки, спрашивайте ответы, задавайте вопросы.

FAQ:
0. Не хочу разбираться в движках типа Unity, Godot, УЕЧ/П и GameMaker, хочу сразу делать игру. Как?
Ответ: Учи C или C++, смотри туториалы по SDL2, OpenGL, OpenAL, делай игру. Алсо, если тебе в туториале по OpenGL предлагают glBegin или glEnd, то этот туториал сильно устарел, но можешь попробовать для общего развития, работать будет. Если тебе не нравится опенгл, то пиши рейтрейсер или растеризатор.
1. Не хочу учить OpenGL, какой выбрать графический движок?
Ответ: Я незнаю, но можешь попробовать Ogre3D
2. Я офигею писать физику, какой движок использовать?
Ответ: Bullet (вероятно, лучший), NewtoneEngine (вероятно, лучший), ODE (вероятно, плохой, но я юзал). Это всё под 3D.
Под 2D Box2D зайдёт.
3. Как скомпилировать игру под виндовс/гнулинукс/макось?
Если у тебя GNU/Linux, то для виндовс есть mingw-X, где под X gcc и другие инструменты.
Как под линукс не из-под линукса скомпилить, я незнаю, не пробовал.
Для МакОС придётся либо покупать Apple-компьютер с XCode, либо качать некий Хакинтош. Но учти, что хакинтош это не уровень стим-игр, где-то ошибёшся и потом не будешь понимать, почему у эппл-игроков не работает, а их почти 3% от всего количества.
4. Хочу запилить реалистичную физику жидкостей.
Ответ: Наверное, тебе надо копать в сторону уравнений Навье-Стокса. Векторные поля, диффуры, всё это можешь учить на mathprofi.ru.
Вопрос в том, где ты найдёшь достаточно вычислительной мощи.
5. Как рисовать текстуры?
Овтет: В графическом редакторе, их много. GIMP, Krita. Например, Krita неплохая для графического планшета, а в гимпе тебе будет неудобно даже пиксельную графику рисовать.
6. Как делать музыку?
Ответ: Если не можешь в реале, то тебе понадобится llms.
7. В моих звуках слишком много шума, как его убрать?
Ответ: Звуковые эффекты, в т. ч. и избавление от шума можно сделать в программе Audacity.
8. Как делать 3D-модельки?
Ответ: В блендере. В недавнем обновлении ГУИ изменили, так что если ты начинающий, то тебе будет сложно смотреть старые уроки по блендеры, хотя при первом запуске ты можешь выбрать старый ГУИ.
9. Как загружать 3D-модельки?
Ответ: libassimp, tinyobj (obj), tinygltf (gltf).
10. Как выложить игру на Steam?
Ответ: Регистрируешься в steamworks, на каждую игру единоразовая комиссия 100 долларов + от продаж около 30% (не считая налогов). Тебе придётся внести свои реальные данные, возможно и пасспорт. Читаешь документацию по стиму и стимапи (там ссылки кругом, разберёшься), создаёшь игру, проверяешь, она запускается хотя бы или нет, отправляешь на проверку в стим и тебе говорят, можно выпускать или какие-либо фатальные ошибки или рекомендации. Потом 2 недели минимум игра висит чисто страничка, затем пользователи могут покупать. Цены и скидки сам накладываешь когда тебе удобно, но с некоторыми ограничениями.
11. Как выложить игру на Google Play?
Ответ: Регистрируешься в гугл плей консоль, на каждого разработчика единоразовая комиссия 25 долларов. мобилочки подходят для рекламы и внутриигровых покупок, но никто тебе не мешает её ещё и платной её сделать.
12. Как выложить игру на itch.io?
Ответ: Регистрируешься на itch.io, выкладываешь игру. Можешь даже продавать, получая на пейпал.
13. Как сделать игру?
Ответ: Мотивация + воздействие x время.
14. Как продать игру?
Ответ: Маркетинг и пиар.
15. Как делать трейлеры к игре?
Ответ: ffmpeg, OpenShot. Нужна хорошая музыка.
Gamedev тред !tsGpSwX8mo No.120105
>>120054
Это да. Если бы я хотел делать игры то просто взял бы какой-нибудь годот и на нём делал бы. А может, даже, обычные движки, посмотрел бы тот Ogre3D. Но я не такой. Некоторые продукты не находят общего языка с моим психическим организмом, происходит отторжение. Если смотреть на графические программки, то mpv, блендер и lmms (хотя с ним у меня мало XP) мне больше всего зашли (несмотря на то, что мне не нравится блендер, внутри я понимаю, что его просто не понимаю).
Всё остальное — говно, либо продукт ненадлежащего качества.

А вообще, вместо игр можно было бы и ассеты пилить. Я заходил на godot магазины assэтов и там сплошной лохотрон — всё бесплатно, и как на этом можно заработать? Вот юнити ассерт стор другое дело, но сам понимаешь, что происходит с желудкмб.
Существовал бы Лайси в нормально обличии на свете, можно было б запилить отдельный формат ассетов с эмбеддед-лайси скриптами. И конвертировать их хоть в юнитексные, хоть в гондотные ассеты (если это будет позволительно). Можно и отдельный "движок" запилить с такими ассетами и продавать в стиме (я сторонник СПО, так что выбрал бы полусвободную лицензию, где я могу продавать, а другие могут скомпилировать).

Я уже вышел на новый уровень развития, но закрепиться на нём не смог из-за отторжения C/C++. Это как если некоторые кирпичи класть, не прогрунтовав. Или если водоросль ризоидами крепится к камушку, а он промаслен. Нет, это когда пытаешься термоклеем на жирную поверхность наклеить что-то. Мне пора использовать отдельные библиотеки, но надо было изначально продумать полностью архитектуру и все функции, даже не спрограммировав их.
Сейчас я разнёс свою систему ГУИ и собираю её заново, отгородив отдельный модуль с комплексными, но часто встречающимися виджетами. Кнопка, Слайдер, виждет с контекстным меню, лейбел и всё такое. Я одновременно пишу этот модуль и портирую систему ГУИ под рейтрейсер. Поддержку опенгла удалил, чтоб не мешалась, но, может быть, потом введу обратно и частично.
Anonymous No.120109
>>120101 (OP)
>Регистрируешься в steamworks, на каждую игру единоразовая комиссия 100 долларов + от продаж около 30% (не считая налогов).
Почему почти треть?

Есть ли доход от продажи пользователями карточек? Вроде бы где-то читал, что есть.
Anonymous No.120114
>>120109
>Почему почти треть?
Потому что стим даёт очень удобный сервис для продажи игр. Даже лютое говно может окупиться за пару лет.
Вот если бы ты выдавал самиздатом, то сколько бы продаж у тебя получилось бы? 0? 1? 2?

>Есть ли доход от продажи пользователями карточек?
Я не знаю, чтобы получить возможность создавать карточки, игра должна стать очень популярной.
Anonymous No.120150
>>120101 (OP)
>FAQ
Сверни его в разворачивающийся спойлер в следующий раз что ли.
Который вот этот
Anonymous No.120178
15932669818990.png (27 KB, 1200x800)
Генерирую текстуру чанка. На этот раз у меня будет не пиксельная графика.
Anonymous No.120385
15933391749450.png (59 KB, 1200x800)
Я хотел сделать текстурирование треугольника, но вместо этого занялся преломлением. Но я не понял как повернуть 3D-вектор на некоторый угол, относительно плоскости, которую пересекает direction луча и нормаль поверхности, потому что плохо знаю линейную алгебру. Поэтому просто сделал среднее между -нормалью и дирекшионом.
В платформер надо будет потом завезти декоративные линзочки, которые будут скакать по экрану и если попадут в голову ГГ, то визуально уменьшат её, а игрок, может быть, рассмеётся с такого исхода.
Anonymous No.120389
15933416933900.webm (420 KB, 1200x800, 00:00:07)
Мда, 2.5 ФПС на фулл хд.
Параллеливание в 8 потоков увеличивает производительность в 5 раз.
Мне надо довести хотя бы до 10 ФПС на одном потоке, чтобы было нормально.
Anonymous No.120395
Где можно кратко (в виде статьи) прочитать про гейм-дизайн и его основы?
Anonymous No.120396
>>120389
Как ты добился фпс более низкого, чем с шарами в объёме с матрицами и лучами?
Вот это точно в реальном времени рендерится на процессоре. Причём на старом.
Anonymous No.120416
>>120396
На самом деле нет, при фуллхд с теми сферами, если близко подойти к объекту (чтоб экран занял), получится тоже 2.5 ФПС. Хотя, когда я портировал свой сырой рейтрейсер на свой абстрактный движок, мне показалось, что на одном моменте ФПС уполовинился.
Что же мне делать, если не смогу поднять ФПС до приемлимого уровня? Наверное, придётся вводить поддержку опенгл и динамически генерировать шейдер для рейтрейсинга всех объектов. Только не получится коллбеки для специальных объектов вызывать, либо и их портировать на GLSL/SPIR-V. Вот же производители процессоров! Лишают меня возможности делать нормальные продаваемые игры. Действительно опенглогулаг. По моим процессорам пока застой. Смог напылить немного меди на кусочек стекла (в самом лучшем образце образовались множественные островки, а на краю даже полноценная блестящая плёнка, которая с небольшим усилием стирается металлической иглой). Теперь пора заняться обработкой кремния.
Anonymous No.120420
>>120416
>тоже 2.5 ФПС
Но в плоском случае тебе не нужно ворочать матрицы, углы или ретрейсить. Если теоретическое преимущество ретрейсера в 3d очевидно есть, то в плоском случае просто полностью эквивалентные картинки будут - если у тебя глубина - то просто рисуй по слоям - это не 3d и слои дискретные, вряд ли их больше 5.
Или, если так хочется - ты можешь по сетке разбить экран на куски 32х32 - пройтись по объектам и записать традиционной растеризацией в каждый из кусков номер объекта - и потом ретрейсить только локальный список каждой отдельной клетки 32х32. Но ты просто в десять раз больше вычислений сделаешь, чтобы получить ничего. Твой подход это примерно как использовать сортировку пузырьком, потому что быстрая сортировка с рекурсией это ересь и квиксортогулак по каким-то надуманным причинам.
Anonymous No.120433
>>120420
Я, кстати, ошибся. Если на демке со сферами отключить освещение, то ФПС возрастёт до 15, в 3 раза больше, чем в игре. Значит, я где-то там с объектами напортачил. У меня в движке есть ноды и эти ноды могут содержать другие ноды со своей относительной матрицей. И перед рейтрейсингом я их компилирую в один список объектов с просчитанными матрицами.
>ретрейсить
Не, опенгл это конечто плохо, но чтобы менять его на растеризацию, это плохое решение. По-моему лучше оставить рейтрейсинг. Мне надоело уже переписывать своё ПО. Если я буду вводить то одни, то другие алгоритмы, то так и буду писать пустой код.
Опять же, производительность это не столько мои проблемы, сколько проблемы железной части. Вот почему современные процессоры не дружат с рейтрейсингом? Потому что монополия и маркетинг.
Anonymous No.120441
15934101910700.png (218 KB, 363x626)
Anonymous No.120447
>>120433
>Потому что монополия и маркетинг.
тут должна быть шутка про штаны
Anonymous No.120459
15934198594000.webm (170 KB, 1888x1024, 00:00:05)
Сука! У меня ФПС просаживался, потому что я забыл -O2 поставить!
Ну всё, теперь можно полноценно игру писать, 60 ФПС на 12 ядрах в фуллхд!
Anonymous No.120468
>>120459
Поздравляю с открытием. Кстати у всех в среднем всего 4 ядра, а не 12.
Anonymous No.120481
>>120468
>4 ядра, а не 12.
Но они сильнее моих амдшных или нет?
Anonymous No.120511
>>120433
>Вот почему современные процессоры не дружат с рейтрейсингом?
А почему они не дружат то?
Мне кажется процессор любой архитектуры будет ретрейсить дольше растеризации с буфером глубины. Это просто разные алгоритмы как O(n^2) и O(n), и собрать процессор на котором будет быстрее работать первый алгоритм нельзя.
Anonymous No.120514
Где можно найти гайд степ бай степо по геймдеву?
Anonymous No.120538
>>120514
Таких нету.

Заголовок спойлера
1. Придумываешь идею. Геймдев разный и нужно примерно представлять что ты хочешь делать и на какой роли.
2. Игра состоит из кода и контента.
Код:
- Можно использовать движок. Придётся изучить 30..50% программирования, просто чтобы мочь эффективно использовать движок, подходит не для всех жанров. Рекомендуется начать с базовых основ программирования без движка - изучить (можно в теории) что такое переменные, функции, циклы и массивы, дополнительно посмотреть что такое объекты и методы в ооп (99% движков используют ооп). После этого садиться за гайды по движку, если не понятно - вернуться к основам программирования.
- Можно не использовать движок. Нужно изучить 90% программирования, и помимо этого изучить многие из нижепредставленных разделов:
- линейная алгебра (матрицы, расстояния от прямых до точки, решение систем уравнений - нужно для всего кроме визуальной новеллы или другой текстовой игры)
- основы компьютерной графики (знание какого-то апи для вывода графики, общие сведения про текстуры и полигоны - нужны чтобы нарисовать хоть что-то)
- пользовательский интерфейс, многие игры годами страдают от невнятного интерфейса, которым неудобно пользоваться. Особенно этим страдают инди-игры вроде майнкрафта или project zomboid, и даже использования движка не всегда спасает от этой беды. Логика работы интерфейса может быть очень сложной и требует отдельного изучения.
- представление игрового мира - может быть довольно нетривиальной задачей разобраться каким образом должны храниться и взаимодействовать игровые объекты. Например, даже простое взаимодействие рельефа, игроков и каких-то боевых способностей можно сделать множеством разных способов. А если это ещё рпг с квестами, которые взаимодейтсвуют друг с другом... Скорее всего это тоже требует отдельного изучения и практики.
- библиотеки для загрузки разнообразных форматов изображений, анимаций, моделей или звуков - представление этого в коде (использования движка очень хорошо тем, что избавляет от всех этих проблем разом - разобраться и сделать то, каким образом загружается и используется трёхмерная моделька с костной анимацией может быть довольно трудоёмкой задачей)
- вычислительные алгоритмы (тонкости работы чисел с плавающей запятой, эффективные алгоритмы и структуры данных - нужны для любой трёхмерной игры с картой больше чем 30х30 метров, или двухмерной игры с множеством объектов)
- сеть и мультиплеер (знание какого-либо апи для передачи данных, p2p и клиент-серверная модель, lock step и компенсация пинга - понимание что и в каких случаях лучше подойдёт)
- подробности компьютерной графики (тени, шейдеры, hdr, DoF, скелетные анимации и прочее - если игра трёхмерная и там нужна более красивая картинка)
- основы физики при использовании физического движка (численные методы интегрирования, минимальные сведения про обнаружение столкновений, вращения в пространстве через кватернионы - нужны просто чтобы эффективно использовать уже имеющийся физический движок) Разработка собственного физического движка задача намного более трудоёмкая, чем создание игры.
- кучи мелких мелочей, вроде воспроизведения звука, которые не такие крупные - но всё ещё могут потребовать нескольких часов изучения.
(плохие новости - из всего этого "степ бай степо" гайды есть только по компьютерной графики и движкам, численным методам - какого-то внятного хотя бы просто сборника статей про физику или ui я никогда не встречал)
Контент:
- модельки
- создание геометрии
- текстурирования моделек
- анимация моделек
- эффекты (взрывы, искры и анимации способностей могут потребуют чего-то большего, тем моделька с текстурой)
- левел-дизайн (придётся создавать собственный редактор карт или использовать процедурную генерацию мира, алгоритмы которой могут быть очень сложны)
- Если есть квесты или другие события изменяющие глобальное состояние мира, то задача усложняется ещё сильнее
- компьютерные противники
- разработка внятного интеллекта даже для отдельных мобов может быть сложна (если уровни имеют сложную форму, укрытия или если есть какие-то сложны способности)
- разработка внятного глобального противника (вроде вражеского игрока в стратегии) контролирующего множество юнитов и с возможностью создавать новых юнитов выходит за возможности соло-разработчика в любой нетривиальной игре.
- музыка и звуки

3. Выписываешь вышепредставленные разделы необходимые для твоей игры, то за какие разделы в ней ты будешь отвечать. Нанять художника для создания модельки просто - он может сделать часть работы и уйти, нанять программиста сложно - скорее всего он должен быть один на протяжении всей разработки, он не может сделать часть работы и уйти, в противном случае следующему будет намного сложнее - возможно настолько, что будет проще начать с начала скопировав лишь отдельные части.
4. Выбираешь языки и инструменты. По очереди исследуешь выписанные разделы, возможно по "степ бай степо" гайдам, которые для отдельных разделов могу существовать.
5. Создаёшь техникал-превью - простейший прототип с демонстрацией основных идей.
6. В этом месте нужно подумать про маркетинг - разобраться для какой ца ты делаешь игру, как много денег и времени ты готов на это потратить, где продавать и чем завлекать игроков.
7. Теперь можно переделывать более чистую альфа-версию, куда внедрять часть контента. Возможно будет смысл начать с начала, а не модернизировать техникал-превью. Есть смысл создать план, что в альфе будет и чего там быть не должно.
8. После завешения альфы нужно тестировать и балансировать, ты её создал - ты знаешь её как пять пальцев, но для стороннего игрока она может оказаться невероятно непонятной и сложной, неудобной в управлении.
Anonymous No.120761
15936192289280.png (59 KB, 1029x793)
15936192289711.png (24 KB, 776x432)
Новости вторжения альенов.

1. Запилил стрельбу альенам.
2. Дамаг по игроку теперь проходит.
3. Джва новых типа кораблкиков. У всех разный урон, скорость и злобность.
4. Добавл анимацию вращения альенов на цель. Теперь очень правдоподбно(нет) летают.
5. Пофиксил пути движения. Но они все равно получаются с резкими перегибами, что не очень красиво.
6. Увеличил разрешения игоря с 800х600 до 1024х768. Хотел сдеать камерную арену, но чет потом стало тесно.

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

Что еще надо зделоть до конца:
1. Все эффекты - анимация попадания, анимация врыва кораблики, врек, след движения, щит.
2. Несколько мегадвевайсов для прокачки корабля игрока. Да будут элементы РПГ между сражениями, возможно с любовной кулсторей между ГГ пилотом и ученым(это белая женщина - уточнение для барнаульцев).
4. Учет очков.
5. Несколько новых видов оружия альенов и типов атак. Это очень спорно из-за того что игроку уже сейчас не хватает живучести и если альенам дать что-нибудь помощнее то будет непроходимый жопоразрыв. В любом случае у них будут еще лучи.
6. Нормальные тайминги атак. Есть подозрения, что синус и косинус могут помочь.
7. Финальный босс вертолет материнский корабль. Это пидос, я не осилю графон. У него будут атаки в стиле булет-хелль, но уже заранее понятно, что подвижности у игрока нет, он неизбежно соснет. В этом главня трагедия игры.
8. ИНТЕРФЕЙС - это настоящий босс игры для меня. Есть готовая библиотка, но она не протестирована, что гарантирует приключения в отладчике.

Такие дела.
Anonymous No.120774
>>120538
Просто вау!
>>120761
Ты молодец анон, продолжай в том же духе
Anonymous No.120801
Годаны, объясните кто-нибудь, как без огромных массивов малопонятного кода сделать машину состояний для 2Д-платформера? Сколько ни смотрел, у каждого свои способы - от массивов магических рун кода на целые экраны до отдельных нод.
Anonymous No.120812
15936648178490.webm (542 KB, 1200x800, 00:00:12)
Для платформера одна из основных сложностей (фич) — сделать контроллер персонажа. У меня даже стокновения еле идут.
Anonymous No.120814
15936658895910.png (5 KB, 795x489)
Хахахаха, рандомная генерация текстуры! Как вам такое, опенглогулагеры? В опенгле пришлось бы буфера какие-то генерировать, текстуры инициализировать. На ЦПУ все буфера уже в ОЗУ!

>>120801
У меня во всех играх ноды, у которых могут быть коллбеки для определения поведения.
Anonymous No.120855
>>120814
>Как вам такое, опенглогулагеры?
Всё ещё ничего такого, что нельзя нарисовать с использованием opengl с минимумом изменения кода.
Anonymous No.120859
15936856082680.webm (478 KB, 1200x800, 00:00:09)
Эта женщина бегает неправильно!

>>120855
А если запускать bare-metal на микроконтроллере? Не думаю, что на МКУ легче портировать какой-нибудь LLVM-pipe, чем софтрендер.
Anonymous No.120869
>>120859
>bare-metal на микроконтроллере
>МКУ
>LLVM-pipe
>софтрендер
Что?
Anonymous No.120874
15936947262490.webm (2420 KB, 640x360, 00:01:44)
Anonymous No.120895
>>120859
> Эта женщина бегает неправильно!
Больше на полет в невесомости похоже.
Anonymous No.120920
>>120874
Бляяяядь, я надеялся, что ты на сосаче останешься.
Anonymous No.120921
>>120869
bare-metal на микроконтроллере это частный и частый случай запуска программ на МКУ.
МКУ это микроконтроллер, по английски Micro Controlling Unit.
LLVM-pipe это софтовая видеокарта, можно опенгл на процессоре считать.
Софтрендер это софтрендер.
Anonymous No.120928
>>120921
Какое отношение имеют микроконтроллеры к рендеру картинки для платформера?
Anonymous No.120935
15937286972350.webm (19756 KB, 800x600, 00:05:50)
15937286976941.png (53 KB, 1027x791)
Обещанный видосик с геймплеем на кончиках пальцев. Минуту в конце отрезал где меня слили, на 3мб не влезал в лимит.

Алсо, сегодня проебал первые 5 фпс. Еще заметил, что течет память когда игра свернута в трей, лол.
Anonymous No.120937
>>120935
прикольно. А как траектории движения сделаны, когда они летают и стреляют?
тред выше не читал
Anonymous No.120938
15937320692050.png (25 KB, 806x625)
>>120937
Траектория это сплайн Катмулл-Рома: https://en.wikipedia.org/wiki/Centripetal_Catmull–Rom_spline

По этому сплайну можно идти как по прямой задавая некторое время t от его начала и получая интерполированые координаты точек в пространстве. Он гарантировано проходит через все заданные точки включая начало и конец плавно скругляя повороты. У меня перегибы получаются только в местах где курс меняется на 180 градусов. Сами точки пути для сплайна генерется случаным образом в заданных регионах экрана, есть специальный плавающий регион напротив игрока чтобы он не заскучал, а последняя точка пути атаки находится за краем экрана. Альен понимает что атака закончена когда время t его сплайна равно количеству входящих в него точек и генерит новый сплайн возвращения во флот.

Пикрелейт старый скрин с дебагом полета.
Anonymous No.120948
>>120928
На них легче рендерить софтрендер, а не щзутпд
Anonymous No.120949
>>120935
Неплохо, хорошо.

Но для современной аудитории, наверно, надо сделать больше снарядов, с разнообразными спрайтами и большим количеством как в тохе. Ну и твой корабль в таком случае, должен двигаться во все стороны.
Anonymous No.120958
>>120935
Почему свои и вражеские снаряды ничем не отличаются?
Почему твой корабль такой медленный, по сравнению с вражескими?
Anonymous No.120986
>>120949
>как в тохе
О нет только не тоха. Отвратительная хрень с позиции здравого смысла. Заливать весь экран разными снарядами которые летят куда угодно кроме как в игрока это фейл. По лору сражения идут со всякими могущественными феечками-волшебницами. Чтобы показать какие они ниибаться могущественные каая первая создает шитшторм снарядов. Но сильный могущественный противник именно и тем силен, что он может одним ударом точно в лоб сделать игроку неприятно, а не изображать из себя клоуна - смотри какие спецэффекты я могу колдовать. И да, у меня все альены действительно на полном серьезе хотят убить игрока и целятся точно в него, а не изображают как они хотят его убить попукивая в левый верхний угол экрана.

>корабль в таком случае, должен двигаться во все стороны
Может добавлю потом небольшой маневр по Y. Вообще можно будет сыграть в игру вдвоем за одной клавиатурой, у каждого игрока есть своя высота, так чтобы они не пересекались. Если добавить перемещение по Y, то нужно решить, что делать с пересекающимися игроками.

>>120958
>Почему свои и вражеские снаряды ничем не отличаются?
Оружие на одних и тех же физических принципах, поэтому и одинаковые. У игрока лазер чуть похуже кстати, у него релоад 2 секунды, против 1 секунды у чужих.
>Почему твой корабль такой медленный, по сравнению с вражескими?
Чужие развитая цивилизация ослившая дальние путешествия со сверхсветовыми скоростями. Понятно что у них ветка движков будет прокачена лучше чем у человечков сычующих на земле. Жестокая галактика короче.
Anonymous No.120990
>>120986
>попукивая в левый верхний угол экрана
Тучую, в реальном мире мне бомбы из-за этого не нравятся. Зачем они взрываются во всех стороны, они что, такие тупые? Взяли бы бомбу, да направлили бы всю энергию в одну точку, так что можно снимать террориста с расстояния в километры. Или в банках поставить по бомбе и пусть они взрываются, убивая только грабителей.
А Ким Чен Ын уже давно мог взять свою ядерку, направить её под углом в землю и задестроить вашингтон. Но он же даже не тиран, а простой позёр.
Anonymous No.121006
15938680151810.webm (1233 KB, 1200x800, 00:00:24)
Запилил новый дизайн+анимацию персонажа. Пока только анимация бега есть.
Я не могу сейчас заниматься игрой фуллтайм, ведь на стим директ тоже нужны деньги
Планирую потом сделать игру пиксельной. А для этого надо нормальные координаты для текстур обрабатывать, а то сейчас у меня просто берутся икс и игрек луча для частного случая ортогональной проекции.
Тайлов размер сменить с 32 до 24, ГГ будет умирать через несколько секунд, если пройдётся в однотолщевой тоннель (на голову давит).
Пост отредактировал Anonymous
Anonymous No.121017
>>121006
>Планирую потом сделать игру пиксельной.
Это как? Сделать текстуры с пикселями размером с кулак? Зачем так уродовать графин, сейчас неплохо ведь выглядит. Остави так.

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

Алсо, у тебя прыжки неправильно сделаны. В полете нельзя управлять направлением меняя его чуть ли не на протвоположное как у тебя.
Anonymous No.121031
15938789864410.gif (972 KB, 819x729)
>>121017
>пикселями размером с кулак
Размером с 3-5 реальных пикселей.

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

>В полете нельзя управлять направлением меняя его чуть ли не на протвоположное как у тебя
В случае моей игры действительно надо это поменять, но я ещё не занимался написанием контроллера персонажа полностью. Надо будет сделать и прыжки от стен, и добавлю ещё dash, стрельбу из оружия и ещё некоторые фичи.


Кста, персонажа я рисовал, смотря на превью платного ассета как на референс.
Anonymous No.121206
15939687277260.gif (25 KB, 240x370)
>>121031
Я вот персонажа почти целиком обрисовал по шаблонам старбаунда.
Разве что псевдоанимацию груди добавил. И надо будет исправить движение бёдер, наверное, но не знаю, как. Это ж всё сломает.
Блядъ, зачем я написал это вообще? Теперь это "похвастайся персонажем"-тред.
Anonymous No.121275
>>121206
В такое я играть нибуду! Серьезно, уебищные же пиксели-мутанты все портят.

Оставь графен как вот в этом видосе >>121006 Один пиксель богоугодно соответсвует одному пикселю реального экрана, выглядит збс.

>похвастайся персонажем
Прогрессом же.
Anonymous No.121281
>>121275
> уебищные же пиксели-мутанты
Но ведь не так уж и плохо... а что рук нет - так их потом прикрутим отдельной нодой...
Anonymous No.121412
>>121275
Можешь назвать хоть одну успешную игру, где виртуальный пикусель соответствует физическому?
Anonymous No.121473
15940563218740.png (792 KB, 1024x768)
>>121412
Unepic. Или еще вариант - жукорыцарь. Да вообще любой игорь где не делают пиксельную блевоту, а стараются сделать графон достаточно детализированым под большое разрешение экрана(зашакалить всегда можно успеть). Для меня загадка насколько надо иметь отбитое чуство вкуса, чтобы рисовать пиксели под экран 380х230 и натягивать их на фулхд. Раньше это выглядело из-за того что экран был меньше и сам мылил картинку, а теперь бешеные диагонали у каждого первого и острые края у любого контура.
Anonymous No.121482
15940578365120.png (119 KB, 1920x1080)
>>121473
>Unepic
>over 4000 ревью в стиме
Ну ладно, пример засчитан. Но что-то пиксельные там только мобы и ГГ, судя по твоему скриншоту, остальное проантиалиазено.
А причём тут Hollow Knight я вообще не понимаю. Он же не пиксельный, а мультяшный.

>рисовать пиксели под экран 380х230 и натягивать их на фулхд
Не, во многих современных пиксельных играх есть непиксельные эффекты типа освещения, "туманов" и подобного.
Хотел привести пикрилейтед Celeste и кружки тени и света на заднем плане, но они оказались пиксельными. Но, по крайней мере, с плавной палитрой, а не как у пиксель-арта.
>острые края у любого контура
Как я и говорю, это просто стиль такой.

Извини, но мне кажется, что ты какой-то инопланетян с плонеты жопа, не разбирающийся в видеоиграх. Именно такие как ты и покупают у меня Индустриворкс и Чессмейтс.
Пост отредактировал Anonymous (Причина: минус ин)
Anonymous No.121486
>>121275
>Один пиксель богоугодно соответсвует одному пикселю реального экрана, выглядит збс.
По-моему, в таком случае игра перестаёт быть пиксельной и становится просто 2д.
Anonymous No.121493
>>121412
АоЕ 2. Её 20 лет и до сих пор в неё играют тысячи игроков через воблу. Может быть сейчас меньше из-за DE-версии (это ремейк).
Anonymous No.121554
15940938837520.png (54 KB, 320x180)
15940938837791.gif (602 KB, 506x500)
>>121482
Твой пикрелейт имеет размер "пикселя" 6х6 при разрешении 1920х1080. Если сжать эти кубы до одного православного пикселя то получим разршение картинки 320х180 - пикрелейт. На экранах доисторической эпохи первых компов кортинка действительно была охуительная, но теперь это просто говноедство и каргокульт ретродаунов. Под 1920 надо рисовать честные 1920 пикселов, тут какбы ленивым сракам очевидно, что это ручной работы в 36 раз больше чем нахалтурить "у меня ретро азаза".

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

Второй пик это тру пиксель арт. Зацените детализацию.
Anonymous No.121563
>>121554
>Второй пик это тру пиксель арт
Что? Это совсем не пиксель арт. Паул Робертсон рисует в мультяшном стиле, просто контуры без антиалиазинга. Есть такое движение, когда рисуют обычные картинки, но с пиксельным контуром. И это совсем не пиксель-арт. Как я и говорю, пиксель-арт схож с импрессионизмом.
С таким большим разрешением может любой дурак художник рисовать, а ты попробуй уместить лицо персонажа в размер 4x3 пикселя.
Anonymous No.121579
15941032321630.png (2 KB, 300x400)
>>121563
>попробуй уместить лицо персонажа в размер 4x3 пикселя.
Пффф. Да я и в один могу. Только зачем нужен трешак?

Пиксели это детализация, а не попытка всё сжать.
Пост отредактировал Anonymous
Anonymous No.121589
>>121579
И что это за лицо? То, что ты нарисовал это уровень дошкольника. Где тени, где ресницы, где эмоции? Такое вряд ли пойдёт в коммерческий геймдев.

Кстати, вот список успешных пиксельных игр: https://store.steampowered.com/tags/en/Pixel+Graphics#p=0&tab=TopSellers (правда, там не все игры пиксельные). Это говорит о том, что пиксель-арт это нормальное художество.

Мне не нравятся всякие графонослайсы типа зе ласт оф аз, резидент эвил ремейк, анчартед, но, всё-таки, такие игры существуют и не считаю их чем-то плохим или неправильным. Просто они для детей.
Anonymous No.121612
15941113045870.jpg (10 KB, 474x350)
>>121589
>Где тени, где ресницы, где эмоции?
Всего двенадцать пикселей. Чо ты хочешь за таие деньги в таком разрешении, поехавший?

А эмоции кстати есть. Рот в говне от ваших пиксельных поделок.
Anonymous No.121620
>>121612
Всё ясно, автору 12 лет.
/thread
Anonymous No.121654
>>121554
>Пиксели это ручная работа с формой и цветом.
Любая работа с растровыми изображениями – это работа с формой, цветом и пикселями.
Но ты почему-то не отличаешь пиксель арт от остального 2д.

>Второй пик это тру пиксель арт. Зацените детализацию.
Если для тебя обычный алиасинг – это пиксель арт, то ок.
Anonymous No.121955
>>120101 (OP)
>Наверное, тебе надо копать в сторону уравнений Навье-Стокса
Аноньчик, я никогда этим не занимался, но давай порешаем уравнение Навье-Стокса на этой неделе? Ну, кто как сможет. Например, я даже не знаю как решать такое уравнение численно.
Для начала начать с двумерного случая, если там всё плохо с вычислительными мощностями.
Anonymous No.121965
15942866980650.png (16 KB, 640x480)
15942866981391.png (18 KB, 960x720)
>>121554
>размер "пикселя" 6х6
Во многих стандартах изображения можно определить pixel aspect ratio, поэтому размер пикселя может быть любым.
Вот тру пиксель арт.
Anonymous No.121971
15942910188040.png (0 KB, 132x200)
>>121965
Да это ТРУЪ. Эффект полутеней и переходных цветов достигается дизерингом, а не расширенной палитрой как у петухов косящих под ретро. Кстати вот здесь на гифке >>121554 сделано везде также.

Пикрелейт пример с вики - получение фиолетового цвета из красных и синих пикселей.
Anonymous No.121977
>>121955
Можно попробовать, но надо разобраться со всеми операторами. Вот что такое ∇ {\displaystyle \nabla } \nabla — оператор набла и Δ {\displaystyle \Delta } \Delta — векторный оператор Лапласа? Смотрим на википедии, ага, это из векторных полей. Если не знаешь, что такое векторное поле и с чем его едят, то можно зайти на сайт mathprofi.ru.
Я пока не рассматривал что это такое.

>если там всё плохо с вычислительными мощностями.
https://www.shadertoy.com/view/WdVXWy
https://en.wikipedia.org/wiki/Computational_fluid_dynamics
кину попавшиеся сслыки
Anonymous No.121978
>>121977
>Вот что такое ∇
Довольно странно что кто-то связанный с программированием может этого не знать.

Мне скорее непонятно как от вот этого теоретического уравнения навье-стокса перейти к тому, как посчитать как плещется в бутылке вода, масло и воздух из которых масло и вода условно несжимаемые. Как описывается граница между поверхностями и всё в таком роде.
Anonymous No.122109
15943889164890.png (33 KB, 243x710)
15943889165241.png (18 KB, 594x326)
Новости вторжения чужих.

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

Также замечен новый корабль в составе атакующих флотов вторжения. Его предназначение пока разгадать не удалось. Он избегает прямых атак и никак не проявляет себя на поле боя. Ученые теряются в догадках и строят самые смелые гипотезы начиная с телепатического контроля других кораблей чужих, до дипломатической миссии данного корабля, но пока толком ничего не подтверждается.
Anonymous No.122121
>>122109
Придумал новою механику, и предлагаю её тебе. Корабль игрока должен лететь вперед с любой скоростью, но не 0 и плавно уклоняться. Чем больше скорость корабля, тем больше его урон. Когда корабль выйдет за границы экрана, то он должен обратно появится снизу с той же скоростью.
Anonymous No.122126
>>122121
Это будет уже больше похоже не скролл шутер. Надо чтобы хоть в чем-то оставалс элемент классики, я из-за этого не хочу даже добавлять движение по Y.

А возрастающего урон можно запилить всякими мегадевайсами, которые игрок сможет купить в маркете и поставить на свой кораблик. Тут удобно тем, что есть прямая зависимость от денег, т.е. есть вариация не от скилла игры, а от стратегии игрока.
Anonymous No.122150
15944102478470.webm (824 KB, 1200x800, 00:00:21)
Наконец-то освободился от работы. Теперь можно заняться геймдевом. Планирую с этой игры взять минимум 10XX баксодоллвров в первую неделю, но по моим расчётам, получу всего лишь 250.

Я пытался ввести в свой рейтрейсер маппинг текстур, но не смог, так как там какие-то матричные вычисления для барицентрических координат. В итоге продолжаю использовать костыли. Вспомнил, что можно заскейлить камеру, а не вертексы уровней и сделал 1x2 соотношение пикселей.
Нарисовал нижнюю анимацию ГГ, но надо бы ещё 2-3 боковых. Контроллер персонажа так и не написал.
Чтобы флипать ГГ, я её скейлю в -1 по иксу, но из-за этого её альфаобласти перемещают задний лучи и шипы видны не там, где надо.
Мне надо как-то научиться высчитывать UV-координаты для маппинга текстуры.
Кстати, после некоторых манипуляций ФПС упал с 45 до 35. Думаю, большинству игроков и 40 ФПС хватит, но не уверен.
Anonymous No.122156
>>122150
Пока не сказал я не замечал баг с шипами, лол.

Почему ГГ в конце видео падает, хотя вроде стоит на блоках?
Anonymous No.122157
>>122150
Прикольный персонаж.
Anonymous No.122159
>>122126
С такими вот стратегиями игр полно, я не говорю что это плохо, просто игроки остаются в играх где важен скилл, а с помощью интернета они будут хвастаться, тем самым продвигая твою игру.
Anonymous No.122186
15944594199920.webm (740 KB, 1200x800, 00:00:20)
Что за бред я выше писал?! Конечно же пользователям нужно 60 ФПС, а некоторым и 144. GLSL генерировать лучше, чем работать. Надо будет написать бекенд для моей графической библиотеки, чтобы рейтрейсить глсл-шейдером, который, в свою очередь, динамически генеировать при каждом новом добавлении объекта.
А если ввести поддержку геймпада, то продажи можно увеличить в 1.5-2 раза, но я таким никогда не пользовался и не уверен, можно ли мышкинскую механику на геймпаде юзать.

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

>>122156
>Почему ГГ в конце видео падает, хотя вроде стоит на блоках?
Потому что я ввёл коллайдеры только для одного уровня, а переход на другой уровень ещё не ввёл.
Проблемы велосипедных игр

>>122157
Спасибо. Это девочка-помидорка, когда она умирает, то разбрасывает десятки семян, из которых вырастают новые девочки-помидорки, но они начинают с платформера-яслей за кадром, а когда кто-то дошёл до того же места, где продул игрок, то история продолжается как бы от её лица.
Anonymous No.122191
>>122186
>чтобы рейтрейсить глсл-шейдером
Да просто отрендери без шейдера ванильным opengl. Ну что же ты так упорствуешь, чем это тебе повредит? Думаешь он не в состоянии нарисовать твои 16-цветные картинки?

А ещё у тебя не может быть для такой картинки меньше 60 фпс, это просто дичь какая-то.
Anonymous No.122192
>>122191
По-моему, растериазция для такой графики это бред. Ну ладно, может для 2D ещё зашло бы, но нет.
А моя игра будет требовать рейтрейсинг и обязательно. преломление света, отражения, рендеринг 3D-фракталов, мб, всё это будет.
А опенгл это как и точка.

>это просто дичь какая-то
Это неправильное использование системы по объектам, вычислениям, неоптимизировано.
Anonymous No.122196
>>122192
>По-моему, растериазция для такой графики это бред.
Для двухмерной?

Рестеризация: Ты указываешь для прямоугольника координаты x1, y1, x2, y2, сдвигаешь и масштабируешь их, и потом двойным циклом проходишь по прямоугольнику, получая st координаты текстуры как (x-x1)/(x2-x1). Нагрузка - 4х(время преобразования координаты)x(количество полигонов) + (количество пикселей полигонов)х(время выборки из текстуры). При этом тебе даже делить (деление работает раз в несколько десятков раз медленнее умножения) для каждого прямоугольника нужно только один (два) раза, ты считаешь чему равно 1/(x2-x1) и потом умножаешь на это для вычисления текстурных координат.

Ретрейсинг: Ты считаешь координаты луча-пикселя, проходишь по всем объектам высчитывая его st-координаты, при этом ты в каждом пикселе проходишь по всем объектам. Нагрузка - 2x(количество пикселей экрана)x(время преобразования координаты)+(время выборки из текстуры)х(количество полигонов)х(количество пикселей экрана).

Если у тебя весь экран разрешения 1200х800 закрашен мелкими квадратами и их 113 штук, то в первом случае нагрузка 452k1+960000k2, а во втором 1920000k1+108480000k2, в десятки раз больше даже с оптимизациями.
Вот давай сравним софтверный 2d-растеризатор, и софтверный 2d-"ретрейсер". Я думаю растеризатор победит абсолютно на всех задачах.
Anonymous No.122200
15944798662610.png (22 KB, 598x408)
Ух, наконец сделал UV-маппинг текстур на треугольник. Я использовал алгоритм Мёллера-Трумбора с этой https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-rendering-a-triangle/moller-trumbore-ray-triangle-intersection статьи.
Он оказался довольно прост, мне просто пришлось немного матрицы подучить. Зато узнал много нового, например, что такое детерминант матрицы или как сделать обратную матрицу. Вот бы мне для какой-нить задачи пришлось изучить интегралы и диффуры...
Я ещё на одном моменте немного сдался и захотел попробовать просто переносить вектор AP (треугольник ABC и точка пересечения на нём P) на базис/систему координат из AB и AC, чтобы, возможно, получить UV-координаты. Но там я что-то напутал с матрицами и вообще, вышепоказанный алгоритм гораздо лучше. Ещё и быстрый, вроде как.

>>122196
Да, растеризация победит, чтобы рисовать кводратики.
Но насколько легко с помощью растеризации сделать преломления, отражения в шаре, а в моей игре всё это я планирую сделать. Да, у меня будет 3D-игра, где в основном 2D идёт.
Да и зачем растеризацию эту пихать куда попало, когда рейтрейсер уже готов? Когда появятся процессоры с инструкциями пересечения луча и треугольника или даже луча и NURBS, тогда посмотрим на целесообразность.
Anonymous !Honey9.XOE No.122203
>>122200
>Вот бы мне для какой-нить задачи пришлось изучить интегралы и диффуры...
В прикладных задачах в комплюктере это всё равно считается численными методами, которые аппроксимируют поиск решения уравнений. Это вычислительная математика.
Но ты можешь выучить интегралы и диффуры для решения лабораторных задач студентам.
Пост отредактировал Anonymous
Anonymous No.122204
15944833262840.webm (18356 KB, 1920x1080, 00:00:44)
Сделал полноэкранное множество Жюлиа, с тысячей итераций. Можно накладывать на трёхмерный треугольник. 60 фпс стабильных (счётчик sfml в углу врёт, а православный счётчик в правом верхнем углу захватывается только в начале записи по каким-то причинам), хотя там самый тупой алгоритм в лоб, ещё и для раскрашивания синус считается (вместо шумовой функции там синус с малым периодом). Интересно, сколько фпс будет на лайси-куновском софтверном ретрейсере.
Вебм в 30 фпс, тому что в 60 фпс не хочет конвертироваться.

>>122203
А то ему не придётся изучить интегралы и дифуры, чтобы осмыслить вычислительные методы. Не, можно конечно какой-нибудь метод рунге-кутты четвёртого порядка точности, лол, скопировать бездумно.
Например он хочет сделать туман из сферических частиц - его прозрачность можно описать интегралом, считать его численно в каждом пикселе аутизм, когда можно посчитать формулу и за условно одной действие сразу получать прозрачность (сферического) облака по формуле.
Ещё, думаю, возможно если он будет писать какую-нибудь жидкость на частицах, возможно будет эффективнее считать взаимодействие пары частиц аналитически (пусть даже с каким-то приближением), чем итерировать это 20 раз только численными дифурами - но это уже в зависимости от уравнений взаимодействия зависит. Наверное. Я бы попробовал в общем.
Anonymous No.122208
>>122204
>шебм
Блин анон, это охуенно!
Anonymous No.122209
>>122204
>софтверном ретрейсере
Так зачем на рейтрейсере считать фракталы? Я вон мандельброта на сферу считаю вручную, исходя из координат текстуры.
>>122208
Тучую, он меня немного вдохновил тоже подобное сделать — с масштабированием. Только я, может быть, сделаю с темплейтами и посмотрю с флоатами, даблами и своим рациональным велосипедом.
Сейчас, если мою волю не перемнёт какая-нибудь другая вещт.
Anonymous No.122214
15944886985040.webm (20428 KB, 1920x1080, 00:00:56)
>>122208
>это охуенно!
Да ну, это весьма разочаровывает.
Колышущаяся трава из прошлого треда получилась в десять раз красивее и ретрейсер освещения для кубов тоже очень красивый, и там старания было больше - но они никому не понравились. А какой-то мусор на 80 строк написанный за 20 минут значит нравится - хотя там вебм конвертировалась дольше (я указываю битрейт 1600 - а он кодирует в 3500 всё-равно). Бред какой-то, это прям неприятно - когда хвалят то что ты сам считаешь говном и где даже не старался.
Запощу ещё вебм - только потому что на ней прикольные vp9-блоки пикселей начиная с тридцатой секунды. Что любопытно, vp8 конвертирует такое видео при том же битрейте с качеством заметно более высоким - то есть там буквально в два раза всё чётче на любом из кадров кроме ключевых. И быстрее в десять раз.
Anonymous No.122216
15944903672710.webm (8518 KB, 1200x800, 00:00:30)
У меня почти ничего не получилось. Сначала я долго пытался сделать масштабирование в место, куда показывает курсор, а потом забил и сделал как получилось. Что насчёт рендеринга, то double у меня 5 раз быстрее флоата оказался и при этом на 8 потоках double 1000 итераций 5 ФПС, когда весь мандельброт виден.
Точность у флоата плохая, а у дабла немного лучше. Надо будет попробовать с long double, но это позже.

Я, кстати, собирался использовать видео с фракталом для своей игры, как раз превращу эту технодемку в видеорендер и в 60 ФПС наделаю.

>>122214
Мне понравились твои пастрейсеные кубики.
Пост отредактировал Anonymous
Anonymous No.122217
>>122214
Не обижайся, анон, ценности и градация их собственной оценки от нуля до сверхценности у каждого свои и странно было бы ожидать полного совпадения у двух разных людей. А фракталы очень даже завораживают и визуализация у тебя хорошая вышла, имхо. У тебя ещё вложенные тобой старания влияют, другие затрачивают время только на просмотр.
мимо
Anonymous No.122221
15944956363150.webm (19909 KB, 1200x800, 00:00:02)
Уже поздно, так что сделал вам лишь 2 секунды.
Anonymous No.122224
15944979049410.png (330 KB, 1219x832)
>>122221
У меня пикрелейт. Так и задумано?
Anonymous No.122226
>>122216
>Сначала я долго пытался сделать масштабирование в место, куда показывает курсор, а потом забил и сделал как получилось.
Ты передвигаешь изображение так, чтобы кусок под мышкой оказался в центре, масштабируешь, и потом передвигаешь обратно на то же количество пикселей но с другим масштабом. Можно один раз перенести после, если вычесть из 1.4 1.0 и из 1.0 1.0/1.4
#p1 - точка (тупл из двух чисел) соответствующая центру экрана
#zoom - соотношение размера экрана и масштаба фрактала
#self.mx - позиция мышки (симметричная, от -1 до +1)
self.p1=self.p1[0]+self.zoom*(self.mx),self.p1[1]+self.zoom*(self.my)
if (z<0):#Вращение колёсиком в одну сторону
self.zoom*=1.4
else:#в другую сторону
self.zoom/=1.4
self.p1=self.p1[0]-self.zoom*(self.mx),self.p1[1]-self.zoom*(self.my)
Пост отредактировал Anonymous
Anonymous No.122234
>>122224
Нет, то ли тучка, то ли тор-браузер, то ли файрфокс, первый при 429 Too Many Requests, вторые в случае "повреждения" файла показывают твой пикрелейтед. Не знаю, кто именно так делает, но явно, что лучше не использовать веб и смотреть через mpv. Но админ всё никак не хочет убрать ошибку 429 Too Many Requests.

Я ставил -qmax 0 в ffmpeg. Кстати, ПНГ-картинки суммарно занимали меньше места, чем данная вебемка.
Пост отредактировал Anonymous
Anonymous No.122235
15945383321350.png (1 KB, 255x184)
Я ввёл поддержку треугольников в свою библиотеку и ФПС упал с 40 до 20.

Что не так с этим кодом (за исключеием, что нормали можно считать сразу, а не для каждого пикселя):
Код
u8 TriangleRaycast(vec3_t a,vec3_t b,vec3_t c,mrlRay_t* ray) {
vec3_t AB = b - a;
vec3_t AC = c - a;

vec3_t T = ray->pos - a;

vec3_t P = cross(ray->dir,AC);
vec3_t Q = cross(T,AB);

float t,u,v;

float delim = 1.0/(dot(P,AB));

t = delim*dot(Q,AC);
u = delim*dot(P,T);
v = delim*dot(Q,ray->dir);

if (t >= 0 && (u + v) <= 1.0 && u > 0.0 && v > 0.0) {
ray->normal = normalize(cross(AB,AC));
ray->intersect = ray->pos + ray->dir*t;

ray->u = u;
ray->v = v;

return 1;
}

return 0;
}

u8 TraceTriangles(mrlObject_t* obj,mrlRay_t* ray) {
float pos_z = obj->trans.v[14];
if (ray->pos.z < Mat4ZeroVec(obj->trans).z) {
return 0;
}

s32 axis = obj->data->mesh->axis;

vec3_t a,b,c;

float* vertex = obj->data->mesh->vertex;

b.x = vertex[0*axis + 0];
b.y = vertex[0*axis + 1];

c.x = vertex[1*axis + 0];
c.y = vertex[1*axis + 1];

if (axis == 3) {
b.z = vertex[0*axis + 2];
c.z = vertex[1*axis + 2];
}
else {
b.z = 0;
c.z = 0;
}

b = obj->trans*b;
c = obj->trans*c;

for (s32 t = 2; t < obj->data->mesh->num; t++) {
a = b;
b = c;

c.x = vertex[t*axis + 0];
c.y = vertex[t*axis + 1];
if (axis == 3) {
c.z = vertex[t*axis + 2];
}
else {
c.z = 0;
}

c = obj->trans*c;

if (TriangleRaycast(a,b,c,ray)) {
ray->vertex_index = t - 2;
return 1;
}
}
return 0;
}

Зато спрайт флипается.
Anonymous No.122241
15945433878050.webm (566 KB, 1200x800, 00:00:02)
>>122234
Вот я зделол работающую версию.

Твой шебм не воспроизводился на VLC даже офлайн. Короче конвертнул его в мп4 и получил 372кб при тех же параметрах - 1200x800x60, битрейт 1400. Потом это дело закодил VP9 с дефолтными параметрами исходника и получил за пять минут терпениума 430кб невоспроизводимого говна. Серьезно, видос тупо не открывается. Потом конрвентнул еще раз в VP8, тут за 30 секунд(примерно столько же занял конверт webm в mp4) получилось 580кб воспроизводимого видео.

Вывод: WebM - формат червь-пидор, формат мразь. У него нет ни скорости ни воспроизводимости, ни размера. Пеарят это говно только гуглорабы с анальным зондом в сраке.
Anonymous No.122242
>>122241
Пофиксил качество и ещё замедлил до 15 фпс - а то не видно ничего.
У меня открывается оффлайн, и в vp9 сконвертировалось без ошибок с дефолтными настройками. Не открывает только браузер-лисичка, возможно из-за gbrp(pc, gbr/unknown/unknown), 1200x800, lossless.
Пост отредактировал Anonymous
Anonymous No.122243
15945455082710.webm (1927 KB, 1200x800, 00:00:09)
>>122242
...
Anonymous No.122245
>>122235
>Что не так с этим кодом
Нужно усложнить структуру треугольника. Хранить не только вершины, но ещё и нормаль, две "бинормали", возможно коэффициенты abcd нормального уравнения плоскости - это можно сделать заранее до просчёта лучей, а потом в просчёте лучей просто использовать это.

>ray->normal = normalize(cross(AB,AC));
У тебя идёт цикл по всем треугольникам, верно? То есть ты определяешь пересечение, считаешь и нормализуешь нормаль (корень очень тяжёлый), а потом на луч попадает ещё один другой треугольник и ты снова считаешь нормаль? Хотя бы нормализовать уж точно можно было бы после всех операций.
Нужно проходить циклом по всему, записывая лишь глубину пересечения, и лишь в самом конце записывать одну нормаль, и один раз проводить рассчёт текстурных координат/освещения - по крайне мере в случае cpu, которое дружит с ветвлением и не дружит с корнями.

Ещё возможно нужно изучать квадрат расстояния до треугольника, как в случае со сферами.
Вроде бы вот тут написано что-то похожее для точки, судя по формулам: https://www.geometrictools.com/Documentation/DistancePoint3Triangle3.pdf
Но я не читал, не знаю английского.
Кстати, зашёл на их сайт: https://www.geometrictools.com/Source/Intersection3D.html#LinearPlanar - там что-то потенциально полезное для задач тобою решаемых.

По хорошему нужно сгенерировать массив лучей и треугольников разными способами и смотреть насколько быстро какой способ поиска пересечения использовать, прям отдельно вне рейтрейсинга тестировать функцию TriangleRaycast.
Пост отредактировал Anonymous
Anonymous No.122324
15946477666930.webm (2285 KB, 1200x800, 00:00:32)
Что за фигню я делаю?!
Надо делить не на уровни с дискретным и безвозвратным X, а чанки (я же делал ивс, 2D гораздо легче). Можно даже запилить ответвления от основных веток уровней, куда поставить интересные штуки или даже сделать нелинейное прохождение, чтобы можно было пойти в одну развилку или в другую и в итоге прийти к концу. Такое реплей-валуе, а раз реплей-валуе, то можно заодно и несколько плохих концовок добавить, в которых ГГ убьёт себя, спалив с семянами в результате психического шока и придётся начинать игру этап заново.

Кстати, у меня случился БАГ в рейтрейсере и теперь вокруг ГГини чёрный квадрат.
Также я добавил оптимизацию — проверить, трейсится ли сфера, описывающая меш, а потом трейсить сам меш. Это дало прирост в 2 раза.
Потом я добавил оптимизацию — сравнивать не длины, а квадраты длин (без корня), когда проверяю, объект ближе или дальше. Это дало никакого видимого прироста.

Когда же я перестану с механикой и буду с уровнями? Я собираюсь запилить 5 этапов по 10 чекпоинтов/уровней. После каждого этапа босс-уровень с графической индивидуальностью.
Пост отредактировал Anonymous (Причина: А, нет, это не рейтрейсера баг, а самой игры.)
Anonymous No.122330
15946557903490.webm (680 KB, 640x360, 00:00:09)
>>122324
Это помидорка?
Anonymous No.122344
>>122324
Красиво получается.
Anonymous No.122345
>>122330
Это твоя мамка, анон
Anonymous No.122346
>>122324
Зайчем ты это делаешь, анон? Ведь есть ж гейммайкер.
Anonymous No.122348
>>122346
Я свой путь гейпдевера начал раньше, чем программиста при помощи гейммейкера и юнити и я знаю, что обычное программирование гораздо лучше, ведь оно гибкое. Если бы я использовал гондот или юнитекство, то получались бы лагающие багающие глитчащие проваливающиеся коллайдеры, каждый раз игра вылетала, а я злился на элементы ГУИ этих конструкторов игр.
Кроме того, разве способен гейммейкер в рейтрейсинг? Я собираюсь добавить 3D-уровни с рейтрейсингом.
Anonymous No.122371
15946735387570.webm (18649 KB, 1762x984, 00:00:36)
126349 частичек в 120 фпс (2 обновления на один кадр - пришлось так сделать, потому что или медленно, или неустойчиво (как на вебм, только ещё более запущено) - а способ интегрирования более высокого порядка точности какой-то очень замороченный получается, там нужно производные проекций сил считать).

Наверное, я вечность могу смотреть на эту фиготу - жалко как заставку такое всё-таки не поставить.
Anonymous No.122372
>>122371
Это имитация волн? Они сами генерируют направление или можно управлять с помощью мышки?
Anonymous No.122381
15947084053240.webm (2639 KB, 1200x800, 00:00:34)
Теперь у девочки есть пушка!

Пока всё топорно, потом надо будет сделать и анимацию выхода пороховых газов, и след от пули и чтоб оружка не по кругу крутилась, а шаталась в некотором силовом поле в виде кольца вокруг главной героини.
Anonymous No.122382
>>122381
Мне кажется, что тебе надо сначала убрать следы от пуль, в конце фпс жестко просел.

А еще можно сделать чтобы девочка по команде крепко схватывала пушку и когда начнет стрелять, то имела дополнительную инерцию
Anonymous No.122383
15947100571630.webm (15060 KB, 1744x964, 00:00:45)
>>122372
Можно и с помощью мышки.
Вообще сами. Оно само, потому что там написано что-то вроде:
vx+=ax*dt; <-Изменение скоростей
x+=vx*dt; <-Изменение координат

При этом vx=10, dt=0.01, ax=-3000 и соответственно за одно обновление vx меняет значения с 10 до -20. И частички вместо того чтобы отталкиваться взрываются подобным образом. Нужно уменьшать ax - тогда частички станут ещё более "мягкими" и будут проваливаться друг в друга сильнее, либо уменьшать dt - но это замедляет симуляцию. Либо писать интегратор более умный, чем vx+=ax*dt, чем я сегодня, возможно, и займусь.
Anonymous No.122385
15947121474120.png (65 KB, 500x500)
>>122381
Выглядит как летающий дилдак.
Anonymous No.122387
>>122385
Для русских это так, им только такими делают.
Anonymous No.122399
>>122371
>>122383
Можна код? Хочу запустить.
Anonymous No.122412
15947441733470.webm (19731 KB, 800x600, 00:02:55)
15947441733621.png (81 KB, 1016x763)
ПРОЕБАТЬ ФПСЫ - Achievement Unlocked

Я написал в коде страшные вещи, зато почти довел до ума лучи, с остальным проще будет. Большими костылями сделал так, что луч впирается в первую цель, а не проходит всех насквозь. Это нужно чтобы пара игроков могла друг друга прикрывать от лучей, хотя это сомнительно конечно.
Anonymous No.122431
>>122399
Не хотелось бы, он пока очень уродский.
Тебе именно вот тот с этой неустойчивостью или просто сами частички? Если именно неустойчивость, то скину - а если посмотреть код, то я бы его переписал разок.
Anonymous No.122449
>>122431
Хорошо, перепиши и скинь.
Anonymous No.122646
15949790005290.png (66 KB, 1242x558)
ОП это ты там на политачике советуешь всем вкатываться в геймдев на самом низком уровне? Про дата-классы я тебе отвечал. :3
Anonymous No.122653
>>122646
Дата-классы это структуры из си?
Anonymous No.122654
15949852859920.png (25 KB, 1078x243)
>>122653
Да. Тот анон сказал, что вместо богомерзкого ООП пишет дата ориентированом стиле, я ему ответил, что доведенный до логического конца этот стиль приводит к классическому ООП. Но свои профиты у него тоже конечно есть.

Скринить свои посты это дно, но мне просто лень писать текст заново.
Anonymous No.122761
15951454820590.webm (10346 KB, 1200x800, 00:00:24)
Разбрасываю очертания уровней. Вы можете видеть баги в отрицательном игреке. Я решил сделать не 50 уровней : 5 этапов, а 4 этапа. После каждого этапа идёт спец-уровень с рейтрейсингом.
ФПС очень мало, поэтому, когда закончу с уровнями, надо будет сделать ГЛСЛ-графику, чтобы было 60 FPS, а за ним и управление будет 60 раз в секунду. Тогда я смогу понять, на что способен контроллер персонажа и подправить его возможности. А вслед за возможностями пойдут и ключи прецижин платформера. У меня их лишь горстка, так как в дизайне уровней я не оч, поэтому решил нарисовать просто контент.

Кроме того, мне в голову пришла гениальная идея. Если я смог неплохо срисовать пиксельную анимацию с референса, то можно использовать и референсы музыкальных нот, чтобы делать свою музыку неплохой. Я попробовал просмотреть ноты имперского марша, время вперёд, полёта шмеля и андертейла, но там что-то сложно, много каналов. Хотя, подобрать ключевые конструкции всё-равно можно.
Но не будет ли это считаться наглым воровством нотных конструкций? Я и так уже забрал у анона с сосача идею о персонаже, хоть и перерисовал его. А помню, когда играл в селесту, там в одной из глав фоновая музыка содержала что-то этакое из одного классического произведение, скорее всего, Моцарта.
Anonymous No.122764
>>122761
>Но не будет ли это считаться наглым воровством нотных конструкций?
Если позаимстовать один в один, то копирасты доебутся, а если сделать адаптацию по мотивам, типо почти тоже самое но чуть-чуть не похоже, то может прокатить. Если ты собираешься срисовывать ноты, то вряд ли у тебя получится точный оригинал, поэтому мне кажется не доебутся.
Anonymous No.122766
>>122761
>ФПС очень мало
Я бы удалил игру с таким графоном тут же, если бы она потребляла больше 2% загрузки cpu или gpu. Это графон уровня gameboy advance с 17 мгц и половиной мб оперативки. Только что разрешение больше.

Даже флеш рисовал графику намного быстрее, причём во весь экран и со сглаживанием: https://files.catbox.moe/gokxl9.swf
Anonymous No.122768
>>122766
Это же прототип, я собираюсь ввести преломлящие элементы типа линз. Во флеше есть линзы?
Anonymous No.122773
>>122768
Вроде бы нету, но всё остальное он рисует намного быстрее. Стало быть если в него добавить такие же лизны как ты добавишь в свой код, то он будет за счёт рисования всего остального всё ещё быстрее.

>преломлящие элементы типа линз
Зачем тебе линзы? У тебя игра про линзы и оптику? А если это визуальный эффект, то это того не стоит и ты можешь сделать нереалистичные линзы через костыль вроде линейного растяжения изображения в линзе.
https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BF%D0%B5%D1%80%D1%81%D0%B8%D1%8F_%D1%81%D0%B2%D0%B5%D1%82%D0%B0
Что ты думаешь про это? Разные цвета преломляются по разному. Тебе придётся отказываться от rgb-модели и задавать цвета массивом-гистограммой, верно?
Пост отредактировал Anonymous
Anonymous No.122783
>>122773
Да, я мог бы сделать графический движок гибридным — растеризация+рейтрейсинг, но зачем? Зачем переделывать код? Ради парочки оптимизаций, чтобы быстрее исполнять на тупых древних процессорах? Оставь свои микроконтроллеры и демосцены фанатикам. А то потом начнутся ошибки, баги, я не пойму, что не так. Прозрачность будет багованная как в опенгле. Это не нужно. Я всё-равно собирался делать бекенд для исполнения на видеокарте через GLSL.
>если это визуальный эффект, то это того не стоит и ты можешь сделать нереалистичные линзы через костыль
Вот именно, я не хочу делать костыль.

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

>Тебе придётся отказываться от rgb-модели и задавать цвета массивом-гистограммой, верно?
Что? Нет, это реалистичное преломления и освещение это уже из разряда path-трейсинга и суперреалистичного рендеринга. У меня игра с фантастической, а не реалистичной графикой.

Кроме того, в финальных для этапа уровнях понадобится рейтрейсинг, так как игра станет почти тридешной и с отражениями.
Anonymous No.122785
>>122766
Все-таки поговорка что дуракам половину работы не показывают верна.
Anonymous No.122819
15952366242340.webm (1206 KB, 1200x800, 00:00:10)
Для разминки написал технодемку с GLSL-рейтрейсингом сфер.
Теперь надо написать такое, но для треугольников и с текстурками.

Код из кинда лайсик:

GLSL
#version 420

uniform mat4 camera;
uniform mat4 camera_notrans;

out vec4 FragColor;

#define WIDTH 1200.0
#define HEIGHT 800.0

#define FOV 1.309


vec3 objposs[2] = {vec3(0.0,0.0,-35.0),vec3(7.0,-5.0,-38.0)};
float radiuss[2] = {5.0,3.5};
vec3 colors[2] = {vec3(1.0,1.0,0.0),vec3(1.0,0.0,0.0)};

vec3 lightposs[1] = {vec3(-4.0,15.0,-5.0)};


struct CastRet_t {
bool casted;

vec3 normal;
vec3 intersect;
};

CastRet_t SphereRaycast(vec3 o,vec3 d,vec3 pos,float r) {
CastRet_t ret;
ret.casted = false;

vec3 o_minus_c = o - pos;

float k1 = dot(d,d);
float k2 = 2dot(o_minus_c,d);
float k3 = dot(o_minus_c,o_minus_c) - r
r;

float undersq = k2k2 - 4k1k3;

if (undersq >= 0.0) {
float t_test = (-k2 - sqrt(undersq));

if (t_test >= 0) {
float t = t_test/(2
k1);

vec3 intrs = (o + dt);

ret.intersect = intrs;
ret.normal = normalize(intrs - pos);

ret.casted = true;
}
}

return ret;
}

#define OBJ_NUM 2

#define SMALLADD 0.004

vec3 RaytraceObjects(vec3 pos,vec3 dir) {
vec3 color = vec3(0.0,0.0,0.0);

int index = -1;
vec3 intersect = pos;
vec3 normal = vec3(0.0,0.0,0.0);

CastRet_t ret;

for (int i = 0; i < OBJ_NUM; i++) {
ret = SphereRaycast(pos,dir,objposs[i],radiuss[i]);
if (ret.casted) {
vec3 lvec0 = ret.intersect - pos;
vec3 lvec1 = intersect - pos;
if (index == -1 || dot(lvec0,lvec0) < dot(lvec1,lvec1)) {
index = i;
intersect = ret.intersect;
normal = ret.normal;
}
}
}


if (index != -1) {
int shadow_index = -1;

vec3 lightvec = normalize(lightposs[0] - objposs[index]);

vec3 shadow_pos = intersect + lightvec
SMALLADD;



for (int i = 0; i < OBJ_NUM; i++) {
ret = SphereRaycast(shadow_pos,lightvec,objposs[i],radiuss[i]);
if (ret.casted) {
shadow_index = i;
break;
}
}

if (shadow_index != -1) {
color = vec3(0.0,0.0,0.0);
}
else {
color = colors[index];
}

color = dot(normal,lightvec);
}


return color;
}

void main() {
vec3 pos = (camera
vec4(0.0,0.0,0.0,1.0)).xyz;

float x = gl_FragCoord.x;
float y = gl_FragCoord.y;

vec3 dir = (camera_notransnormalize(vec4((x - WIDTH/2)/WIDTHtan(FOV/2)WIDTH/HEIGHT,(y - HEIGHT/2)/HEIGHTtan(FOV/2),-1.0,1.0))).xyz;

FragColor = vec4(RaytraceObjects(pos,dir),1.0);
}
Anonymous No.122821
>>122819
>#version 420
>
>uniform mat4 camera;
>uniform mat4 camera_notrans;
>
>out vec4 FragColor;
>
>#define WIDTH 1200.0
>#define HEIGHT 800.0
>
>#define FOV 1.309
>
>
>vec3 objposs[2] = {vec3(0.0,0.0,-35.0),vec3(7.0,-5.0,-38.0)};
>float radiuss[2] = {5.0,3.5};
>vec3 colors[2] = {vec3(1.0,1.0,0.0),vec3(1.0,0.0,0.0)};
>
>vec3 lightposs[1] = {vec3(-4.0,15.0,-5.0)};
>
>
>struct CastRet_t {
>bool casted;
>
>vec3 normal;
>vec3 intersect;
>};
>
>CastRet_t SphereRaycast(vec3 o,vec3 d,vec3 pos,float r) {
>CastRet_t ret;
>ret.casted = false;
>
>vec3 o_minus_c = o - pos;
>
>float k1 = dot(d,d);
>float k2 = 2dot(o_minus_c,d);
>float k3 = dot(o_minus_c,o_minus_c) - rr;
>
>float undersq = k2k2 - 4k1k3;
>
>if (undersq >= 0.0) {
>float t_test = (-k2 - sqrt(undersq));
>
>if (t_test >= 0) {
>float t = t_test/(2k1);
>
>vec3 intrs = (o + dt);
>
>ret.intersect = intrs;
>ret.normal = normalize(intrs - pos);
>
>ret.casted = true;
>}
>}
>
>return ret;
>}
>
>#define OBJ_NUM 2
>
>#define SMALLADD 0.004
>
>vec3 RaytraceObjects(vec3 pos,vec3 dir) {
>vec3 color = vec3(0.0,0.0,0.0);
>
>int index = -1;
>vec3 intersect = pos;
>vec3 normal = vec3(0.0,0.0,0.0);
>
>CastRet_t ret;
>
>for (int i = 0; i < OBJ_NUM; i++) {
>ret = SphereRaycast(pos,dir,objposs[i],radiuss[i]);
>if (ret.casted) {
>vec3 lvec0 = ret.intersect - pos;
>vec3 lvec1 = intersect - pos;
>if (index == -1 || dot(lvec0,lvec0) < dot(lvec1,lvec1)) {
>index = i;
>intersect = ret.intersect;
>normal = ret.normal;
>}
>}
>}
>
>
>if (index != -1) {
>int shadow_index = -1;
>
>vec3 lightvec = normalize(lightposs[0] - objposs[index]);
>
>vec3 shadow_pos = intersect + lightvecSMALLADD;
>
>
>
>for (int i = 0; i < OBJ_NUM; i++) {
>ret = SphereRaycast(shadow_pos,lightvec,objposs[i],radiuss[i]);
>if (ret.casted) {
>shadow_index = i;
>break;
>}
>}
>
>if (shadow_index != -1) {
>color = vec3(0.0,0.0,0.0);
>}
>else {
>color = colors[index];
>}
>
>color = dot(normal,lightvec);
>}
>
>
>return color;
>}
>
>void main() {
>vec3 pos = (cameravec4(0.0,0.0,0.0,1.0)).xyz;
>
>float x = gl_FragCoord.x;
>float y = gl_FragCoord.y;
>
>vec3 dir = (camera_notransnormalize(vec4((x - WIDTH/2)/WIDTHtan(FOV/2)WIDTH/HEIGHT,(y - HEIGHT/2)/HEIGHTtan(FOV/2),-1.0,1.0))).xyz;
>
>FragColor = vec4(RaytraceObjects(pos,dir),1.0);
>}


Разметка потерялась. Я имел ввиду


#version 420

uniform mat4 camera;
uniform mat4 camera_notrans;

out vec4 FragColor;

#define WIDTH 1200.0
#define HEIGHT 800.0

#define FOV 1.309


vec3 objposs[2] = {vec3(0.0,0.0,-35.0),vec3(7.0,-5.0,-38.0)};
float radiuss[2] = {5.0,3.5};
vec3 colors[2] = {vec3(1.0,1.0,0.0),vec3(1.0,0.0,0.0)};

vec3 lightposs[1] = {vec3(-4.0,15.0,-5.0)};


struct CastRet_t {
bool casted;

vec3 normal;
vec3 intersect;
};

CastRet_t SphereRaycast(vec3 o,vec3 d,vec3 pos,float r) {
CastRet_t ret;
ret.casted = false;

vec3 o_minus_c = o - pos;

float k1 = dot(d,d);
float k2 = 2*dot(o_minus_c,d);
float k3 = dot(o_minus_c,o_minus_c) - r*r;

float undersq = k2*k2 - 4*k1*k3;

if (undersq >= 0.0) {
float t_test = (-k2 - sqrt(undersq));

if (t_test >= 0) {
float t = t_test/(2*k1);

vec3 intrs = (o + d*t);

ret.intersect = intrs;
ret.normal = normalize(intrs - pos);

ret.casted = true;
}
}

return ret;
}

#define OBJ_NUM 2

#define SMALLADD 0.004

vec3 RaytraceObjects(vec3 pos,vec3 dir) {
vec3 color = vec3(0.0,0.0,0.0);

int index = -1;
vec3 intersect = pos;
vec3 normal = vec3(0.0,0.0,0.0);

CastRet_t ret;

for (int i = 0; i < OBJ_NUM; i++) {
ret = SphereRaycast(pos,dir,objposs[i],radiuss[i]);
if (ret.casted) {
vec3 lvec0 = ret.intersect - pos;
vec3 lvec1 = intersect - pos;
if (index == -1 || dot(lvec0,lvec0) < dot(lvec1,lvec1)) {
index = i;
intersect = ret.intersect;
normal = ret.normal;
}
}
}


if (index != -1) {
int shadow_index = -1;

vec3 lightvec = normalize(lightposs[0] - objposs[index]);

vec3 shadow_pos = intersect + lightvec*SMALLADD;



for (int i = 0; i < OBJ_NUM; i++) {
ret = SphereRaycast(shadow_pos,lightvec,objposs[i],radiuss[i]);
if (ret.casted) {
shadow_index = i;
break;
}
}

if (shadow_index != -1) {
color = vec3(0.0,0.0,0.0);
}
else {
color = colors[index];
}

color *= dot(normal,lightvec);
}


return color;
}

void main() {
vec3 pos = (camera*vec4(0.0,0.0,0.0,1.0)).xyz;

float x = gl_FragCoord.x;
float y = gl_FragCoord.y;

vec3 dir = (camera_notrans*normalize(vec4((x - WIDTH/2)/WIDTH*tan(FOV/2)*WIDTH/HEIGHT,(y - HEIGHT/2)/HEIGHT*tan(FOV/2),-1.0,1.0))).xyz;

FragColor = vec4(RaytraceObjects(pos,dir),1.0);
}
Anonymous No.122855
Как продумать геймплей игры?
Anonymous No.122862
>>122855
Погугли хуету про геймлупы, наверное. Там есть что-то core-механиками называлось вроде бы. И ещё какие-то термины были.
Anonymous No.122867
>>122855
Берешь и играешь в голове в свое поделие. Оцениваешь насколько увлекает, просто или наоборот неприятно. Потом придумываешь как все пофиксить чтобы игорь всплыл.
Anonymous No.122888
15953301691090.webm (18652 KB, 800x600, 00:02:28)
15953301693431.png (89 KB, 1029x794)
15953301694822.png (18 KB, 800x600)
Новости вторжения альенов.

На прошлой неделе титаническими усилиями запилил ракеты. Три дня рисовал графон взрыва и все равно УГ какое-то, поставлен новый рекорд криворукой слоупочности. А еще походу придется разделять ракеты с самонаведением и просто торпеды без него. Проебывать дорогие боеприпасы на одиночные цели это антифан.

Еще запилил новый вид таргетинга у чужих, теперь они умеют пользоваться потоковым оружием правильно. На прошлом видосе видно, что иногда луч указывает не в ту сторону куда смотрит нос корабля. Это происходит потому что альен сам не знает чем он стреляет. Он думает что стреляет импульсным оружием: выстрелил -повернулся на новую цель. Из-за импульсного таргетинга есть небольшая вероятность(17%) что игроку стрельнут лучом прямо в лоб, увернуться от этого невозможно. Инстант дамаг это не очень, поэтому запилил новый тип целеуказания специально для лучей - противники сразу в лоб игроку не стреляют, но зато ведут луч всегда в правильную сторону. Алсо самый лулз, что после фикса поворота импульсный таргетинг все равно можно использовать для лучей - выглядит это как огнаненая стена в одной точке на несколько секунд.

В следуей серии чужим завезут волны и на этом с оружием всё.
Баланс получится такой:
Человеки: импульсные лазеры + лучи + ракеты
Чужие: импульсные лазеры + лучи + волны

Алсо, на втором скрине из-за бага нарисовано 2к спрайтов. Запас для проеба ФПС еще есть, может через систему частиц потом запилю эффект взрыва получше(но это не точно).
Anonymous No.122892
Какой сервис посоветуете, чтобы вести публичный документ с информацией об игре?
Anonymous No.122915
>>122855
Кроме того, что аноны свыше сказали, помни, что люди любят планировать. Используй их любовь к планированию, чтобы создать геймплей. Например, если монстры в игре генерируются совершенно рандомно, то игрок не знает их способностей и не может спланировать тактику и игра становится скучной!
Anonymous No.122918
>>122892
Гитхаб? Вообще не улавливаю, что тебе нужно от такого сервиса и почему инфу об игре нужно держать публичной. У меня опыта работы в команде нет, но меня устроило бы получать самую актуальну версию диздоков на игорь из соответсвующей ветки репозитория.
Anonymous No.123008
15954437617440.png (104 KB, 1032x568)
>>122761
>делать свою музыку неплохой
Долго же будет. Вот смотри кто-то даже музон умеет писать на том дваче.
Anonymous No.123046
>>122819
Я случайно твоё сообщение, где приводится пример кода через вычислительный шейдер.
Ты будешь пробовать, чтобы сравнить производительность вычислительного с фрагментным?

Я могу взять один из вариантов - предлагаю сделать какую-нибудь простую сцену, где 50 треугольников, 10 сфер, из которых 2 сферы и 5 треугольников полностью зеркальные. Просто как несколько си-массивов их указать, а дальше каждый уже сам как захочет эти массивы использует.
Можно с текстурами или ещё чем-нибудь.
Anonymous No.123408
15959640767050.webm (2879 KB, 800x600, 00:00:15)
15959640767931.png (30 KB, 784x410)
Бульдозер силы воли репортинг ин.

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

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

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

Такие дела.

PS: Что-то ОП на связь не выходит. Забухал штоле.
Anonymous No.123410
15959676037340.jpg (149 KB, 1684x1191)
>>123408
>Что-то ОП на связь не выходит
Угу. Не хочет играть со мной в шейдеры, бака такая.
Anonymous No.123420
Как на Си делать замедление экрана лучше всего?
Anonymous No.123424
>>123420
Что такое замедление экрана; и какое отношение к этому имеет си, если это вопрос исключительно к архитектуре движка, а не к си?
Anonymous No.123427
>>123424
Причём здесь движок?
Допустим, моделирую движение звёздочки по экрану. Мне нужно же как-то её рисовать. Для этого нужно замедление.
Anonymous No.123441
>>123427
Движок, не в смысле движок, а в смысле ядро твоей программы, то как она работает и моделирует звёздочки.

Не могу понять что такое "замедление".
Например, у тебя звёздочка двигается по закону x=a+b*t, в момент рисования получаешь, например, системное время, и считаешь t как текущее системное время минус начальное системное время, после чего рисуешь звезду в соответствующем месте?
Пост отредактировал Anonymous
Anonymous No.123442
>>123427
>Мне нужно же как-то её рисовать. Для этого нужно замедление.
Рисуй ее каждый кадр по одним и тем же координатам. А сами координаты изменяй со временем. Для времени используй что-нибудь системное типо GetTickCount. Формула движения оче проста: x = x + (Vel * dt), тут dt твое время между кадрами, а Vel желаемая скорость в пх/сек.

>на Си
Это конечно непрошеный совект, но если ты нюфаг(судя по вопросу), то лучше выкини богоподобную Си начни с чего-нибудь полехче. Я рикаменду связку C# + XNA. Профит в том что есть базовый каркас приложения в котором уже за тебя решили проблемы вроде расчета времени и управления окном и при этом есть полный доступ к низкому уровню графона - пиши какие угодно шейдоры и как угодно реализуй свой конвеер отрисоркив и в целом любую архитектуру игры.
Anonymous No.123480
сап, тучка, подкинте русскоязычных доков а лучше туторов степ бай степ по Vulkan.
Anonymous No.123485
Мне нагуглился сайт https://vulkan-tutorial.com/Drawing_a_triangle, там всё понятно расписано, но что-то я почти в голос расхохотался от всего этого кода, который нужен просто для создания контекста или как там это называется. Ненормальные, там в самом деле почти тысяча строк (https://vulkan-tutorial.com/code/16_swap_chain_recreation.cpp).

Я бы порекомендовал изучать opengl 4, при его изучении всё-равно вникнешь во все эти буферы, поллы команд и конвейер - но не нужно вникать сразу во всё ради отрисовки треугольника, что позволит немного более последовательно изучать это. Вулкан выглядит как что-то с высоким порогом вхождения, можно сказать я вовсе не понимаю зачем он нужен.
Anonymous No.123490
>>123485
> что-то я почти в голос расхохотался от всего этого кода, который нужен просто для создания контекста
Издержки полного и детерменированого контроля стейта на видеокарте. Раньше этим всем рулил драйвер видеокарты напополам с ГАПИ, и было слегка неоптимально в некторых местах отчег разработчики очень плакали. А теперь все можно сделать очень круто, но вручную, но зато очень круто.
Anonymous No.123491
>>123410
Баловство это всё. На шейдоры можно угробить кучу времени, а импакт на игру будет 0.5% вау-эффекта.

Тоже раньше баловался, но во время осознал какой же я бесперспективной хуйней страдаю.

Вот взять туже сверу что есть выше по треду (кстати вот она >>122819). Ее тупо не существует в коде, она есть только на экране ибо целеком захардкожена в шейдоре. Как к ней прикрутить например физон? Завести еще одну сферу в коде? А нахера их две, если мы можем одну и рисовать передавая ее как вершины, и сразу считать по ней физон. Она будет реально в коде, т.е. с ней потенциально можно делать все что угодно, в отличии от вкомпилиной в шейдер.

Шейдеры это та еще ересь.
Anonymous No.123494
>>123490
>было слегка неоптимально в некторых местах отчег разработчики очень плакали
>но зато очень круто
И сколько эти дополнительные расходы на работы драйвера и апи составляли от общего времени рендера? 3% или 1%? Брр, бред какой-то.
Мне кажется, что это даст заметный выигрыш только если постоянно переключаешь глобальное состояние и другим способом злоупотребляешь вызовами функций opengl. Достаточно просто держать низким соотношения количества геометрии к количествам вызовов opengl.

>>123491
>ибо целеком захардкожена в шейдоре.
Достаточно прикрутить ubo или ssbo со всей информацией про геометрию. Это раньше даже ubo не было, и люди кодировали геометрию в текстуру, которую в шейдере "распаковывали" потом.
Пост отредактировал Anonymous
Anonymous No.123514
15960873951510.webm (11678 KB, 1200x800, 00:00:48)
Пока тучка была в очередной раз убита админом (на самом деле она и сейчас полуубита), вы пропустили море контента. Но электровоз уже уехал.
Видео — суммари.

>>123046
>чтобы сравнить производительность вычислительного с фрагментным
Я не умею в вычислительные шейдеры.
А сам опенгл у меня чего-то не выдаёт больше 60 ФПС, наверное, интервалы какие-то надо настроить, незна.

>>123427
Тебе нужен "таймер"?
Вот пример кода из моей недоделанной ГУИ-библиотеки. Эта функция вызывает другую N раз в сек (если успевает) и делает ещё некоторые штуки, разберёшься.
void wlutInfExecute(wlutInfinity_t* inf) {
struct timespec time1,time2;
struct timespec sleep;

while (1) {
clock_gettime(CLOCK_MONOTONIC,&time1);

clock_t start = clock();
inf->func(inf);
clock_t end = clock();

if (inf->brk) {
break;
}

clock_gettime(CLOCK_MONOTONIC,&time2);

u64 usec = time2.tv_sec*1000000 + time2.tv_nsec/1000 - time1.tv_sec*1000000 - time1.tv_nsec/1000;

float cpu_time_used = (float)usec/1000000.0;

inf->realcps = fmin(inf->cps,1.0/cpu_time_used);

sleep.tv_sec = 0;
sleep.tv_nsec = 0;

if (usec < (double)1000000.0/inf->cps) {
s64 nsec = ((double)1000000.0/inf->cps - usec)*1000;
sleep.tv_sec = nsec/1000000000;
sleep.tv_nsec = nsec%1000000000;
}

nanosleep(&sleep,NULL);
}
}


>>123491
>Как к ней прикрутить например физон?
Вычислять физику на видеокарте не нужно, либо нужно использовать другие технологии типа OpenCL, вычислительных шейдеров (?).
Чтобы сфера двигалась, надо через юниформы передавать положения.
Anonymous No.123574
15961334508800.gif (13991 KB, 800x450)
>>123514
Норм, проснулся-потянулся.

>тучка была в очередной раз убита админом
Шта? У меня нормально робила.

>Чтобы сфера двигалась, надо через юниформы передавать положения.
Это полумеры. Все равно ее не существует в коде. Если надо чуть сложнее чем менять координаты, то уже будет вторая сфера в коде.

Шейдеры про "казаться, а не быть", я ненавижу показуху. Например пикрелейт гладкая стена по физону, очень страно, если в образовавшуюся огромную дыру нельзя будет залезть, значит картинка с геймлейной точки зрения не имеет значения - просто выкинутые вычеслительные ресурсы на показуху. Однократный вау-эффукт при полной пустоте содержания.
Anonymous No.123648
15961861025650.webm (6491 KB, 1200x800, 00:00:14)
Сегодня я смог делать игру 3 часа, когда в другие дни получается 2 часа и не каждый день. Моя воля растёт? Кстати, я недавно следил за собой, и оказалось, что на прокрастинацию я трачу всего лишь треть времени бодрствования. Куда утекает остальное время, я не понимаю.
Помню, когда я регулярно находился в школе, одноклассник спросил "А у тебя сильная сила воли?". Я ответил нет. "Почему? Если положить рядом с тобой батончик, то ты его не съешь?" — "Не съем" — "Так почему же ты говоришь, что у тебя слабая сила воли" не подумайте про него плохо, он тоже глупый пример привёл. Я и в самом деле не уверен, почему ответил так. Я подумал и решил, что у меня слабая сила воли, потому что, если меня накачают наркотиками или будут воздействовать электродами на центры удовольствия, то я не смогу сопротивляться.
Этот пример очень сложен и фантастичен, но недавно я понял что: человек является слабым волей, если потакает своему мозгу, идя против своей воли. Когда он прокрастинирует, наносит себе увечья, агрится на то, что ему указали на ошибки и много чего. Например, взять человека, который трудился над проектом, но через 1.5 года выгорел. Он всё ещё хочет сделать проект, ведь это классно (то есть, соответствует его воле), но он не получает эмоций и не может делать проект, не хочет. Это слабовольный человек. Если хочешь доделать проект, то надо решить этот вопрос и доделать его. Если ему так нужны эмоции, то пусть воспользуется мозговыми костылями и попробует выработать их искусственно или действительно взять свою волю в кулак и просто делать не смотря ни на что.
Проблемы начнутся, если человек на самом деле не хочет делать этот проект (как я и игры, но игры немного мне нравятся).
Не важно где находится его воля, в самом мозге, в некоей душе, да хоть в капельке метилметакрилата, главное, что бы она была.



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


>>123574
>Шейдеры про "казаться, а не быть", я ненавижу показуху
Понимаю о чём ты. Я так же ненавижу растеризацию, потому что это ненастоящий рендеринг для 3D. При помощи растеризации нельзя сделать правильное освещение, отражение (path-трейсинг и фотон-трейсинг это усовершенствованный рейтрейсинг). Также я ненавижу, когда ту же сферу описывают полигонами, а не нурбсами или другими кривыми (да хоть самой сферой).
Растеризация подошла бы для рендеринга шрифтов, графиков, линий. Но я этим заниматься не собираюсь. Графики я тоже буду рейтрейсить, лол.
А GLSL это просто костыль для использования мощностей видеокарт, ибо нельзя давать в массовый рынок игру с 10 ФПС.
Anonymous No.123761
Как написать точный физический (механический) движок?
Меня интересует как описывается вращение тела. Есть некий тензор инерции, но я не совсем понимаю, что он означает.
Меня интересует как сделать его точным. Не получится сделать прямую зависимость от формулы, так как задача трёх тел неразрешима, значит, придётся итерировать. Существует алгоритм Гилберта — Джонсона — Кирти, можно ли при пересечении сделать так, что используется одна дельта, если пересечение есть, то уменьшаем дельту и считаем заново и так до тех пор, пока пересечение не станет достаточно маленьким или есть более простой метод?
Anonymous No.123779
Придумал вам идейку для выживалки. Сам я реализовывать её не буду.

Жизнь монстра с нуля в человеческом мире. Игра начинается историей эмбриона, о том как он живёт, как развивается, он это рассказывает. Что он недавно осознал себя, исследовал окружающий мир (утробу), про поток крови извне. Что он научился управлять своими тканями и вырастил себе 4 ноги, 4 руки и 2 декоративных отростка, так как посчитал привлекательным. О том, как он децентрализовал себе сердце и некоторые другие органы (в т.ч. мозг, но его сложнее), так как считает децентрализацию более правильной. Но потом случилось непроправимое. Он родился.
Почувствовал как что-то происходит вокруг, это было очень страшно и неприятно, как его перевернуло головой и начало толкать. Когда он вышел, то сразу же заорал как резанный, ведь ничего не понятно, раньше он жил в прекрасном мире, а теперь его выбросило в совершенно неизвестную среду обитания. Приниматель родов стоит в кататании и офиге, ассистентка заорала и сбежала, мать спрашивает, что не так, что с её ребёночком. А сам ГГ встаёт на свои 8 конечностей и инстинктивно убегает. В этом этапе нельзя управлять им точно, разброс движения большой и он бежит по одному нажатию, пока не врежется в стену (не привык ещё). После того как он смог выбежать в коридор и перепугать весь персонал, добегает до поворота и показывают катсцену, где его мать с потными патлами, кровью падающей с низа и дикой болью в нижней части туловища добирается (думала, что какое-то животное утащило ребёночка), но осознает, что это то, что она родила и падает на четвереньки. Тут у главного героя проявляется нёбное жжение вокруг зубов (знаете, когда волнуешься или что-то типа того), он кусает свой рот и чувствует вкус своей крови. На экране появляется резкая надпись ГОЛОД, экран мутнеет, но обозначается цветом. Мать обозначена жёлтым цветом еды. Теперь ему надо побежать к ней, он врывается в неё и... Через несколько минут мирно сосёт молоко из груди. Врачи боязно положили нашу парочку на кушетку. Вызвали полицию на всякий случай, так как полученное существо точно не человек и очень непредсказуемо.
Когда ребёнок накормлен, пора на волю. Теперь ГГ научился управлять руками и может нелепо, но бегать. Тут управление нормальное, игроку надо прорваться сквозь полицию и сбежать в природные места. Лес, пустыня, равнина, дикий пляж, что-то из этого. А дальше идёт обычный геймплей выживалки. Построить укрытие, научиться искать еду. Бонусом надо сделать возможность ему изменять своё тело как в Spore или подругому.

Можно использовать такой сюжет и не для игры, а для комикса/мультфильма/фильма, но вряд ли он многим зайдёт, ведь ГГ — одиночка и alien. Иначе давно были бы популярны манги про протаганистов линуксоидов, безумных учёных, единственных оставшихся человеках на Земле.
Anonymous No.123781
15963653704270.png (8 KB, 1040x442)
>>123761
>точный физический (механический) движок?
Что такое точный? У вычислительных методов обычно есть порядок точности, например от шага по времени dt квадратично, от мелкоты разбиения пространства dx как четвёртая степень. Вопрос в том, насколько точно тебе оно нужно. Скорее всего оно не будет движком реального времени даже приблизительно. Ну это так, просто на всякий случай.
>механический
Насколько механический? Простые абсолютно твёрдые тела двигаются и сталкиваются? Волны внутри тел, их собственные колебания (вроде звучания связки ключей) - это вроде как тоже механика, которая описывается дифференциальными уравнениями, только там ещё и граничные условия будут сложные. А если у тебя разрушения тела, или сыпучие тела вроде песка - то скорее всего там даже более-менее общей теории особо нет - только какие-то отдельные методы для разрушения балки или разрушения кристалла, которые к абстрактной детали произвольной формы будут не очень применимы.

>если пересечение есть, то уменьшаем дельту и считаем заново
Можно попробовать на этапе просчёта столкновения определять через какую дельту столкнуться тела (из предположения, что они равномерно двигаются и вращаются). То что ты предложил - это ещё очень простой способ.
Посмотри на картинку (левую часть). Квадрат падает на две опоры (или стоит на них). Он должен оттолкнуться от двух симметрично. Почти все движки игровые (это же геймдев-тред, а не тред вычислительной математики для научных приложений) не дадут симметрии, потому что они просчитывают пары столкновения тел по очереди - и после отталкивания квадрат будет немного вращаться, а вместо стояния он может дрожать и дёргаться. Если это слишком просто - посмотри на правый пример. Ирл подобный квадрат (куб) незначительно деформируется по дуге, и его центральная часть как пружина выталкивает его вверх (рыжим примерно нарисовал деформацию). Когда добавляется третья несимметричная опора, то деформация неравномерна (зелёным), и куб после отскакивания (как мне кажется) будет вращаться, если материалы достаточно упругие. Вообще со стоянием одних тел на других много проблем, сила трения работает очень фигово - в действительности тела проминаются и есть некоторый люфт в котором оно двигается с трением, а в физическом движке тела будут дрожать, так что трение может "мигать" из-за дрожания.
>Меня интересует как описывается вращение тела.
Это незначительная проблема по сравнению с вышеуказанной. Можешь начинать делать 2d-движок, когда решишь там вышеуказанные проблемы одновременного столкновения больше чем двух тел - то перекатится в 3d с тензором инерции вместо одного момента инерции не составит труда.
Anonymous No.123821
>>123761
>Как написать точный физический (механический) движок?
Хз что имеешьпод словом "точный", но написать двиг чтобы считал точно как ирл за разумное время(реалтайм) невозможно. Всегда тела будут немного наезжать друг на друга при столкновениях, это лечится грязными хаками расталкивания или сткрытия фейловых пересечений.

Применительно к играм дествительно ценное качество физ.движка - детерминированость. т.е. он для одних и тех же исходных данных он должен давать одинаковые ответы. Из-за повторяемости результатов например в онлайндрочильнях можно исключить синхронизацию физики по сети каждый кадр, а делать ее значительно реже проверяя что игрок не читерит.
Anonymous No.123830
>>123821
А почему вообще можно написать недетерменированный движок? Я понимаю, что это возможно, но для чего? Авторы таких движков данные из /dev/urandom берут? Или сортируют указатели по адресам?
Anonymous No.123835
15964336880570.webm (12918 KB, 1200x800, 00:00:16)
Разум раскалывается и сростается, раскалывается и сростается. Таким образом, он растёт.

Почти доделал первый уровень, а ведь впереди их ещё много.

Я тут подумал, что было бы удобно иметь что-то типа ассетов. Когда связываешь графическую, физическую и другие составляющие в одно, добавляешь к ним скрипты и вводишь в игру. Этим можно упростить много чего. Может быть и попробую сделать что-то такое, но когда Лайси в полной мере выйдет, чтобы использовать лайси эмбеддед скрипты. А там до игрокового движка конструктора не далеко. И будет игровой движок, объединящий мой графический движок, мою ГУИ-либу и физических наделаю до кучи и добавлю встроенные 3D-редактор, вызываемый из рантайма, чтобы менять вертексы и ломанных, и кривых.
Ещё хорошо бы иметь возможность конвертировать мои ассеты в ассеты юнити, годота и другого, но вряд ли так получится и уж я-то точно этим заниматься не буду.
Ещё мне надо лучше познакомиться с ECS, что он из себя представляет на практике.
Но я не хочу связывать свою жизнь с геймдевом, так что не думаю, что дойдёт до чего-то большого.
Anonymous No.123857
>>123830
>А почему вообще можно написать недетерменированный движок?
Любой физон сам по себе получается недерменированым. На хардварном уровне влияет тот как реализован числа с плавающей точкой. Вроде как есть для этого стандарт, но он не покрывает граничных случаев и на разных процессорах можно получить результаты различающиеся в младших разрядах. Еще влияет как на системном уровне сделана функция времени, в туже копилку функция рандома. Все это дает расхождение результатов со временем для одинаковых физических тел.

>>123835
Хорошо получается. Тем временем я вообще обленился, лол.
Anonymous No.123881
>>123857
А что если использовать числа с неплавающей точкой ака инты, а дельту считать исходят из тиков (N тиков в секунду), то есть будет одинаковый шаг? Тогда она должна быть детерменирована (если шаг будет одинаков).
Вообще я вчера придумал как сделать дельты. Пусть будет дельта максимальная и дельта минимальная. Дельта максимальная это обычный шаг, обозначающий пройденной время, но если тела начинают сталкиваться, то можно уменшить дельту и просчитать заново и так до тех пор, пока он не будет равной минимальной дельте. Таким образом, столкновения будут более точными. Но будет ли это работать в риалтайме, я не знаю.

Я что-то вообще в механике плох, хотя и читал когда-то учебник по теормеху. С материальной точкой всё ясно, у неё одна мера инертности — масса. Вектора скорости и силы, вот и всё.
С 2D-телом я вчера пытался вспомнить, как разложить силу, приложенную в произвольную точку на силу, приложенную к центру масс и момент сил, но не смог. Ладно, сейчас пойду снова читать.
Я также не понимаю как происходит вращение 3D-тел. Они что, вращаются относительно трёх осей? Можно ли приложить к телу один момент сил в произвольном направлении и разложить его на моменты сил относительно ортогональных осей? Мне надо будет это узнать и понять. Также я не понимаю, почему волчок не падает и почему существует эффект Джанибекова.
Anonymous No.123894
15964479550440.webm (7881 KB, 640x360, 00:02:36)
>>123881
На количество тиков ещё будет влиять произвольное исходное состояние автоматов после прошлой задачи. Их ведь ещё нужно в заданное привести по какому-то алгоритму. Если глупости сейчас не ляпнул.
>Они что, вращаются относительно трёх осей?
Могут.
>Можно ли приложить к телу один момент сил в произвольном направлении и разложить его на моменты сил относительно ортогональных осей?
Да.
>почему волчок не падает
Потому что гироскоп. Объяснять долго, но суть в том, что по третьему закону Ньютона вместе с воздействием внешней силы вокруг оси, перпендикулярной оси вращения гироскопа возникнет момент реакции (гироскопический момент), направленный на внешние тела, который и будет стремиться сохранить ось вращения гироскопа. Наблюдаться при этом будет явление прецессии. Чем больше скорость вращения, тем меньшего углового радиуса будет создаваться прецессия при действии равной силы. Именно поэтому при замедлении волчка он начинает всё больше отклоняться от заданной оси вращения пока своей стороной не коснётся поверхности и окончательно не остановится под действием силы трения скольжения.
>почему существует эффект Джанибекова.
Потому что неустойчивое равновесие. Потому что у тела 3 разных момента инерции (по разным осям). Есть ось с максимальным моментом инерции вокруг которой самое устойчивое вращение, есть с минимальной в теории вращение вокруг ней также устойчиво, но реальные тела под воздействием внешних сил всё же однажды перейдут к вращению вокруг оси с максимальным моментом инерции и третья ось соответственно будет иметь некое значение между минимальным и максимальным и вот вращение вокруг этой оси будет самым неустойчивым. При вращения тела вокруг этой оси угловые скорости перпендикулярной оси (к оси вращения) от внешних возмущений продолжают нарастать вектора угловых скоростей в этом случае сонаправлены пока в какой-то момент угловая скорость не перестанет быть такой малой величиной как в случаях вращения вокруг других осей и тело перевернётся. Возрастание угловой скорости со временем, кстати, будет идти по экспоненте.
Anonymous No.124078
15966095268220.png (72 KB, 1030x793)
Принес вам скриншот. Два щита, два оружия, и новый реактор у игрока.

За неделю переписал все корабли на компоненты. Теперь корпус, движки, реактор, орудия и все остальная требуха - компоненты кораблика. Зачем? Во славу сатаны! Понадобилось сделать слоты под два оружия и еще два общих оборудования у игрока, и возникла проблема, что слоты имели свой графон, физон и меняли другие параметры корабля, поэтому проще было сделать все стандартными компонентами. Отдельный профит теперь даже оружие в слоте можно разное нарисовать при желании.

Сделал несколько простых бустеров для движков, реактора, брони и оружия. Все ставится только через код, гуя пока тонет.

Сейчас шиты до ума довожу - их надо заставить стекаться одинаковые. Потом буду физон им докручивать - нужно чтобы корабли прикрытые объемным щитом получали остаток урона если тот упал. Такой кейс нужен для ракеты.

Еще пара крупных компонентов которых пока нет - модули ремонта и модуль невидимости(хз нужен ли он вообще). Модулей ремонтов будет джва. Один только на себя, примерные параметры - 8 раз по +40 хп, за 10 сек на раз. Второй для себя и другого корабля - параметры 12 раз по +60 хп, за 20 сек/раз. У чужих будет что-то похожее в плане ремонта.
Anonymous No.125168
15972341597620.webm (15804 KB, 1200x800, 00:00:17)
Я чуть не сошёл с ума.

Но сейчас я снова взялся за игру и сделал второй уровень, начал делать третий.
Посмотрим, на один уровень 9 дней, всего их будет около 60, ну можно сказать 70.
Если использовать логику, то игра выйдет 15 Апреля 2021 года.
Если использовать мои навыки планирования, то она выйдет до 27 Сентября 2020 года.
Если использовать межушную нейросеть, то игра выйдет до 27 Октября 2020 года.

Пробелмы с прозрачностью, так как я улучшал свой графический движок и добавил багов.
Пост отредактировал Anonymous
Anonymous No.125225
15972506577110.webm (19164 KB, 800x600, 00:03:00)
Тоже отпишусь.

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

Полный список мегадевайсов у игрока за исключением оружия (все характеристики еще поменяются):

Броня (у корпуса корабля базовых 200 хп) - слот брони только один
Базовая - +100 хп
Продвинутая - +200 хп
Тяжелая - +350 хп
Варпброня - +500 хп

Реакторы - слот реактора только один
Базовый - Батарея 450 / Реген 5
Быстрый - Батарея 250 / Реген 15
Эффективный - Батарея 1000 / Реген 7
Совершенный - Батарея 500 / Реген 12

Все остальное ставится в слоты оборудования - их всего 2.

Щиты персональные
Базовый - Прочность 100 / Реген 2 / Перезарядка 25 сек / радиус 20
Быстрый - Прочность 50 / Реген 8 / Перезарядка 15 сек / радиус 20
Тяжелый -Прочность 450 / Реген 4 / Перезарядка 35 сек / радиус 30
Совершенный - Прочность 350 / Реген 12 / Перезарядка 40 сек / радиус 30

Щиты объемные
Базовый - Прочность 450 / Реген 4 / Перезарядка 25 сек / радиус 70
Тяжелый - Прочность 900 / Реген 10 / Перезарядка 35 сек / радиус 70

Ремонтники персональные
Малый ремонтник - Чинит +40 / Ресурс 8 / Время ремонта 15 сек
Большой ремонтник - Чинит +50 / Ресурс 12 / Время ремонта 10 сек

Ремонтники внешние
Внешний ремонтник - Чинит +60 / Ресурс 12 / Время ремонта 20 сек
Тяжелый внешний ремонтник - Чинит +100 / Ресурс 16 / Время ремонта 25 сек

Ускорители движков
Малый бустер - +25% скорости игрока
Большой бустер - +50% скорости игрока

Улучшение реактора
Дополнительный энергоконтур - +100 к запасу энергии / +200% реген
Дополнительный массив батарей - +500 к запасу энергии / +50% реген

Улучшения щитов
Поляризатор щита - +200% прочности / +25% времени перезарядки / +25% энергопотребления
Ускоритель щита - -25% прочности / +100% реген / -50% времени перезарядки / +25% энергопотребления

Улучшения энергооружия
Оптические системы фокусировки - +35% урона / +50% скорсти полета снаряда
Быстрый накопитель импульса - -25% времени перезарядки лучей и лазеров / -25% расход энергии

Улучшения ректного оружия (расчет на базовые 40 ракет и 8 торпед)
Конвеер подачи боеприпасов - -40% времени перезарядки лаунчеров / +8 ракет / +3 торпеды
Хранилище боеприпасов - +30 ракет / +8 торпед

-- я всё

В чем суть игры? Игра конечна и игрок играет за очки, но за них покупается оборудование, расходни, производится ремонт. Грейдя кораблик он снижает свой рекорд. Нужно зафититься по-минимому для получаения максимума разультата, такой себе челендж.

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

Сейчас надо научить АИ не посылать корабли поддержки в бой, и вообще сделать нормальные мирные корабли. Потом надо пилить флоты и делать расчет очков.

До ололо релиза примерно 4 недели. Делейте предзаказы!
Anonymous No.126680
15978623862770.png (25 KB, 648x532)
Бамп мертвому треду мертвых игор. До второй страницы утонул до того всем похуй.

Пилю глобальную карту, пока показать нечего.

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

На пикче с поднятым щитом у игрока дефицит энергии в единичку - +5 реген и -6 потребление. Для меня было откровением, что щит не падает, хотя должен разряжаться со скоростью своей регенерации. Неочень интуитивное поведение объясняется просто: 5/6 времени щит делает +реген, и 1/6 -реген, итого недостаток энергии дает всего 2/3 регена от номинала. Когда энергии нехватает то первые 50% недостачи идут как штраф к восстановлению, и только потом он начинает разряжаться.

Еще запилил NSNB-пушку - простой лазор стреляющий серией импульсов с небольшим разбросом. До конца непонятно сделать отдельную линейку таких лазеров или лучше специальный девайс дающий серию и разброс. Можно так и так сделать.

Вот.
Anonymous No.126686
>>120101 (OP)
А куда делся анон с индастриворксом? Треды, если что, не читал.
Anonymous No.126689
>>126686
Вот он >>125168
Anonymous No.126775
>>126686
Я тут есть и был, даже после того, как админ убил тучку джва раза.

Индустриворкс я уже давно забросил, собираюсь и игру про помидорку забросить. Недавно в треде я рассуждал, что у меня слабая воля, так как я не делаю игру, а ведь сделав, я мог бы заработать некоторые деньги. Но что если рассудить подругому? Мне не нравится делать игры. Можно было бы за денёк нарисовать демосценку по фану, но месяцами делать одну игру это не то. Я не хочу. И разве это моё волеизъявление — делать игры? Нет. Мои волепродукты были бы совсем другие.
Когда-то давно я начал и продолжал делать Индустриворкс, питая данный вектор воли надеждой на получении денег. А игра про девочку-помидорку по моим прикидкам принесёт всего лишь 250 долларов с продаж в первый месяц. -100 долларов на стим директ, итого 150. Да, доход, но я и так уже научился зарабатывать гораздо больше за месяц при помощи фриланса и сверхспособностей. Можно сделать игру, а можно просто поработать. В первом случае я смогу избежать большого стресса, а во втором случае всё будет быстрее. В глубине моя психика понимает, что мне ни к чему делать игры.
И ситуация в мире сейчас такова, что некогда развлекаться, надо заниматься реальными делами.
Боюсь, это закат моей игроиндустрии. Но надо подождать ещё пару месяцев для окончательного решения.
Anonymous No.126881
>>126775
>админ убил тучку джва раза
Чего?
Anonymous No.126902
>>126881
Помнишь, когда админ выключал постинг на пару недель, но при этом другие аноны могли постить?
Anonymous No.126907
>>126902
Не помню, у тебя шиза, кажется.
Anonymous No.126911
>>126902
Ты про то когда он без повода треды тёр? Помню-помню, но я бы не оскорблялся от такого
Anonymous No.126980
>>126902
Постинг с тора?
Anonymous No.131281
15988895084130.jpg (282 KB, 2880x1800)
Anonymous No.131291
>>131281
Галактика Сомбреро, наверняка.
Anonymous No.131302
>>120101 (OP)
на последнемм видосе симулятор травы?
Anonymous No.131934
15991024206200.webm (19581 KB, 800x600, 00:04:04)
>>131291
Хз, пик рандом.

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

Я просто хотел добавить немного аутирования в космосе между потными боями и илюзию нелинейного выбора какой флот чужих мочить следующим, но теперь сижу пишу поехавшую гравитацию, пытаюсь совладать с дорожанием обезумевшей камеры, вообще беспонятия как объединить двух игроков на одном экране если они розойдутся очень далеко. Прикрутил вторую опциональную камеру для сплитскрина и все выглядит как омск из-за разных маштабов на камерах. СЛОЖНА СЛОЖНА, а в глове все так красиво выглядит.
Anonymous No.131952
>>131934
Можешь станций прикрутить?
Напомнило reassembly
Anonymous No.132175
>>131952
Прикручу. Но потом.

Скорее всего их будет всего три с половиной штуки - пару добывающих в поясе астеройдов, одна научная на самой дальней орбите пару станций наблюдения на той же орбите что и земля, но с другой стороны звезды. Станции наверно остануться декорациями, с ними никак нельзя будет взаимодействовать. В игре на них можно только поставить метку вражеского флота - типо альены захватили, лети воевать, лол. Игрок сможет докаться только на орбите земляшки, к ней прикрутим лабу с компонентами корабля и меню прокачки. Простенько(нет) и со вкусом.
Anonymous No.132189
>>120101 (OP)
>хочу сразу делать игру. Как?
>Ответ: Учи C или C++
Это, пожалуй, самый идиотский совет, который можно было бы дать. Если человек хочет сразу делать игру, то он может взять условную lua и начать делать игру (а не учить коболы, которые к играм вообще никакого отношения не имеют (кроме крестов и ААА, но это нерелевантно, если человек только собирается запилить первую игру)).
Anonymous No.132733
15993155472870.webm (8144 KB, 1200x800, 00:00:25)
Ввёл физику боксдвадэ.
Также я решил уменьшить геймплей с четырёх этапов до часа, а то сложно очень.

Пока думал над игрой про помидороводевочку, придумал вторую часть для неё. Она лучше чем игра про нефтедевочку, так как включается в себя смысл игры про нефтедевочку, исключает одну плохую механику, добавляет в себя клоннинг скайрима (квесты и диалоги) и боёвку как в майнкрафте. Не знаю, сделаю ли я когда-нибудь такую игру, ведь для неё мне, прежде всего, надо сделать первую часть. Там надо очень много анимировать, но если подумать, то можно как-то зондировать свои конечности и анимировать с натуры, моушензахват. Ещё и лицо нейросеткой обрабатывать, чтобы анимировать лицо.
Anonymous No.132877
>>132733
>Там надо очень много анимировать, но если подумать, то можно как-то зондировать свои конечности и анимировать с натуры, моушензахват.
Нафига тебе именно свои конечности? Любая 3д-модель с анимациями может быть отрендерена в набор спрайтов. Забытая технология древних.
Anonymous No.132915
>>132877
>Любая 3д-модель с анимациями может быть отрендерена в набор спрайтов.
Это не нужна, вторая часть игры про помидородевочку была бы 3D-шной (так как по сюжету этой, главная героиня освободится от оков двадешного мира и перейдёт в 3D).

Что насчёт анимаций, то чем красивее и разнообразнее анимации, плюс щепотка реализма и будет гораздо лучше.
Anonymous No.132924
15993776671480.webm (8582 KB, 1200x800, 00:00:19)
15993776672031.png (44 KB, 640x519)
Фикстуры и формы для камней и чанков я генерирую отдельной программой, а не на лету.

Вообще, было бы прикольно ещё и привязать пиксели вращающихся предметов к своим UV-координатам или типа того, чтобы пиксели вращались как в Noita.

У меня ещё была странная проблемка. Когда из тел были только помидородевочка и "земля", то при запуске игра первые несколько секунд фризила, но отрисовать уже успела. То есть, это box2d что-то там кешировал. Я думал, ну ок. Но теперь, когда добавил больше тел, игра запускается мгновенно. И я не знаю, в чём проблема.
Anonymous No.135145
15999787678300.png (17 KB, 844x202)
Cpp или Java, чтобы клон марио на андроиде? Пиклейтед?
Anonymous No.135146
>>135145
Попробуй лучше kotlin. А то java слишком оопная, офисная и юриспруденческая. Когда пишешь на джаве, ощущение, будто зашёл в отдел бухгалтерии.

>клон марио на андроиде
Не, тогда выбирай Годот. Можешь ещё юнити попробовать, но он проприетарный.

>Пиклейтед
Я считаю, что если хочешь стать программистом, то надо начинать с Си, Ассемблера.

Если у меня появятся дети, то я постараюсь их вместе с чтением и письмом обучить и программированию. Сначала надо произвести/купить логические блоки, безопасные для жувания и глаз (стандартными ножками и элементами они себе могут глаза или пищеварительный тракт случайно проколоть) и всякие соединяющие элементы, чтобы познакомить их с электроникой и булевой алгеброй, чтоб им в подкорку логика зашла. Если не понравится, то хоть будут понимать, как это работает, а если понравится, то вдруг ненароком процессор соберут, когда я только собирался их познакомить с микроконтроллерами и ассемблером...
Anonymous No.135150
>>135146
>А то java слишком оопная
А чем это плохо? Любишь писать в процедурном стиле?
Anonymous No.135155
>>135145
>на андроиде
Джава. В десять раз больше инфы и примеров.
Anonymous !6bDimaS14A No.135972
Ищу художника чтобы вместе делать игры.
Anonymous No.136110
>>135972
Го
Anonymous !6bDimaS14A No.136386
>>136110
Есть телега, или еще что-нибудь? Пиши в тг если что @sober_sue
Anonymous No.137262
16006763195880.webm (12618 KB, 1600x912, 00:00:30)
Рисую 14 треугольников — 30 ФПС. Придётся писать опенгловский бекенд, мдауж. Растеризовать 2D-графику не зазорно, но в моей игре я собираюсь и 3D...
Anonymous No.137285
>>137262
Очень уже бросатеся в глаза разный размер пикселей на переднем и заднем плане. Мне кажется надо делать одинаковый размер чтобы было #нормально.

[Назад] [Обновить тред] [Вверх] [Каталог] [ Автообновление ]
187 / 79 / 92

[Ответить в тред] Ответить в тред

15000

Ответ в тред No.120101
Настройки
Избранное
Топ тредов