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

Кто силен в математике - помогите с матрицами! (4 стр)

Страницы: 13 4 5 69 Следующая »
#45
1:29, 1 мар. 2019

Короче вот что должно получиться:
https://interesnoznat.com/interesno/neveroyatnye-3d-risunki-na-as… razhenie.html


#46
1:44, 1 мар. 2019

san
> Скринспейсовая текстура это не отражение, а фейк. Заркало так сделать
> невозможно. Ты не можешь видеть задние стороны предметов.
Скринспейсовая текстура с отраженным миром, а не просто фреймбуфер из оригинальной камеры. И эта текстура для плоского зеркала не фейк, а самая что ни на есть настоящая. И отражения в ней настоящие, с точностью до пикселя.

#47
2:58, 1 мар. 2019

san
> Скринспейсовая текстура это не отражение, а фейк. Заркало так сделать
> невозможно. Ты не можешь видеть задние стороны предметов.
сколько тебе уже ссылок давали на уроки по стенсильным отражениям и сколько ты их будешь игнорировать? screen space reflections и screen space текстура, используемая для стенсильных отражений — совершенно разные техники, не имеющие практически ничего общего. наверное, всё-таки имеет смысл в них разобраться, прежде, чем рассуждать.

#48
3:13, 1 мар. 2019

кстати, если ты хочешь рендерить отражение в отдельную текстуру с uv объекта, то можно с тем же успехом использовать преобразование по типу стенсильных отражений, но используя рендеринг в текстуру размером с вьюпорт, а при рендеринге объекта с этой текстурой его uv использовать uv вьюпорта. это будет такой же объём вычислений, как ты хочешь, но плотность текселей со скринспейс текстурой будет совпадать с плотностью пикселей на экране, если использовать uv объекта, то она будет неравномерной в экранных координатах.

#49
20:12, 1 мар. 2019

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

> кстати, если ты хочешь рендерить отражение в отдельную текстуру с uv объекта, то можно с тем же успехом использовать преобразование по типу стенсильных отражений, но используя рендеринг в текстуру размером с вьюпорт, а при рендеринге объекта с этой текстурой его uv использовать uv вьюпорта.
Так я об этом и твержу с первого же поста. Это именно то, что мне надо. Как я получу исходную текстуру с точки отражения, это не суть важно. Мне надо координаты преобразовать.

Кстати выяснил, что Окулус все же использует фейковые отражения и нет там ни стенсилов ни даже опенспейса. Сначала я заметил, что там на полу лежит блестящая плитка, уложенная неровно (ну таджики клали видимо). Ну и отражение соответствует этим неровностям, т.е. как будьто каждую плитку считали индивидуально. Тут я слегка обалдел - это уже рейтресинг получается. Но присмотревшись внимательно понял, что это фейк. Там не все предметы отражаются и с тенями есть косяки. Те предметы, которые можно перемещать, вообще не отражаются. Сделано хорошо, но мне это не подходит. У них нет такого, что ты берешь предмет в руку со стола и он отражается, т.е. видна его нижняя грань. А у меня это сплошь и рядом.

#50
22:31, 1 мар. 2019

san
> Разговор глухого со слепым - я про одно, а мне про другое.
Вот уж действительно разговор глухого со слепым. Тебе сказали, что в UV пространстве никто не делает, не потому, что не может координаты преобразовать, а потому, что рендер в UV спейсе несет другие проблемы, которые вообще непонятно как решать. Собственно поэтому никто не делает это "преобразование", потому что это решать искуственные проблемы, чтобы потом решать новые проблемы.

#51
4:20, 2 мар. 2019

san
> Да знаю я как делать стенсильные отражения, о чем тоже много раз тут писал.
ну так в чём тогда проблема, просто бери матрицу оттуда и вместо рендера в стенсил рендерь в текстуру.

#52
(Правка: 5:41) 4:28, 2 мар. 2019

MrShoor
> Тебе сказали, что в UV пространстве никто не делает, не потому, что не может координаты преобразовать, а потому, что рендер в UV спейсе несет другие проблемы которые вообще непонятно как решать.
Ну так это будут уже мои проблемы.  Хорошо, давай еще раз на пальцах:

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

