[UE4] Explicación detallada del Sistema de Partículas para efectos especiales (1) - Descripción general

Este artículo utiliza la versión UE4.26 y utiliza el proyecto de muestra ActionRPG para aprender y resumir los efectos de partículas (Sistema de partículas) en UE (aunque UE5 ya no tiene la intención de usar esto, pero usa Niagara, pero aún es necesario comprenderlo). incluyen principalmente:

  1. Editor de efectos especiales Cascade y Particle System
  2. Optimización relacionada con efectos especiales.
  3. Registros de temas relacionados con efectos especiales.

1. Sistema de cascada y partículas

1.1 Operaciones en Cascada

  • Reiniciar nivel
    Espacio (Espacio), puede presionar el botón Reiniciar nivel de arriba para reiniciar todo el efecto especial desde 0
    Insertar descripción de la imagen aquí

  • Cambie entre la configuración del emisor y la configuración completa de efectos especiales
    . Haga clic en un emisor (Emisor) y la configuración del emisor se mostrará en Detalles. Haga clic en el módulo en el emisor y la configuración del módulo se mostrará en Detalles. Si desea cambiar Para acceder a la configuración de todos los efectos especiales, haga clic en El área negra en el extremo derecho es suficiente (es por eso que no importa cómo agregue el transmisor, habrá un área negra en el extremo derecho).

  • Plegar el lanzador
    Al hacer doble clic en el lanzador, se puede plegar el lanzador, aunque parece inútil. .
    Insertar descripción de la imagen aquí

  • Reinicie la cámara.
    Presione los botones derecho e izquierdo del mouse en la ventana de vista previa. El funcionamiento de la cámara móvil WASD es el mismo que en la ventana normal del juego del editor. Sin embargo, a veces no sabe a dónde ir cuando gira el efectos especiales En este momento, haga clic en el Fbotón Eso es todo.


  • Las opciones arriba de Color de fondo y LímitesBackground Color pueden modificar el color de fondo de la ventana de vista previa para observar mejor los efectos especiales; el botón Límites puede mostrar los Límites de los efectos especiales para ver si hay algún problema o si los Límites son demasiado grande, lo que resulta en una eficiencia reducida, etc.
    Insertar descripción de la imagen aquí

1.2 Terminología en cascada

  El editor para editar ParticleSystem en UE se llama Cascade (haga doble clic para abrir un recurso de Particle System). La interfaz es como se muestra a continuación:
Insertar descripción de la imagen aquí

  La parte más importante en el medio a la derecha son los Emitters , que son emisores de partículas.
Insertar descripción de la imagen aquí

  Cada bloque vertical tiene un Emisor. Hay cuatro tipos de Emisores (la imagen a continuación es un Emisor tipo Malla):

  1. Sprite predeterminado
  2. Malla (cuadrícula, se puede convertir en una esfera u otras formas)
  3. Haz (tipo láser)
  4. Cinta (tira, como el humo que sale de un avión)

Insertar descripción de la imagen aquí

  Cada Emisor se divide en dos partes:
Insertar descripción de la imagen aquí

  en:

  1. Columnas de emisor: cada columna representa un emisor individual.
  2. Bloque de emisor: este es un cuadro en la parte superior de cada emisor que contiene las propiedades y controles principales para el emisor en sí, como el tipo y el nombre del emisor, y también contiene algunas otras propiedades principales.
  3. Lista de módulos: debajo del bloque del emisor hay una lista de todos los módulos que definen la apariencia y el comportamiento del emisor. Todos los emisores tienen un módulo requerido y más adelante se puede agregar cualquier número de módulos para definir mejor el comportamiento.

  Cada barra horizontal en cada Emisor es un Módulo (como se muestra a continuación es un Módulo Requerido):
Insertar descripción de la imagen aquí

  Los Detalles de cada Módulo son una descripción del Módulo o los efectos de las partículas (la imagen a continuación es parte de los Detalles del Módulo Requerido)
Insertar descripción de la imagen aquí

1.3 Algunas notas

  Escribiré de nuevo cuando lo piense.

1.4 Variables en código

  En el código se crean efectos especiales del tipo UParticleSystemComponent, como por ejemplo:

UParticleSystemComponent* PSC = UGameplayStatics::SpawnEmitterAtLocation(
	Target->GetWorld(), 
	PSTemplate, 
	StartLocation, 
	Rotator);

  Todas las partículas son Instancias de Emisor, que son los Emisores en 1.1:

TArray<FParticleEmitterInstance*>& EmitterInstances = PSC->EmitterInstances;

  Esta es una matriz, cada una de las cuales es cada emisor en 1.1 (tipo FParticleEmitterInstance):

