Win3x.Org

Windows & DOS Community

L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo

Règles du forum

Pour tout sujet impliquant un système d'exploitation daté de 2000 à nos jours, merci de le publier dans la section intitulée « Informatique moderne ».

Répondre   Page 1 sur 1  [ 7 messages ]
Auteur Message
gm86
Sujet du message : L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 28 janv. 2019 19:58
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 630
Inscription : 01 sept. 2008 19:07
 
En consultant un vieux forum ayant comme sujet le bump mapping, je suis tombé sur le nom de Montezuma's Return. La page suivante indique qu'il est le premier jeu vidéo à utiliser cette technique simulant le relief via un placage de texture :
http://ultimatehistoryvideogames.jimdo ... -s-return/
Le site lui-même présente une multitude de jeux illustrant l'histoire vidéo-ludique. Le jeu en question était livré sur un CD-ROM, contenant d'ailleurs la réplique DOS en mode protégé de la version Atari 8 bits de Montezuma's Revenge. Il se lançait sous Windows en mode VGA ou 3Dfx. Or en 1998, 3Dfx sortait le chipset Voodoo2 qui apportait une technique de bump mapping expliquée par Tony Tamasi. Le jeu l'active alors automatiquement, ce qui fait apparaître une rugosité à l'approche d'une texture de pierre, bois ou autre matière.
Toutefois, si vous disposez d'une carte Voodoo3 de 8Mo seulement, pensez à activer la seconde TMU ou le jeu vous dispensera de ce bel effet :
set FX_GLIDE_NUM_TMU=2

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
Nintenloup
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 29 janv. 2019 05:35
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 2469
Inscription : 06 janv. 2013 05:02
PC Rétro : Tandy 1000 SX, V20, 640k, SB2.0, CGA/TGA, rll 33mo
 
Intéressant, pour autant que je me souviens, le bump mapping est surtout attribué à Matrox et le wiki sur le bump mapping est peu fournis et il n'est jamais fait mention de 3dfx. Intéressant.

_________________

L’homme est un loup pour l’homme, ce qui, vous en conviendrez, n’est pas très gentil pour le loup.

Ma chaîne youtube française sur les vieux ordinateurs et autres vieilles technologies.


Haut
Profil Citer
gm86
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 29 janv. 2019 16:04
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 630
Inscription : 01 sept. 2008 19:07
 
Matrox a introduit l'Environment Mapped Bump Mapping via sa carte G400. Néanmoins, 3Dfx proposait une démonstration en deux passes d'une alternative* grâce au chipset 3D Voodoo2 (par la suite, compilée aussi pour Glide 3). On notera que la carte graphique Banshee double le nombre de passes nécessaire à cause de son unique TMU, et ne convainc pas du fait d'un relief estompé.

