22 Сентября 2024, 08:45:09
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Навигация по форуму







guest3d
Quest3D - Русскоязычное сообщество > Quest3D > Визуализация, Шейдеры > [G] быстрый рендеринг растительности
[G] быстрый рендеринг растительности
(Прочитано 15542 раз)
  [1]
Печать
Yogik | Гость |
[G] быстрый рендеринг растительности |
0
В Quest3D не пагано справляється з архітектурою, але як покращити якість флори
« Последнее редактирование: 14 Сентября 2009, 17:05:56 от Sqwer »
danila_dem | ***** | Модератор | Пользователь | Сообщений: 75 | «Ответ #1 31 Августа 2007, 13:01:13 »
Re: Дерева? шо можна придумати:) |
1
как бы начать что бы не обидеть, это не в коем случае не замечание.

начну с того что когда зарегил этот форум, то на официальном форуме нашел поиском тему на русском и просто вбил туда этот адрес, после чего там появилось достаточно грубое сообщение на английском, а тема залочена.
http://www.quest3d.nl/community/index.php?topic=60714.0
Конечно же здесь никто так делать не будет, пиши скока влезит.

а что насчет языка, то как я понимаю форум служит для того что бы обмениваться знаниями, я уверен что где то есть форумы на итальянском, португальском, китайском, но нам они немногим помогут. Поэтому и создан был форум "Русский форум по Quest3D".

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

я же в свою очередь обещаю поменять название "Русский форум по Quest3D" на "Русскоязычный форум по Quest3D".
Главное не надо обижатся. И подойти к этому вопросу с практической точки зрения.

с уважением.
ио администатора

PS. ответ кстати легче понять чем вопрос.
Yogik | Гость |
Re: Дерева? шо можна придумати:) |
2
Ну ето без проблем, только извените за качество перевода
Yogik | Гость |
Re: Дерева? шо можна придумати:) |
3
Я понимаю что Quest3D хоть както справляется с архитектурой, но сама растительность убогая . Пробовал юзать стандартные дервя  , качество желает быть лутшым. Если моделировать деревя и закидать в квест падают FPS. Может ктота пробовал подгружать до NatureGenerator свои растения или есть другие варианты.
mikl | *** | Постоялец | Сообщений: 123 | «Ответ #4 31 Августа 2007, 13:03:45 »
Re: Дерева? шо можна придумати:) |
4
Цитировать
Если моделировать деревя и закидать в квест падают FPS. Может ктота пробовал подгружать до NatureGenerator свои растения или есть другие варианты.

1. Если хочешь увеличеть fps то деревья лучше делать не слишком полигонные и расставлять их не слишком плотно.
2. Если хочешь что-бы количество fps было в большую сторону засчёт nature paint тогда следует выставлять параметры Fade distance\ Cull distance на миниум.

* 5.jpg (29.24 Кб, 640x480 - просмотрено 1994 раз.)
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #5 14 Сентября 2009, 17:18:01 »
Re: [G] быстрый рендеринг растительности |
5
Продолжу тему:

написал шейдер для деревьев и при подключении к каналу nature paint и всё прекрасно работает..., но как только проверил метод на Перхуде, оказалоссь , что деревья рендятся так: 1 дерево= 1 DIP  (оно и понятно  Смеющийся)

сцена предпологает много зон с лесом, что значит вызов 1 дерево=1 DIP сильно просадит FPS. Чтоб избежать такой ситуации люди используют инстансинг.
Метод таков: заносим в шейд модельку и указываем массивом параметры экземпляра (позиция, скейл, ротация). Таким образом мы рисуем N деревьев за 1 DIP.

Вопрос:
Как из канала nature paint вытащить параметры трансформации и направить их в шейд? (nature paint очень удобен , не хочу с ним прощаться).

Ответ: всё оказалось намного проще: в шейдер передаётся дополнительный поток данных и заносится в тесктурные координаты. ОК мы получили 40 деревьев за DIP, но всё равно этого мало. И к тому же  этот параметр передаётся только в 1 канал, но не в остальные, следовательно LOD работать должным образом не будет. Похоже пора искать ответ через DX SDK и Q SDK.
В замешательстве  Показает язык Обеспокоенный Рот на замке В замешательстве Целующий Плачущий Улыбающийся Подмигивающий Веселый Смеющийся Злой Грустный Шокированный Крутой Непонимающий Строит глазки Показает язык
« Последнее редактирование: 20 Сентября 2009, 19:37:43 от Sqwer »
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #6 21 Сентября 2009, 02:02:06 »
Re: [G] быстрый рендеринг растительности |
6
ОК мы получили 40 деревьев за DIP, но всё равно этого мало.

Если мало, то почему нельзя передать больше координат? что-то мешает?

И к тому же  этот параметр передаётся только в 1 канал, но не в остальные, следовательно LOD работать должным образом не будет.

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

Я конешно в шейдерах пока не силён, но на днях немного с ними познакомился по работе. У меня сложилось впечатление, что ты просто не нашёл как всё то, чего тебе не хватило для реализации этой идеии, делается в квесте.
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #7 21 Сентября 2009, 02:20:36 »
Re: [G] быстрый рендеринг растительности |
7
Цитировать
Если мало, то почему нельзя передать больше координат? что-то мешает?
Мешает, логика передачи параметров занесена в сам канал nature paint. (Вероятно Квестодевелоперы руководствовались правилом: "должно работать на любой машине". и по сему остановились на выборе SM1.1, но с другой стороны почему бы им не сделать 2 варианта для инстансинга: для 1 и 3 SM?) (более менее "живой" инстансинг возможен только на карточках с поддержкой SM3 )


