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

Стекла и зеркала без рейтресинга. (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
(Правка: 16:17) 16:16, 13 окт. 2020

Это же баянище с бородой же, времен царя гороха, не?


#16
16:28, 13 окт. 2020

nonamezerox
> Это же баянище с бородой же, времен царя гороха, не?
Причём тут плоскость? Ты тему жопой читал?

#17
17:11, 13 окт. 2020

Kripto289
> А можно сделать простую демку с 2 зеркалами друг напротив друга, например так?
Что бы сцену не менять я просто сделал поверхность стола идеальным зеркалом. Но так еще прикольнее. Вот как это выглядит:

screenshot8 | Стекла и зеркала без рейтресинга.
#18
17:17, 13 окт. 2020

san
> Вот как это выглядит
Явная лажа. Надо следить, чтобы зеркальные поверхности не оказывались рядом друг с другом.

#19
17:30, 13 окт. 2020

Вот убрал затухание и "поцарапанность". Теперь это два идеальных зеркала.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры
#20
18:09, 13 окт. 2020

san
> Вот убрал затухание и "поцарапанность". Теперь это два идеальных зеркала.
Что-то неправильно. Зеркало стоит под прямым углом к столу? Тогда откуда эти зеркала под углом в отражениях?

#21
(Правка: 19:08) 18:28, 13 окт. 2020

Mikle
Неправильно. Но прикольно. Разумеется это не физическое отражение, чем больше угол между зеркалами тем сильнее видно искажение. Если они стоят строго напротив друг друга, то все нормально. У меня трудно получить такую демку, поскольку проверяется попадает ли обьект в фрустум камеры. А поскольку одно зеркало за спиной... Я и взял случай когда оба зеркала попадают в поле зрения. Но если стоит задача сделать сцену со множественными отражениями, то тогда надо учитывать что рендерить придется все. И еще учитывать порядок формирования отражений, чего у меня разумеется не предусмотрено. В принципе "зеркало-в-зеркале" это просто частный случай использования такого метода. Но довольно эффектный.

#22
20:36, 13 окт. 2020

san
> чем больше угол между зеркалами тем сильнее видно искажение.
Какое искажение? Отражение же в целом неверное.

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

> У меня трудно получить такую демку, поскольку проверяется попадает ли обьект в
> фрустум камеры.
Интересно, а как тогда вот эта книга и сфера попала в кадр: shot_10_13_2020 | Стекла и зеркала без рейтресинга. ?

#23
22:24, 13 окт. 2020

san
Ты что-то накосячил с вычислением матрицы. Я нашёл ту тему, где давал правильный вариант:
https://gamedev.ru/code/forum/?id=242576&page=5&m=4934822#m62

#24
(Правка: 14 окт. 2020, 1:22) 23:09, 13 окт. 2020

MrShoor
> Какое искажение? Отражение же в целом неверное.
Отражение (первое) совершенно корректное. Неправильно получается второе отражение, поскольку угол зрения из второго зеркала должен тоже отразиться, но в случае текстуры это невозможно. При параллельных зеркалах углы совпадают, поэтому там все ОК. Но в целом что-бы понять что отражение некорректно, нужно присматриваться. Ты же тоже не сразу понял что что-то не так. В реальной игре это прокатит. Но по сравнению с рейтресингом накладные расходы - мизер.

>Ты что-то накосячил с вычислением матрицы. Я нашёл ту тему, где давал правильный вариант:
Если бы ты еще давал не "вариант", а код для генерации матрицы... Но мой код работает. В ВР все косяки сразу были бы видны (там же я вижу глубину), но их нет. Значит я все делаю правильно. Уверен.

>Интересно, а как тогда вот эта книга и сфера попала в кадр:
Ну так во фрустум ЗЕРКАЛА эти предметы попали. Если зеркало за спиной, то оно САМО во фрустум камеры не попадает, поэтому я и отражение не считаю. В данном случае я оба зеркала вижу.

#25
0:39, 14 окт. 2020

san
> Ты же тоже не сразу понял что что-то не так.
Сразу

#26
1:17, 14 окт. 2020

MrShoor
Ну хорошо, ты знал что искать и сразу нашел. Но я же и не утверждал, что это ПОЛНАЯ замена рейтресингу. Это метод который на порядок (если не более) проще и позволяет сформировать совершенно корректные отражения, в том числе на неровной поверхности. С этим думаю ты не будешь спорить. Что до множественных отражений, то разумеется это не полная замена рейтресинга, но такая задача и не стояла. Я не настолько самонадеян. Но кое какие эффекты взаимных отражений таким образом достичь можно,  например те же паралелльные зеркала (скажем в как в лифте). Да, если зеркала стоят под углом, то видно, что отражение физически некорректно. То же самое в режиме ВР - параллакс сразу выдает фейк. Но в режиме ВР достаточно положить на стекло небольшую текстуру (типа пыль или царапины) что бы на 90% скрыть фейковый характер вторичного отражения. Оно тогда уже совсем не бросается в глаза. Думаю тут уже мозг сам корректирует картинку до приемлимой. Это не теоретические рассуждения - я это проверил на практике. Как ты можешь заметить у меня стол с полированной поверхностью и зеркало. Стол слегка шероховатый и отражение не 100%. Зеркало слегка поцарапано. Этого достаточно. В хедсета все выглядит вполне нормально с любого места. Хотя если сунуть голову между поверхностями, то на скриншоте можно заметить, что "что-то неправильно".

#27
4:07, 14 окт. 2020

san
> Но кое какие эффекты взаимных отражений таким образом достичь можно, например
> те же паралелльные зеркала (скажем в как в лифте).
Чтобы убедиться, что параллельные зеркала тоже не работают можно собрать простую сцену.
Два параллельных зеркала, между ними ближе к одному из них наблюдатель смотрит вдоль зеркала. Около второго зеркала какой-нибудь объект, скажем куб, так, чтобы отражение было видно в ближнем к наблюдателю зеркале. Вот такая примерно схема:
scene | Стекла и зеркала без рейтресинга.

#28
5:03, 14 окт. 2020

MrShoor
А ты нарисуй где наблюдатель должен видеть отражение куба в правом зеркале. Тебе не кажется что в таком случае ты вообще не разглядишь этот куб?
И я не пойму что ты хочешь доказать.  Я сразу сказал, что множественные отражения при рендере в текстуру не то же самое, что в оптике. Это фейк. Но фейк часто достаточно убедительный.

Я тебе говорю результат реального эксперимента, не умозрительного - я ставил два зеркала на расстоянии соизмеримом с их размерами и двигал камеру между ними. В руке у меня был предмет которым я махал. Ну и я крутил головой. Если отключить все проверки на видимость, то отражения получаются вполне корректными. Хотя для ВР получается неправильная глубина, но на плоском экране это несущественно. Если измерять углы, то можно обнаружить погрешности, но юзер ообычно с угломером не ходит. Сейчас я не хочу тратить время и повторять тот эксперимент, для этого надо лезть в код на что у меня нет ни времени ни желания. Я не хочу кому-то что-то доказывать -  ну не нравится такой метод формирования отражений, флаг вам в руку с рейтресингом. Меня он устраивает. Даже в случае ВР. Спорить ради спора я не вижу смысла.

#29
5:29, 14 окт. 2020

san
> А ты нарисуй где наблюдатель должен видеть отражение куба в правом зеркале.
> Тебе не кажется что в таком случае ты вообще не разглядишь этот куб?
Конечно же не кажется. Отражаем наблюдателя относительно зеркала, проецируем на зеркало наш куб (красная полоса на зеркале - зона где наблюдатель будет видеть отраженный куб):
scene2 | Стекла и зеркала без рейтресинга.

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