L'effet le plus courant, alors, était l'Emboss Bump Mapping. 3D Mark 99 en teste trois méthodes selon les fonctions Direct3D disponibles :
  • en trois passes (la plus compatible) :
    - Additive Alpha Blending ;
    - Multiplicative Alpha Blending ;
  • en deux passes (qui requiert une seconde TMU) :
    - Multitexturing (texture + additive) ;
    - Multiplicative Alpha ;
  • en une passe (via l'opérateur ADDSIGNED2X mieux adapté aux textures 32 bits) :
    - Multitexturing (texture + additive) ;
    - 2X Multiply ;
    - Gouraud Shading.
Revenant au jeu en question, la société Utopia Technologies semble utiliser un effet simple mais sans ralentissement. C'est le forum suivant qui m'a aiguillé à lui :
http://www.neogaf.com/threads/was-halo ... ng.197417/
Il signale d'ailleurs le cas du jeu Expendable sur Matrox G400.

Par conséquent, 3Dfx a bien inauguré le bump mapping sur PC via le multi-texturing avant que Matrox n'apporte la gestion matérielle des textures suivantes : environment map & bump map.


* Perturbed Blend Bump Mapping selon le site Beyond3D.

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
Nintenloup
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 29 janv. 2019 21:21
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 2469
Inscription : 06 janv. 2013 05:02
PC Rétro : Tandy 1000 SX, V20, 640k, SB2.0, CGA/TGA, rll 33mo
 
Donc en gros, le premier à le rendre populaire, c'est matrox.

Car franchement, j'ai jamais entendu parler de ça sur les 3dfx et j'en ai passé du temps sur le net à regarder des sujets sur les cartes 3d.

_________________

L’homme est un loup pour l’homme, ce qui, vous en conviendrez, n’est pas très gentil pour le loup.

Ma chaîne youtube française sur les vieux ordinateurs et autres vieilles technologies.


Haut
Profil Citer
gm86
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 29 janv. 2019 22:00
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 630
Inscription : 01 sept. 2008 19:07
 
Certainement parce que la méthode de Matrox, en plus d'être plus efficace, était celle préconisée par DirectX.
Je pense qu'il est bon de sortir les précurseurs de l'oubli. Surtout que les jeux usant du bump mapping restèrent rares à l'époque.

Graphiquement, Montezuma's Return est une sorte de Myst en temps réel !

_________________

C:\ONGRTLNS.W95


Haut
Profil Citer
Nintenloup
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 29 janv. 2019 23:36
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 2469
Inscription : 06 janv. 2013 05:02
PC Rétro : Tandy 1000 SX, V20, 640k, SB2.0, CGA/TGA, rll 33mo
 
Si tu veux le préserver, je te conseille de faire un sujet mieux fournis et le mettre dans la section documentation du site ^^

_________________

L’homme est un loup pour l’homme, ce qui, vous en conviendrez, n’est pas très gentil pour le loup.

Ma chaîne youtube française sur les vieux ordinateurs et autres vieilles technologies.


Haut
Profil Citer
gm86
Sujet du message : Re: L'apparition du bump mapping sur PC ou comment tomber sur un site d'histoire du jeu vidéo
Publié : 26 févr. 2019 20:38
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 630
Inscription : 01 sept. 2008 19:07
 
Je ne maîtrise pas assez le sujet pour en parler. Par contre, je vois qu'un internaute m'a devancé de quelques mois dans le déterrage du jeu : 3Dfx_Aslinger.
De toute façon, je suis content qu'au moins une personne ici y manifeste de l'intérêt.

Pour précision, le jeu est d'abord sorti sur un CD-ROM pour DOS (VBE VESA) et Windows (SVGA) en 1997. La réédition de 1998 a gardé la version Windows et ajouté le support 3Dfx.


Ajout du lendemain

Autre exemple, j'ai lancé le jeu Robo Rumble, datant de mi-98. Il propose trois mode : Glide, Direct3D et software. Le mode Direct3D peut être optimisé pour différentes cartes de l'époque. Par contre, seul le mode Glide propose l'option bump mapping. Avec la Voodoo3 et selon le fichier GLIDE2X.DLL utilisé, si on désactive la seconde TMU et qu'on lance le jeu en mode Glide, soit le jeu plante au démarrage soit les textures sont pourries (à moins qu'on veuille visualiser la bump map en noir et blanc).

De toute manière, cette astuce du dual-texturing n'est convaincante que sur de textures planes. Ainsi, la démo Donut (beignet torique) de 3Dfx requiert plusieurs milliers de polygones. Le lien suivant l'explique bien, le motif de briques (touche T) devient tordu avec un nombre fortement diminué (touche moins, inopérante sur le clavier français) :
http://savepearlharbor.com/?p=281246
Or le but du bump mapping est de diminuer le nombre de polygones nécessaires à l'effet de relief.


Ajout du 19/02

Finalement, j'ai bien constaté de faibles saccades dues au bump mapping. Cela est plus facile à voir lorsque le personnage évolue en présence d'objets animés ainsi texturés. Un créateur du jeu cite bien l'ajout d'embossed bump maps :
http://web.archive.org/web/201312031530 ... com/games2


Ajout du 26/02

Avant de voir le bump mapping dans un jeu vidéo, Chris Egerter de Egerter Software en avait fait la démonstration avec son moteur 3D gratuit Power Render. Le code source pour DOS ou Win32 est disponible. Sont requis un Pentium et une carte 3Dfx, la musique MIDI sous DOS ou les sons via DirectX sont optionnels. Il s'agit d'un écran de veille se contentant d'une TMU unique (cartes Voodoo Graphics et Rush, à l'époque) :
http://grapevine.dyndns-ip.com/downloa ... S%20Saver/
Lien que j'ajouterai ici :
viewtopic.php?f=24&t=26193
À destination des cartes non 3Dfx, le Glide Wrapper de zeckensack se trouve dans un répertoire voisin.

Quant à la programmation Direct3D 6, voilà un peu de documentation venant de 3D Mark 99 Max :
Bump Mapping Usage in Games


As 3DMark is "The Gamer’s Benchmark", we have investigated into the uses of bump mapping in detail. Basically, implementing emboss bump mapping with DX6 is easy. But the quirks come in when you try to make it look good.

Primary limitation of bump mapping is that it works properly only with one light source. If you want to make it look good in a game, you either need to define a separate bump map light source or use always the closest light source for bump mapping. For static objects this is fine (although bump on static objects is probably not ideal).

You can either use several light sources per-bump-map-vertex similar to gouraud shading with several light sources, but that lessens the maximum bump effect. And in a worst case scenario could bring a lot of bump-lighting CPU overhead.
If you use only one light source, you will need to decide which light is now being used as the bump light. This could be a general directional light from above to simulate sun, or the game could pick the nearest\strongest light, but that creates a problem when the bump-mapped object is moving from area of one light to next.
Or you could use several bump passes to get the transition smooth, but the bump material must be rendered as many times as there are bump-casting lights, thus slowing performance.
Additionally, just creating the DX6 material for Emboss Bump mapping is not enough. Issues like vertex normal in regard to light normal, and vertex position in regard to light position might be needed to be taken into account.

Finally, emboss bump mapping is vertex based, and relies on the bump mapped object to be somewhat tessellated (using more polygons than would be otherwise required), not giving optimum performance for gaming use.



Problems and limitations with Emboss Bump Mapping


When creating and mapping textures used with bump mapping, wrapping textures create an additional problem. As emboss bump is based on shifting UV coordinates, the textures can’t be UV-mapped from (0.0, 0.0) to (1.0, 1.0) but must have some free space around the edges. Otherwise the texture will bleed over when tiling or wrapping the texture. Clamping the UV coordinates will not work for tiling textures.


Bump Mapping (Emboss, 3-pass)
-----------------------------


// Rendering Pass #1
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// bump height texture
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 0, m_hTexture1 );