Цитировать
Что значит передаётся только в один канал? В один только шейдер, или как?  И почему лоды не будут работать, что нужно чтобы заработали?
Т.е. передаётся только в первый чаилд. (Версия квеста 4,2,2)

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

Цитировать
Я конешно в шейдерах пока не силён, но на днях немного с ними познакомился по работе. У меня сложилось впечатление, что ты просто не нашёл как всё то, чего тебе не хватило для реализации этой идеии, делается в квесте.
ОК, даже если мы найдём способ подключения параметров инстансинга для каждого лода всё равно: 40/DIP это мало для больших зон растительности (плотный лес или трава).

Может пришло время чехлить DX?  Подмигивающий

PS прежде чем публиковать выводы, я проверил на тестовой сцене производительность. Инстансинг реально помогает. Например на сцене где 3К деревьев  метод инстанса всего леса (где каждое дерево по 2К трингов) превосходит систему ЛОДов (2К 1,5К 1К 200 билборд).
« Последнее редактирование: 21 Сентября 2009, 02:23:30 от Sqwer »
Viik | **** | Старожил | Сообщений: 302 | «Ответ #8 22 Сентября 2009, 21:37:00 »
Re: [G] быстрый рендеринг растительности |
8
Только 40 инстансов из-за того что максимальное количество векторов констант передаваемых в шейдер 256. Для одного инстанса нужна матрица, тобиш 4 вектора, вот и получаеться что максимум 65 матриц, но так как для каждого инстанса еще передаеться его фейд значение то получаеться еще меньше.
Есть более продвинутый инстансинг но его нужно делать руками с помощью кастомного ченела и специального шейдера, работать будет на всех видяхах старше 6ххх серии.

Про Лоды я Sqwer уже расказывал, сколько уровней лодов столько и Нече Пеинтеров будет. На каждом кадре шаге список инстансов нужно обновлять ели положение камеры меняеться, еще один довод делать кастомный ченел, либо использовать динамическое добавление инстансов в НечеПеинтер через команды, в 4.2.3 вроде бы работает.
DimiS | **** | Старожил | Сообщений: 284 | «Ответ #9 23 Сентября 2009, 12:49:42 »
Re: [G] быстрый рендеринг растительности |
9
мне Sqwer это всё уже подробно объяснил в аське. Просто я был уверен что можно передать все необходимые параметры через текстуру, а оказалось что в ати-шных видяхах нельзя читать из текстуры в вертексном шейдере. Хотя это решило бы, мне кажется, проблемы с ограниченным количеством параметров.
Скоро ли можно будет расчитывать на наличие этой фичи у достаточного большинства пользователей? Ну чтобы можно было её смело юзать.
Sqwer | ***** | Ветеран | Сообщений: 540 | «Ответ #10 23 Сентября 2009, 14:38:45 »
Re: [G] быстрый рендеринг растительности |
10
Кхм... АТИшки  держат текстурные семлеры начиная с версии SM3.0 . И по сему текстуры не подойдут для определения положений на SM1.1 и SM2.0.

И вообще HLSL позволяет читать текстуры в VS начиная с 3,0 версии. убедиться можно тут

И даже путь наш шейд умеет читать эти текстуры, но как же быть с вызовом? Как я понял, мы 1 раз заносим информацию о вершинах в первый поток, а во второй - трансформацию объектов. Для рендеринга много раз вызываем отрисовку, используя всё тот же поток вершин и меняя лишь элементы массива трансформации.тем самым мы n раз исполняем шейд.

Поправьте если что не так. я могу и ошибаться  Подмигивающий
« Последнее редактирование: 23 Сентября 2009, 14:43:28 от Sqwer »
Viik | **** | Старожил | Сообщений: 302 | «Ответ #11 26 Сентября 2009, 02:11:33 »
Re: [G] быстрый рендеринг растительности |
11
Цитировать
И вообще HLSL позволяет читать текстуры в VS начиная с 3,0 версии. убедиться можно тут

Только вот реализация на Ати и Нвидии разные, на нвидия самая простая - tex2Dlod() и все, на Ати по другому, точно не скажу как.

Цитировать
И даже путь наш шейд умеет читать эти текстуры, но как же быть с вызовом? Как я понял, мы 1 раз заносим информацию о вершинах в первый поток, а во второй - трансформацию объектов. Для рендеринга много раз вызываем отрисовку, используя всё тот же поток вершин и меняя лишь элементы массива трансформации.тем самым мы n раз исполняем шейд.
В случае с хардварным инстансингом, просто сгенеритьса куча треугольников, и все они буду обработаны за один раз.

Чтение из текстуры не лучший вариант, оно медленное и понадобиться как минимум 4-ре 4-х канальные 32-х битные текстуры, только для позиции. С другой стороны, текстуры 128х128 позволят хранить данные для 16384 инстансов. Но в случае с текстурой нужно генерить все необходимые инстансы процом, всю их геометрию, закидывать их в кастомный 3ДОбжектДата ченел. Увешка каждого инстанса будет указывать на отдельный тексель в текстуре координат. Такой способ подойдет если количество инстансов фиксированное а вот их параметры могут меняться. Иначе слишком много данных бедет летать по шине.
 
  [1]
Печать
 
Quest3D - Русскоязычное сообщество > Quest3D > Визуализация, Шейдеры > [G] быстрый рендеринг растительности
Перейти в: