Aspects divers de la voiture

Information générale de la voiture

Vous pouvez spécifier quelques informations sur la voiture elle-même. Ces informations sont peu utilisées, sauf éventuellement dans le futur, dans le 'garage' (l'endroit où vous sélectionnez une voiture).

  • car.name ; le nom complet de la voiture (i.e. 'Citroën Ds Pallas').
  • car.year ; spécifie l'année pendant laquelle la voiture a été produite ou utilisée.

Lors de la traduction de la documentation, nous y ajoutons :

  • car.credits ; le ou les auteur(s).
  • car.comments ; les commentaires sur le modèle.
  • car.id ; un identifiant unique pour la voiture (i.e; 'CitDsPallas') sans caractères spéciaux
  • car.version ; la version minimale requise de Racer connue dans laquelle le modèle fonctionne correctement (i.e. '050b6' = version 0.5.0 bêta 6).

Sons de la voiture

Vous pouvez spécifier un certain nombre d'échantillons sonores pour une voiture. Les fichiers seront cherchés dans le répertoire de la voiture ou dans data/audio si le fichier n'est pas trouvé localement dans ce répertoire de la voiture. Les types de sons courants sont :

  • Sons de crissement (ndlt : skid, en anglais), spécifiés dans audio.skid.sample (defaut=skid.wav).
  • Sons moteur (ndlt : engine, en anglais)
  • Sons de transmission (ndlt : driveline, en anglais). Actuellement, (v0.5) ils sont compilés sous shift.wav et shift_miss.wav (dans le cas d'un mauvais passage de vitesse).
  • Sons du démarreur(ndlt : starter, en anglais). Actuellement, (v0.5) il est compilé sous starter.wav.

À partir de Racer v0.5.1, il y a eu une grosse mise à jour des sons, ce qui résulte en l'archivage des propriétés sonores (audio) dans une arborescence dédiée. Chaque type de son n'est pas simplement un seul fichier, mais un jeu de fichiers (appelé audio set). En fonction de l'audio set, différentes entrées déterminent comment ces entrées sont jouées.
Par exemple, les sons du moteur sont mixés en se basant sur le nombre de tours/minute du moteur, la pédale d'accélérateur et le frein moteur. Les crissements sont eux interprétés selon une certaine valeur de crissement. La façon précise dont ceci est effectué est déterminer par le logiciel.

Le reste de cette section du document explique le système audio pour les versions supérieures à la v0.5.2+

Les volumes sont déterminés en 4 étapes (à part le volume sonore géré par la carte son de votre système) : chaque audio set a un volume de référence (ndlt : master volume en anglais) qui est utilisé pour mixer différents audio set (par exemple, si le son du crissement est trop fort en fonction de celui du moteur, vous pourriez réduire le paramètre de audio.skid.volume). À l'intérieur de chaque set, tous les samples ont un volume spécifique (ndlt : sample volume en anglais), avec une valeur par défaut de 1. Un exemple serait audio.accelerate_in.smp0.volume=0.9. Ce volume est utilisé pour être mixé avec un seul audio set, dans le cas où un son moteur serait un peu plus fort en comparaison avec un autre son moteur dans le même audio set.
Ensuite, de façon interne à Racer, chaque sample est mixé en se basant sur une valeur d'entrée (ndlt : input value en anglais). Pour le moteur, c'est le régime de celui-ci, par exemple. Ceci est utilisé afin d'aller, de façon fluide, d'un sample (capturé à 2000 trs/min, par exemple) au prochain (capturé à 5000 trs/min, peut-être), sans que le changement ne soit notable. Ainsi, le changement sonore est plus graduel. Voir min/max/natural ci-dessous.

Finalement, (toujours de façon interne au logiciel) un volume dynamique est utilisé pour déterminer si un audio set doit être activé ou non. Par exemple, si le moteur est coupé, tous les les volumes dynamiques pour le moteur sont définis à 0. Si le moteur est allumé, ce volume monte à un maximum de 1, en fonction de l'accélération par exemple (c'est géré par le logiciel).

Tout ceci vous donne une formule finale du volume qui est : playbackVolume=masterVolume*sampleVolume*mixVolume*dynamicVolume.

Chaque set peut contenir un maximum de 10 samples. Voici un tableau vous donnant un vision globale des audio set spécifiques aux voitures :

Groupe Set (audio.<nom du set>) Sample déterminé par Notes (PEI=pas encore implementé)
Moteur accelerate_in trs/min À l'intérieur de la voiture
  decelerate_in trs/min À l'intérieur de la voiture
  accelerate_out* trs/min À l'extérieur de la voiture
  decelerate_out trs/min À l'extérieur de la voiture
  throttle_on aléatoire PEI, Souffle du turbo...
  throttle_off aléatoire PEI, Essence non brûlée
  reverse_in trs/min PEI, Conduite en marche arrière (la marche arrière est souvent plus courte, donc elle fait plus de bruit)
  reverse_out trs/min PEI, Conduite en marche arrière, à l'extérieur de la voiture.
Voiture brake_squeal   PEI
  bottom_out aléatoire PEI, Suspension qui tape
  gearwhine vitesse de rotation de la transmission Le son de la rotation de la transmission. Basé sur une vitesse de rotation, sur laquelle vous pouvez attendre des valeurs comprises entre 0 (ralenti) et autour de 500 (conduite rapide).
Cet audio set est utilisé quand la transmission est sollicitée (accélération).
  gearwhine_off vitesse de rotation de la transmission (v0.8.1+) Ce bruit de transmission est sélectionné lors de la décélération. Si aucun son n'est spécifié, tous les sons de la transmission seront définis à partir de l'audio set 'gearwhine' ci-dessus.
  skid coefficient de glissement

skid.sample=crissements latéraux, skid.sample2=crissements longitudinaux.
La version 0.8.1 a modifié ceci en un audio set complet, dans lequel vous pouvez utiliser de multiples samples, basés sur une variable interne (skid amount, coefficient de glissement). Cette valeur varie entre autour de 0 et 1 pour un glissement normal, et entre 1 et 10 lorsque vous dérapez vraiment.
Ceci vous autorise à ajouter un son de frottement pour un dérapage doux, puis qui crie et hurle lorsque le coefficient augmente.
Les samples de dérapage ne sont pas déformés (contrairement à ceux du moteur).

Environnement wind Vélocité de la voiture contre celle du vent Les sons aérodynamiques ajoutent beaucoup de réalisme à la plupart des voitures.
  collide vélocité d'impact PEI - les samples d'accident seront gérés globalement et non par voiture et sont différenciés entre les sons voiture-circuit et voiture-voiture.

* accelerate_out est le son moteur le plus important. Les sets concernant le moteur qui ne sont pas définis, seront dépréciés et utiliseront accelerate_out pour éviter le silence.

Sons des types de surfaces de terrain (définis dans racer.iniinfo). Notez que la plupart des sets n'ont qu'un sample, ce qui devrait être suffisant pour la plupart des surfaces.

Surface Set Sample déterminé par Notes
Route audio.road Vélocité de la voiture Surface par défaut
Gravier audio.gravel Vélocité de la voiture  

Le son du moteur est divisé en 4 set différents :

  • Accélération, à l'extérieur de la voiture (audio.engine.accelerate_out)
  • Décélération, à l'extérieur de la voiture (audio.engine.decelerate_out)
  • Accélération, à l'intérieur de la voiture (audio.engine.accelerate_in)
  • Décélération, à l'intérieur de la voiture (audio.engine.decelerate_in)

Chaque set aura un certain nombre de samples, chaque sample ayant un nombre de propriétés, indiquant quand il doit être utilisé. Normalement, la plupart des samples seront inactifs. Le nombre maximum de sample est défini à 10, de façon à ce que vous ayez des transitions fluides pour chaque situation (accélérant ou pas, à l'intérieur ou à l'extérieur de la voiture). Un exemple de code pour la section audio :

audio
{
  acc_all
  {
    attack=100
    decay=100
  }
  accelerate_out
  {
    ; Volume de référence pour ce set (0..1)
    volume=0.9
    smp0~audio.acc_all
    {
      ; Volume pour ce sample; ce sample était un peu trop fort comparé au smp1
      volume=0.9
      sample=low_revs.wav
      min=0
      max=2000
      ; Le moteur de cet échantillon tournait à 1000 trs/min
      natural=1000
    }
    smp1~audio.acc_all
    {
      sample=med_revs.wav
      min=2000
      max=4000
      natural=3000
    }
  }
  wind
  {
    ; Détermination du son ; augmente légèrement avec la vélocité de la voiture
    pitch_scale=0.2
    pitch_offset=50
    smp0
    {
      sample=wind.wav
      ; Vitesse en m/s; dans ce cas seulement 1 sample de 0 à 200 M/s
      min=0
      max=200
      ; Le vent soufflait à 50m/s lors de l'enregistrement
      natural=50
    }
  }
}

Explication plus détaillée de chaque sample (arbre smp<x>) :

  • Chaque set a sa propre arborescence (accelerate_out, accelerate_in, decelerate_out and decelerate_in).
  • L'arbre acc_all n'est qu'un arbre par défaut utilisé ici pour éviter la duplication de trop de variables.
  • Chaque sample a des valeurs min, max et natural. Ces valeurs sont utilisées pour sélectionner un (ou plus) sample à lire, pour avoir un son plus précis. Par exemple, le son du moteur utilise le régime moteur pour déterminer quel sample lire. Si le régime dans ce cas est situé entre min-attack et max+decay, alors le sample est utilisé (leurs volumes sont mixés de façon à ce qu'il commence à baisser au min ou max en se basant sur les valeurs de attack ou decay). Pour les autres sons, le vent par exemple, la sélection est faite sur la vélocité de la voiture. Ici, on utilisera des valeurs entre 0 et approximativement 100 (ce qui représente 100 m/s, soit 360 km/h) pour décider le l'usage des samples.
    La valeur de natural (naturel) indique la valeur de base à laquelle la prise de son a été effectuée.
  • Les valeurs de attack et decay, comme au-dessus, indiquent la plage de régime dans laquelle le volume d'un sample décline ou augmente. Donc, dans l'exemple au-dessus (code), smp1 commencera à être lu dès que le régime est supérieur ou égal à 2000-100=1900, propulsant son volume maximum à 2000. De façon similaire, à 4000 trs/min, le sample commencera à diminuer, jusqu'à ce qu'il disparaisse à max+decay=4000+100=4100 trs/min.
  • Si de gros chevauchements ont lieu (larges valeurs de attack et/ou de decay), souvenez-vous que chaque sample lu augmente la charge du temps CPU ou des ressources matérielles. Essayez de conserver les valeurs de attack et decay petites, quitte à compromettre la qualité au profit de l'efficacité.
  • Si nécessaire, le volume du sample peut être défini dans le même groupe que min/max/natural. La plage de volume est comprise entre 0 (silencieux) et 1 (volume max du sample).
    Normalement, laissez la valeur à 1 (c'est la valeur par défaut), mais il peut être utile de baisser le sample dans le set.
  • Notez qu'il est possible avec cette combine de laisser un vide dans le son. Chaque sample est géré indépendamment, rien ne vous préviens que vous créez un trou.
    Dans l'exemple ci-dessus, aucun son ne sera lu au-dessus de 4000+100 trs/min !

Les variables d'entrée (qui modifient le son ou le volume) varient de cette manière :

  • rpm (trs/min) ; le régime moteur (donc une valeur grossièrement comprise entre 500 et 20000)
  • velocity (vélocité) ; la vélocité de la voiture, donc une valeur comprise entre 0 et grossièrement 100 m/s, ce dernier étant équivalent à 360 km/h.

Chaque audio set a un nombre de propriétés :

  • Un nombre de samples ; consultez la section smp<x> au-dessus.
  • volume ; le volume de référence de ce set, de 0 (min) à 1 (max).
  • pitch_scale (échelle du son) ; permet d'ajuster le son de chaque sample.
  • pitch_offset (décalage du son) ; La valeur par défaut est 0. La fin du son (pitch) est : finalPitch=naturalPitch*(pitch_scale*input+pitch_offset). Le son (pitch) peut être utilisé pour le vent par exemple, augmentant légèrement en fréquence avec l'augmentation de la vitesse. Le 'naturalPitch' (son naturel) est dérivé de la valeur smp<x> 'natural'.
    Un exemple : Vous avez un échantillon sonore de vent qui a été enregistré à 5 m/s, donc définissez 'natural' à 5. Disons que vous n'ayez qu'un sample, donc ce sera la section smp0 du vent. Réglez le min/max pour ce sample respectivement à 0 m/s et 9999 m/s (donc tout, en pratique).
    La fréquence naturelle de ce sample est atteinte quand la vélocité est de 5 m/s, donc définissez 'natural' à 5. Pour faire varier sensiblement le son avec la vitesse, vous pouvez définir pitch_scale à 0.01 et pitch_offset à 1. Cela veut dire que vous restez proche de la fréquence originale du sample, mais qu'elle augmente un peu avec la vitesse de la voiture.

Graphisme de la voiture

La voiture est séparée en plusieurs modèles. Les parties qui sont associées à un modèle 3D utilisent un regroupement de modèle. Dans ce regroupement, vous pouvez spécifier la section model.file, qui indique le fichier *.dofinfo à utiliser (qui doit être dans le répertoire de la voiture), et une échelle, scale.x/y/z, qui vous permet de modifier les proportions sur l'axe désiré. Il est cependant recommandé de ne PAS utiliser la mise à l'échelle, car cela augmente le temps de chargement du modèle et cela peut être déroutant lors de la l'affichage dans Modeler.

  • body.model ; permet de spécifier le modèle 3D de la caisse.
  • pilot.* ; permet de spécifier les fichiers pour le pilote et son casque. Plus d'informations là-dessus sur le tutoriel du casque.
  • body.model_braking_l et body.model_braking_r ; permet d'inclure des lumières qui sont dessinées lorsque le joueur freine. En outre, body.model_light_l et body.model_light_r spécifient les phares (avant) qui sont toujours allumés dans la version 0.4.9. Plus d'informations sur les lumières sur les voitures dans le tutoriel éponyme.
  • wheel<x>.model ; permet de spécifier le modèle de roue.
  • wheel<x>.model_brake ; modèle de frein. Ces modèles tourneront avec les roues (ndlt : direction), mais ne tournent pas eux-même autour d'un axe (ndlt : accélération). C'est utile pour les modèles de disques de frein, pour peu que ceux-ci ne soient pas embarqués (in-board), comme c'est le cas sur certaines voitures comme les Citroën 2 CV, GS ou SM (ils sont en sortie de boîte).
  • Les ombres ; c'est un modèle implicite, un simple polygone qui est généré pour vous automatiquement. La texture est spécifiée par car.shadow.texture. La taille est claculée d'après car.shadow.width (largeur) et car.shadow.length (longueur). Souvent, il est souhaité que la taille de l'ombre ne soit pas exactement la même que celle de la caisse, comme avec la Ferrari 312, par exemple.
    Quand vous utilisez les ombres projetées (voir ci-dessous), deux valeurs supplémentaires sont nécessaires : car.shadow.intensity_light (intensité de lumière) et car.intensity_dark (intensité d'ombre). L'intensité d'ombre (0...1) indique dans quelle mesure le polygone est mélangé aux endroits où l'ombre projetée existe simultanément. L'intensité de lumière indique dans quelle mesure le polygone est mélangé aux endroits où il n'y a PAS d'ombre projetée. Par conséquent, l'intensité lumineuse a une valeur inférieur à celle de l'ombre. Vous pouvez utiliser par exemple les valeurs de 0.7 pour l'ombre et 0.3 pour l'intensité lumineuse. (v0.5.2 bêta 8.9)
  • Les ombres projetées ; spécifiées dans l'arbre de graphics.shadow.model. Ce modèle doit indiquer un modèle très léger comportant peu de polygones (low LODinfo), au risque de fortement ralentir la vitesse de rendu. Notez que les ombres projetées ont une option supplémentaire que les autres modèles n'ont pas : use_shadersinfo=... En utilisant use_shaders vous pouvez déterminer si les ombres projetées doivent ou pas utiliser les matériaux (shader) qui lui sont associés. Les versions précédentes de Racer (inférieures à 0.5.2a8) n'utilisaient aucun matériau et les ombres étaient beaucoup plus dures. C'est toujours le cas par défaut, mais si vous utilisez l'option (avec use_shaders=1), vous pouvez créer un modèle spécifique avec une diminution de l'ombre qui donnera des ombres plus douces. Un exemple est de créer une représentation latérale de la voiture en supprimant les polygones autres que ceux des côtés. Ensuite, appliquez une texture à ces côtés avec un RGB sombre, mais qui décline vers l'alpha, loin de la voiture (dans la vue d'au-dessus de votre modèle), ce qui permettra d'avoir une ombre sombre près de la voiture et qui devient transparente en s'éloignant. Les exemples sur les voitures sont heureusement plus parlants !
    L'opacité/intensité des ombres projetées sont ajustées dans graphics.shadow.intensity. Une valeur d'exemple serait 0.3 (30% d'opacité).

IA - Intelligence Artificielle

Une petite section des paramètres sur l'I.A. modifie le comportement de la voiture lorsqu'elle est conduite en mode AI (en appuyant sur Shift+A pendant la course, vous activez/désactivé le mode). Les paramètres suivants de l'I.A. sont disponibles par voiture :

  • ai.max_velocity ; Lors du chargement d'un fichier d'I.A. (data/tracks/<trackname>/ai/default.ini), la vélocité doit correspondre à la capacité de la voiture. Le fichier d'I.A. a certainement été créé en conduisant une voiture spécifique, ce qui n'engendre pas toujours la vélocité souhaitée pour le véhicule que vous développez. Lorsqu'aucun fichier d'I.A. spécifique n'est trouvé, le fichier default.ini est chargé à sa place et toutes les informations de vélocité sont normalisées (la vitesse la plus rapide devient 1.0). Les vélocités sont ensuite re-générées en utilisant la formule : velocity=ai.max_velocity*normalized_velocity. Consultez aussi la partie consacrée à la création de lignes d'I.A. par défaut, dans la page de création de circuits.
  • ai.understeer_correct ; permet de corriger le comportement sous-vireurinfo (la valeur par défaut est 99999)
  • ai.oversteer_correct ; permet de corriger le comportement sur-vireurinfo (la valeur par défaut est 99999)
  • ai.grip_factor ; les forces générées au niveau des roues seront multipliées par cette valeur (donc, par défaut elle est de 1). Utilisez cette valeur pour donner à la voiture un peu plus d'adhérence. Ceci afin d'éviter aux voitures de déraper, comme il essaye d'imiter la vitesse d'un conducteur humain (et que c'est pas facile !)

Cette page est une traduction en français de la documentation originale de Ruud Van Gaal, disponible à l'adresse : http://racer.nl/reference/carphys.htm
De plus, la traduction de la documentation n'étant qu'à ses débuts, plusieurs liens peuvent ne pas fonctionner. Merci de votre compréhension.