Допустим есть космический корабль, на нём куча туррельных установок, в каждой сидит несколько игроков, у каждого всякие прибамбасы в виде оружия, на оружие много подвижных частей и т.д. Так вот, перемещаю я свой старшип в пространстве, изменяя его model matrix и как теперь переместить всех его потомков в дереве сцены вместе с ним, учитывая что на многочисленных уровнях вниз как бы у всех свои relative model матрицы относительно своих родителей?
Ну если в лоб, то конечно можно по всему дереву корабля пробежаться вниз, добавляя каждому относительное движение, но это ж хренова тонна перемножений матриц на каждом кадре... Может тру гамдеверы делают как-то иначе?
Считай трансформы в обратном порядке. Если объект может аттачиться и приаттачен, то домножай на трансформ аттача.
THE_MASTER
Вынеси все в компьют шейдер, если у тебя так тормозит
ну ясно... в общем всё просчитывается в лоб, а я то думал применяют какие-то деревья коэффициентов матриц с крутых решателях... А... проехали :)
THE_MASTER
> ну ясно... в общем всё просчитывается в лоб
только у тебя вряд ли возникнет ситуация когда весь граф будет нуждаться в обновлении да еще и постоянно.
Aroch
> только у тебя вряд ли возникнет ситуация когда весь граф будет нуждаться в
> обновлении да еще и постоянно.
ну как же, если у старшипа граф выглядит так и сам корабль является корневой нодой (ноль на рисунке из интернета), то при изменение позиции корабля (изменение его model matrix) придётся обновлять всех потомков без исключений.
Может быть как-то скомбинировать старый матрично-стековый способ с современным скелетным? Например, так, что в вершинные шейдеры передавать не только матрицу проекции и матрицы костей, но еще и стековую матрицу положения (или вообще весь стек с указателем положения стека).
THE_MASTER
> придётся обновлять всех потомков без исключений.
ничего не надо обновлять. Непосредственно перед отрисовкой конкретного проходишь по дереву снизу вверх и получаешь world space позицию.
THE_MASTER
Ты хоть посчитай сколько в тактах процессор занимает при умножении двух матриц
Ты кэш промахи посчитай для начала
Super_inoy
Проходишь по дереву сверху вниз
innuendo
А го слева направо?
А как писали свои движки и портировались под консоли до появления QA-сайтов?
THE_MASTER
Граф сцены зачем ?
Или ты Юнити\Унриал используешь ?
Без граф сцен нельзя ?
ronniko
> Без граф сцен нельзя ?
Я его назвал графом, потому что это граф :) Можешь назвать по другому, речь об относительном движение объектов, причём тут юнити?
Так вот, перемещаю я свой старшип в пространстве, изменяя его model matrix и как теперь переместить всех его потомков в дереве сцены вместе с ним, учитывая что на многочисленных уровнях вниз как бы у всех свои relative model матрицы относительно своих родителей?
У всех деталей своя матрица + общая матрица корабля(это поворот и world posXYZ).
Когда рендеришь каждую часть корабля считай матрицу детали и общую матрицу корабля.
То есть в рендере ты и переберешь все элементы корабля.
Можно элементу еще флаг сделать. Типа доп. Турель такой-то модели установлена или нет.
Ноль нет, от 1 до 20 разный вид турелей.
И так для разных элементов.
Движок такого-то типа.