Теперь чуть изменим задачу, первый проход оставим как есть, второй же сразу рендерит всю картинку с новой позиции во вьюпорт размером с зеркало, но без перспективных и проекционных искажений, т.е. лежащую перпендикулярно оси зрения. Эта область однозначно коррелируется с точно такой же областью, но лежащей в правильной позиции. Часть пикселей, не попавших в область видимость обрасывается, остальные ложатся на места сообразно перспективе. Т.е. если мы преобразуем координаты сообразно позиционным и перспективным искажениям и запишем в текстуру заркала, то при показе модели с такой текстурой, будет полное впечатление, что мы видим совершенно корректное отражение (см. примеры в #45 посте). С другой позиции разумеется все поломается, но для меня это неважно, пересчет идет каждый кадр.

Где тут "проблемы которые непонятно как решать" и какие "новые проблемы" тут возникают? Да, при зеркале лежащем почти на боку область рендеринга будет несколько больше (за счет перспективы), поскольку считается всегда прямоугольник. При зеркале видимом с небольшого угла перформанс практически такой же. Оверхед на пересчет координат это мизер.  Бонус - мы имеем текстуру отражений с которой можно делать дополнительные манипуляции, например блурить ее или искажать. Например делать отражения на той "неровно лежащей" плитке, о которой я писал. Попробуй сделать это на стенсиле. Ну и для меня важно, что мне не надо гнуть пейплайн ради частного случая.

Suslik
> ну так в чём тогда проблема, просто бери матрицу оттуда и вместо рендера в стенсил рендерь в текстуру.
Там несколько хитрее - например зеркало видно с большого угла. Надо найти uv координаты куда попадает зеркало. Оно же лежит в трех плоскостях, плюс перспектива. Разумеется задача чисто математическая, т.е. надо найти кординаты верх-низ-лево-право зеркала видимого с позиции камеры, сделать вьюпорт, а потом сделать пересчет координат. Чистая математика, но мне не по зубам. Старый я для такого :)

#53
5:43, 2 мар. 2019

san
> и какие "новые проблемы" тут возникают?
Нужно делать динамическое изменение разрешения текстуры. Т.к. когда зеркало вдалике, и занимает 10*10 пикселей - рисовать текстуру 1024*1024 мало того, что оверхед, так еще и паршиво смотреться будет без мипов.

> "проблемы которые непонятно как решать"
Разная плотность пикселей текстуры на экране, если смотреть на текстуру под углом.

> Бонус - мы имеем текстуру отражений с которой можно делать дополнительные
> манипуляции, например блурить ее или искажать.
В экранном пространстве ты так же можешь делать манипуляции с текстурой.

> Например делать отражения на той "неровно лежащей" плитке, о которой я писал.
По прежнему нельзя. Корректные отражения от кривой поверхности просто рендером из отраженной камеры нельзя сделать априори. Только рейтрейсинг.

> Попробуй сделать это на стенсиле.
Фейк прям на стенсиле это сделать нельзя. А вот с текстурой в экранном пространстве можно вполне. Еще раз для "слепых": текстура в экранном пространстве, и скринспейс отражения - не одно и то же. С текстурой в экранном пространстве ты можешь видеть задние стенки объектов. В отражениях в экранном пространстве - нет.

#54
(Правка: 6:55) 6:26, 2 мар. 2019

MrShoor
> Нужно делать динамическое изменение разрешения текстуры. Т.к. когда зеркало вдалике, и занимает 10*10 пикселей - рисовать текстуру 1024*1024 мало того, что оверхед, так еще и паршиво смотреться будет без мипов.

Ты не понял. В этом случае и вьюпорт будет 10х10 пикселей. Точнее это будет максимальный размер проекции зеркала нa вьюпорт. Запишется это в маленький кусочек текстуры скажем 1024х1024 (т.е займет 1% ее площади). Растянуть его на текстуру скажем 512х256 (зеркало), это один вызов компьюта который займет 100 мкс максимум. Примерно как второй вызов при стенсиле когда маска ставится.

>Разная плотность пикселей текстуры на экране, если смотреть на текстуру под углом.
Еще раз - я не предлагаю делать вьюпорт в размер текстуры. Он будет в размер текстуры с учетом перспективных и позиционных искажений. Это несложно подсчитать.

>По прежнему нельзя. Корректные отражения от кривой поверхности просто рендером из отраженной камеры нельзя сделать априори. Только рейтрейсинг.
Легко. Беру нормаль к плитке и сдвигаю текстуру. Это разумеется фейк, но весьма простой и убедительный. Кстати Окулус так и делает. Там точно не рейтресинг, см пост #49

>С текстурой в экранном пространстве ты можешь видеть задние стенки объектов
Ага. И какой оверхед? В моем случае скорость незначительно отличается от стенсила, точнее разница только между площадью прямоугольника по максимальным координатам с учетом перспективы и реальной ее площадью. Думаю это процентов 10-20, не больше.

