Caracteres de renderização, com membros cortados (modelos Blender em Java / OpenGL)

10

Quais aspectos devo levar em consideração na criação de classes de animação e renderização de personagens, se eu quiser ter membros destacáveis? Eu desenvolvi um sistema corporal detalhado que pode ter tudo definido no sistema nervoso. Estou buscando algo semelhante ao nível de detalhe de dano encontrado na Fortaleza dos Anões. Por exemplo, quando um personagem sofre dano em seu braço, há uma chance de dano no nervo que pode desativar todo o braço. Ou eles poderiam perder o braço completamente.

Eu tenho um sistema escrito para lidar com os dados parte disso. Cada personagem tem um tronco, que possui apêndices e partes internas. Cada apêndice também pode ter apêndices filhos e partes internas. Os anexos filhos serão desativados / removidos se um anexo pai for desativado / removido. Se algum dos apêndices desativados / removidos ou peças internas forem necessários para a vida toda, o personagem morrerá em breve.

O que estou trabalhando agora é a parte de desenho / animação disso. Como defino animações para saber quais são permitidas, dado o estado atual do corpo (falta de braços / pernas e assim por diante)? Como configuro o sistema de desenho para não desenhar membros ausentes? Cada membro / apêndice tem que ter seu próprio modelo (eu gostaria de desenhar apêndices cortados no chão)?

O sistema simples do qual estou migrando (acabei de escrevê-lo para testar) importa todos os quadros-chave de uma animação como modelos completos para um VBO (juntamente com a contagem de vértices para onde os quadros-chave iniciam / param). Ele não importa ou utiliza os ossos definidos no Blender e não interpola entre os quadros.

Essa é provavelmente uma pergunta muito grande, então também estou procurando recursos que possam me levar aonde eu preciso ir.

EDITAR

Pergunto sobre a animação, sabendo quais membros está animando, porque gostaria de configurá-la para executar uma animação alternativa se um membro necessário estiver faltando. Depois de pensar nisso, imagino que realizaria essa verificação antes de ativar uma animação e ativaria a animação apropriada naquele momento.

MichaelHouse
fonte

Respostas:

7

Atualmente, estou trabalhando em um sistema semelhante. Animação processual + desmembramento etc.

Como defino animações para saber quais são permitidas, informando o estado atual do corpo (falta de braços / pernas e assim por diante)?

Eu não sigo bem esse trecho, se os membros não estão lá, quem se importa se está sendo animado ou não, porque não pode ser visto.

Cada membro / apêndice tem que ter seu próprio modelo (eu gostaria de desenhar apêndices cortados no chão)?

Eu os construo dinamicamente usando pesos de osso de vértice. A qualidade é provavelmente um pouco menor do que fazer todos os membros manualmente, mas é menos esforço uma vez que eu fiz isso uma vez, porque posso aplicá-lo a todos os modelos.

Com a abordagem sã da seção a seguir, sim, cada membro teria seu próprio modelo.

Eu provavelmente teria um modelo completo em mãos de toda a entidade e cada um dos membros será cortado.

Como configuro o sistema de desenho para não desenhar membros ausentes?

Com duas opções principais, a maneira mais simples é simplesmente desenhar os membros separadamente, e onde os membros se juntam têm faces adicionais que normalmente estão ocultas com texturas de "carne crua" que serão vistas quando os membros forem removidos.

A segunda opção é fazê-lo dinamicamente em tempo real, isso funcionará apenas com modelos relativamente simples. A abordagem é adotar o modelo base e encontrar os vértices que são pesados ​​para o membro que você deseja desmembrar. Remova esses vértices, observando a que eles se conectam para que você conheça a seção aberta. Em seguida, você fecha dinamicamente a seção aberta com triângulos com uma textura de "carne crua". Da perspectiva de um desenvolvedor de software são, essa abordagem não é boa (deformação do modelo de tempo de execução) e menos características de desempenho "planas", mas eu meio que gosto disso.

Embora o primeiro método gere muito mais chamadas de empate, também é um pouco mais acessível.

Pessoalmente, vou com o segundo, com relativo sucesso, mas todos os meus modelos são muito baixos em poli, portanto, recortar dinamicamente um modelo e fazer o upload do VBO dentro do quadro é possível por enquanto.

Ele não importa ou utiliza os ossos definidos no Blender e não interpola entre os quadros.

Isso dificulta muito o desmembramento de maneira processual, porque como você sabe quais vértices pertencem a que junção? Os pesos ósseos e o desmembramento dos vértices andam de mãos dadas tão bem que sugiro que você repense esse pouco.

Eu também sugiro que você invista na interpolação. Sem ele, você não pode acelerar / desacelerar suas animações e estará associado à taxa de quadros. Isso significa que você poderá aproveitar menos suas animações. por exemplo, você não pode diminuir a animação da caminhada quando alguém está parando, etc.

Michael
fonte
Obrigado @Michael. Eu trouxe a interpolação e a importação de ossos porque sei que precisarei deles eventualmente, mas ainda não os tenho. Pelo que você disse, parece que vou saber o que fazer quando chegar a esse ponto. Provavelmente eu associaria um apêndice ou grupo de apêndices a um osso. Farei uma pergunta separada sobre a importação de ossos.
Michaelhouse
como você está trabalhando em algo semelhante, talvez tenha mais informações sobre essa questão relacionada? gamedev.stackexchange.com/q/20931/7191
MichaelHouse
5

Sua melhor opção é cortar os membros e usar vários submodelos, dependendo do estado atual das feridas. Sua abordagem de usar um VBO por quadro-chave é apenas um exagero; use um sistema de animação esquelética e reproduza animações diferentes, dependendo do dano recebido (mancando com uma perna, rastejando sem as duas pernas, etc.).

A Valve publicou um bom conjunto de slides sobre as feridas e desmembramento em L4D2. Eu realmente gosto da abordagem de usar um modelo para órgãos e ossos e recortar o modelo "skin" com base em projeções de textura de cortes, tiros, etc.

r2d2rigo
fonte
Interessante. Esses slides parecem bons. Parece que isso funcionaria por danos que não afetavam um apêndice inteiro.
Michaelhouse