Odin_KG писал(а):В редакторе нет флага для Z-buffer-а.
Вообще логика такая... для прозрачных текстур Z-buffer не имеет смысла, поэтому заполнение Z-buffer-а MAGIC_MATERIAL_ZWRITE включается только для ситуаций, когда отключен альфа-канал (тип смешивания "непрозрачность" или "маска"). И тогда же включается MAGIC_MATERIAL_ZENABLE, так как это требуется для правильного рисования эффекта.
В своем проекте вам нужно включить проверку на Z-buffer (MAGIC_MATERIAL_ZENABLE) и, собственно, всё. Я это считаю "внешней операцией", которая выполняется вами, когда она вам нужна.
Ваш пример мне понятен, но есть другой типичный случай: например, дым из выхлопной трубы машины. Если машина будет активно двигаться и вертеться, то частицы дыма окажутся буквально вокруг машины, обволакивая ее. Чтобы корректно нарисовать такой 3D дым мне нужно включить MAGIC_MATERIAL_ZENABLE, то есть включить тест буфера глубины, но запись в буфер глубины мне не нужна. При таком режиме рисования (конечно дым надо рендерить после рендеринга машинки), когда включен тест буфера глубины часть частиц дыма окажутся позади машинки, а часть перед машинкой, а какая-то часть будет пересекать геометрию машинки, но это и есть желаемый результат.
Обычно для таких эффектов нужна и сортировка частиц по камере, особенно если эффект не аддитивный, а с нормальным альфа-блендингом, чтобы нарисовать их в порядке от дальней к ближней.