Анимация костей минько с аппаратной поддержкой вызывает ошибку № 3659: проверка AGAL не удалась

Я обновил код minko as3 для работы со стандартным профилем вместо базового, и у меня есть сетка с анимацией, которую я точно знаю, имеет 185 констант вершин, максимально допустимое количество - 250 по стандарту, но я продолжаю получать [trace] Error: Error #3659: Ошибка проверки AGAL: индекс регистра констант выходит за пределы для исходного операнда 1 в токене 1 вершинной программы.

я ничего не знаю о том, как работает агал, но я понимаю минко. Может ли кто-нибудь указать мне в правильном направлении, что изменить? Я уже настроил класс minko Profile.as и места, где он используется, поэтому я смог определить точное количество констант вершин в реестре (185)


person RIAwolf    schedule 14.03.2015    source источник


Ответы (1)


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

Похоже, в стандарте меньше регистров. Но шейдер Minko AS3 этого не знает. Здесь применяются учитываемые ограничения:

https://github.com/aerys/minko-as3/blob/master/src/aerys/minko/render/shader/compiler/register/RegisterLimit.as

Вероятно, они соответствуют базовому профилю. Я не уверен, что их изменение действительно поможет вам, потому что проблема может быть просто в том, что стандартный профиль AGAL просто не имеет достаточного количества постоянных регистров...

Если вы используете SkinningMethod.HARDWARE_MATRIX, вам следует вместо этого использовать SkinningMethod.HARDWARE_DUAL_QUATERNION.

Вы также можете установить свойство skinningMaxInfluences вашей сетки на что-то меньшее. Определенно следует попытаться использовать более экономичный код шейдера памяти (см. https://github.com/aerys/minko-as3/blob/master/src/aerys/minko/render/shader/part/animation/SkinningShaderPart.as подробности реализации).

person Jean-Marc Le Roux    schedule 14.03.2015
comment
Класс RegisterLimit и его константы не используются, я обнаружил, что github.com/aerys/minko-as3/blob/ теперь содержит ограничения, и их изменение фактически влияет на то, где возникает ошибка (компилятор шейдера или Context3D), а также blogs.adobe.com/flashplayer/2014/09/ размеры регистров увеличивается в каждом реестре, проблемный регистр констант вершин теперь равен 250 вместо 128, если только я не читаю что-то неправильно. Пробовал использовать двойной кватернион и появляются искажения. - person RIAwolf; 14.03.2015