Quest3D - Русскоязычное сообщество

Quest3D => Визуализация, Шейдеры => Тема начата: mixey от 06 Сентября 2009, 13:24:18



Название: [G]Исключение объекта из очистки Z-буффера (есть ответ)
Отправлено: mixey от 06 Сентября 2009, 13:24:18
Можно ли как-нибудь исключить объект или участок экрана из процесса очистки Z-буффера?
Хочу фон и всякие одноразовые элементы программы рендерить один раз и пусть сидят в буффере, а вот рабочую область программы каждый раз обновлять. Каким образом это делается? Наверное я где-то чего-то в основах не понял, но никак не решу проблему...  :(


Название: Re: Исключение объекта из очистки Z-буффера
Отправлено: Sqwer от 06 Сентября 2009, 16:49:27
Можно попробовать так: (по шагам)
1 - рендер статики через "она тайм" РТТ

2 - квад на весь экран с текстурой из РТТ
3 - чистка Z
4 - рендер динамических объектов

цыкл 2,3,4


Название: Re: Исключение объекта из очистки Z-буффера
Отправлено: Viik от 07 Сентября 2009, 21:49:24
Текстура с РТТ зет буфер не заполнит, просто сработает как очистка и все.

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


Название: Re: Исключение объекта из очистки Z-буффера
Отправлено: mixey от 07 Сентября 2009, 22:31:12
Блин, я криво написал... Речь идет еще и о меню! Оно всегда на переднем плане и рисуется ImageCopy, зачем каждый раз пускать в работу этот канал если можно один раз отрендерить статичные элементы меню, а сцену уже динамически?


Название: Re: Исключение объекта из очистки Z-буффера
Отправлено: DimiS от 07 Сентября 2009, 23:44:05
Что ж, такова концепция современного 3д рендеринга -- тебе нужно полностью обновлять содержимое бек буффера а вместе с ним и Z-буффера в каждом кадре. И это вовсе не так страшно, есть только два момента касающихся производительности в твоём случае.
Первое -- ты переживаешь из-за того что твой интерфейс содержит слишком много элементов, и при отрисовке сильно тормозит. Тогда постарайся объединить как можно больше элементов в одну текстуру -- чем меньше вызовов ImageCopy, тем меньше тормозит интерфейс. В идеале твой интерфейс должен рендериться в одну текстуру и потом одним вызовом рисоваться поверх всей остальной сцены.
Второе -- ты переживаешь из-за потерь производительности на отрисовку объектов которые все равно не будет видно потом за интерфейсом. В большинстве случаев это попросту копейки. Но ты можешь отрисовать плоскость необходимой тебе формы под интерфейс в нужном месте, на расстоянии Near clipping distance от камеры, и сделать это в самом начале рендера. Или, если твой интерфейс полностью занимает какую-то сторону экрана, то можешь для рендеринга сцены использовать уменьшенный View Rect