Im essayant actuellement de faire un effet luciole sur une forêt sombre. Le niveau a une lumière très faible et le lecteur est l'une des rares sources de lumière. Pour permettre au joueur de mieux voir le niveau, j'essaie de faire apparaître des lucioles brillantes au hasard sur la carte. Une façon consiste à utiliser un système de particules. Mais je ne peux pas faire jaillir les particules dans l'environnement. Y a-t-il un moyen de faire cela?
22
Réponses:
Les particules électroluminescentes sont désormais intégrées à la fonctionnalité Unity de la 5.5.
Activez simplement les lumières dans l'inspecteur de particules, ajoutez une référence à un préfabriqué de lumière (les lumières ponctuelles et spot fonctionnent) et modifiez le rapport à 1.
Et voilà, les particules qui émettent des lumières:
Il s'avère que c'est une configuration plutôt optimisée, fonctionnant à 1500 + fps sur ma plate-forme même avec un maximum de lumières par centaines.
Edit: Après quelques observations, il me semble que les lumières des particules basculent entre l'éclairage par fragment et l'éclairage par sommet (probablement pour l'optimisation?). Cela peut produire de petites quantités d'artefacts visuels si le maximum de lumières est réglé trop haut.
Edit2: Comme l'a souligné DMGregory, les artefacts sont un sous-produit des optimisations de rendu direct. Un éclairage différé résout le problème. Gif plus agréable ajouté
la source
La tête haute:
Cette réponse est dépassée. Unity prend désormais en charge les particules de lumière ponctuelle de manière native. Veuillez consulter cette réponse pour plus de détails.
Je laisserai cela ici pour toute personne curieuse, ou utilisant d'anciennes versions de Unity, ou ayant besoin de plus de contrôle manuel que la méthode native n'offre - notez simplement que le support natif est probablement beaucoup plus efficace et évolutif que l'approche présentée ci-dessous.
Je ne sais pas pourquoi tant de réponses affirment que c'est difficile ou impossible. La gestion de quelques dizaines de lumières ponctuelles dynamiques est assez classique pour un pipeline de rendu différé moderne fonctionnant sur PC.
Voici un exemple rapide que j'ai concocté:
J'utilise ce script pour générer dynamiquement suffisamment de lumières pour mes particules maximales (assurez-vous d'ajuster les paramètres de votre système de particules afin que le maximum soit raisonnable - la valeur par défaut de 1000 ne rendra pas votre carte graphique très heureuse), puis les met à jour pour suivre l'actif particules:
Modifier: vous pouvez créer un préfabriqué en créant d'abord un objet de jeu (dans ce cas, Créer -> Lumière -> Lumière ponctuelle), en le configurant avec le nom / paramètres / scripts / enfants que vous voulez, puis en le faisant glisser de votre hiérarchie vers votre explorateur de projets. Cela enregistre l'objet en tant qu'actif que vous pouvez réutiliser sur plusieurs scènes et scripts, avec un certain degré d'héritage. Vous pouvez supprimer la copie dans votre scène et l'actif restera dans votre dossier Assets pour être référencé en cas de besoin.
Assurez-vous que le lightPrefab a une plage relativement petite et n'est pas un shadowcasting, pour vous donner la marge la plus performante pour tout ce qui se passe dans votre scène. Vous n'avez pas besoin de rendre le lightPrefab lui-même vert (ou la couleur de vos lucioles) - il le ramassera de la couleur des particules.
Vous constaterez peut-être que vous avez un meilleur contrôle sur le vol des lucioles si vous créez chacun son propre GameObject, avec un quadruple panneau d'affichage et une lumière attachée avec un script de mouvement / clignotement personnalisé, car obtenir une déambulation convaincante prend plus de talent pour le système de particules que Je sais. ;)
la source
Il y a des années, avant que les lumières dynamiques ne soient abordables, nous utilisions simplement un effet de particules à panneau d'affichage 2D avec un mélange additif. Cela éclaircirait la scène vers le blanc. En le dessinant avec la bonne profondeur de la luciole, vous obtenez un tri presque correct. L'alpha additif n'a pas besoin d'être trié lors du sur-retrait par rapport au mélange alpha. Il n'éclairera pas TOUTE la scène, mais il éclairera la zone entourant la luciole. Vous pouvez ensuite prendre une lumière dynamique et choisir l'une des lucioles toutes les quelques secondes pour éclairer réellement la scène, si vous en avez besoin.
Il y a déjà une question et une réponse sur les effets de lueur Comment obtenir un éclairage comme celui-ci dans Unity pour les jeux 2D?
la source
Malheureusement, je n'ai pas beaucoup d'expérience avec Unity dans sa forme actuelle (je l'ai joué il y a de nombreuses années), donc je ne sais pas exactement avec quels jeux de fonctionnalités vous devez travailler dans le moteur.
Dans tous les cas, quel que soit le moteur avec lequel vous travaillez, les lumières dynamiques sont à éviter chaque fois que vous le pouvez. Ils sont très coûteux en termes de calcul et ont tendance à ajouter une complexité de scène de manière très exponentielle. Cependant, comme c'est le cas pour la plupart des rendus 3D, il existe de nombreuses façons d'obtenir des effets similaires en trichant;
Un moyen possible d'obtenir un effet similaire consiste à mapper une texture de lueur prédéfinie sur le terrain sous vos lucioles (en supposant un système de coordonnées Y = haut / bas) avec des positions X et Z contrôlant l'emplacement de la lueur sur le terrain et le décalage Y du terrain contrôlant l'alpha de la texture (plus lumineux = plus proche du terrain)
Il existe bien sûr plusieurs inconvénients à cette méthode. Vous ne projetterez pas d'ombres car aucune lumière n'est utilisée, et vous n'affecterez aucune autre géométrie dans le monde (accessoires, feuillage, etc.)
la source
Utilisez-le
Light
à l'origine du feu et jouez avec sa taille dans le script pour qu'il donne un effet de gravure. Et utilisez votre système de particules :)la source