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

Несколько материалов в одном шейдере - это выгодно?

Страницы: 1 2 3 Следующая »
#0
19:36, 25 сен. 2018

Уж не важно сейчас как я передаю в шейдер идентификатор материала )) Но суть в том, что некий id привязан к каждому вертексу.
При растеризации к нам приходит некий id того что мы растеризируем.
Да, да, да, id-шник интерполируется пока идёт от вертакса до фрагмента =)) так что пришедшую цифру просто округляем.
GLES2.0, чё вы хотели.

Затем по id-шнику мы мы зануляем ненужные нам юниформы.
Например:

#define ID_METALL       1
#define ID_PLASTIC      2

int id_material = int(v_materialId);

diffuseColor_ofMetall *= float(id_material == ID_METALL);
diffuseColor_ofPlastic *= float(id_material == ID_POLISH);

diffuseColor = diffuseColor_ofMetall  + diffuseColor_ofPlastic;

Так же само и shininessи всякие другие параметры материала.

Это даёт нам возможность рисовать в один дравколл обьект, состоящий из нескольких материалов с различными настройками отражения/преломления и т.п.
Но есть одна нехорошая вещь. Когда таких материалов много, и настроет материала много, то уже на одном таком "занулении" мы нехило просидаем по FPS.

Вот думаю - такой способ вообще растространён, люди им пользуются, или это каккой-то колхоз?


#1
20:08, 25 сен. 2018

Никогда не понимал, что все так фапают на draw-call'ы
п.с. Похоже на колхоз.

#2
20:53, 25 сен. 2018

f1ufx_
Использовал когда-то очень давно. Сейчас не использую, но скорее просто из-за ненадобности.

BingoBongo
> Никогда не понимал, что все так фапают на draw-call'ы
В большинстве случаев они требуют синхронизации CPU и GPU, что сказывается на производительности (поправьте меня, если я не прав).
Т.е. рисовать за раз модель из тысячи треугольников и, собственно, эту же тысячу треугольников по отдельности - разные вещи.

#3
21:10, 25 сен. 2018

BingoBongo
> Никогда не понимал, что все так фапают на draw-call'ы
потому что уменьшив количество дроуколов можно выжать миллионы полигонов из мобилки)

#4
21:14, 25 сен. 2018

Great V.
> Никогда не понимал, что все так фапают на draw-call'ы
фапать надо на фпс а на дравколы дрокать

#5
21:49, 25 сен. 2018

Great V.
> В большинстве случаев они требуют синхронизации CPU и GPU, что сказывается на
> производительности (поправьте меня, если я не прав).
Что-то новое. Проблема в том, что GPU рисует быстрее, чем ты вызываешь соответствующее API. Таким образом, если рисовать маленькими порциями, то GPU будет простаивать, даже если функции отрисовки вызываются подряд.

/A\
> потому что уменьшив количество дроуколов можно выжать миллионы полигонов из
> мобилки)
Насколько помню, самое глупое что можно сделать на мобилках - это додуматься рисовать тексты посимвольно. Если по максимому все хранить в VBO, то сокращение дроу-коллов уже является следствием такого подхода, и с фпс особо проблем нет.

#6
22:09, 25 сен. 2018

BingoBongo
Необходимо отрисовать каждую букву в нотации unicode (т.е. все символы нашей планеты) разными материалами. Буква A - стеклом, буква "кю" из алфавита зимбабвы - саломинкой.
И таким разношёрстным 3d шрифтом тебе надо отобразить какой нибудь текст.
Как делать будешь?

#7
22:09, 25 сен. 2018

BingoBongo
Все то о чем ты говоришь имеет место быть. Но то что ты называешь вызовом API будет зависеть от скорости процессора и кода. Помимо этого каждый draw-call отсылает лишний набор данных в видеокарту, от которого можно избавиться, сводя все в один draw-call, поскольку процессоры достаточно быстрые, независимо от того используется VBO или нет. И в этот набор данных каждого draw-call входят не только настройки материала, но и все остальные данные, которые задавались от самого создания контекста устройства или были заданы по умолчанию.

#8
22:17, 25 сен. 2018

f1ufx_
> Но есть одна нехорошая вещь. Когда таких материалов много, и настроет материала
> много, то уже на одном таком "занулении" мы нехило просидаем по FPS.

прочитай про azdo

#9
1:48, 26 сен. 2018

Great V.
> В большинстве случаев они требуют синхронизации CPU и GPU
Бред же. Никогда дравколл не требовал этой синхронизации.

#10
3:05, 26 сен. 2018

А почему бы не держать один шейдер на каждый материал? (Я один так делаю?)

#11
7:30, 26 сен. 2018

Синхронизации требует чтение в обратку из gpu.

#12
10:31, 26 сен. 2018

innuendo

прочитай про azdo

Выглядит как очень крутая тема. Почитаю обязательно.

https://www.khronos.org/assets/uploads/developers/library/2014-gd… GDC-Mar14.pdf

#13
10:33, 26 сен. 2018

vindast

А почему бы не держать один шейдер на каждый материал? (Я один так делаю?)

А как тогда отрисовать обьект в один дравколл??? >_<
#14
13:24, 26 сен. 2018

ну-ну, оптимизируем дравколлы добавляя условные проверки в шейдер :) на мобилах.... *занавес*

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

Тема в архиве.