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

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

Страницы: 1 2 3 4 59 Следующая »
#30
(Правка: 9:42) 9:42, 28 фев. 2019

san
> Появилось зеркало, просто изменяется текстура одного обьекта
я не видел, чтобы кто-то рендерил отражения в uv-space. это вроде бы теоретически возможно, но так никто не делает.

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


#31
10:06, 28 фев. 2019

Чем не подходит SSR + Blur? Ну вот реально. Ты на сиграфф делаешь революцию?

#32
(Правка: 10:16) 10:13, 28 фев. 2019

san
> Так, это не работает. Стало даже хуже, теперь картинка зависит от наклона
> головы.
Это аналог screenspace отражения. Рендерить надо не в текстуру, а непосредственно достраивать экран в месте отражения. Если делать что то наполовину то и работать ни чего не будет.

#33
10:16, 28 фев. 2019

foxes
SSR это лучи в финальную картинку в скрин-спейсе в рендерпасе зеркальной геометрии.

#34
(Правка: 10:20) 10:19, 28 фев. 2019

lookid
> SSR
SSR это отражение уже готовой картинки. А я говорю об аналоге, который также не требует дополнительных текстур.

#35
12:31, 28 фев. 2019

san

+ Чтобы изображение было таким
+ А не таким

Нужно конечную матрицу умножить на DiagMatrix(-1, 1, 1)

#36
16:26, 28 фев. 2019

Suslik
> не видел, чтобы кто-то рендерил отражения в uv-space. это вроде бы теоретически возможно, но так никто не делает.

Вот эта теоретическая возможность меня и интересует...

> возможно, тебе вообще не нужны точные планарные отражения и хватит screenspace отражений?

Так у меня персонаж за столом сидит и перемещает предметы в воздухе. Соответственно в отражении постоянно видны их нижние стороны.

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

Я уже стал посматривать в сторону рейтресинга, проверил производительность на их самом навороченном примере. Интересные результаты:
AMD R9 Nano - 10 фреймов в секунду
Titan Xp -100 fps.
Titan V - 250 fps
Думаю если упростить, выкинув все кроме отражений и сделав маленькие текстуры (особая точность не нужна), то на Nvidia это бы прокатило легко, но вот AMD все портит...

#37
17:38, 28 фев. 2019

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

рендеринг зеркал через стенсил(или его аналого) в экранных координатах — это допотопный алгоритм времён ещё самых первых игр с аппаратным ускорением. так как алгоритм совершенно стандартный, то и уроков по нему полно: http://iloveshaders.blogspot.com/2011/05/using-stencil-buffer-ren… -stencil.html

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

#38
(Правка: 18:21) 18:07, 28 фев. 2019

Suslik
> так если у тебя архитектура не поддерживает такую базовую технику как стенсил, то это проблема архитектуры, не?

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

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

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

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

#39
(Правка: 18:37) 18:34, 28 фев. 2019

san
> преобразование к текстурным координатам в момент записи
Звучит как лишний геморой. В стенсиле требуется только отрендерить одну и ту же сцену одной и той же камерой с разных точек. Стенсил требуется только чтобы отсечь объекты выходящие за область зеркала.

#40
19:25, 28 фев. 2019

san
> Вот эта теоретическая возможность меня и интересует...
Эта теоретическая возможность интересует только тебя. Потому что она влечет за собой намного больше проблем, чем решает. Причем таких проблем, которые вообще непонятно как решать.

> но это ломает имеющийся (и унаследованый от Окулуса) пейплайн.
Чем именно ломает? Вставить 2 переключения стенсил теста нельзя?

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

> Нет зеркал - нет лишних проходов.
Со стенсилом точно так же.

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

Если ты хочешь не идеальный - то ты можешь создать screen space текстуру для зеркала, и накладывать её как я описал. Тогда стенсил не нужен.

А то, что ты хочешь сделать (рисовать текстуру в UV пространстве) - хрень, которая и выглядеть будет как говно, и оверхеда кучу имеет, и пайплайн усложняет посильнее стенсила.

#41
19:36, 28 фев. 2019

Код создания матрицы вида для зеркала из DirectX SDK за 2002 год:

// Save the view matrix
Matrix matViewSaved = device.Transform.View;
// Reflect camera in X-Z plane mirror
Matrix matView, matReflect = new Matrix();
Plane plane = Plane.FromPointNormal(new Vector3(0,0,0), new Vector3(0,1,0));
matReflect.Reflect(plane);
matView = Matrix.Multiply(matReflect, matViewSaved);
device.Transform.View = matView;
#42
20:02, 28 фев. 2019

MrShoor
> А то, что ты хочешь сделать (рисовать текстуру в UV пространстве) - хрень, которая и выглядеть будет как говно, и оверхеда кучу имеет, и пайплайн усложняет посильнее стенсила.
Спокойнее, спокойнее... Никакого оверхеда там нет, кроме одного преобразования координат. И никакого усложнения тоже нет, просто все делается на уровне обьекта а не сцены.

> Чем именно ломает? Вставить 2 переключения стенсил теста нельзя?
Можно. Но это лишняя ветка на уровне сцены. А я хочу иметь ее на уровне обьекта.

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

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

DODge
Это не о том.

#43
23:45, 28 фев. 2019

san
> Никакого оверхеда там нет, кроме одного преобразования координат.
Что значит нет? Когда ты на зеркало под углом будешь смотреть, то у тебя либо вдалике на один пиксель будет приходится куча текселей из текстуры, либо вблизи будет мыльное говно.

> Что до "только тебя", то это не совсем так.
Если кто-то и делает это в UV спейсе, то только потому, что не понимает, что делает.

> Имея текстуру отражений можно делать имитацию неплоских зеркал (типа как в
> комнате смеха), или отражение от воды.
Это делают точно так же через скринспейсовую текстуру.

#44
0:10, 1 мар. 2019

MrShoor
> Что значит нет? Когда ты на зеркало под углом будешь смотреть, то у тебя либо вдалике на один пиксель будет приходится куча текселей из текстуры, либо вблизи будет мыльное говно.

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

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

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