for (FParticleEmitterInstance* const EmitterInstance : EmitterInstances)
{
    
    

}

  Cada emisor se puede convertir al tipo correspondiente, por ejemplo, el tipo de haz se puede convertir directamente.

FParticleBeam2EmitterInstance* const Beam = StaticCast<FParticleBeam2EmitterInstance*>(EmitterInstance);
if (Beam && Beam->BeamTypeData)
{
    
    
   Beam->BeamTypeData->Speed = TraceSpeed;
}

  Para cada Módulo en el Emisor, obtenlo de la siguiente manera:

EmitterInstance ->CurrentLODLevel->Modules

  Si desea obtener un tipo específico de módulo, puede ir directamente. Por ejemplo, el módulo Lifetime es del tipo UParticleModuleLifetime (consulte la carpeta y .h en \UnrealEngine\Engine\Source\Runtime\Engine\Classes\Particles para detalles)

  Entre ellos, RequiredModule es especial y se almacena por separado (consulte la declaración de clase UParticleLODLevel para obtener más detalles), es decir, cada transmisor tiene un módulo requerido (la traducción oficial es: el módulo requerido predeterminado):

class UParticleLODLevel : public UObject
{
    
    
   GENERATED_UCLASS_BODY()

   /** The required module for this LOD level                               */
   UPROPERTY(instanced)
   class UParticleModuleRequired* RequiredModule;

   /** An array of particle modules that contain the adjusted data for the LOD level  */
   UPROPERTY(instanced)
   TArray<class UParticleModule*> Modules;
}

  Si desea obtener los EmitterLoops en RequiredModule, es decir, el número de bucles, puede hacerlo directamente:

EmitterInstance ->CurrentLODLevel->RequiredModule->EmitterLoops

1.5 Sistema de partículas y componente del sistema de partículas

  Particle System (PS) es un recurso de efectos especiales. Puede ver la introducción al pasar el mouse sobre el recurso en el directorio de Contenido;
  Particle System Component (PSC) es el componente que realmente reproduce efectos especiales. Esto es lo que se crea en el mundo y se puede colgar. En los humanos, no importa. La ventana de vista previa en Cascade también crea un PSC, pero también hereda una capa.

/** Components used for drawing the particle system in the preview viewport */
UCascadeParticleSystemComponent* ParticleSystemComponent;

2. Optimización del sistema de partículas relacionada

2.1 Conceptos relacionados con la optimización

2.1 Ciclo de vida

  • Emisor de partículas - Ciclo de vida
      El ciclo de vida de cada emisor se establece Required Moduleen Duration:
    Insertar descripción de la imagen aquí

  en:

  1. Emitter Duration Use Range, Emitter Duration Low, Emitter Duration Low- se utiliza para establecer cada Duración en un rango, generalmente no es muy útil;
  2. Emitter Loops- Se refiere a cuántas veces este emisor se repite; 0significa bucle infinito. Vale la pena señalar que este valor es 0 por defecto. Si hay un emisor que se repite infinitamente, entonces este efecto especial nunca será destruido.
  3. Emitter Duration- Duración de cada lanzamiento
  • Partículas: el ciclo de vida
      de cada partícula LifeTimese puede configurar en el módulo. La mayoría de las partículas no deberían ser demasiado largas:
    Insertar descripción de la imagen aquí

  En Spawn Module, puede establecer la tasa de emisión de partículas. Si es 0(valor predeterminado), significa que las partículas se emitirán una vez cada vez que el emisor sea irreal. Si es así 1, significa que las partículas se emitirán una vez cada segundo durante cada ciclo del emisor.
Insertar descripción de la imagen aquí

2.1.2 Número de partículas

  Hay un número en cada panel de Emisor, que representa cuántas partículas emite este emisor de partículas a la vez. También se puede ver en la esquina inferior derecha de la ventana gráfica.
Insertar descripción de la imagen aquí

  En la ventana gráfica, haga clic en en la esquina superior izquierda Viewpara seleccionar más información para mostrar.
Insertar descripción de la imagen aquí

2.1.3 LOD

Insertar descripción de la imagen aquí

  En Cascade, estas son las configuraciones relacionadas con LOD en la esquina superior derecha, entre las cuales:

  1. Add LOD- a la izquierda y a la derecha corresponde Add LOD Beforea y Add LOD After, es decir, insertar un LOD entre el LOD actual y el siguiente LOD más alto (más bajo)
  2. Lower LODy Higher LOD- corresponder al LOD anterior o siguiente.
  3. LOD- es el nivel LOD actual

  Después de seleccionar un Emisor, los detalles del emisor se mostrarán en Detalles. Si desea ver la información de todo el efecto especial (como LOD), simplemente haga clic en el área negra en blanco a la derecha.
  Puede ver la configuración de LOD en Detalles:
