За отсутствием новое видеокарты на основе Fermi, упорно изучаю геометрические шейдеры, т.к. на них тесселяцию тоже можно запилить.
Сегодня наконец прочитав кучу всякого на тему, очистив ауру, и читая мантры починил геометрические шейдеры в движке.
Результатом стал простой шейдер тесселяции.
До и после.
Счётчик полигонов не учитывает тесселяцию.
Можно высчитать, но это пока всего лишь тест.
- Добавил поддержку экспорта Collada из modo 501 (Collada 1.4.1).
- Решил вечную проблему считать или не считать TBN самому (при отсутствии данных пространства касательных производится расчёт, в противном случае читаются сохранённые данные).
Геометрический шейдер ограничен максимальным к-вом компонентов, которые он может создавать. На моей 8600M GT это было где-то 1024 компоненты. Если декларация вертекса содержит даже 8 компонент (что в принципе маловато для нормального рендер пайплайна), то максимальное к-во вертексов, которые ты сможешь заэмитить в один пас - 128 (1024/8), а треугольников где-то 42 (стрипами чуть больше конечно).
Как ты это делаешь?)
Помню я как-то сферку строил на геометрическом шейдере с расчетом нормалей, uv и тангента. В один пас никак не построишь с достаточным степом, чтоб сферка на сферку была похожа).
По поводу TBN. Лучше всегда экспортить в файл модели. Есть нестандартные ситуации, когда аналитически его нельзя вообще правильно рассчитать (например, когда художник сделал миррор половины модели и редактор перевернул для этой части систему координат). Майкрософт правда для XBox'a требует расчет TBN'а на этапе загрузки. Но гемора с этим много).
dez01
Про TBN я как бы в курсе, всегда читал его из Collada, просто из modo он не сохраняется, максимум нормали, поэтому пришлось считать.
Ну и художник может попробовать такой и такой варианты, какой ему больше понравится, понятно что генерация при загрузке хуже.
Обычно делаю, это же просто тест, ничего не более, для чего-то серьёзного ещё пилить и пилить. В основном хотел подобное сделать для лиц персонажей и террейна, но на геометрическом шейдере, как ты уже сказал, далеко не уйти. Это явно не будет основным способом, просто хотелось попробовать, а железо OGL4 не держит видео.
Igroman > Вот здесь есть пример, он должен нормально работать на amd/ati.
Неа, не работает. Даже шейдеры не компилятся.
У меня просто проблема в том, что не могу протолкнуть больше, чем 7 вершин по 2 вектора в каждом. Если на выход 16 vec4 или больше, то драйвер зависает.
Я уверен, если бы эта демка работала на AMD, то крашилась постоянно, так как на выход тут гораздо больше данных.
Вай, что-то у них там совсем страшное.
Но с выходными данными тормоза и на NV, но ты и сам видел, что там значительно больше информации на выходе.
Может сама карта плохо поддерживает геометрические шейдеры? А от вендора примеры тоже падают чтоли?