PDA

View Full Version : Motion vectors not showing correct motion vectors?!?!?


Rovastar
23rd March 2002, 12:55
Honestly the confusing title says it all.

For the movement to be 'stopped' (for nVidia cards at least and maybe more) we set dx and dy to -0.0005.

No problems there. we have accepted that and us authors follow this.
But weird things are happening when I use MV on a 'static' image.

All MV are collected on dx and dy to 0 for statis when as we have discovered is not the case.

Confused still....I have added a zip.

Test1: dx and dy = 0 and mv_l = 200; you can see that the circle waveform image is moving slightly and the mv are static implying that there is no movement.

Test2: dx and dy = -0.0005 and mv_l = 200; you can see that the circle is static but the motion vectors imply that is movement where there is not.

Understandably I am confused.:confused:

Ryan (or Krash or anyone else) any ideas as to way it is doing this?

I cannot make a preset that I want (a beat time mix of spirit cave lights) because of this very reason.:(

Rovastar

Krash
25th March 2002, 02:58
Makes sense to me.
The reason that we have had to put dx = -0.0005, is because the default texel alignment in nvidia drivers is 5. This is basically an offset to the actual percieved texel/pixel, and refers to which part of a pixel is being referred to in its coordinates. ATi drivers (and others, I assume) have a default texel alignment of 0, meaning that a pixel reference is referring to the center of a pixel.

The motion vectors react to the internal motion values within milkdrop, and not the actual perceived movement (which is a function of the texel alignment). So when you have dx set to -0.0005, milkdrop is internally moving things across at -0.0005 screen units per second. This is opposed by the movement due to the tex alignment, and so we see stillness. The motion vectors are still measuring that -0.0005 difference though. When you have the mv_l value up high enough, you can see the difference.
The same goes for having dx to 0. The motion vectors won't react, because the value is 0, but we see movement due to the texel alignment.

If you want to fix it, go to display properties -> settings -> advanced -> GeForce 2 GTS (or whatever vid card you have, the tab will be named differently) -> Additional Properties -> Direct3D Settings -> More Direct3D, and set the texel alignment to center (move the slider all the way to the right).

The setting is buried pretty deep, but it's there. In an ideal world, Milkdrop would detect what the current texel alignment was, and alter all of its movement to suit. Then we could stop putting the -0.0005 setting in every preset. It would require changing all the presets containing that code, but it would mean that everyone got to see the same thing.

- Krash

Rovastar
25th March 2002, 03:11
I would presume that motion vectors would emulate and mimic the actual motion on the screen rather than would 'should' be happening?

That was all really.
I was going to post this with the old one about dx and dy not zero. But could not be bothered hunting for it. But I am a little worried when I am using 'fine' dx and dy amount that other will not see what I want. The recent collection that I posted with massive mv in it and still motion. Like Sensual Enjoyment the motion has to be still. If I even move this by -0.0005 in the dx and dy it looks all screwed up.

If it is fixed then I would rather change all the preset now then when we have 2,000.;):eek:

I wonder if Ryan will comment..........................

Krash
25th March 2002, 04:45
shoot him an email. Maybe he could work out a quick fix.

- Krash