Войти
ПрограммированиеФорумГрафика

Граф сцены

Страницы: 1 2 37 8 Следующая »
#0
22:25, 22 ноя 2022

Допустим есть космический корабль, на нём куча туррельных установок, в каждой сидит несколько игроков, у каждого всякие прибамбасы в виде оружия, на оружие много подвижных частей и т.д. Так вот, перемещаю я свой старшип в пространстве, изменяя его model matrix и как теперь переместить всех его потомков в дереве сцены вместе с ним, учитывая что на многочисленных уровнях вниз как бы у всех свои relative model матрицы относительно своих родителей?

Ну если в лоб, то конечно можно по всему дереву корабля пробежаться вниз, добавляя каждому относительное движение, но это ж хренова тонна перемножений матриц на каждом кадре... Может тру гамдеверы делают как-то иначе?

#1
23:06, 22 ноя 2022

Считай трансформы в обратном порядке. Если объект может аттачиться и приаттачен, то домножай на трансформ аттача.

#2
0:19, 23 ноя 2022

THE_MASTER
Вынеси все в компьют шейдер, если у тебя так тормозит

#3
8:49, 23 ноя 2022

ну ясно... в общем всё просчитывается в лоб, а я то думал применяют какие-то деревья коэффициентов матриц с крутых решателях... А... проехали :)

#4
9:44, 23 ноя 2022

THE_MASTER
> ну ясно... в общем всё просчитывается в лоб
только у тебя вряд ли возникнет ситуация когда весь граф будет нуждаться в обновлении да еще и постоянно.

#5
10:05, 23 ноя 2022

Aroch
> только у тебя вряд ли возникнет ситуация когда весь граф будет нуждаться в
> обновлении да еще и постоянно.
ну как же, если у старшипа граф выглядит так и сам корабль является корневой нодой (ноль на рисунке из интернета), то при изменение позиции корабля (изменение его model matrix) придётся обновлять всех потомков без исключений.
Изображение

#6
(Правка: 10:55) 10:55, 23 ноя 2022

Может быть как-то скомбинировать старый матрично-стековый способ с современным скелетным? Например, так, что в вершинные шейдеры передавать не только матрицу проекции и матрицы костей, но еще и стековую матрицу положения (или вообще весь стек с указателем положения стека).

#7
(Правка: 14:02) 14:01, 23 ноя 2022

THE_MASTER
> придётся обновлять всех потомков без исключений.
ничего не надо обновлять. Непосредственно перед отрисовкой конкретного проходишь по дереву снизу вверх и получаешь world space позицию.

+ Показать
#8
(Правка: 14:51) 14:49, 23 ноя 2022

THE_MASTER
Ты хоть посчитай сколько в тактах процессор занимает при умножении двух матриц

Ты кэш промахи посчитай для начала

#9
14:50, 23 ноя 2022

Super_inoy
Проходишь по дереву сверху вниз

#10
15:40, 23 ноя 2022

innuendo
А го слева направо?

#11
15:48, 23 ноя 2022

А как писали свои движки и портировались под консоли до появления QA-сайтов?

#12
(Правка: 17:08) 17:07, 23 ноя 2022

THE_MASTER
Граф сцены зачем ?
Или ты Юнити\Унриал используешь ?
Без граф сцен нельзя ?

#13
17:19, 23 ноя 2022

ronniko
> Без граф сцен нельзя ?
Я его назвал графом, потому что это граф :) Можешь назвать по другому, речь об относительном движение объектов, причём тут юнити?

#14
(Правка: 17:34) 17:26, 23 ноя 2022

Так вот, перемещаю я свой старшип в пространстве, изменяя его model matrix и как теперь переместить всех его потомков в дереве сцены вместе с ним, учитывая что на многочисленных уровнях вниз как бы у всех свои relative model матрицы относительно своих родителей?

У всех деталей своя матрица + общая матрица корабля(это поворот и world posXYZ).

Когда рендеришь каждую часть корабля считай  матрицу детали и общую матрицу корабля.
То есть в рендере ты и переберешь все элементы корабля.
Можно элементу еще флаг сделать. Типа доп. Турель такой-то модели установлена или нет.
Ноль нет, от 1 до 20 разный вид турелей.
И так для разных элементов.
Движок такого-то типа.

Страницы: 1 2 37 8 Следующая »
ПрограммированиеФорумГрафика