Shader 1 Mots clés généraux

Un article de Wiki-Mapping.

(Redirigé depuis Mots clés généraux)
Jump to: navigation, search

NOTE IMPORTANTE: Encore une fois, il faut conserver à l'esprit que certaines commandes peuvent dépendre de l'ordre dans lequel elles sont placées, c'est pourquoi il est conseillé de placer tous les shaders concernant des commandes globales en tête du script, et ceux qui définissent les différentes étapes du shader à la fin.

Les mots clé suivants sont généraux et affectent toutes les étapes. Ils sont ignorés par Q3MAP.

Sommaire

[modifier] skyParms <farbox> <cloudheight> <nearbox>

Spécifie comment utiliser la surface en tant que ciel, comprenant en option des arguments comme un plan lointain (étoiles, lune,...), une couche de nuages avec définition de ses attributs, et un plan rapproché (montagnes devant les nuages, ...)

<farbox> 
Précise un ensemble de fichiers à utiliser en tant qu'environnement par delà les nuages. Il faut spécifier "-" pour ne pas prendre en compte cette option, ou un nom de base pour l'utiliser. Un nom de base "env/test" recherchera les fichiers "env/test_rt.tga", "env/test_lf.tga", "env/test_ft.tga", "env/test_bk.tga", "env/test_up.tga", "env/test_dn.tga" pour les utiliser respectivement sur les faces droite / gauche / arriere / avant / de dessus / de dessous.
<cloudheight> 
Contrôle la courbure de la couche de nuages apparente. Une valeur plus basse signifie une courbure plus importante (donc plus de distorsion à l'horizon). Une valeur plus importante crée un ciel plus "plat" avec moins de distorsion. On peut se représenter la hauteur comme le rayon d'une sphère sur laquelle les nuages son dessinés. Les valeurs qui rendent bien se situent dans l'intervalle [64,256]. La valeur par défaut est 128.
<nearbox> 
Précisé de la même façon que la farbox, destinée à être dessinée par dessus les nuages. Cette fonction n'a pas été testée longtemps, donc il est possible qu'elle ne marche pas. Mettre "-" pour ignorer cette option.

Notes :

  • Si vous faites une map ou le ciel est visible la plupart du temps, utilisez une valeur de cloudheight plus faible. Une courbe plus plate semble plus "vivante". Si vous faites une map ou le ciel est visible principalement à travers des fenêtres ou si la carte est ouverte sur le ciel sur un ou plusieurs cotés, une valeur plus importante donnera une meilleure sensation de réalisme.
  • Il est possible de créer des ciels possédant jusqu'à 8 couches nuageuses, mais cela signifie aussi faire 8 fois les calculs et peut causer des problèmes de performance.
  • Soyez conscient que la skybox n'englobe pas tout le jeu. Le "sol" ou la face de dessous n'est pas dessinée par le jeu. Si un joueur peut voir cette face, il verra un effet de "galerie des miroirs".

Exemple: Script de ciel

textures/skies/xtoxicsky_dm9
{
	qer_editorimage textures/skies/toxicsky.tga
	surfaceparm noimpact
	surfaceparm nolightmap
q3map_globaltexture
q3map_lightsubdivide 256
	q3map_surfacelight 400
	surfaceparm sky
	q3map_sun 1 1 0.5 150 30 60
	skyparms full 512 -
	{
		map textures/skies/inteldimclouds.tga
		tcMod scroll 0.1 0.1
		tcMod scale 3 2
	}
	{
		map textures/skies/intelredclouds.tga
		blendFunc add
		tcMod scroll 0.05 0.05
		tcMod scale 3 3
	}
}

[modifier] cull <side>

Chaque surface d'un polygone à deux cotés, l'avant et l'arrière. Typiquement, on ne voit que la face avant ou l'extérieur. Par exemple, un solide ne peut être vu que de l'extérieur. Dans de nombreux cas, on peut voir les deux faces. Par exemple, pour de l'eau, il est possible de voir les deux cotés. C'est aussi vrai pour les grilles ou les écrans.

Cull signifie ici supprimer. Le paramètre détermine la façon de supprimer. La valeur par défaut est front - si le mot clé n'est pas spécifiée. Cependant, pour des objets qui doivent être inversés, la valeur "back" doit être utilisée. Pour désactiver la suppression d'un côté, il faut utiliser "disable" ou "none". Une seule instruction de ce type pour être donnée pour un shader.

cull front
L'avant ou l'extérieur d'un polygone est la seule face dessinée dans le jeu. C'est la valeur par défaut. C'est la valeur utilisée si le mot clé "cull" apparaît dans le shader sans de valeur <side> ou si le mot clé n'est pas présent dans le shader.
cull back
Ne dessine pas l'arrière - ou l'intérieur - d'un polygone dans le jeu.
cull disable, cull none
Aucune des deux faces n'est supprimée. Les deux sont dessinées dans le jeu. C'est très utile pour réaliser des panneaux ou des barrières n'ayant aucune épaisseur comme des grilles, des écrans, des grilles en métal et pour les liquides que le joueur peut voir de l'intérieur. C'est également utilisé pour les champs d'énergie, les sprites, et les effets de certaines armes (plasma).

Note: Pour les objets comme les grilles ou les écrans, il faut mettre la texture avec la propriété cull none sur une face seulement. Sur les autres face, il faut appliquer la texture nodraw

[modifier] deformVertexes

Cette fonction réalise une déformation de la surface en changeant la forme de la surface avant de dessiner les étapes du shader. Vous pouvez cumuler plusieurs commandes deformVertexes afin de modifier les positions de façon complexe, en faisant bouger l'objet selon deux axes différents par exemple.

Les mots clés deform... peuvent avoir les paramètres suivants :

<div> 
Détermine la taille de la forme. Se mesure en unités. De petites valeurs créent une densité plus importante de formes plus petites coexistant sur une même surface. Des valeurs plus importantes donnent une densité moins importante, ou donnent l'impression de forme plus grandes. Pour un bon aspect, cette valeur devrait correspondre à la valeur (en pixels) déterminée comme tessSize pour la texture. Une valeur de 100.0 est une bonne valeur (ce qui signifie que la tessSize devrait être proche de cette valeur pour donner l'impression de vague).
<func> 
C'est le type de forme qui est créée : sin, triangle, square, sawtooth ou inversesawtooth.
<base> 
C'est la distance à la surface d'origine, en unités, dont est déplacé la texture. Une valeur positive fait apparaître la texture au dessus de la surface. Une valeur négative la fait apparaître en dessous.
<amplitude> 
C'est la hauteur de la fonction créée, mesurée à partir de la base. Il faudra certainement faire plusieurs tests sur cette valeur pour obtenir quelque chose de correct. Plus l'amplitude est grande, plus les pics sont hauts et les creux sont profonds.
<phase> 
C'est une valeur normalisée entre 0.0 et 1.0. Donner une valeur autre que 0 à la phase affecte la valeur initiale de la courbe la ou elle se forme. Une valeur de 0.25 permet de commencer au quart de la courbe. Combiner plusieurs valeurs de phase permet de donner des effets intéressants...
<freq> 
Fréquence. Cette valeur détermine le nombre de cycles de la fonction par seconde. Une valeur de 1 correspond à une "vague" par seconde. Une valeur de 10 correspond à 10 fois par seconde. Une valeur de 0.1 correspond à une fois toutes les 10 secondes.

