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

Импосторы: ориентация биллборда

#0
(Правка: 15 фев 2023, 23:46) 14:41, 27 янв 2023

Привет.
Пытаюсь понять как правильно рендерить биллборды импосторов.
Для случая, когда камера смотрит с разных углов, определяются UV в атласе и выбирается наиболее подходящий тайл - это работает.
Но если модель наклонить, то увы - просто ориентировать квады по направлению взгляда недостаточно.
Повороты по двум осям решаются через атлас, но нужно еще учитывать поворот относительно оси взгляда.
Изображение

Атлас вот такой:
Изображение

Аналогичная проблема возникает из-за перспективной проекции, когда объект находится с края экрана:
Изображение

UV рассчитываются следующим образом: берем вектор направления на камеру, применяем к нему трансформ самой модели (чтобы учесть повороты самой модели) и считаем 2 угла. Один через atan2(dir.z, dir.x) - этот угол определяет тайл с поворотами относительно вертикальной оси. Второй через asin(saturate(dir.y)) - он определяет поворот относительно горизонтальной оси. Из обоих углов формируем UV (0..1).

Очевидно, эта задача давно решена - не хочется изобретать свой велосипед с квадратными колесами. Как это делать правильно?

#1
(Правка: 18:40) 16:55, 27 янв 2023

С перспективой все просто - view aligned billboard в этом случае (очевидно же!) не канает. Нужно выравнивать квад в world space по направлению к камере.
Изображение
Теперь буду думать над вращением по Z.
Похоже, что нужно разложить modelview матрицу на эйлеровы углы, два из них будут задавать тайл атласа, а третий будет описывать вращение биллборда относительно оси view 🤔
А еще центр координат модели не обязательно совпадает с центром импостора, бррр.

#2
19:24, 27 янв 2023

А что, если биллбоард позиционировать ровно под тем углом, под которым он был пререндерен? Тогда всё должно как надо работать.

San
> С перспективой все просто
Если у тебя перспективные искажения влияют, то очевидно, что ты биллбоард слишком близко рисуешь. Там, где перспектива заметна, нужно уже полноценную модель рисовать.

#3
14:36, 29 янв 2023

В общем, как-то запилил, но результат так себе.
Возможно, имеет смысл попробовать вместо билборда несколько квадов крест-накрест - так и позиционирование будет точным, без дискретизации, и тени будут работать корректно. И, как бонус, тайлов в атласе будет меньше, что повысит их разрешение.

Panzerschrek[CN]
> биллбоард позиционировать ровно под тем углом, под которым он был пререндерен
В этом и заключается задача - корректно рассчитать ориентацию.

> Если у тебя перспективные искажения влияют, то очевидно, что ты биллбоард слишком близко рисуешь
Там у меня криво сформулировано. В любом случае, с этим моментом все уже ясно.

#4
(Правка: 16:21) 16:12, 29 янв 2023

https://shaderbits.com/blog/octahedral-impostors
видео в статье чтобы открыть надо открывать отдельно скопировав url
https://youtu.be/JOL5e-J1btA

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#5
20:38, 29 янв 2023

Salamandr
Это я читал. Интересно, но там основная идея - в оптимальном расположении камеры при запекании. Детали рендеринга самого билборда не особо затрагиваются. В частности, с учетом трансформа модели, а именно это и интересует.
В целом у меня все работает, но есть косяки.

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