Информация
- В рейтинге
- 215-й
- Откуда
- Москва, Москва и Московская обл., Россия
- Зарегистрирован
- Активность
Специализация
Разработчик игр, Технический директор
Ведущий
Git
C#
C++
Python
ООП
.NET
Английский язык
Научно-исследовательская работа
Алгоритмы и структуры данных
Прикладная математика
А так, ну работа и работа — какая собственно разница.
Просто в чём проблема того, что я находил по ripple шейдеру. Математика не объяснена и поэтому нереально контроллировать нормально параметры. Увеличив длинну волны и подобрав другую функцию затухания на примере гифки над «Сетка меша это важно» — можно сделать расход волн более похожий на падение капли воды + добавить партиклами всплеск и т.п.
С другой стороны с тем же волновым шейдером можно делать порталы или взрывную волну от падения чего-то. Математика дана, кому-то будет полезна, и он за недельку доведёт эффект до ума по рефам. Так как я материал писал про математику, а сам эффект мне сейчас не нужен, согласен что не довёл его до ума.
Типа длинна волны и максимальная амплитуда волны в целом зависит от скорости падения капли и угла. Так что круговая функция это вообще тоже не совсем верно, тут лучше подошла бы эллиптическая или типа того. Чтобы учитывать угол падения.
Разберём немного способы:
Отдельный меш поверх — плохая затея. С рефракцией и альфа блендингом самой волны можно будет чокнуться. Ну точнее ничего сверх естественного нет, но получится просто лишняя сложность.
Дисплейсмент карта на меш (так часто делают взрывные волны и прочие эффекты). Тоже мало общего с вертексным шейдером, на дальних ракурсах или в изометрии будет смотреться нормально. С перспективой и близко — так себе.
О чём я думал, не назову это способом, просто что мне приходило в голову. Тут суть не в блеске. Если думать над тем, чтобы делать «быстро» без сложной фрагментной части в целом. У нас есть 8 параметров доступных для записи (4 координаты тангентов и вертекс колоров) Если делать процедурненький алгоритм, то мы просто записываем что-то вроде нормал мапа в тангенты, а данные о полюсах в вертекс колоры меша. Для того чтобы разбросать лужи — генерируем шум (поэтому в проекте можно найти простой генератор текстуры шума перлина, так как сама генерация интегрирована в юнити) Дальше, делаем лужи хайполи, а остальную геометрию лоуполи (процедурно — это не так сложно на самом деле, просто по шуму генерируем сетку меша специальным образом) По идее в данном случае нормали в вертексе в соответствии с «кривизной лужи» дадут правильный эффект. Шум станет картой отражений (так как лужа должна отражать сильнее, чем меш под ней) и должно получиться красиво и +- универсальненько. Но условно этот проект я собирал дня 4 где-то (так как надо ещё же найти всю информацию, которую я постарался структурировано описать), а вот всё что я описал писать ещё недельку, и мне пока не до того.
В шейдере с несколькими полюсами сделано вообще неоптимально, лучше параметры полюса передавать в этом случае через vertexColor, а не через текстуру. В данном случае текстура не имеет особого смысла
У меня сейчас есть идея поиграться с FEM (метод конечных элементов) в Unity, а для этого лучше иметь Delanay Refinement алгоритмы под рукой.
Между этими двумя либами основная разница, что Poly2Tri сильно проще, но Triangle.Net в разы мощнее и позволяет решать большее число задач, так как судя по сетке Poly2Tri, у него под капотом Ear Clipping with Holes.
Один юнит равный 100м в любом случае даст такую же ошибку флота, так как коичество значащих символов не изменится, а на вход PhysX получает флот, и там он округлится
По проводу тривиального забавно, как быстро профессионалы забывают, что такое быть новичком и вообще не осознавать для чего знать тот же метод Хаусхолдера. При том, что встанет задача распарсить любой формат у которого ось y в отличии от юнити направлена вниз, а сам формат хранит TRS (собственно формат LDraw про который я сейчас потихоньку пишу статью) и без матриц крякнешься думать, как это всё считать.
TRS — это вообще отдельная песня. Так как, как и с методом Хаусхолдера найти адекватное структурированное описание что это и из чего складывается — надо постараться. Сама матрица простая, если это написано не языком вышмата, а русским. Так как если мы перейдём к определению, в котором вообще это всё работает в гиперплоскости строго говоря, то думаю большинство тупо не сможет прочесть этот текст со справочником (матрица 4х4, а работаем мы с 3д пространством)
В целом меня закладки в плане статистики интересуют больше голосов, так как они больше показывают кому та или иная статья была полезна. Эта серия статей не про рокет саенс и сложные алгоритмы. Это по сути про популяризацию математики, так как чтобы была мотивация её учить, нужно чтобы было понятно — зачем. И это зачем проще объяснять на простых примерах, которые можно потрогать и поиграться с ними. И которые в целом легко прочесть.
Потом постепенно может буду увеличивать сложность материала. Но условно если брать кватернионы, про них есть крутая огромная статья объясняющая что это, и вот её цель как раз таки научить. Цель же этого цикла показать — зачем читать эту огромную статью про кватернионы к примеру, и дать готовую реализацию каких-то простых компонент для примера, чтобы было ясно, как это можно использовать в Unity. В конкретно этой статье примера нет, так как про LDraw хочется написать отдельно
В целом тут две основные причины почему рендер на double особого смысла не имеет. Если камера движется вместе с симуляцией, то с помощью тех же матриц компенсировать позиции чисто для рендера — не самая страшная задача. Дабл работает медленнее, так как просто процессору нужно больше регистров складывать. И скажем PhysX сам по себе работает с флотом. С точки зрения рендера такая точность не имеет смысла, так как объект на расстоянии 17 км от камеры или 18 км от камеры это в большинстве случаев и так, и так пару пикселей. Если нужна точность для расчёта самой симуляции и без PhysX (какая-нить жидкостная симуляция или просто математическая, а юнити для визуализации) то проще считать всё в дабле в своих методах, где нужна точность, а потом делать отображение модели симуляции во флот со сдвигом.
Генерация меша комнаты не сказать, что что-то супер сложное. Там чуть-чуть пришлось покопаться, чтобы была возможность задавать толщину стен, а в остальном всё +- просто. Вот сам класс отвечающий за генерацию меша (всего 253 строки) (для триангуляции используется Poly2Mesh)