Note: Les paramètres div et amplitude, devraient prendre en compte combien de liquide se déplace lorsqu'il s'agit d'un shader pour de l'eau par exemple. Un océan aura de plus grandes valeurs de div et d'amplitude. En comparaison, il faudra faire en sorte qu'un petit bassin ait moins de mouvements.

[modifier] wave

deformVertexes wave <div> <func> <base><amplitude> <phase> <freq>

Créé pour les surfaces liquides, cela modifie les valeurs différemment en chaque point. Cette propriété accepte les fonctions standards de type sin, triangle, square, sawtooth ou inversesawtooth . Le paramètre "div" est utilisé pour contrôler "l'étalement" de la forme - une valeur égale au tessSizeof de la surface est une bonne valeur (tessSize est une taille de subdivision, en unités, utilisée lors de la représentation dans le jeu).

[modifier] normal

deformVertexes normal <div> <func> <base><amplitude 0.5> <frequency 4.0>

Cette déformation affecte les normales sans les déplacer, et a des effets sur les étapes suivantes du shader comme l'éclairage et l'environnement. Si le shader n'utilise pas les normales lors des calculs, il n'y aura pas d'effets visibles.

Note: Mettre des valeurs de 0.1 à 0.5 en amplitude et de 1.0 à 4.0 en fréquence donne des résultats satisfaisants. Quelques trucs ont été faits avec ceci tels que : une chauve souris qui bat des ailes, la chute de feuilles, la pluie, des drapeaux...

