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

Предрасчёт рейкаста для эффективного рендеринга травы и меха (комментарии) (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
7:35, 4 фев. 2020

VirtualVoid
оно в exilecon на искривлённый ландшафт так-то накладывается. ещё тем же шейдером мы делали мех, поэтому он обязан корректно накладываться на любую поверхность. нормальных видео с заметно кривыми поверхностями у меня нет под рукой, но вот, например, очень ранние эксперименты с чем-то вроде меха: https://drive.google.com/file/d/1lcOnglXhhOfd42g_U7_F5gExKSxGzdz5… w?usp=sharing

#46
11:25, 4 фев. 2020

> у меня нет сейчас доступа шейдерам пое (я дома), но формула была примерно такая

Формула немного не такая, но не суть. Из вот этого:

> имея угол запекания для точки C, модифицирую прочитанное расстоение AC, чтобы оно совпадало с длиной AB для текущего направления взгляда

выводится:

// length - значение из текстуры. Я запёк саму длину до пересечения, а не горинтальную составляющую.
// texCoord - пространственные составляющие текстурной координаты.
vec3 rayHit = vec3(texCoord, 0.0) + bakeDirection * length;
length_corrected abs(rayHit.z) * cosViewAngle;

Что идеально работает для горизонтальных плоскостей.

Моя же проблема была в том, что я использовал для отладки либо пару вертикальных плоскостей, либо сложную модель круглого (в плане) куста.
Вертикальные плоскости подчёркивают артефакты при любом способе компенсации, кроме тупого поиска правильного семпла.

Вывод: трава действительно должна быть примятой :)
А патч - квадратным.

#47
15:57, 9 апр. 2020

наверное дурацкий вопрос, но как выглядит текстура в итоге, которую предрасчитываешь?

#48
(Правка: 16:22) 16:21, 9 апр. 2020

kinyz
вполне резонный вопрос. текстура трёхмерная, поэтому всю её отобразить не так-то просто. но вот так выглядит её срез, то есть расстояние до первого пересечения для фиксированного угла (на самом деле это 1/(расстояние + 1) из-за особенностей компрессии):
Изображение

#49
17:32, 9 апр. 2020

точно, зд текстуру сложнова-то запостить)
это что-то типо "взгляда" на текстуру "сбоку"? боковой вертикальный срез?
но я так понимаю это один канал, ты вроде говорил что там ещё нормали хранятся ?

#50
19:00, 9 апр. 2020

kinyz
> это что-то типо "взгляда" на текстуру "сбоку"? боковой вертикальный срез?
> но я так понимаю это один канал, ты вроде говорил что там ещё нормали хранятся
> ?
да, это примерно оно и есть. хранится длина луча до первого пересечения, нормаль и альбедо-цвет в точке пересечения. но тут всё от задачи зависит: например, если рендерятся волосы, то цвет можно не хранить отдельной текстурой, если нормали хорошие, то их можно из градиента глубины посчитать итп.

#51
20:31, 9 апр. 2020

спасибо, крутой подход)

#52
(Правка: 21:22) 21:18, 13 апр. 2020

Я правильно понял, что в данной технике нет эффекта параллакса, т.е. расположение травинок не меняется относительно друг друга при движении камеры в вертикальной плоскости? И получается что-то вроде импостора, захваченного под определенным углом?

#53
3:42, 14 апр. 2020

Spartan
> Я правильно понял, что в данной технике нет эффекта параллакса, т.е.
> расположение травинок не меняется относительно друг друга при движении камеры в
> вертикальной плоскости? И получается что-то вроде импостора, захваченного под
> определенным углом?
нет, неправильно. параллакс 100% корректный, если запечённая геометрия травинок строго вертикальная и меняется только их общее направление (например, в случае примятой травы). если же запечённые травинки отклоняются от вертикали, то параллакс в вертикальной плоскости приближённый.

#54
11:16, 14 апр. 2020

А что, если строить не 3d, а 4d текстуру - для всевозможных углов взгляда по горизонтали и по вертикали? Тогда можно было бы запекать произвольную геометрию или не ограничиваться фиксированным углом взгляда. Для текстуры 128x128 и 16x8 углов будет потребление памяти всего в 8 мегабайт (RGBA). Нелокальность доступа не будет страшной, если хранить в одном 2d слое предрасчёт для одного набора углов.

#55
11:19, 14 апр. 2020

Panzerschrek[CN]
> А что, если строить не 3d, а 4d текстуру - для всевозможных углов взгляда по
> горизонтали и по вертикали? Тогда можно было бы запекать произвольную геометрию
> или не ограничиваться фиксированным углом взгляда.
я тоже много про это думал, но тут становится очевидно, что эти данные надо как-то жать. да даже в случае с 3д текстурой данные на самом деле можно жать: можно в 2д текстуре по x хранить угол, по y — вход луча, а в каналах цвета хранить по четыре значения rgba — точки пересечения. это гораздо эффективнее по памяти (на одну размерность меньше), но такие данные очень трудно интерполировать и не работает для случая, если больше 4х точек пересечения.

#56
11:26, 14 апр. 2020

Suslik
> эти данные надо как-то жать
А зачем их жать? Неужели объём занимаемой памяти слишком высок или дорог доступ к ней? Скажи, для примера, сколько занимает набор текстур на одну высокодетализированную модель (персонажа, объекта уровня и т. д.)?

#57
11:33, 14 апр. 2020

Panzerschrek[CN]
> А зачем их жать? Неужели объём занимаемой памяти слишком высок или дорог доступ
> к ней?
ну трёхмерная текстура травы занимает 1Мб. из-за этого скорость шейдера по большей части упирается в локальность чтения текстурной памяти. если добавить ещё одну размерность (даже хотя бы х8), то и размер, соответственно, увеличится ещё в 8 раз. но на практике для нормального разрешения x8 едва ли хватит, поэтому самое главное здесь — это как оно скейлится. если для того, чтобы увеличить качество объекта в 2 раза, надо будет увеличивать размер ассета в 16 раз, это плохо.

#58
12:15, 14 апр. 2020

Suslik
> нет, неправильно. параллакс 100% корректный, если запечённая геометрия травинок
> строго вертикальная и меняется только их общее направление (например, в случае
> примятой травы). если же запечённые травинки отклоняются от вертикали, то
> параллакс в вертикальной плоскости приближённый.
Я говорю про случай когда травинки отклоняются от вертикали.
Трассировка вглубь со смещением травинок и изменением их толщины эквивалентна просто захвату карты глубины и нормали для травы из ортографической камеры под углом(например) 45 градусов к вертикали для 8 разных направлений. Это видно даже по приведённому срезу 3D текстуры.
Т.е. мы имеем 8 импосторов травы для 8 направлений между которыми интерполируемся, делая поправку для глубины и искажение косоугольной матрицей для имитации движения.

Визуальное пересечение травинок не меняется при движении камеры в вертикальной плоскости, корни травинок не двигаются относительно концов.

#59
12:19, 14 апр. 2020

Ради такого дела скачал PoE, пробежал пару уровней, но так и не увидел волшебной травы.
P.S. На макс настройках тормозит на RTX 2070 просто стоя на берегу, без монстров и эффектов. Это нормально?

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