Insertar descripción de la imagen aquí

  Este lugar LODDistancesno se puede agregar. Debes usar Add LODel botón de arriba para agregarlo. Se agregará automáticamente aquí.
  El método de uso es muy sencillo, puedes entenderlo leyendo los comentarios:

/**
 *	The array of distances for each LOD level in the system.
 *	Used when LODMethod is set to PARTICLESYSTEMLODMETHOD_Automatic.
 *
 *	Example: System with 3 LOD levels
 *		LODDistances(0) = 0.0
 *		LODDistances(1) = 2500.0
 *		LODDistances(2) = 5000.0
 *
 *		In this case, when the system is [   0.0 ..   2499.9] from the camera, LOD level 0 will be used.
 *										 [2500.0 ..   4999.9] from the camera, LOD level 1 will be used.
 *										 [5000.0 .. INFINITY] from the camera, LOD level 2 will be used.
 *
 */
UPROPERTY(EditAnywhere, editfixedsize, Category=LOD)
TArray<float> LODDistances;

  Cuanto más lejos esté el LOD, menos efectos especiales tendrá; de lo contrario, el LOD no tendrá sentido y la configuración entre diferentes LOD no debería ser diferente. Por ejemplo, este parámetro tiene un gran impacto en el rendimiento del equipo SpawnRate.

  Según la introducción oficial del nivel de detalle (LOD) del sistema de partículas , los pasos para crear un LOD de efectos especiales deben ser los siguientes:

  1. Crea lo que crees que es el efecto más completo de este efecto especial (es decir, un efecto especial completo). Este es el nivel más alto de LOD (LOD0) de este efecto especial.Create your overall desired effect. This will be the highest LOD level.
  2. Luego haz la capa más baja.Next, create the lowest LOD level.
  3. Agregue cualquier capa en el medio para que haya una transición suave entre la más alta y la más baja.Add any other LOD levels between the two in order to create a smooth transition from highest quality to lowest.

Nota: Todos los módulos solo se pueden agregar y eliminar en el nivel más alto. Aunque se puede hacer

Regenerate Lowest LODDespués de crear el LOD de nivel superior y el personal de efectos especiales considera que se puede desarrollar el LOD, pueden hacer clic en el botón o   en la barra de herramientas. La diferencia es Regenerate Lowest LOD Duplicating Highest Buttonque el botón de la izquierda Insertar descripción de la imagen aquígenera un LOD de nivel inferior copiando completamente el LOD. capa superior; mientras que el botón de la derecha Insertar descripción de la imagen aquíes Generar una capa inferior y reducir la tasa de generación (la prueba personal muestra que la tasa de generación cambiará de 2 a 0,2, lo cual es una gran caída).

Aviso:Esta operación eliminará todos los LOD existentes excepto el LOD de nivel más alto (aparecerá un cuadro de confirmación).

  El código para reducir SpawnRate es el siguiente, es decir, se reduce al 10% de forma predeterminada, excepto para seleccionar la copia completa de la capa superior y el tipo de haz no compatible actualmente.

bool UParticleEmitter::AutogenerateLowestLODLevel(bool bDuplicateHighest)
{
    
    
	// blabla
	float Percentage	= 10.0f;
	if (SourceLODLevel->TypeDataModule)
	{
    
    
		UParticleModuleTypeDataBeam2*	Beam2TD		= Cast<UParticleModuleTypeDataBeam2>(SourceLODLevel->TypeDataModule);

		if (Beam2TD)
		{
    
    
			// For now, don't support LOD on beams and trails
			Percentage	= 100.0f;
		}
	}

	if (bDuplicateHighest == true)
	{
    
    
		Percentage = 100.0f;
	}

	if (LODLevel->GenerateFromLODLevel(SourceLODLevel, Percentage) == false)
	{
    
    
		
	}
}

  Nota: La distancia predeterminada de LOD es 2500 (es decir, 25 metros). Para obtener más detalles, consulte el void FCascade::RegenerateLowestLOD(bool bDupeHighest)
  botón LOD superior (aquí más alto se refiere a la parte superior, que en realidad es un LOD de nivel inferior). Puede cambiar al nivel más bajo. nivel LOD recién generado. De forma predeterminada, no se pueden editar todos los módulos (el fondo tendrá patrones negros):
Insertar descripción de la imagen aquí

Si desea editar   , haga clic derecho en el módulo que desea editar y seleccione Duplicate from Highest:)
Insertar descripción de la imagen aquí

  Aviso:: Para el emisor, la información detallada (como el nivel de importancia, el modo de renderizado, etc.) solo se puede editar en LOD 0. No se puede editar en otras capas, solo en el módulo.

2.2 Optimizaciones en cascada