[modifier] bulge

deformVertexes bulge <bulgeWidth> <bulgeHeight><bulgeSpeed>

Cela fait bouger une bosse selon les directions s et t indiquées. Conçu pour être utilisé sur les conduites courbées.

[modifier] move

deformVertexes move<x> <y> <z> <func> <base> <amplitude> <phase> <freq>

Ce mot clé est utilisé pour faire en sorte qu'un brush, model ou une courbe bouge d'un bloc. Les valeurs de <x> <y> et <z> sont les distances et les directions exprimées en unités définissant le mouvement apparent de l'objet.

Les propriétés <func> <base> <amplitude> <phase> et <freq> sont les mêmes que pour les autres fonctions.

Le produit de fonction modifie les valeurs de x, y et z. C'est pourquoi, si il y a par exemple une amplitude de 5 et une valeur de x de 2, l'objet bougera de 10 unités depuis son point d'origine selon l'axe des x. Cela fait au total un mouvement de 20 unités selon cet axe puisque l'amplitude est la variation à la fois au dessus et en dessous du niveau d'origine (base).

Il est à noter qu'un objet qu'un objet utilisant ce shader ne change pas de position, il ne fait qu'en donner l'apparence.

Note: Si un objet est constitué de surfaces avec différents shaders, ils doivent tous avoir des valeurs de fonctions deformVertexes correspondantes, sinon l'objet donnera l'impression de se déchirer.

[modifier] autosprite

DeformVertexes autosprite

Cette fonction peut être utilisée afin de faire en sorte qu'une paire de triangle (formant un rectangle) se comporte comme une sprite sans devoir créer une nouvelle entité. Cela signifie que la "sprite" sur laquelle est placée la texture va tourner pour apparaître toujours sous un bon angle du point de vue du joueur. Un brush à 4 faces, un patch ou une paire de triangles sur un model .md3 peuvent également avoir cet effet. La face d'un brush contenant une texture dont le shader contient ce mot clé doit être carrée.

Note : C'est sur les objets qui doivent apparaître de la même façon sous tous les angles que l'effet est le meilleur.

[modifier] autosprite2

DeformVertexes autosprite2

C'est une "sprite" légèrement modifiée dans la mesure ou elle ne peut "pivoter" qu'autour de son plus grand axe. Cela permet par exemple de faire un pilier de feu autour duquel on puisse se promener, ou un faisceau d'énergie à travers une pièce.

[modifier] fogparms <red value> <green value> <bluevalue> <distance to Opaque>

Note : Il faut également spécifier "surfaceparm fog" pour que Q3Map identifie les surfaces dans le volume. Ce mot clé décrit comment doit être rendu le brouillard sur les surfaces.