g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );

// Rendering Pass #2
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// inverted bump height texture
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 0, m_hTexture2 );

g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );


// Rendering Pass #3
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_DESTCOLOR );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// base texture
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 0, m_hTexture3 );

g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
   

Bump Mapping (Emboss, 2-pass)
-----------------------------


// Rendering Pass #1
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// bump texture
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 1 );
g_pDevice->SetTexture( 0, m_hTexture1 );

// inverted bump texture
g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADD );
g_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG2, D3DTA_CURRENT );
g_pDevice->SetTextureStageState( 1, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 1, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 1, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 1, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 1, m_hTexture2 );

g_pDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE );


// Rendering Pass #2
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_DESTCOLOR );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_SRCCOLOR );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// base texture
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 0, m_hTexture3 );

g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );


Bump Mapping (Emboss, 1-pass)
-----------------------------


// Rendering Pass #1
g_pDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
g_pDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA );
g_pDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO );

g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP0, D3DWRAP_U | D3DWRAP_V );
g_pDevice->SetRenderState( D3DRENDERSTATE_WRAP1, D3DWRAP_U | D3DWRAP_V );

// base texture on color unit, bump texture on alpha unit
g_pDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
g_pDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 1 );
g_pDevice->SetTexture( 0, m_hTexture1 );

