Iniciante - deformar a malha de um bloco

Boa tarde pessoal,

Vou começar a mexer agora na Unreal. Pensei num pequeno projeto de forja.

Então começando do básico, como funcionaria a deformação de um bloco ao ser pressionado?

Já mexi com modelagem então sei que os objetos tem a mesh, com a engine eu consigo fazer uma deformação dinâmica da malha de um bloco?

Você pode tentar mexer na escala do objeto. Aplicando uma escala não uniforme você consegue esse efeito de deformação. Claro que não vai ser perfeito, mas é uma boa ilusão na minha opinião.

E se você quiser fazer algo dinâmico, basta mexer na escala usando Blueprints

Boa ideia!

Estava vendo umas coisas de Procedural Mesh, talvez use as duas, mas por enquanto vou aprender a mexer na escala mesmo.

Antes eu preciso aprender uma série de coisa, mas pelo menos sei que a ideia do projeto é executável kkkk

O Plugin de ProceduralMesh que tem na Unreal é interessante mas acho que você não precisaria pra esse efeito de uma forja, a não ser que você queira fazer algo mais realista.

Sou completamente noob galera, então ainda estou fuçando aqui pra aprender o básico.
Consegui fazer um bloco 1 chamado Prensa (Tipo Pawn) descer e colidir com um bloco 2 (Static Mesh) a ser “esmagado”.

Tentei fazer uma blueprint na Static mesh pra detectar a colisão e mudar a scala do bloco:

Aparentemente ta funcionado, eu coloquei um delta de escala bem pequeno, então dá a impressão que o bloco 2 vai acompanhando a superfície do bloco 1.
Com essa estratégia eu teria que mover o bloco 2 para baixo. Qual seria o comando pra reposicionar?
Com esse reposicionamento acho vou perder o efeito de sincronia do scale com a descida do bloco 1, mas ta sendo legal de testar.

Pra mudar a posição de um Ator você usa o SetActorLocation. Pra mudar a posição de um componente, pode usar o SetRelativeLocation

@mcleary muito obrigado! Está funcionando, agora vou tentar esmagar seções diferentes do cubo usando ProceduralMesh,

Achei uns videos de malha deformável da Unity em C++ (video). A ideia era salvar os vertices originais > calcular novos posições quando ocorre colisão > refazer a malha.

Pensei que era assim que o ProceduralMesh funcionaria, mas ainda não estou entendo bem com ela funciona.
Eu teria que destruir e recriar a malha a cada evento, ou eu crio uma única vez e modifico os vertices?

Então, não sei se isso está exposto em Blueprints, mas o UProceduralMeshComponenttem uma função chamada GetProcMeshSection que vai te retornar uma estrutura com informações sobre uma seção da malha. Nessa estrutura você tem acesso aos vértices.

Mas acredito que a forma mais rápida pra você fazer isso como teste seria seguir a sua ideia. Destruir e criar novas seções.

@mcleary Eu fiz um pequeno teste aqui com uma unica face com 4 vértices, seguindo esse tutorial.

1- Criei uma blueprint Actor
2- Inseri uma Procedural Mesh
3- No Construction Script, eu criei uma variável do tipo array com os vértices, passei ela para a função Create Mesh Section e gerei a seção original.
4- No Event Graph, quando há colisão eu acesso os valores de XYZ de um vértice no array, modifico do jeito que eu quero e passo pra função Update Mesh Section.

Acho que vou ter que modificar vértice por vértice com um loop. Como eu sei que alguns vértices serão simétricos eu to pensando em construir manualmente as seções originais pra ter controle da ordem dos vértices no loop.

Sim, não tem muita escolha. Você vai ter que fazer um loop para alterar a malha da forma que você quer. Compartilha o progresso depois pra gente saber como esse efeito de forja ficou.