2012-05-21 9 views
1

Я смотрел на мель, пытаясь понять, почему мы все еще используем режимы смешивания фиксированной функции в новых 3D API (например, D3D11). В D3D10 фиксированная функция Alpha Clipping была удалена в пользу использования шейдеров. Почему, потому что это гораздо более мощный подход практически к любой ситуации.Почему мы все еще используем операции смешивания фиксированных функций в E3 D3D11?

Итак, почему же мы не можем рассчитывать или выполнять операции смешивания (например, образец текстуры из RenderTarget, который мы сейчас делаем)? Есть ли какая-то проблема с аппаратным дизайном в конвейерах видеокарты, которые делают это трудным для достижения?

Причина, по которой это было бы полезно, заключается в том, что вы можете делать что-то вроде make-рефлекторных шейдеров быстрее, так как вам не нужно было бы переключаться между двумя renderTargets для каждого наложения рефракционных объектов. Например, система преломления окон для ОС или игрового интерфейса.

Где может быть лучшее место, чтобы предложить такую ​​идею, поскольку это не дискуссионный форум, так как мне бы хотелось увидеть это в D3D12? Или это уже возможно в D3D11?

+0

«Где может быть лучшее место, чтобы предложить такую ​​идею» * Все хотят этого. Все хотят * много вещей. Вам не нужно предлагать подобные вещи производителям аппаратных средств; они знают, что люди хотят их. Желание вещей не означает, что они произойдут. Они также не предполагают, что они будут быстрее получать их. –

+0

«они знают, что люди хотят их ... И не будут предлагать им означать, что их быстрее». И как это? Из-за какой-то случайной неподтвержденной догадки? Или, может быть, потому, что ppl, как и я (даже если я не успеваю об этом вопросе), спрашивает и говорит об этом, фактически указывает «другим», что «другие» пришли к подобным мыслям и/или потребностям? Мне жаль, что я наткнулся на ваше большое ваше эго ... но общение - это первый шаг в воплощении любой действительной идеи. – zezba9000

+0

Производители оборудования не слушают «парней на форуме». Они слушают Джона Кармака. Они слушают Тима Суини. Они слушают парней в Blizzard, EA, Activision и т. Д. Они не слушают случайные голоса. Зачем? Потому что ребята, которые на самом деле делают этот материал профессионально, уже делают правильные предложения. И если вам нужны доказательства для этого, есть тот факт, что мы * уже имеем эту функциональность * (к нетривиальной степени) в «произвольном» доступе на чтение/запись к изображениям. Производители оборудования добавили эту функциональность, потому что большие парни хотели этого, а не из-за парней на форуме. –

ответ

3

Так почему же мы не можем вычислить или собственного смешивания операции

Кто говорит, что вы не можете? С shader_image_load_store (и эквивалентом D3D11) вы можете делать практически все, что угодно, с изображениями. При условии соблюдения вами правил. Эта последняя часть - это, как правило, то, что происходит с людьми. Выполнение полного чтения/изменения/записи в шейдере, так что последующие вызовы фрагментарного шейдера не читают неправильное значение, практически невозможно в самом общем случае. Вы должны ограничить это, сказав, что каждый рендер-объект не будет перекрываться с самим собой, и вам нужно вставить барьер памяти между визуализированными объектами (которые могут перекрываться с другими визуализированными объектами). Или вы используете подход связанных списков.

Но дело в том, что с этими механизмами не только люди внедряют смешивание в шейдерах, но и реализовали независимую от заказа прозрачность (через связанные списки). Ничто не мешает вам делать то, что вы хотите прямо сейчас.

Ну, ничего, кроме исполнения конечно. Блендер с фиксированной функцией всегда будет быстрее, потому что он может работать в параллельно с помощью операций фрагментарного шейдера. Смешивающие устройства являются отдельными аппаратными средствами из флеш-шейдеров, поэтому вы можете выполнять операции смешивания, одновременно выполняя операции фрагментации шейдеров (очевидно, из более поздних фрагментов, а не из тех, которые смешиваются).

Механизм чтения/изменения/записи в оборудовании для смешивания предназначен специально для смешивания, а image_load_store - более общий механизм. И хотя generic может превзойти конкретные в долгосрочной перспективе эволюции аппаратного обеспечения, для немедленного и ближайшего будущего, вы можете ожидать, что смешение фиксированной функции будет бить образ__load_store, каждый раз смешивая производительность.

Вы должны использовать его, только если вы должны. И даже, решите, действительно ли вы, действительно это нужно.

+0

Tnx для подсказки о "shader_image_load_store". Что-то вспомнить. – zezba9000

1

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

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

+0

Да, после того, как я написал это, я понял, что преломление невозможно сделать, как я и предложил, иначе вам придется буферизировать последний кадр. – zezba9000