Le patch Photon
Vortex Dread dessine sa tempête tout seul et n'a besoin d'aucun shader pack pour le faire. Le cas que ce patch couvre est différent: Iris tourne, avec un pack chargé, et Iris refuse de faire tourner le programme central d'un mod tant qu'un pack est actif. Le patch apprend donc à une copie de Photon à lire elle-même l'état de l'orage, à travers une texture que le mod réécrit chaque image, et à marcher la colonne dans la passe de mélange du pack, après le rendu translucide et avant le brouillard: une colline qui cache une tornade la cache encore, et ce qui reste visible hérite du même brouillard aérien et du même réglage de tons que le reste du paysage. Il transforme aussi l'éclair, qui passe d'une hausse d'exposition plate à une source ponctuelle plantée dans le nuage. Photon lui-même n'est jamais distribué ici: le script relit votre propre copie et en écrit une seconde à côté.
L'éclair comme source ponctuelle
Photon d'origine ajoute son facteur d'éclair à chaque pixel de nuage à la même
force, LIGHTNING_FLASH_UNIFORM * lightning_flash_intensity, que ce
nuage soit juste au-dessus de la tête ou loin à l'horizon. À l'intérieur du volume, le patch le
remplace par une chute en carré inversé autour du point où Iris situe la décharge,
1.0 / (1.0 + (to_bolt * to_bolt) / (reach * reach)), elle-même plafonnée
par vortexdread_lightning_reach. Les deux formules valent
1.0 pile au niveau du canal et s'écartent dès qu'on s'en éloigne, toutes deux
finalement bornées par une limite calculée avec
exp(-sky_optical_depth * extinction * 0.4), jusqu'à un seuil de 0.004
sous lequel rien n'est ajouté.
| Distance au canal (blocs) | Facteur plat d'origine | Chute du patch |
|---|---|---|
| 0 | 1.0 | 1.0 |
| 110 | 1.0 | 0.8 |
| 220 | 1.0 | 0.5 |
| 440 | 1.0 | 0.2 |
| 880 | 1.0 | 0.06 |
Le calcul ne tourne que pendant qu'un éclair de Photon est réellement en cours, et la profondeur optique qu'il consulte est déjà celle que le pack a construite pour ses propres nuages: rien n'est repayé pour ce seul terme.
Une seule case libre suffit à tout casser.
MATERIAL_TORNADO = 200. Le script vérifie que le texte autour de
cette ligne n'a pas bougé, pas que la valeur 200 est encore libre: si une future version de
Photon revendique ce même numéro pour un autre matériau, le patch s'applique quand même et les
deux se confondent à l'écran, sans qu'aucune vérification ne le voie venir.
Photon reste chez vous. Sa licence interdit la redistribution sur une
plateforme qui paie ses auteurs de mods, et Vortex Dread est publié sur
deux d'entre elles. Le patch est donc écrit contre une version précise,
v1.3b, et s'arrête plutôt que de deviner sur une autre
(apply.py relit votre copie, en écrit une seconde à côté, et n'en écrit jamais dans le dépôt du mod si l'une de ses seize ancres de texte ne se retrouve pas telle quelle).
Ce que le patch dépose
| Élément | Ce qu'il fait | Valeur |
|---|---|---|
| MATERIAL_TORNADO | Numéro de matériau qui marque un pixel de colonne pour le reste du pipeline, ajouté à la liste de Photon. | 200 |
| vortexdread_lightning_reach | Distance à laquelle la chute en carré inversé a perdu la moitié de sa force. | 220.0 blocs |
| texture.composite.colortex15 | Canal où le patch va lire l'état d'orage que le mod réécrit chaque image, quatre tempêtes au plus, huit champs par ligne. | vortexdread:textures/effect/funnel_state.png |
| program/c1_blend_layers.fsh | Passe où la colonne du mod est marchée, après le mélange translucide du pack. | juste avant // Blend fog |
| sampling.glsl | Part du terme plat d'origine laissée pour la rémanence du ciel autour du canal. | ×0.35 |
| sky.glsl | Part du même terme laissée à l'horizon, dans le calcul du ciel plutôt que dans celui des nuages. | ×0.3 |