2.2.1 Ciclo de vida

  Después de crear efectos especiales, los artistas deben confirmar que no están repitiendo efectos especiales. Este Emitter Loopvalor no es 0, de lo contrario afectará la eficiencia y la memoria.
  En la ventana de vista previa (Viewport) de Cascade, haga clic Restart Levely vea cuándo Completeaparecerá la palabra "Completo" (Completo significa que el efecto especial será destruido). Puede saber aproximadamente cuánto tiempo durará el efecto especial. Si no aparece durante mucho tiempo, entonces hay que prestar atención, ¿no? Emitter DurationEl partido es muy largo.
Insertar descripción de la imagen aquí

2.2.2 Rendimiento

  En la ventana Viewport, haga clic en ViewSeleccionar View Modes -> Shader Complexitypara ver la complejidad de este efecto especial. Cuanto más rojo sea el color, mayor será la complejidad.
Insertar descripción de la imagen aquí

  Puedes presionar para cambiar a este modo mientras estás ejecutando F5. ¡El color blanco indica que el rendimiento es muy pobre! !

2.3 Visualización de datos

  DescripciónConceptos básicos de optimización para sistemas de partículas .

2.3.1 UNIDAD estadística

  Ejecute el juego, presione ~la tecla (la que está a la izquierda de 1) y luego ingrese Stat UNIT, podrá ver la interfaz como se muestra a continuación:

Insertar descripción de la imagen aquí

2.3.2 Partículas estadísticas

  Ejecute el juego, presione ~la tecla (la que está a la izquierda de 1) y luego ingrese Stat ParticlesOverview(puede ver algunas otras opciones después de presionar la partícula estadística). Puede ver la interfaz como se muestra a continuación. Después de reproducir los efectos especiales, los datos será mostrado:

Insertar descripción de la imagen aquí

  en:

  1. GT- significa hilo del juego
  2. RT- significa renderizar hilo

  Lógicamente hablando, ¿cuál era el número antes de que se lanzara una habilidad? ¿Cuál debería ser después de que se lanza la habilidad y terminan los efectos especiales? Si ha terminado durante mucho tiempo, el CallCount ha aumentado y no ha cambiado, lo que indica que debe haber una pregunta sobre la duración/ciclo de vida del efecto especial.

2.3.3 Archivo de inicio de estadísticas

  Ingrese Stat StartFile, luego juegue el juego normalmente o realice una operación específica y luego ingrese Stat StopFileEn este momento, se generará un archivo de registro en el directorio \ARPG\ARPG\Saved\Profiling.
  Desde Ventana -> Herramientas de desarrollo -> Frontend de sesión, en la interfaz de Profiler, cargue el archivo de registro correspondiente para abrirlo.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

  Los datos que contiene son muy detallados, como en 2.3.2 GT concurrent Total, que se pueden encontrar mediante la búsqueda. Después de hacer doble clic, puede ver los valores máximo, mínimo y promedio en la Vista de gráfico.

Insertar descripción de la imagen aquí

2.3.4 En el directorio de contenido

  En el directorio de Contenido, puede usar Filtros para filtrar Particle System, como se muestra en la siguiente figura:
Insertar descripción de la imagen aquí

  Pase el mouse sobre cada archivo de recursos de efectos especiales y se mostrará información breve:
Insertar descripción de la imagen aquí

  Si desea ordenar por alguna información, puede View Optionsseleccionar en la esquina inferior derecha del directorio de Contenido Columnspara ordenar por diferentes datos:
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

2.4 Grupo de efectos especiales (WorldPSCPool)

  Con respecto al grupo de efectos especiales, puedes leer el segundo artículo - [UE4] Explicación detallada del sistema de partículas de efectos especiales (2) - Grupo de efectos especiales (solo necesitas saber una cosa en este artículo, los efectos especiales lanzados por defecto no se incluyen en la gestión de la piscina).

3. Registros de problemas del sistema de partículas

  Como esto es demasiado, también escribiré un artículo aparte.

4. Materiales de referencia

  1. Guía del usuario del sistema de partículas (Guía de funcionamiento oficial: terminología y conocimientos básicos de Cascade)
  2. Referencia del sistema de partículas
  3. Tutorial de sistemas de partículas de Unreal Engine 4 (fácil introducción a los sistemas de partículas)
  4. Guía de optimización de efectos visuales
  5. Guía del usuario del sistema de partículas (oficial)
  6. Conceptos clave de los sistemas de partículas (oficial)
  7. Referencia del editor de partículas en cascada (oficial)
  8. Conceptos básicos de optimización para sistemas de partículas (官方)
  9. Nivel de detalle (LOD) del sistema de partículas (oficial)

Supongo que te gusta

Origin blog.csdn.net/Bob__yuan/article/details/117031355
Recomendado
Clasificación