Господа, может ли кто-нибудь помочь?
Имеется проблема с шейдером свечения при его применении для поверхности худа на динамическом освещении. Для теста смастерил простейший шейдер (заменил им
model\selflight). Скомбинировал его из самого примитивного вертексного
Код
#include "common.h"
struct v2p
{
float4 hpos: POSITION; // Clip-space position (for rasterization)
};
//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
v2p main ( float4 P: POSITION )
{
v2p O;
O.hpos = mul (m_WVP, P );
return O;
}
FXVS;
и настолько же примитивного пиксельного
Код
#include "common.h"
half4 main ( p_flat I ) : COLOR
{
return half4 (1,1,1,1)*8.0h;
}
Если я всё верно понимаю, то этот вертексный шейдер ничего не делает, а пиксельный просто генерирует постоянный белый цвет.
Сам шейдер xray, который их объединяет, выглядит так:
Код
function normal (shader, t_base, t_second, t_detail)
shader:begin ("dumb","accum_emissive")
: sorting (3, true)
end
Теперь установил этот шейдер модели болта для вида от третьего лица (там всего одна поверхность
wpn_bolt_S) и этот же шейдер поверхности болта в худе (поверхностей там две, но поверхность болта имеет такое же имя
wpn_bolt_S).
Что получаем (полное динамическое освещение):
при виде от третьего лица всё нормально
при виде от первого лица болт смещается из руки
Теперь заменяю
true на
false в файле
models_selflight.s в строке
": sorting (3, true)"
При виде от третьего лица ничего не меняется.
при виде от первого лица
Разобрать не очень легко, но можно. Болт в руке, но какой-то кривой. Вместо него на самом деле прозрачная область, сквозь которую видно однако не руку, а местность (т.е. болт как-бы руку загораживает, но сам не рисуется). На второй картинке, там, где за болтом небо, на месте болта и вовсе рисуется мусор, оставшийся с краёв болта (пиксели цвета руки и перчатки). Кроме того, при движении прозрачное пятно на месте болта рисуется какими-то рывками, видно, что контур как-то дёргается.
Такая же ситуация возникает и на более сложных шейдерах. Я специально слепил самый простой, чтобы исключить сторонние факторы. Честно говоря, нет желания осваивать HLSL в полном объёме. Было желание просто прикрутить уже готовый шейдер к худу, но вот эта заморока мешает.
Кто-нибудь может помочь?