Igor
мне кажется гораздо лучше чем та cmake-колбаса
Мне лично удобнее читать CMake код, когда имею дело с билд системами
Igor
Не, ну кста оно хотя бы работает, медленно, но работает)))
Igor
Правда выходной архив, сука, гигабайта 3
Igor
С сжатием, надеюсь, будет хотя бы 700 метров
Lucky
символы отладки пробовал удалять? Там флаг вроде должен быть
Lucky
https://www.opennet.ru/docs/RUS/lfs5/chapter06/aboutdebug.html
Igor
символы отладки пробовал удалять? Там флаг вроде должен быть
Это RelWithDeb билд, нам дебаг символы нужны в любом случае
Igor
Я и так уже урезал размеры настолько сильно, насколько мог
Igor
С дефолтными настройками LLVM в конце сборки весит добрых 60 гб
Igor
А поскольку релизные версии эмулятора мы собираем как обычные релизы, получаем исполняемый бинарник весом в 11 мегабайт
Igor
Без LLVM, с нашим самопальным рекомпилятором шейдеров, было порядка 5 мегабайт на выхлопе
Igor
Не самая большая жертва, за которую в итоге получаем очень продвинутый рекомпилятор, способный на оптимизацию кода шейдеров почти на лету
Igor
Теперь осталось только LLVM и MLIR воткнуть в наш графический пайплайн полностью
Igor
Igor
То, что моя печка собирала минут 13, гитхаб на бесплатном раннере собирал полтора часа
Igor
Ну нам собственно скорость не важна, изменения в LLVM вносим редко и локально собираем с помощью своей оффлайновой копии, если онлайновая ещё не готова
Novichok
Lunatic
https://github.com/pragtical/pragtical
Igor
зато бесплатно и не перегреется
Жаль только что в приватных репах не бесплатно))
Egor
Приветы, а случайно никто не знает курсы по геймдеву? То есть не блендер итд, а где будут учить с помощью кода делать все, никаких блюпринтов или подобие? То есть упор на математику. Неважно какой движок.
Михаил
лучше не будет (варианта)
Egor
> упор на математику большая часть математики в геймдеве это простые арифметические операции над векторами, там нечего изучать
А всякие углы Эйлера? Забыл название - операции над 4-мерными матрицами с углами поворота итд. Я вот его не очень понимаю
usernameak
А всякие углы Эйлера? Забыл название - операции над 4-мерными матрицами с углами поворота итд. Я вот его не очень понимаю
в подавляющем большинстве движков есть готовые функции для работы с этим всем :)
Egor
в подавляющем большинстве движков есть готовые функции для работы с этим всем :)
Квантернионы, и ещё мнимые числа. Я в универе учился 10+ лет назад, и не помню уже ничего)
Egor
в подавляющем большинстве движков есть готовые функции для работы с этим всем :)
Да я движок один ковыряю и не очень понимаю что лучше применять, и я считаю, что если смогу понять все это или почти все, то буду иметь представление что лучше использовать в том или ином случае
Egor
в подавляющем большинстве движков есть готовые функции для работы с этим всем :)
Это как, дали тебе фреймворк и говорят - пиши, а ты даже не знаешь что такое ОС, как устроен сеть итд
Egor
Знаешь только ЯП
Egor
Знаешь только ЯП
Был у нас один человек, который завалил сервер в кластере, самый мощный, так как в go не ограничил количество горутин :) типа умеет кодить, но не знает элементарные вещи
Snusmumriken
А всякие углы Эйлера? Забыл название - операции над 4-мерными матрицами с углами поворота итд. Я вот его не очень понимаю
Преимущества эйлера: схема предельно тупая и очевидная. Недостатки: наличествуют блоки по осям. Например, ты выкрутил угол по какой-то из осей, и кручение по другой оси не даёт вообще ничего. В качестве простого примера — ты играешь в 3д-шутер, задрал голову вверх и можешь только крутиться на месте и опустить — остальные свободы заблокированы. Кватернионы позволяют вращать по любой из осей в любое время без блоков.
usernameak
Смотря где, смотря как.
вручную вводить кватернионы довольно неудобно, потому что они представляют не только вращение ;)
Egor
вручную вводить кватернионы довольно неудобно, потому что они представляют не только вращение ;)
Не,.Либа то есть в том движке, мне просто элементарное понимание нужно
Egor
Или лучше нанять репетитора?
usernameak
Или лучше нанять репетитора?
таких, по моему наблюдению, не существует, увы
Snusmumriken
Квантернионы, и ещё мнимые числа. Я в универе учился 10+ лет назад, и не помню уже ничего)
На тему матриц. Вообще, от конкретной математики можно абстрагироваться. Матрицы могут представлять собой некие аффинные преобразования — типа сдвига, поворота, масштабирования. Ещё, графические матрицы бывают проективными или ортогональными. Например, у нас есть некая матрица, представляющая собой камеру. Матрицы можно умножать друг на друга, получая совмещённый результат, Например, у нас опять таки есть матрица камеры. Она масштабирует результат под разрешение, отсекает слишком близкое и слишком далёкое и обеспечивает проекцию. Вот такая умная матрица. Одна штука. Умножаем её на матрицу поворота. Получаем повёрнутую камеру. Умножаем предыдущее произведение на матрицу трансляции (положения). Получаем матрицу камеры смещённую на N юнитов и повёрнутую. Потом берём какую-нибудь модельку. Ей тоже выдаём пару умноженных друг на друга матриц поворота-положения. А теперь, если мы умножим матрицу модельки на матрицу камеры, а потом на это дело умножим все вершинки модельки, мы получим их положение относительно камеры, отмасштабировано под текущее разрешение экрана. Хоба, колдунство.
Snusmumriken
Как правило, внутрь шейдерчиков отправляется пара уже готовых матриц камеры + модельки, мы их там умножаем, а потом умножаем вершинки на результат.
usernameak
На тему матриц. Вообще, от конкретной математики можно абстрагироваться. Матрицы могут представлять собой некие аффинные преобразования — типа сдвига, поворота, масштабирования. Ещё, графические матрицы бывают проективными или ортогональными. Например, у нас есть некая матрица, представляющая собой камеру. Матрицы можно умножать друг на друга, получая совмещённый результат, Например, у нас опять таки есть матрица камеры. Она масштабирует результат под разрешение, отсекает слишком близкое и слишком далёкое и обеспечивает проекцию. Вот такая умная матрица. Одна штука. Умножаем её на матрицу поворота. Получаем повёрнутую камеру. Умножаем предыдущее произведение на матрицу трансляции (положения). Получаем матрицу камеры смещённую на N юнитов и повёрнутую. Потом берём какую-нибудь модельку. Ей тоже выдаём пару умноженных друг на друга матриц поворота-положения. А теперь, если мы умножим матрицу модельки на матрицу камеры, а потом на это дело умножим все вершинки модельки, мы получим их положение относительно камеры, отмасштабировано под текущее разрешение экрана. Хоба, колдунство.
впрочем, в реальности всё чуть сложнее из-за перспективной проекции ;)
Snusmumriken
usernameak
Это уже учтено.
делением на w в железе :) и если ты идёшь в индустрию, chances are, тебя про это спросят на собеседовании
Egor
впрочем, в реальности всё чуть сложнее из-за перспективной проекции ;)
Ну, все это как я понимаю, берет на себя движок, мне нужно только направление "взгляда" камеры вычислить, типа куда смотрит, ну вектор вычислить.
Egor
Или вот. Делал генерацию мира с помощью шума перлина, даже вроде как понял его алгоритм, но он не очень красивый. И вообще понять бы все это, и тоже нет курсов (или я плохо искал).
Snusmumriken
делением на w в железе :) и если ты идёшь в индустрию, chances are, тебя про это спросят на собеседовании
А вот для этого барахла можно смело читануть эту ерунду: https://habr.com/ru/articles/248153/
Snusmumriken
Кстати, у тебя было много собеседований про построение программного рендера?
Snusmumriken
usernameak
(что самое забавное, я сейчас работаю не на рендере; но тоже в геймдеве, но ближе к tools programming (впрочем, включая смежные с рендером штуки!) )
usernameak
но вопросы про то как работает перспективная проекция, клиппинг и всякое такое были чуть ли не на каждом собесе связанном с геймдевом
usernameak
(что впрочем имеет смысл – все эти операции приходится реализовывать руками, например, при обратных преобразованиях, что частое явление во всяких deferred рендерерах)
Lunatic
похоже придется принимать cmake
Igor
Lunatic
Igor
Кто бы как ни пытался кричать о захламленности CMake, он всё равно до ужаса удобный
Lunatic
Кто бы как ни пытался кричать о захламленности CMake, он всё равно до ужаса удобный
Вот как мнe bgfx-cmake собрать одним билдом и под хост с утилитами и рантайм библиотеку под таргет?
Lunatic
Если якросскомпилю под Андроид скажем
Igor
Я ж его даже показывал уже
Igor
Когда рассказывал о проблемах CMake, но твоя задача как раз таки идеально вписывается в ExternalProject
Lunatic
Ещё раз, одна сборка, две разные платформы
Igor
Берёшь такой и весело добавляешь две таких инструкции
Igor
Добавляешь два экстернал проджекта, которые собираются с разными параметрами но из одного источника
Igor
Для андроида, скажем, в ExternalProject можешь указать путь до тулчейн файла, таким образом CMake заюзает clang компилятор, заточенный под дроид и с его библиотеками
Igor
Которые как раз и задаст тулчейн файл
Igor
Так понятнее?
Lunatic
Так не пойдет, у других людей эти компиляторы в других местах будут, нужен host compiler и target compiler что-ли
Igor
Тебе не нужно нигде хардкодить пути до компиляторов
Igor
Просто сказать ему как это собрать и всё
Igor
И в зависимости от выбранного тулкита ты можешь давать разные команды на компиляцию
Igor
Этим и прекрасен CMake, что любя проблема сборки о какой ты только мог подумать, так или иначе им решается и уже была решена кем-нибудь наверняка, потому что эта система сборки ужасно популярна.
Lunatic
Вот мне надо два туалета в одной сборке