// base texture on color unit, bump texture on alpha unit
g_pDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_SELECTARG2 );
g_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_ADDSIGNED );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT );
g_pDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG2, D3DTA_CURRENT );
g_pDevice->SetTextureStageState( 1, D3DTSS_MINFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 1, D3DTSS_MAGFILTER, D3DTFG_LINEAR );
g_pDevice->SetTextureStageState( 1, D3DTSS_MIPFILTER, D3DTFP_POINT );
g_pDevice->SetTextureStageState( 1, D3DTSS_ADDRESS, D3DTADDRESS_WRAP );
g_pDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
g_pDevice->SetTexture( 1, m_hTexture1 );

g_pDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
@Nintenloup
Entretemps, j'ai orienté mes recherches sur une sorte de normal mapping. En effet, le réclame de 3Dfx indiquait une technique usant des textures 8 bits (paletted textures) :
http://www.voodooalert.de/de/files/whi ... antage.pdf
Je suis alors tombé sur l'explication postérieure suivante, selon laquelle on détourne le vieux support des palettes 8 bits pour accélérer une carte d'index :
http://vcg.isti.cnr.it/activities/OLD/g ... pping.html
L'article complet cité dans ce dernier lien :
http://vcg.isti.cnr.it/publications/pap ... apping.pdf


Ajout du 19/08

Andreas Ingo était impressionné le bump & environment mapping de la Voodoo² :
http://web.archive.org/web/200711111123 ... umpMap.htm
Néanmoins, seul le code source des démos antérieures à la Voodoo² était dans le premier SDK sur CD-ROM. Or celui de la démo Donut devait bien traîner quelque part vu qu'une version Glide3x avait été compilée, peut-être par 3dfx Zone Team. Ce que j'ai fini par trouver :
http://grumbeer.dyndns.org/ftp/cdroms/s ... nut.tar.gz

... et du 20 !
Nintenloup a écrit :
Si tu veux le préserver, je te conseille de faire un sujet mieux fourni...
Cela devient peut-être plus faisable.

L'archive de 3dfx Zone qu'on peut télécharger plus haut démontre que la version Glide3 est plus rapide que celle en Glide2, cette dernière étant identique à ce que 3Dfx distribuait à l'époque. De plus, son créateur l'a encore optimisée en vitesse. Son esthétique est aussi plus démonstrative : le fond (touche G) inclut le dessin d'un objet pour mieux visualiser son reflet sur le beignet. Elle accompagne sur la page Web d'autres démos dont certaines inédites :
http://www.houmany.com/htmls/demos.html
Avec une Voodoo², on remarque que l'environment mapping est liée à la texture de base lors d'une des deux passes de l'emboss bump mapping.

Comme dit plus haut, le beignet nord-américain est un tore. Par défaut, il est constitué de 5000 polygones (on peut les compter soi-même en affichant le squelette : 16 textures identiques, chaque texture recouvrant 12,5x12,5 rectangles ; soient 16*12,5²*2 triangles au total). Cela signifie que chaque passe requiert de traiter 5000 triangles. En fait, 2500 triangles sont visibles au maximum (beignet vu de loin et de face). La nouvelle version de Meshkin Houman l'indique en temps réel.

Ajout du surlendemain

Petite précision : le code source de Donut a été adapté à Linux. Il n'empêche que certains auraient été contents de pouvoir le lire :
http://www.gamedev.net/forums/topic/6606-bump-mapping/
Peut-être que celui pour Win32 était fourni avec le DSK pour Voodoo3 :
http://www.thedodgegarage.com/3dfx/gear/gear_v3_sdk.jpg
http://www.thedodgegarage.com/3dfx/gear/gear_v3sdk.jpg

Revenant à la gestion matérielle des textures à palette 8 bits, Microsoft explique qu'elle permet d'émuler l'environment bump mapping de Direct3D. Il faut toutefois indiquer une résolution de 16 texels au carré pour l'environment map via D3DTEXOPCAPS_MAXBUMPENVMAP16X16 et ne pas la filtrer :
http://docs.microsoft.com/en-us/window ... mp-mapping

Dernière remontée par gm86 le 26 févr. 2019 20:38.

_________________

C:\ONGRTLNS.W95


Haut
Profil
Afficher : Trier par : Ordre :
Répondre   Page 1 sur 1  [ 7 messages ]
Revenir à « Informatique des vieux systèmes »
Aller :