#55
7:12, 2 мар. 2019

san
> Ты не понял. В этом случае и вьюпорт будет 10х10 пикселей. Точнее это будет
> максимальный размер проекции зеркала нa вьюпорт. Запишется это в маленький
> кусочек текстуры скажем 1024х1024 (т.е займет 1% ее площади). Растянуть его на
> текстуру скажем 512х256 (зеркало), это один вызов компьюта который займет 100
> мкс максимум. Примерно как второй вызов при стенсиле когда маска ставится.
Ты меня спросил про проблемы, которые при этом возникают? Я ответил. Дальше можешь рисовать, растягивать и что угодно делать. Это уже твои проблемы, которые ты сам себе создал, и которых не было бы, делай ты зеркало по нормальному.

> Он будет в размер текстуры с учетом перспективных и позиционных искажений. Это
> несложно подсчитать.
Ну удачи тебе это не сложно подсчитать. Как только закончишь несложно подсчитывать - можешь смело писать об этом пейпер. Вероятно это будет прорыв например для того же шедоумэппинга.

> Ага. И какой оверхед?
Нулевой?

#56
7:39, 2 мар. 2019

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

Что значит "по нормальному"? Поскольку ты о другом подходе никогда не думал? Я тебе ответил, что все твои опасения исходят из того, что ты просто не понял алгоритм. Или не хочешь в него вникать. Перечитай еще раз то, что я тут написал. Без эмоций, спокойно. И тогда скажи, в чем там недостатки протов "общеупотребимого" стенсила. В стенсиле своих блох хватает - один геморрой с depth буфером чего стоит.

>Ну удачи тебе это не сложно подсчитать. Как только закончишь несложно подсчитывать - можешь смело писать об этом пейпер.

Ну если тут уже не осталось математиков, то придется самому... Хотя задача то типовая, которую GPU решает постоянно в вертексном шейдере. Растеризация называется. Все же элементарно - отразить треугольник (в данном случае прямоугольник) на плоскость. Плоскость - экран. Прямоугольник - зеркало. Перспективные искажения берутся из FOV и положения зеркала. А лучше из матрицы, там все есть. Получаем координаты углов, берем максимальный размер. Отсюда получаем вьюпорт. Рендерим сцену с позиции отражения в этот вьюпорт, пишем в tmp текстуру (которая сделана в размер экрана, т.е. с запасом), занимая небольшой ее кусочек. Последний проход (третий, как у стенсила) это натянуть кусочек этой текстуры на реальную текстуру зеркала. Все. Трудно? - "Значит парашютный спорт не для тебя, сынок..."

>> Ага. И какой оверхед?
>Нулевой?

Да ну?

#57
7:59, 2 мар. 2019

san
> Поскольку ты о другом подходе никогда не думал? Я тебе ответил, что все твои
> опасения исходят из того, что ты просто не понял алгоритм. Или не хочешь в него
> вникать.
Я понял твой "алгоритм". Он говно. Почему? Разжевывать в пятидесятый раз я это не хочу. Предлагаю на этом закончить.

> Все. Трудно? - "Значит парашютный спорт не для тебя, сынок..."
Нуну, ты делай делай. Потом нам расскажешь как было легко.

#58
(Правка: 8:20) 8:07, 2 мар. 2019

MrShoor
> Я понял твой "алгоритм". Он говно.
"КУЛЬТУРА - СТЕРЖЕНЬ НРАВСТВЕННОСТИ И ПАТРИОТИЗМА ВСЕХ ПОКОЛЕНИЙ РОССИЯН". Не мое - скопипастил. :)
Судя по всему, по сути тебе нечего сказать. Ну так может не надо и флудить если не в теме?  Я тут что-то пытаюсь обьяснять, но если сразу "говно", то наверно не стоит и бисер метать.

>Нуну, ты делай делай. Потом нам расскажешь как было легко.
Ну так делаю потихоньку. Если готовых решений не последует, то придется самому. Математика конечно зубодробительная (когда без практики), но все в рамках обычной тригонометрии. Думаю вспомню основы.

#59
16:02, 2 мар. 2019

san
Может я что-то не понимаю, но почему нельзя для каждого зеркала иметь текстуру отражений, при рендере в нее отражать матрицу камеры относительно плоскости зеркала и получать честные отражения? Если поможет, могу запостить код, который отражает view matrix относительно произвольной плоскости.

Да, по дополнительному проходу на каждое зеркало, но зато отражения будут честными (будет отражаться донышко кружки, поднятой над столом), можно дистортить текстуру отражений по нормали и т.п.

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

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