<red value> <green value> <blue value> 
Valeurs normalisées pour les 3 couleurs.
<distance to opaque> 
C'est la distance, exprimée en unités et mesurée depuis l'endroit ou se tient le joueur, à laquelle le brouillard est totalement opaque. En faisant un brush d'une distance plus petite que celle la, on peut réduire la densité apparente du brouillard (on atteint jamais la profondeur correspondant à une opacité totale).
  • Le brouillard volumique ne doit avoir qu'une seule face visible à la fois (depuis l'extérieur de ce brouillard).
  • Le brouillard doit être fait avec un unique brush. Il ne peut pas être constitué de plusieurs brushes accolés.
  • Les brushes de brouillard doivent être axiaux. Cela signifie que seuls les brushes cubiques ou parallélépipédiques peuvent contenir du brouillard, et que ceux-ci doivent avoir leurs faces parallèles aux axes de la grille (angles à 90°)

Notes:

  • Si une texture de liquide contient un paramètre relatif au brouillard, elle doit être traité comme une texture de brouillard lors de son utilisation.
  • Si une pièce est complètement remplie de brouillard, on ne doit pouvoir y entrer que par une surface à la fois.
  • Des étapes supplémentaires sur le shader peuvent être placées sur un brush utilisant cette caractéristiques, comme n'importe quel autre brush.

[modifier] nopicmip

La texture ignore la valeur de r_picmip entrée par l'utilisateur. Elle sera toujours en haute résolution. Cela empêche par exemple les textes de devenir illisibles sur les configs arrangées.

[modifier] nomipmaps

Cela implique l'activation de nopicmip, mais empêche aussi la génération de mipmaps basse résolution par la carte 3d. Cela va provoquer de l'aliasing lorsque les textures deviennent plus petites, mais dans certains cas, c'est préférable à une image brouillée. Les petits rubans ou triangles obligent parfois à avoir de très faibles niveaux de mipmaps, ce qui permet de conserver une largeur constante la ou les autres effets prendraient le dessus.

[modifier] polygonOffset

Les surfaces ayant cette caractéristique sont dessinées très légèrement en dehors du plan. Ceci est généralement utilisé pour des marques sur les murs et des "decals". Les distance entre le polygone et le dessin est fixe. Ce n'est pas variable dans Quake III Arena.

[modifier] portal

Précise que cette texture correspond à une surface pour un portal ou un miroir. Dans le jeu, un portal doit être placé directement en face de la texture (à moins de 64 unités). Tout ce que cela fait est de fixer la valeur "sortportal", donc ce n'est pas nécessaire si on l'a déja précisée.

[modifier] sort <value>

Utiliser ce mot clé permet de bien classer l'ordre des shaders en terme "d'épaisseur". Cela permet de ne pas avoir de problèmes avec des shaders étant dessinés dans un mauvais ordre.

Le comportement par défaut est de mélanger tous les shaders de façon additive, sauf les shaders triés qui sont considérés comme opaques. Il n'y a donc a préciser ce mot clé que lorsqu'il y a des problèmes avec plusieurs surfaces transparentes par exemple.

La valeur peut être au choix un chiffre ou un mot clé pris dans la liste ci-dessous (classés par ordre de priorité ascendante):

portal (1) 
Cette surface est un portal, il est dessiné au dessus de n'importe quel shader vu dans le portal excepté ce qui est dans le champ de vision.
Sky (2) 
Classiquement, le ciel est ce qu'il y a de plus éloigné. Le dessiner seulement après les surfaces opaques peu être un outil d'optimisation. Cela à actuellement une mauvaise valeur pour cet effet, donc ce n'est pas vraiment utile.
Opaque (3) 
Cette surface est opaque (peu usité puisque c'est le comportement par défaut avec noblendfunc)
Banner (6) 
Transparent, sauf très près des murs.
Underwater (8) 
Dessiné derrière les surfaces transparentes sans attributs particuliers.
Additive (9) 
Surface normale transparente (valeur par défaut pour les shaders avec des fonctions de mélange : blend-)
nearest (16) 
Ce shader devrait toujours appraitre comme le plus proche. Utilisé par exemple pour les flashes et les gouttes