Unity3D - BlendOp LogicalOr - PullRequest
       43

Unity3D - BlendOp LogicalOr

0 голосов
/ 13 января 2019

Короче говоря, у меня есть шейдер, который абсолютно имеет для работы с логическим ИЛИ смешиванием. Я упаковываю битовые данные в один шейдер, где пиксели перекрываются, объединяя эти данные в выходной RenderTexture, а затем распаковываю их в другой шейдер.

Это должно быть кроссплатформенным. Я хочу поддерживать DX11 / 12 (где он работает нормально), OpenGL (стандарт, ядро ​​и ES), а в идеале - Vulkan и Metal.

Вот в чем дело.

Unity заявляет , что он может использовать логическое ИЛИ смешивание только в определенном подмножестве DX11. На самом деле кажется, что он отлично работает на всех версиях DX11.1 + и DX12. Однако он не работает ни на какой другой платформе.

Списки поддержки OpenGL для логического ИЛИ смешивания в их спецификации . Похоже, что это должно работать со всеми версиями OpenGL выше 2 (включая ES, если я что-то пропустил).

Как в Unity я могу сделать этот шейдер кросс-компиляцией с GLSL и включить эту операцию смешивания? Я предполагаю, что это может быть возможно с помощью P / Invoking библиотеки для glEnable и связанных с ней функций, но я хотел бы знать, есть ли способ написать на шейдере Cg и правильно выполнить кросс-компиляцию. Metal / Vulkan не является нарушителем, было бы неплохо расширить поддержку, но я более чем рад согласиться только на поддержку DX11 + и OpenGL 2+.

1 Ответ

0 голосов
/ 16 января 2019

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

Однако, возможно, чтобы эта настройка работала в DX11.1 +, DX12, OpenGL 3.0+, OpenGL Core и Vulkan. Вам нужно создать собственный плагин для Unity и связать все ресурсы рендеринга вручную. Я не мог заставить работать подход P / Invoke, потому что нет никакого открытого способа синхронизировать их с контекстом рендеринга. Я действительно хотел сделать это, чтобы в любом случае убрать стоимость взаимодействия в Unity, так что, вероятно, это хорошая вещь, которую нужно принуждать. Во всяком случае, я хотел бы опубликовать здесь для всех, кто пытается что-то подобное в будущем, и сказать, что, кажется, единственный способ сделать это с помощью собственного плагина.

...