Набор методов, позволяющих избежать явного упорядочения, называется «Независимая прозрачность заказа» (сокращенно OIT).
Есть много методов OIT.
Исторически одним из них является пилинг глубины . При таком подходе вы сначала визуализируете самые передние фрагменты / пиксели, затем вы находите ближайший к тому, который был найден на предыдущем шаге, и так далее, имея столько «слоев», сколько вам нужно. Это называется глубинный пилинг, потому что на каждом проходе вы «очищаете» один слой глубины. После этого весь ваш слой может быть перекомбинирован задом наперед. Для реализации этого алгоритма вам необходимо иметь копию буфера глубины.
Другой набор техник - это смешанные OIT. Одним из последних и интересных является взвешенный смешанный OIT, предложенный McGuire и Bavoil . Это в основном применяет взвешенную сумму для всех поверхностей, которые занимают данный фрагмент. Предлагаемая ими схема взвешивания основана на пространстве камеры Z (в приближении к окклюзии) и непрозрачности.
Идея состоит в том, что, если вы можете свести проблему к взвешенной сумме, вас не волнует порядок.
Помимо оригинальной статьи, в блоге Мэтта Петтинео есть отличный ресурс для подробностей реализации и проблем, связанных с Weighted Blended OIT . Как вы можете прочитать из его поста, эта техника не является серебряной пулей. Основная проблема заключается в том, что схема взвешивания является центральной и должна быть настроена в соответствии с вашей сценой / контентом. Из его экспериментов, хотя техника, кажется, работает нормально для относительно низкой и средней непрозрачности, она терпит неудачу, когда непрозрачность приближается к 1, и поэтому не может быть использована из материалов, где большая часть поверхности непрозрачна (он приводит пример листвы).
Опять же, все сводится к тому, как вы настраиваете свои веса глубины, и найти те, которые идеально соответствуют вашим сценариям использования, не обязательно тривиально.
Что касается того, что необходимо для взвешенного смешанного OIT, то ничего, кроме двух дополнительных целей рендеринга. Тот, который вы заполняете предварительно умноженным альфа-цветом (цвет * альфа) и альфа, оба взвешиваются соответственно. Другой только для весов.