четверг, 17 января 2013 г.

dot(N, L)

Недавно читал форумы и наткнулся на интересную оптимизацию, связанную с ограничением скалярного произведения (например, dot(N, L)) промежутком [0, 1]. Это необходимо делать в случае сложных формул освещения или записи в FP render target, где отрицательные числа могут сломать вам всю математику.

Обычно dot() в шейдерах пишется совместно с max() как в этом примере. В случае D3D assembly это трансформируется в dp3, max, GSA показывает что комбинация занимает два ALU слота. Однако, если max() заменить на clamp(0, 1), это трансформируется в dp3_sat. Radeon HD assembly показывает, что для DOT4 есть опциональный модификатор CLAMP, который работает для диапазона [0, 1]. Таким образом укладываемся в один ALU.

Комментариев нет:

Отправить комментарий