I’m using a geforce3. Bear in mind I’m pretty new to nvparse (and its odd syntax).
I have an animated ‘normal’ texture (tex1), and a static ‘normal’ texture (tex2).
In the register combiners, I want to add a normal from tex1 to tex2, and normalise the result - then dot product this vector with the light vector (col0).
I’m getting ‘white-out’ when I try this:-
Just a guess, but I think that things in register combiners are always clamped to
[-1,1] so maybe when you add your two normals it is getting truncated.
Try multiplying each normalmap normal by 0.5 before summing them. You could do this either by pre-multiplying the normal maps or using register combiner constants.
I think your error comes from the fact the second normalization stage expects spare0 to be unexpanded (so that half_bias(spare0) effect is expanding and multiplying by 0.5)
try this:
combiner #0:
change both expand to half_bias
(this will do what Zeno suggested)
Damn, I forgot that values are clamped to (-1,1) within the combiners! I remember now, from when I used the reg combiner function calls directly…
Why are they clamped even within a general stage? I can understand them having to be clamped before being outputed to the next stage…
Also, why the strange syntax for addition? why can’t we just write “spare0 = expand(tex1) + expand(tex2)” ?
I’ll try out your suggestions when I get back to my code…thanks for the replies chaps!
Carmacksutra, I don’t know if you were using psuedo code there, but if you were not, then there are no keywords (or equivelents) like “signed_identity” or “half_bias_negate” when using nvparse.
I’ve got round this though, and it works rather nicely now. Thanks for all the help.