Инновации которые мы заслужили
https://medium.com/@lemapp09/vertex-animation-textures-vat-2ce5e7710774Как же люди умеют красиво писать. Было бы забавнее если бы такая статья вышла 1-го апреля. И вот ещё одна публикация о том что изобретено очень давно. И если честно не просто так было заменено на кости. Я так же как-то свой векторный формат изобретал, потому что SVG это тихий ужас. Ну да ладно.
О чём собственно статья. О записи вертексных анимаций в текстуру. Тратить время на прочтение не обязательно, материал легкий и по сути ни о чём. Нахваливает эту технику, говорит давайте сделаем стандартом. Это же такое новое! Я писал про эту технику
в статье про графику. Суть техники что мы не по человечески костями анимируем, а записываем анимацию каждого вертекса в пиксели, где у нас RGB становится XYZ. Техника древняя и во времена деревянных игрушек ей часто пользовались. Меня в целом зацепило только то, что материал подаётся как "вот это штуковину я нашел/придумал". Но давайте разберём кратко в чём её преимущества и проблемы.
В целом все древние техники про супер оптимизацию. Они довольно прямолинейные, топорные и неудобные в эксплуатации, но за удобство надо платить. На обработку костей и skinned mesh в целом гпу тратит времени побольше, чем в вертексном шейдере назначать смещение вертексу. Неудобно делать гпу инстансинг и много чего ещё с костями. И по сути это полезно в платформах где не работают человеческие технологии (здравствуй веб, среда для тех кто истинно любит страдания)
А теперь немного по пунктам плюсов.1. Работает даже на чайнике - техника не зайдествует никакие технологии, поэтому работать будет на системах любой древности
2. Удобный гпу инстансинг и дешевое масштабирование - поэтому эта техника так популярна в гиперкеже, где куча однотипных и простых объектов движутся с простыми анимациями
3. Вес? А вот тут всё не так просто. Нельзя сказать, что анимации в текстурах будут весить меньше чем скин+анимации на костях. Это зависит от кучи факторов. Конечно автор там упоминает, что текстуры мы можем жать. Но видимо он мало знает теорию информации. Жать можно всё на уровне хранения данных, а вот на уровне рантайма и исполнения жать можно только так, как нам разрешит ГПУ. А это опять-таки зависит от кучи факторов
К недостаткам1. Это просто анимации. Часть в игре анимации контекстны. Персонаж в зависимости от окружения должен взяться за столб или ещё чего (Assasins Creed) как пример, где я до сих пор помню как появилось взаимодействие с окружением и персонаж касался людей проходя через толпу. С такой техникой это не сделаешь, это блендинг анимаций и кинематики именно на костях.
2. Они не факт что весят меньше. Это очень сильно зависит от сложности модели. Очевидно что на 50 000 вертексов нам надо 50 000 пикселей. 2к х 2к текстура со стандартным сжатием без потерь (потери = артефакты в анимациях) весит около 1.8 мб. Это примерно 4 000 000 пикселей. Не трудно посчитать, что это всего 80 кадров. Если не хитрить. То есть около 3 секунд анимации. Думаю этот оверхед на уровне памяти побить будет трудно.
То есть если резюмировать. Это нужно для всяких слабых систем, где кости стоят сумашедших ресурсов или вообще не работают. И очень полезны когда у нас задача анимировать много очень простых объектов. Но делать из этого новый формат хранения и стандарт - а зачем? Лучше пусть человечество сделает новый здравый стандарт вектороной графики, который можно парсить не имея учёной степени. Или научится пнг секвенции если это возможно в анимации аля Spine переводить.
P.S. Да, кстати, если речь именно про рендеринг и кино. И формат хранения 3д. Типа тут можно было бы сказать: "но человек про 3д фильмы говорит". И формат векторного хранения 3д фильмов вместо воксельного. А чем вам формат проигрывания 3д анимаций с костями не векторный формат весящий в разы меньше воксельного и работающий оптимальнее?
#новости