Análise de tecnologia PCG do projeto UE5 "Electric Dreams" Explicação detalhada do nível PCGDemo_Ditch

artigo principal

Na postagem do blog acima, aprendemos sobre o fluxo de trabalho macro do projeto "Electric Dreams" e a ideia básica de construir níveis e, em seguida, olhamos para este nível "PCGDemo_Ditch" para entendê-lo bem.

Localização do arquivo: /Content/Levels/PCG/Breakdown_Levels/ElectricDreams_PCGDitchAssembly.umap

O nível "PCGDemo_Ditch" nos mostra principalmente os truques do PCG:

  • Use um nó personalizado Points From Actor Tagcomo uma ferramenta de segmentação para PCG
  • Idéias de decoração em camadas

Resumo do nível

insira a descrição da imagem aqui

PCGGraph

insira a descrição da imagem aqui

Points From Actor Tag como ferramenta de segmentação para PCG

Muitos pontos de tags de ator são usados ​​no nível PCGDemo_Ditch. Este é um nó personalizado muito útil que pode ser transplantado diretamente para nossos próprios projetos. Vamos dar uma olhada em sua lógica principal. O núcleo é Excute with Context As seguintes partes Points From Actor Tagde o :
insira a descrição da imagem aqui

Obtenha todos os atores com a tag especificada de toda a cena e, em seguida, use seus limites de transformação e escala para formar a saída da nuvem de pontos. Vejamos GetActorBoundsPCGa lógica específica novamente:

GetActorBoundsPCG

FBox UPCGBlueprintHelpers::GetActorBoundsPCG(AActor* InActor, bool bIgnorePCGCreatedComponents)
{
    
    
	return PCGHelpers::GetActorBounds(InActor, bIgnorePCGCreatedComponents);
}

e o GetActorBounds que ele chama

FBox GetActorBounds(const AActor* InActor, bool bIgnorePCGCreatedComponents)
	{
    
    
		// Specialized version of GetComponentsBoundingBox that skips over PCG generated components
		// This is to ensure stable bounds and no timing issues (cleared ISMs, etc.)
		FBox Box(EForceInit::ForceInit);

		const bool bNonColliding = true;
		const bool bIncludeFromChildActors = true;

		if (InActor)
		{
    
    
			InActor->ForEachComponent<UPrimitiveComponent>(bIncludeFromChildActors, [bNonColliding, bIgnorePCGCreatedComponents, &Box](const UPrimitiveComponent* InPrimComp)
			{
    
    
				// Note: we omit the IsRegistered check here (e.g. InPrimComp->IsRegistered() )
				// since this can be called in a scope where the components are temporarily unregistered
				if ((bNonColliding || InPrimComp->IsCollisionEnabled()) &&
					(!bIgnorePCGCreatedComponents || !InPrimComp->ComponentTags.Contains(DefaultPCGTag)))
				{
    
    
					Box += InPrimComp->Bounds.GetBox();
				}
			});
		}
		else
		{
    
    
			UE_LOG(LogPCG, Error, TEXT("Actor is invalid in GetActorBounds"));
		}

		return Box;
	}

Como pode ser visto no código acima, o mais importante é obter o BoundsBox do Actorcomponente UPrimitiveComponent, e cada um Actorpode carregar vários Volumes.

O método comum deste nó é definir alguns no nível Volumee adicionar o Tag correspondente e, em seguida, filtrá-los no PCG por Tag Volumee excluir seu volume.

insira a descrição da imagem aqui

Na figura abaixo, há um Ditch gerado usando um Spline circular e, em seguida, use várias tags "PCG_EXCLUDE" Volume(vários Volumes estão disponíveis) para abrir dois furos para ele.

insira a descrição da imagem aqui
Exemplos de aplicações também podem ser encontrados em "ElectricDreams_Env":

insira a descrição da imagem aqui

decoração em camadas

insira a descrição da imagem aqui
A decoração em camadas é uma ideia importante na construção do PCG. No nível PCGDemo_Ditch, um fosso consiste nas quatro partes a seguir, do primário ao secundário:

  1. O assunto da vala

  2. árvores e pedras

  3. Conexão entre a vala e o solo
    insira a descrição da imagem aqui

  4. detalhe da mancha

insira a descrição da imagem aqui
Embora a lógica da construção em camadas do PCG neste nível seja complicada, não é difícil de entender, por isso não vou explicá-la neste artigo.

Alguns pontos de conhecimento e habilidades

Use Attribute Operation para preparar atributos em atributos temporários

insira a descrição da imagem aqui

Se deve gerar colisão

insira a descrição da imagem aqui

resumo

PCG é muito divertido, a relação entre o tempo, este artigo é escrito aqui primeiro, por favor me corrija se houver algum erro!

Acho que você gosta

Origin blog.csdn.net/hello_tute/article/details/131479774
Recomendado
Clasificación