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

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

Страницы: 14 5 6 7 8 9 Следующая »
#90
(Правка: 5:40) 2:55, 9 мар. 2019

MrShoor
> Добавил одну строку:
Ты опять ничего не понял. Я не прозрачность меняю, я сдвигаю само отражение из-за неровностей (фейковых) отражающей поверхности. У тебя все отражается на идеальной плоскости, хотя поверхность столика вроде как бугристая. Неужели до тебя ниак не дойдет? Имея текстуру элементарно привести отражение в соответствие с наложенным рельефом, чистым стенсилом это сделать невозможно. Стенсил годится только для идеальных зеркал, которых в реальной жизни очень мало. В основном все блестящие поверхности неровные. В случае отражения в текстуру мы не только имитируем неровности, так еще (как оказалось) визуально сводим к нулю эффект пикселизации при утыкании камеры в зеркало, который тебя так волновал.

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

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


#91
(Правка: 9:00) 8:58, 9 мар. 2019

san
> У тебя все отражается на идеальной плоскости, хотя поверхность столика вроде
> как бугристая. Неужели до тебя ниак не дойдет?
MrShoor по этому вопросу, вроде как, согласился уже в п.77

MrShoor
Давай определимся, спор "RT vs Stencil" или "ScreenSpace vs UV Space"? А то тут идёт сразу несколько ниток разговора.
> Даже в случае рендертаргета во весь экран - весь рендертаргет рендерить не
> надо, нужно рендерить только то, что попадает в зеркало, а из рендертаргета в
> бекбуфер перекидвать с помощью меша самого зеркала (а не фуллскрин квада). Так
> в чем собственно выгода рендерить зеркала в UV пространстве?
Каким образом предлагается отсекать лишнее? Дополнительными четырьмя ClipPlane, или всё равно стенсил в дополнение к RT? Или у тебя есть способ переместить ClipPlane фрустума на нужные места не переводя рендер в UV Space? Если есть - да, это интересно. Только сразу вижу опасность выхода зеркала за край экрана, который уже не ограничен фрустумом.

#92
9:27, 9 мар. 2019

Mikle
> или "ScreenSpace vs UV Space"
Этот вариант.

> Каким образом предлагается отсекать лишнее?
Предполагается отсекать так же как при фрустум куллниге, отсекать целиком объекты. Проводим плоскости через Mirrored Eye Position и грани зеркала. Если объект и зеркало лежат по разные стороны от хотя бы одной из плоскостей - то отсекаем.
Понятное дело что могут быть объекты, которые не отсеклись, и могут быть треугольники, которые "торчат" за зеркало, но там уже стенсил тест справится. Большинство же объектов отсечется, т.к. фрустум от зеркала как правило узкий, и чем меньше зеркало занимает на экране - тем уже его фрустум.

#93
9:44, 9 мар. 2019

MrShoor
> Проводим плоскости через Mirrored Eye Position и грани зеркала. Если объект и
> зеркало лежат по разные стороны от хотя бы одной из плоскостей - то отсекаем.
MrShoor
> могут быть треугольники, которые "торчат" за зеркало, но там уже стенсил тест
> справится
То есть и стенсил, и куча проверок, всё это в случае UV Space не нужно.
А есть такие объекты, как SkyBox или Terrine, рендеря их в маленькое зеркало 20*50 пикселей на экране, ты будешь проверять стенсил для всего экрана 1920*1080 для каждого объекта?

#94
9:57, 9 мар. 2019

Mikle
> и куча проверок, всё это в случае UV Space не нужно.
Как это не нужно? Ты будешь рисовать всё, что даже не попадает в зеркало? Нужны те же проверки.

> А есть такие объекты, как SkyBox или Terrine, рендеря их в маленькое зеркало
> 20*50 пикселей на экране, ты будешь проверять стенсил для всего экрана
> 1920*1080 для каждого объекта?
Если проблема настолько острая, что у тебя тиррейн прям одним куском рендерится, просаживает производительность - то лучше поделить его на ноды, чтобы не рисовать одним куском. Но если вот прям очень очень хочется - то можно Scissor выставить на эти 20*50 пикселей. Тогда оно будет так же быстро, как в случае с UV Space

#95
(Правка: 10:35) 10:31, 9 мар. 2019

MrShoor
> Как это не нужно? Ты будешь рисовать всё, что даже не попадает в зеркало? Нужны те же проверки.
Скажем так, иногда это может быть полезно, а иногда достаточно имеющегося frustum culling. И это никак не относится к рендеру зеркал, этот метод применим при любом рендере, а так же при рендере текстуры зеркала в UV Space. То есть это не аргумент вообще, ни за, ни против. Хотя, всё-таки немного против ScreenSpace потому, что там стандартный frustum culling вся равно включен, отнимает ресурсы, а отсекает на много меньше, чем нужно.
MrShoor
> Если проблема настолько острая, что у тебя тиррейн прям одним куском
> рендерится, просаживает производительность - то лучше поделить его на ноды,
> чтобы не рисовать одним куском.
И SkyBox тоже порезать... да и какого размера должны быть эти ноды? Каково их количество? Ведь ландшафт используется так, что даже небольшой нод, на которм стоит ГГ, может занять весь экран.
MrShoor
> если вот прям очень очень хочется - то можно Scissor выставить на эти 20*50
> пикселей. Тогда оно будет так же быстро, как в случае с UV Space
Не будет, это такой же попиксельный тест, как и стенсил:

