Fading and variable translucency

So I'm aware that the VDP1 has several interesting modes for drawing primitives (ex, half-translucent, shadow, etc.). But nowhere in that list do I see a mode (at least that I recall) which enables you to control the _degree_ of translucency.

If this is not possible, then I am not surprised, as the Saturn's polygons are unfortunately quite "blending impaired", I'd say.

But this bring up an interesting question: is there any other possible way to fade a sprite, for instance? Even, er...sprites aligned parallel to the drawing plane (completely flat and 2D) still only have the same set of drawing options as other 3D primitives, so I would assume this means that there are no additional lucency options for them either.

And is it possible to blend background layers variable..y? I recall that Radiant Silvergun seemed to have cloud and "machine energy" type layers that would fade in and out of opaqueness. How could these be done?

And how in the world can you fade the screen out, ex., like how NiGHTS does a fade to white when the level ends?

I'd say maybe some palette trickery might be involved, but that would only work for 8-bit primitives. I don't really know how to control fading/blending/lucency/whatever of the RGB sprites and shapes. Is there a way to do this at all?

(I am aware that the hardware half-translucency is glitched in the Saturn due to the unusual rastering method -- but I am not asking if translucency exists, I mean to ask if there is any way to achieve variable levels of it.)

[EDIT: considering the SNES could fade sprites back in the 16-bit era (though I believe the layers were additive and not combinatorial translucency (pardon my lack of a better term)) I would certainly hope that by the 32-bit era Sega, even though the 3D translucency wasn't top notch, would have gotten the sprite lucency working.
 
I'll go ahead and answer one question: I found the parts about the blending ratio for VDP2 layers near page 187-188 of the SDL tutorial document.
 
Omni said:
So I'm aware that the VDP1 has several interesting modes for drawing primitives (ex, half-translucent, shadow, etc.). But nowhere in that list do I see a mode (at least that I recall) which enables you to control the _degree_ of translucency.

I wrote up nice description of how the transparent sprites are managed and realized at the very end there's one VDP2 register I don't understand which throws part of the explanation into doubt. Oh well... :(

The VDP1 can't do variable levels of translucency, but the VDP2 can. As the VDP2 reads out data from the VDP1 framebuffer, it can enable transparency between that pixel and the VDP2 graphics.

This means the interaction between transparent objects is between the VDP1 and VDP2 only. You couldn't draw a semi translucent sprite over another sprite as they are both VDP1 objects. This is a huge disadvantage IMO. You can, however, have translucent sprites over a VDP2 background layer.

But this bring up an interesting question: is there any other possible way to fade a sprite, for instance? Even, er...sprites aligned parallel to the drawing plane (completely flat and 2D) still only have the same set of drawing options as other 3D primitives, so I would assume this means that there are no additional lucency options for them either.
You could specify all sprites to be transparent and adjust the associated transparency ratio register for a fade-in/fade-out. There are only 32 levels of transparency so it would be sort of rough.

And is it possible to blend background layers variable..y? I recall that Radiant Silvergun seemed to have cloud and "machine energy" type layers that would fade in and out of opaqueness. How could these be done?
Yes, the Saturn can normally combine two background layers with 32 levels of transparency, and it has a special mode where three layers can be combined. You can't do any more than that, though.

And how in the world can you fade the screen out, ex., like how NiGHTS does a fade to white when the level ends?
The color offset registers allow you to saturate the colors from a particular layer (backgrounds, sprites) towards the RGB value they specify. Making all the layers fade to black or white could be accomplished through this.

I'd say maybe some palette trickery might be involved, but that would only work for 8-bit primitives. I don't really know how to control fading/blending/lucency/whatever of the RGB sprites and shapes. Is there a way to do this at all?
There is, but I don't know how it's done through the SBL/SGL. If you want a headache, read chapter 9 in the VDP2 manual. It explains everything but like the rest of the Saturn docs leaves plenty out. ;)

I got stuck at the definition of the SPCCN bits. It sounds like there are eight associated transparency levels you can specify based on the 3-bit color calculation field from a designated sprite type, but I don't know where SPCCN fits in. Does it supply supplementary data when there aren't enough SC bits in the sprite type? Does it set the absolute value that the SC bits must match for transparency to be enabled? I guess I need to test this.
 
I'll glance at chap. 9, thanks.

Didn't Traveller's Tales use some hacky VDP1-2 voodoo for the transparent textures in Sonic R? I was under the impression that when it came time to render a transparent poly in the Z-order, everything was copied to the VDP2 framebuffer, the polygon was drawn with VDP1, then combined back with the rest of the data using VDP2, and then normal drawing continued (thus allowing all of the VDP1's translucency options to go toward a single poly without affecting the others).

That's a really layman description though -- I personally don't know the technical details of how that was done.

You could specify all sprites to be transparent and adjust the associated transparency ratio register for a fade-in/fade-out. There are only 32 levels of transparency so it would be sort of rough.

32 levels of translucency? That's an odd set. Can the "transparency ratio register" be set individually for any sprite object, or just on VDP1 drawing as a whole? [even though of course the mixing is between that sprite and the VDP2 framebuffer ONLY]
 
cgfm2 said:
I got stuck at the definition of the SPCCN bits.

My understanding is that you can use them to control sprite color calculation based on the priority bits (because there's obviously too few ways otherwise). You put the level in SPCCN0-2 and then the condition (less than, equals, greater than or MSB) in SPCCCS0-1.


Omni said:
Didn't Traveller's Tales use some hacky VDP1-2 voodoo for the transparent textures in Sonic R?
Sprite transparency is calculated per pixel based on a number of conditions, so the only thing needed is to set up the track sprite pixels to blend with a background layer that is below another background layer. IIRC they used the transparency effect to fade in scenery in some other tracks.
 
Are you guys absolutely sure that its impossible to do sprite-on-sprite transparency? I recall many software which used some degree of transparency without background interaction - heck, even the BIOS does this (the two circling specs which highlight the cd player icons, their trails are transparent).
 
VDP1 can blend sprites using half-transparency as mentioned in the original post, but there are no other blend modes or ways to control blend rates.
 
So, summary. Correct me if wrong on any point.

1. VDP1 can draw sprites with sprite-aware translucency only in half-transparent mode. This mode is glitched due to unusual rasterization methods in the Saturn. (There's also mesh mode, of course, which isn't real lucency and a little rough, but it has uses).

2. VDP2 can combine VDP1 drawing with its own framebuffer at 32 degrees of variable translucency, but only with VDP1 drawing as a whole -- not on a per-primitive basis, and all blending is done directly between the entire VDP1 layer and any underlying VDP2 backgrounds, so it can't be used for primitive-primitive transparency.

3. VDP2 can combine 2 (or optionally 3) VDP2 background layers with 32 degrees of transparency.

4. Color offset allows you to blend the final screen toward a particular color, thus enabling fading.

And I suppose that's it then.
 
Omni said:
2. VDP2 can combine VDP1 drawing with its own framebuffer at 32 degrees of variable translucency, but only with VDP1 drawing as a whole -- not on a per-primitive basis, and all blending is done directly between the entire VDP1 layer and any underlying VDP2 backgrounds, so it can't be used for primitive-primitive transparency.

VDP2 has eight sprite blend setting registers, which are chosen from the CC bits in the VDP1 frame buffer data. The data format setting in the VDP2 sprite control register determines how many CC bits there are, and you can set them and the priority bits via the color bank setting in the VDP1 sprite draw command. Unfortunately all RGB-mode sprites (which are the only ones really usable with half-transparency) always share the same blend setting register.


You should be able to select blend register for each sprite pixel by including the colorbank and priority bits into the sprite data and drawing it into the framebuffer as an RGB mode sprite and then setting the VDP2 sprite control register to treat all pixels as palettized.
 
Back
Top