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:
- Editor de efectos especiales Cascade y Particle System
- Optimización relacionada con efectos especiales.
- 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
-
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. .
-
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 elF
botó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.
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:
La parte más importante en el medio a la derecha son los Emitters , que son emisores de partículas.
Cada bloque vertical tiene un Emisor. Hay cuatro tipos de Emisores (la imagen a continuación es un Emisor tipo Malla):
- Sprite predeterminado
- Malla (cuadrícula, se puede convertir en una esfera u otras formas)
- Haz (tipo láser)
- Cinta (tira, como el humo que sale de un avión)
Cada Emisor se divide en dos partes:
en:
- Columnas de emisor: cada columna representa un emisor individual.
- 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.
- 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):
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)
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 estableceRequired Module
enDuration
:
en:
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;Emitter Loops
- Se refiere a cuántas veces este emisor se repite;0
significa 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.Emitter Duration
- Duración de cada lanzamiento
- Partículas: el ciclo de vida
de cada partículaLifeTime
se puede configurar en el módulo. La mayoría de las partículas no deberían ser demasiado largas:
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.
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.
En la ventana gráfica, haga clic en en la esquina superior izquierda View
para seleccionar más información para mostrar.
2.1.3 LOD
En Cascade, estas son las configuraciones relacionadas con LOD en la esquina superior derecha, entre las cuales:
Add LOD
- a la izquierda y a la derecha correspondeAdd LOD Before
a yAdd LOD After
, es decir, insertar un LOD entre el LOD actual y el siguiente LOD más alto (más bajo)Lower LOD
yHigher LOD
- corresponder al LOD anterior o siguiente.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:
Este lugar LODDistances
no se puede agregar. Debes usar Add LOD
el 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:
- 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.
- Luego haz la capa más baja.
Next, create the lowest LOD level.
- 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 LOD
Despué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 Button
que el botón de la izquierda genera un LOD de nivel inferior copiando completamente el LOD. capa superior; mientras que el botón de la derecha 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):
Si desea editar , haga clic derecho en el módulo que desea editar y seleccione Duplicate from Highest
:)
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 Loop
valor no es 0, de lo contrario afectará la eficiencia y la memoria.
En la ventana de vista previa (Viewport) de Cascade, haga clic Restart Level
y vea cuándo Complete
aparecerá 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 Duration
El partido es muy largo.
2.2.2 Rendimiento
En la ventana Viewport, haga clic en View
Seleccionar View Modes -> Shader Complexity
para ver la complejidad de este efecto especial. Cuanto más rojo sea el color, mayor será la complejidad.
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:
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:
en:
GT
- significa hilo del juegoRT
- 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 StopFile
En 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.
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.
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:
Pase el mouse sobre cada archivo de recursos de efectos especiales y se mostrará información breve:
Si desea ordenar por alguna información, puede View Options
seleccionar en la esquina inferior derecha del directorio de Contenido Columns
para ordenar por diferentes datos:
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
- Guía del usuario del sistema de partículas (Guía de funcionamiento oficial: terminología y conocimientos básicos de Cascade)
- Referencia del sistema de partículas
- Tutorial de sistemas de partículas de Unreal Engine 4 (fácil introducción a los sistemas de partículas)
- Guía de optimización de efectos visuales
- Guía del usuario del sistema de partículas (oficial)
- Conceptos clave de los sistemas de partículas (oficial)
- Referencia del editor de partículas en cascada (oficial)
- Conceptos básicos de optimización para sistemas de partículas (官方)
- Nivel de detalle (LOD) del sistema de partículas (oficial)