This test is performed after the fragment color is computed but before alpha testing

Метод ScreenSpace будет производительнее без всех этих Scissor, Stencil и т. п., если включить четыре новые ClipPlane, они то выполняются раньше Scissor, перед растеризацией.
А ещё лучше суметь сдвинуть четыре боковых ClipPlane фрустума, если, конечно, это возможно.

#96
10:52, 9 мар. 2019

Mikle
> Не будет, это такой же попиксельный тест, как и стенсил
Это концептуально.
На практике - он не каждый пиксель проверяется, естественно (в терминах софтрендера - это тупо сдвинуть границы цикла).

#97
11:00, 9 мар. 2019

Mikle
См. http://fabiensanglard.net/doom3/renderer.php (Stencil buffer and Scissors test).

#98
11:05, 9 мар. 2019

Mikle
> То есть это не аргумент вообще, ни за, ни против.
Вот и я про то же, что и там и там одинаковый per object куллинг.

> Хотя, всё-таки немного против ScreenSpace потому, что там стандартный frustum
> culling вся равно включен, отнимает ресурсы, а отсекает на много меньше, чем
> нужно.
Что значит отсекает намного меньше чем нужно? В случае прямоугольного зеркала и там и там куллинг отсекает 1 в 1, с точностью до float погрешности. И там и там можно отсечь одинаково, вне зависимости от того как мы рендерим.

> И SkyBox тоже порезать...
Скайбокс элементарно выводится в момент наложения зеркала на сцену.

> Не будет, это такой же попиксельный тест, как и стенсил:
Этот "попиксельный тест" может вполне себе выполнятся в early stage:
https://www.khronos.org/opengl/wiki/Early_Fragment_Test
А начиная с некоторых новых версий API scissor гарантированно выполняется только в early stage:

Note that with OpenGL 4.2 or ARB_shader_image_load_store, the pixel ownership and scissor tests will always be performed early.

Ну и еще со времен DX9 почти на всем железе сциссор выполнялся в early stage.

#99
(Правка: 11:21) 11:20, 9 мар. 2019

Вот ещё:
https://www.iddevnet.com/doom3/visportals.php

To further improve rendering speeds, the Doom 3 engine utilized scissors when rendering areas through a portal. These scissors prevent geometry outside the portal rectangle from being drawn by the video card. This is not a magic cure however, because the data is still being sent to the video card, it's just that the video card is ignoring it.

Здесь для порталов но идея общая (зеркала вполне реализуются, как частный случай порталов).

См. также:
https://gamedev.stackexchange.com/questions/126057/why-do-modern-… h-for-mirrors

#100
11:47, 9 мар. 2019

7 страниц однако

#101
(Правка: 12:32) 12:30, 9 мар. 2019

MrShoor
> еще со времен DX9 почти на всем железе сциссор выполнялся в early stage
Я дал цитату из доков по DX9.
> В случае прямоугольного зеркала и там и там куллинг отсекает 1 в 1, с точностью до float погрешности. И там и там можно отсечь одинаково, вне зависимости от того как мы рендерим
Если это ScreenSpace, то отсекается не по зеркалу, а по вьюпорту, или таки есть способ сдвинуть клипплейны вьюпорта? Я этот вопрос третий раз задаю.
FordPerfect
> На практике - он не каждый пиксель проверяется, естественно (в терминах
> софтрендера - это тупо сдвинуть границы цикла).
Цикл был бы при рейтрейсинге. А на GPU после вертексного шейдера идёт обрезание лишней геометрии фрустумом и доп клипплейнами, триангуляция обрезков треугольников, и только потом растеризация - тот самый цикл. Отрывок из доков по DX9, что я привёл, говорит, что сциссор проверяется перед альфатестом, то есть уже после растеризации. Может в более новых API это не так, спорить не буду, не знаю.

Ваши ссылки почитаю позже, сейчас на работу пора.

#102
13:15, 9 мар. 2019

Mikle
> Отрывок из доков по DX9, что я привёл, говорит, что сциссор проверяется перед
> альфатестом, то есть уже после растеризации
тогда бы не работали стенсильные оптимизации? а они, вроде, работают и всегда работали. т.е. если бы все было как ты пишешь - разница была бы условно на время ропов, а она чуть другая. но картинка странная

#103
(Правка: 13:48) 13:38, 9 мар. 2019

kas
> а они, вроде, работают и всегда работали

напомни, где ты юзал stencil ? в игре, которую сам зашипил ?

что тут забыл - на кружочках скучно ? или там нужен более мощный скилл ?
#104
(Правка: 13:46) 13:39, 9 мар. 2019

FordPerfect
> (зеркала вполне реализуются, как частный случай порталов).

да зеркала и есть порталы по сути - только без прохода

Страницы: 14 5 6 7 8 9 Следующая »
ПрограммированиеФорумГрафика