Та версия,которая на этом видео-примерно 1.5 год разработок и экспериментов. Более новая версия (видео в плейлисте самые новые+shorts)-2 года. Во время разработки возникали очень интересные трудности,которые приходилось крайне необычными способами решать. Например: Надо было как-то соединить два базиса разных пространств,чтобы по одной двухмерной плоскости они пересекались и вот вектора смещения (я про b,c в представлении y=A(x-c)+b где A-матрица преобразования) было очень интересно находить. Так же при обращении матрицы теряют точность,да и это не прям быстро,поэтому пришлось хранить нечто наподобии обратной матрицы...ну точнее,нечто очень странное,при транспонировании дающее обратную матрицу,так как это нечто оказалось очень легко изменять в режиме реального времени. Я думаю сделать видос на эту тему,так как там реально очень красивые решения.После сессии в универе скорее всего займусь. Ещё из интересныого-что всё постоянно нереально висло и я очень хитро наладил оптимизацию через большие невидимые коробки,в которые помещаются объекты. Казалось бы,ну юзануть сферы как все нормальные люди и кайфовать,но при линейных деформациях пространства (смещение тривиально обыгрывается) это будет эллипсоид трёхмерный и самое адекватное было считать сингулярные числа матрицы и сферой с бОльшим обёртывать объект. Но сингулярные числа считаются очень долго,прям очень и поэтому я заюзал параллелепипеды,ведь они перейдут в параллелограммы (линии параллельны,но перпендиккулярность ушла) и вот тут получилось немного схитрить...о чём я тоже в видосе рассказать думаю. Если вкратце,там очень легко обернуть параллелограммом побольше,а на нём вычисления очень быстры и просты. Ещё был очень интересный момент с рамкой для сжатия пространства. Для заранее известного вектора это делается просто композицией матриц вращения и растяжения,но это долго и чтобы в реальном времени быстро работало (хотя можно было бы и пролаг оставить,но я же хотел попробовать без него) я заюзал матрицу Хаусхолдера (матрицы отражений).По счастью,в универе мы тогда уже прошли эту необычную матрицу,хоть и юзали для декомпозиции матриц,но я там на изи переделал под свои нужды. Так же прикольно было когда я догадался,что картинку внутри портала можно не прорисовывать,если ни один пиксель портала не попал на экран. Это очень помогло на картах,где порталов много,но они перекрыты стенами или чем-то таким. Ещё помню,как я намучился с коллизией от стен,чтобы она была реалистичной. На этой версии вроде ещё фигня какая-то,но на новых всё круто. Там прям пришлось напрячься,ведь в обычной игре надо было бы просто выцепить точку коллизии (или нормаль объекта,если коллизия на грани,а не на границе) и дальше уже как-то сложить со скоростью игрока. У меня же это давало неприятности,поэтому пришлось эти вектора перегонять в базис игрока :) и там уже складывать их пронормированные версии.Вот тогда получилось реалистично.А то помню,растянешь всё по какой-то оси,на край какой-то наткнёшься и полетел со скоростью звука фиг пойми куда. Ещё из интересного вспоминается как прикольно было прорабатывать коллизии сами по себе,ведь надо было,по-сути,определить минимальное расстояние до объекта. Там прям много получилось разных хитростей через ангем в основном,но немного и линал,само собой,подключился. Ну и ещё что вспомнить сходу могу это как я для невидимых коробок этих делал проверку на то,видно ли их на экране,тоже там получилось,что просто так влоб это не просто сделать,но я вроде как понапихал настолько много необходимых условий,что они стали достаточными...ну,по крайней мере,я вроде как все случая там рассмотрел и проверки так организовал,чтобы это максимально быстро делалось. Ну и вот эти самогенерирующиеся пространства это конечно отдельная тема была,там прям прикольно было с ними ковыряться.Вроде ничего умного,но много тонкостей. Ну и под конец,там на некоторых объектах картинка выгружается из файла текстового. Чтобы понять,какой пиксель мейчас отрисовывается и что это в файле и при этом чтобы всё не повисло пришлось хитрить,так как пространство в хз каком базисе может быть,вот и пришлось выкручиваться...короче,я там считаю через первую трансформацию Гаусса ближайшую точку в базисе естественном,а чтобы в нём получить точку,к которой считать ближайшую,приходится точку через базис перегонять. А то до этого приколько было,перекручиваешь базис,а картинка не перекручивается и просто сдвигается или смещается как-то. Короче,весело было это разрабатывать,как раз пригодилось всё,чему в универе научили)
Пікірлер: 2