Tutorial de Ragdolling
4 participantes
Página 1 de 1
Tutorial de Ragdolling
Meio copiado do facepunch, meio escrito com meus conhecimentos.
Note que isso será feito em partes (múltiplos posts).
VERSÃO EM PDF: https://www.dropbox.com/s/uckdhhgc61ukmgj/Ragdolling.pdf (man I love Dropbox)
Note que eu recomendo a versão que está aqui mesmo, está mais organizada que o PDF.
PARTES
1: Introdução
2: Programas
3: Básicos do Autodesk
4: Estrutura básica do .qc
5: Compilando um prop
6: Usando o VTFEdit
7: Ragdolling 1: Otimizando
8: Ragdolling 2: Bones (animação)
9: Ragdolling 3: Collision Models
10: Estrutura avançada do .qc
11: Parâmetros avançados de shaders
12: Ragdolling 4: Fingerposing
13: Ragdolling 5: Eyeposing
14: Ragdolling 6: Bodygroups e skins
15: Faceposing 1: Ragdoll com múltiplos SMDs
16: Faceposing 2: Edição de vértices e facebones
17: Faceposing 3: Autokey e morphers
18: Faceposing 4: Flexes no .qc
PARTE 1 - INTRODUÇÃO
Você joga Gmod? É claro que sim, se não jogasse não estaria lendo isso.
Mas você já sonhou em fazer seus próprios ragdolls e addons? Sim? Então aqui está um tutorial para te ensinar!
A maioria das pessoas pensa que mexer com programas de modelagem 3D é difícil, mas a verdade é que é difícil sim. Mas para fazer ragdolling, só precisamos saber usar 5% do programa. Essencialmente, é algo que qualquer um pode fazer.
Mas, enfim, o que é ragdolling? É a arte de pegar um modelo de um jogo qualquer e colocá-lo no Gmod como um ragdoll.
Isso é feito por um processo simples que estarei explicando.
Note que isso será feito em partes (múltiplos posts).
VERSÃO EM PDF: https://www.dropbox.com/s/uckdhhgc61ukmgj/Ragdolling.pdf (man I love Dropbox)
Note que eu recomendo a versão que está aqui mesmo, está mais organizada que o PDF.
PARTES
1: Introdução
2: Programas
3: Básicos do Autodesk
4: Estrutura básica do .qc
5: Compilando um prop
6: Usando o VTFEdit
7: Ragdolling 1: Otimizando
8: Ragdolling 2: Bones (animação)
9: Ragdolling 3: Collision Models
10: Estrutura avançada do .qc
11: Parâmetros avançados de shaders
12: Ragdolling 4: Fingerposing
13: Ragdolling 5: Eyeposing
14: Ragdolling 6: Bodygroups e skins
15: Faceposing 1: Ragdoll com múltiplos SMDs
16: Faceposing 2: Edição de vértices e facebones
17: Faceposing 3: Autokey e morphers
18: Faceposing 4: Flexes no .qc
PARTE 1 - INTRODUÇÃO
Você joga Gmod? É claro que sim, se não jogasse não estaria lendo isso.
Mas você já sonhou em fazer seus próprios ragdolls e addons? Sim? Então aqui está um tutorial para te ensinar!
A maioria das pessoas pensa que mexer com programas de modelagem 3D é difícil, mas a verdade é que é difícil sim. Mas para fazer ragdolling, só precisamos saber usar 5% do programa. Essencialmente, é algo que qualquer um pode fazer.
Mas, enfim, o que é ragdolling? É a arte de pegar um modelo de um jogo qualquer e colocá-lo no Gmod como um ragdoll.
Isso é feito por um processo simples que estarei explicando.
Última edição por MauroC em Sáb Abr 20, 2013 1:11 pm, editado 2 vez(es)
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 2 - VOCÊ VAI PRECISAR
Na verdade, eu falei que era simples, mas você precisa instalar uns 15 programas pra conseguir fazer ragdolling.
Tenha uns 7GB de espaço sobrando.
1 - Obter os modelos - Claro, você não vai criar seu próprio ragdoll, apenas vai transformar um modelo existente em um. Para isso, você precisa ter os arquivos, então aqui vão alguns métodos:
-Internet: simplesmente procure no Google, ou veja se consegue achar aqui: http://www.models-resource.com/
-Dolphin: se for um jogo de Wii/Gamecube, tem como você extrair os arquivos direto do filesystem do jogo.
-3DRipper: Programa que permite você obter o modelo direto de um jogo que esteja rodando. http://www.deep-shadows.com/hax/3DRipperDX.htm
2 - Editar os modelos
Você também vai precisar de um programa para fazer o ragdolling propriamente dito. Eu recomendo o 3ds Max 2012, se você for estudante tem como conseguir DE GRÁTIS! (é só se registrar no site da Autodesk.) Nota: use a versão 2012! http://www.autodesk.com/products/autodesk-3ds-max/overview
Outros programas incluem o XSI (usado no HL2) e Maya. Mas, sério, usem o Autodesk. É o que vou usar neste tutorial.
3 - Compilar
A última parte consiste em colocar seus arquivos em um formato que o Gmod pode ler. Você precisará de:
Bloco de notas
Plugins para exportar SMD e VTA no Autodesk:
http://www.chaosincarnate.net/cannonfodder/cftools.htm (importar e exportar SMDS)
http://www.wunderboy.org/3dapps.php (exportar VTAs)
GUIStudioMDL (para compilar os SMDs) http://www.wunderboy.org/apps/guistudiomdl2.php
VTF Edit (converter as texturas para VTF) http://nemesis.thewavelength.net/index.php?c=178
Source SDK (ache no Steam em Biblioteca - Ferramentas)
Garry's Workshopper (para fazer o upload de addons) http://wiki.garrysmod.com/page/Workshop_Publisher_Tool
Acho que é só disso que você vai precisar. Só.
Na verdade, eu falei que era simples, mas você precisa instalar uns 15 programas pra conseguir fazer ragdolling.
Tenha uns 7GB de espaço sobrando.
1 - Obter os modelos - Claro, você não vai criar seu próprio ragdoll, apenas vai transformar um modelo existente em um. Para isso, você precisa ter os arquivos, então aqui vão alguns métodos:
-Internet: simplesmente procure no Google, ou veja se consegue achar aqui: http://www.models-resource.com/
-Dolphin: se for um jogo de Wii/Gamecube, tem como você extrair os arquivos direto do filesystem do jogo.
-3DRipper: Programa que permite você obter o modelo direto de um jogo que esteja rodando. http://www.deep-shadows.com/hax/3DRipperDX.htm
2 - Editar os modelos
Você também vai precisar de um programa para fazer o ragdolling propriamente dito. Eu recomendo o 3ds Max 2012, se você for estudante tem como conseguir DE GRÁTIS! (é só se registrar no site da Autodesk.) Nota: use a versão 2012! http://www.autodesk.com/products/autodesk-3ds-max/overview
Outros programas incluem o XSI (usado no HL2) e Maya. Mas, sério, usem o Autodesk. É o que vou usar neste tutorial.
3 - Compilar
A última parte consiste em colocar seus arquivos em um formato que o Gmod pode ler. Você precisará de:
Bloco de notas
Plugins para exportar SMD e VTA no Autodesk:
http://www.chaosincarnate.net/cannonfodder/cftools.htm (importar e exportar SMDS)
http://www.wunderboy.org/3dapps.php (exportar VTAs)
GUIStudioMDL (para compilar os SMDs) http://www.wunderboy.org/apps/guistudiomdl2.php
VTF Edit (converter as texturas para VTF) http://nemesis.thewavelength.net/index.php?c=178
Source SDK (ache no Steam em Biblioteca - Ferramentas)
Garry's Workshopper (para fazer o upload de addons) http://wiki.garrysmod.com/page/Workshop_Publisher_Tool
Acho que é só disso que você vai precisar. Só.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 3: USANDO O AUTODESK
Bom, vamos assumir que você já tenha um bom conhecimento de perspectiva e saiba o que é wireframe. Ótimo!
Vamos para os básicos do 3ds Max, começando pelos controles do mouse e câmera.
O botão esquerdo seleciona. Use com o CTRL para selecionar mais objetos e use com o ALT para deselecionar.
Deixe o botão do meio apertado para mover a cena.
Use o botão direito para abrir o menu de propriedades (útil para clonar, congelar e esconder objetos)
Clique no cubo branco no canto superior direito para manipular o ângulo da câmera.
As três ferramentas básicas que vamos usar são Mover, Girar e Redimensionar. Mais tarde usaremos a ferramenta de linkagem, que não adianta explicar agora.
Quase sempre deixaremos o menu no "Modify" (o arco-íris azul).
E é só isso que você precisa manjar pra usar o Autodesk. Vamos aprender mais ao longo dessa jornada mágica.
Bom, vamos assumir que você já tenha um bom conhecimento de perspectiva e saiba o que é wireframe. Ótimo!
Vamos para os básicos do 3ds Max, começando pelos controles do mouse e câmera.
O botão esquerdo seleciona. Use com o CTRL para selecionar mais objetos e use com o ALT para deselecionar.
Deixe o botão do meio apertado para mover a cena.
Use o botão direito para abrir o menu de propriedades (útil para clonar, congelar e esconder objetos)
Clique no cubo branco no canto superior direito para manipular o ângulo da câmera.
As três ferramentas básicas que vamos usar são Mover, Girar e Redimensionar. Mais tarde usaremos a ferramenta de linkagem, que não adianta explicar agora.
Quase sempre deixaremos o menu no "Modify" (o arco-íris azul).
E é só isso que você precisa manjar pra usar o Autodesk. Vamos aprender mais ao longo dessa jornada mágica.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 4: ARQUIVOS QC
Eu sei, parece estranho colocar os arquivos .qc antes da compilação, mas eu achei mais importante. Vamos agora ver não só os .qc, mas outros formatos de arquivo que estaremos usando:
.MDL : O arquivo de modelo propriamente dito, usado pelo GMod e Source. É o que vamos ver no HLMV.
.SMD : Tipo de arquivo que você vai compilar no GUIStudioMDL.
.VTA : Contém os dados do faceposing.
.VMT : Arquivo de parâmetros de um material.
.VTF : Arquivo de textura.
.QC : Parâmetros de compilação.
Os arquivos .qc podem ser abertos com um bloco de notas. Se você tiver o MDLDecompiler, pode usar a engenharia reversa e ver que um .qc é mais ou menos assim:
Estaremos estudando as partes simples do qc. Na próxima parte falaremos mais.
Comandos que você deve memorizar:
$cd : indica a pasta onde estão seus arquivos SMD.
$modelname : o nome do arquivo do seu modelo (ex: gman.mdl ou HL2\gman.mdl)
$cdmaterials : a pasta dentro de garrysmod\materials em que vão estar seus VMTs.
$surfaceprop : a "superfície" do seu objeto (ex: metal, flesh, wood, etc. Vou ver se consigo uma lista completa)
Falaremos do $model, $sequence e $collisionmodel na próxima parte. O resto dos comandos são padrão (copiar e colar em praticamente todos os seus qcs.)
Eu sei, parece estranho colocar os arquivos .qc antes da compilação, mas eu achei mais importante. Vamos agora ver não só os .qc, mas outros formatos de arquivo que estaremos usando:
.MDL : O arquivo de modelo propriamente dito, usado pelo GMod e Source. É o que vamos ver no HLMV.
.SMD : Tipo de arquivo que você vai compilar no GUIStudioMDL.
.VTA : Contém os dados do faceposing.
.VMT : Arquivo de parâmetros de um material.
.VTF : Arquivo de textura.
.QC : Parâmetros de compilação.
Os arquivos .qc podem ser abertos com um bloco de notas. Se você tiver o MDLDecompiler, pode usar a engenharia reversa e ver que um .qc é mais ou menos assim:
- Código:
$cd "C:\Program Files\Steam\steamapps\maurocazzaniga\garrysmod\garrysmod\addons\gmod addons"
$modelname "player/gman_high.mdl"
$model "gman_high_reference" "gman_high_reference.smd" {
flexfile "mdldecompiler_expressions.vta" {
flex "upper_right" frame 2
flex "lower_right" frame 4
flex "upper_left" frame 6
flex "lower_left" frame 8
flex "AU42" frame 9
flexpair "AU1" 1.0 frame 10
flexpair "AU2" 1.0 frame 11
flexpair "AU1AU2" 1.0 frame 12
flexpair "AU4" 1.0 frame 13
flexpair "AU1AU4" 1.0 frame 14
flexpair "AU2AU4" 1.0 frame 15
flexpair "AU12" 1.0 frame 16
flexpair "AU12AU25" 1.0 frame 17
flexpair "AU15" 1.0 frame 18
flexpair "AU17" 1.0 frame 19
flexpair "AU14" 1.0 frame 20
flexpair "AU10" 1.0 frame 21
flex "AU10SL" frame 22
flex "AU16" frame 23
flexpair "AU6" 1.0 frame 24
flexpair "AU9" 1.0 frame 25
flexpair "AU25" 1.0 frame 26
flexpair "AU18" 1.0 frame 27
flexpair "AU22" 1.0 frame 28
flexpair "AU20" 1.0 frame 29
flex "AU32" frame 30
flex "AU24" frame 31
flex "AU38" frame 32
flex "AU31" frame 33
flexpair "AU26" 1.0 frame 34
flexpair "AU27" 1.0 frame 35
flexpair "AU26Z" 1.0 frame 36
flexpair "AU27Z" 1.0 frame 37
flexpair "AU22Z" 1.0 frame 38
flexpair "AU13" 1.0 frame 39
flex "AD96L" frame 40
flex "AD96R" frame 41
flex "AD30L" frame 42
flex "AD30R" frame 43
flex "AD32" frame 44
}
eyeball righteye ValveBiped.Bip01_Head1 -1.120 -3.450 68.180 eyeball_r 1.000 4.000 gman_facehirez 0.630
eyeball lefteye ValveBiped.Bip01_Head1 1.200 -3.450 68.280 eyeball_l 1.000 -4.000 gman_facehirez 0.630
// If you uncomment the following lines the eyes will be closed
// I'm including it anyway in case anyone wants to experiment
// eyelid upper_right "mdldecompiler_expressions.vta" lowerer 2 -0.250000 neutral 2 0.160000 raiser 2 0.310000 split 0.1 eyeball righteye
// eyelid lower_right "mdldecompiler_expressions.vta" lowerer 4 -0.380000 neutral 4 -0.240000 raiser 4 -0.040000 split 0.1 eyeball righteye
// If you uncomment the following lines the eyes will be closed
// I'm including it anyway in case anyone wants to experiment
// eyelid upper_left "mdldecompiler_expressions.vta" lowerer 6 -0.240000 neutral 6 0.160000 raiser 6 0.310000 split -0.1 eyeball lefteye
// eyelid lower_left "mdldecompiler_expressions.vta" lowerer 8 -0.360000 neutral 8 -0.230000 raiser 8 -0.020000 split -0.1 eyeball lefteye
mouth 0 "mouth" ValveBiped.Bip01_Head1 0.000 1.000 0.000
flexcontroller eyelid right_lid_raiser "range" 0.000 1.000
flexcontroller eyelid left_lid_raiser "range" 0.000 1.000
flexcontroller eyelid right_lid_tightener "range" 0.000 1.000
flexcontroller eyelid left_lid_tightener "range" 0.000 1.000
flexcontroller eyelid right_lid_droop "range" 0.000 1.000
flexcontroller eyelid left_lid_droop "range" 0.000 1.000
flexcontroller eyelid right_lid_closer "range" 0.000 1.000
flexcontroller eyelid left_lid_closer "range" 0.000 1.000
flexcontroller eyelid half_closed "range" 0.000 1.000
flexcontroller eyelid blink "range" 0.000 1.000
flexcontroller brow right_inner_raiser "range" 0.000 1.000
flexcontroller brow left_inner_raiser "range" 0.000 1.000
flexcontroller brow right_outer_raiser "range" 0.000 1.000
flexcontroller brow left_outer_raiser "range" 0.000 1.000
flexcontroller brow right_lowerer "range" 0.000 1.000
flexcontroller brow left_lowerer "range" 0.000 1.000
flexcontroller nose right_cheek_raiser "range" 0.000 1.000
flexcontroller nose left_cheek_raiser "range" 0.000 1.000
flexcontroller nose wrinkler "range" 0.000 1.000
flexcontroller nose dilator "range" 0.000 1.000
flexcontroller mouth right_upper_raiser "range" 0.000 1.000
flexcontroller mouth left_upper_raiser "range" 0.000 1.000
flexcontroller mouth right_corner_puller "range" 0.000 1.000
flexcontroller mouth left_corner_puller "range" 0.000 1.000
flexcontroller mouth right_corner_depressor "range" 0.000 1.000
flexcontroller mouth left_corner_depressor "range" 0.000 1.000
flexcontroller mouth chin_raiser "range" 0.000 1.000
flexcontroller phoneme right_part "range" 0.000 1.000
flexcontroller phoneme left_part "range" 0.000 1.000
flexcontroller phoneme right_puckerer "range" 0.000 1.000
flexcontroller phoneme left_puckerer "range" 0.000 1.000
flexcontroller phoneme right_funneler "range" 0.000 2.000
flexcontroller phoneme left_funneler "range" 0.000 2.000
flexcontroller phoneme right_stretcher "range" 0.000 1.000
flexcontroller phoneme left_stretcher "range" 0.000 1.000
flexcontroller phoneme bite "range" 0.000 1.000
flexcontroller phoneme presser "range" 0.000 1.000
flexcontroller phoneme tightener "range" 0.000 1.000
flexcontroller phoneme jaw_clencher "range" 0.000 1.000
flexcontroller phoneme jaw_drop "range" 0.000 2.000
flexcontroller phoneme right_mouth_drop "range" 0.000 1.000
flexcontroller phoneme left_mouth_drop "range" 0.000 1.000
flexcontroller mouth sneer_left "range" 0.000 1.000
flexcontroller mouth right_dimpler "range" 0.000 1.000
flexcontroller mouth left_dimpler "range" 0.000 1.000
flexcontroller mouth right_cheek_puffer "range" 0.000 1.000
flexcontroller mouth left_cheek_puffer "range" 0.000 1.000
flexcontroller mouth mouth_sideways "range" -1.000 1.000
flexcontroller mouth jaw_sideways "range" -1.000 1.000
flexcontroller mouth lip_bite "range" 0.000 1.000
flexcontroller mouth lower_lip "range" 0.000 1.000
flexcontroller head head_rightleft "range" -30.000 30.000
flexcontroller head head_updown "range" -15.000 15.000
flexcontroller head head_tilt "range" -15.000 15.000
flexcontroller eyes eyes_updown "range" -30.000 30.000
flexcontroller eyes eyes_rightleft "range" -30.000 30.000
flexcontroller body body_rightleft "range" -30.000 30.000
flexcontroller chest chest_rightleft "range" -30.000 30.000
flexcontroller head head_forwardback "range" -0.200 0.200
flexcontroller gesture gesture_updown "range" -1.000 1.000
flexcontroller gesture gesture_rightleft "range" -1.000 1.000
localvar biter
%biter = (( bite * ( 1.000 - lip_bite)) + lip_bite)
localvar upper_right_raiser
%upper_right_raiser = ((( right_lid_raiser * ( 1.000 - ( right_lid_droop * 0.800))) * ( 1.000 - right_lid_closer)) * ( 1.000 - blink))
localvar upper_right_neutral
%upper_right_neutral = (((( 1.000 - ( right_lid_droop * 0.800)) * ( 1.000 - right_lid_raiser)) * ( 1.000 - right_lid_closer)) * ( 1.000 - blink))
localvar upper_right_lowerer
%upper_right_lowerer = ( right_lid_closer + ( blink * ( 1.000 - right_lid_closer)))
localvar upper_left_raiser
%upper_left_raiser = ((( left_lid_raiser * ( 1.000 - ( left_lid_droop * 0.800))) * ( 1.000 - left_lid_closer)) * ( 1.000 - blink))
localvar upper_left_neutral
%upper_left_neutral = (((( 1.000 - ( left_lid_droop * 0.800)) * ( 1.000 - left_lid_raiser)) * ( 1.000 - left_lid_closer)) * ( 1.000 - blink))
localvar upper_left_lowerer
%upper_left_lowerer = ( left_lid_closer + ( blink * ( 1.000 - left_lid_closer)))
localvar lower_right_raiser
%lower_right_raiser = right_lid_closer
localvar lower_right_neutral
%lower_right_neutral = ((( 1.000 - right_lid_closer) * ( 1.000 - ( right_lid_tightener * 0.500))) * ( 1.000 - ( right_cheek_raiser * 0.250)))
localvar lower_right_lowerer
%lower_right_lowerer = 0.000
localvar lower_left_raiser
%lower_left_raiser = left_lid_closer
localvar lower_left_neutral
%lower_left_neutral = ((( 1.000 - left_lid_closer) * ( 1.000 - ( left_lid_tightener * 0.500))) * ( 1.000 - ( left_cheek_raiser * 0.250)))
localvar lower_left_lowerer
%lower_left_lowerer = 0.000
%AU1R = (( right_inner_raiser * ( 1.000 - right_outer_raiser)) * ( 1.000 - right_lowerer))
%AU1L = (( left_inner_raiser * ( 1.000 - left_outer_raiser)) * ( 1.000 - left_lowerer))
%AU2R = (( right_outer_raiser * ( 1.000 - right_inner_raiser)) * ( 1.000 - right_lowerer))
%AU2L = (( left_outer_raiser * ( 1.000 - left_inner_raiser)) * ( 1.000 - left_lowerer))
%AU4R = (( right_lowerer * ( 1.000 - right_inner_raiser)) * ( 1.000 - right_outer_raiser))
%AU4L = (( left_lowerer * ( 1.000 - left_inner_raiser)) * ( 1.000 - left_outer_raiser))
localvar AU1AU2AU4R
%AU1AU2AU4R = (( right_inner_raiser * right_outer_raiser) * right_lowerer)
localvar AU1AU2AU4L
%AU1AU2AU4L = (( left_inner_raiser * left_outer_raiser) * left_lowerer)
%AU1AU2R = ((( right_inner_raiser * right_outer_raiser) * ( 1.000 - right_lowerer)) + ( %AU1AU2AU4R / 2.000))
%AU1AU2L = ((( left_inner_raiser * left_outer_raiser) * ( 1.000 - left_lowerer)) + ( %AU1AU2AU4L / 2.000))
%AU1AU4R = ((( right_inner_raiser * ( 1.000 - right_outer_raiser)) * right_lowerer) + ( %AU1AU2AU4R / 2.000))
%AU1AU4L = ((( left_inner_raiser * ( 1.000 - left_outer_raiser)) * left_lowerer) + ( %AU1AU2AU4L / 2.000))
%AU2AU4R = ((( right_outer_raiser * ( 1.000 - right_inner_raiser)) * right_lowerer) + ( %AU1AU2AU4R / 2.000))
%AU2AU4L = ((( left_outer_raiser * ( 1.000 - left_inner_raiser)) * left_lowerer) + ( %AU1AU2AU4L / 2.000))
%AU9R = wrinkler
%AU9L = wrinkler
%AU38 = dilator
localvar lower_lip_active
%lower_lip_active = Bad stack
localvar right_open
%right_open = (((( right_part + right_puckerer) + right_funneler) + ( right_upper_raiser * 0.500)) + %lower_lip_active)
localvar left_open
%left_open = ((((( left_part + left_puckerer) + left_funneler) + ( left_upper_raiser * 0.500)) + %lower_lip_active) + ( sneer_left * 0.500))
localvar right_lip_suppressor
%right_lip_suppressor = (((( 1.000 / %right_open) * ( 1.000 - presser)) * ( 1.000 - %biter)) * ( 1.000 - chin_raiser))
localvar left_lip_suppressor
%left_lip_suppressor = (((( 1.000 / %left_open) * ( 1.000 - presser)) * ( 1.000 - %biter)) * ( 1.000 - chin_raiser))
%AU10R = ( right_upper_raiser * (( right_upper_raiser * %right_lip_suppressor) * 0.500))
%AU10L = ( left_upper_raiser * (( left_upper_raiser * %left_lip_suppressor) * 0.500))
localvar right_scaled_part
%right_scaled_part = ( right_part * ( right_part * %right_lip_suppressor))
localvar left_scaled_part
%left_scaled_part = ( left_part * ( left_part * %left_lip_suppressor))
%AU25R = ( %right_scaled_part * ( 1.000 - right_corner_puller))
%AU25L = ( %left_scaled_part * ( 1.000 - left_corner_puller))
%AU6R = right_cheek_raiser
%AU6L = left_cheek_raiser
%AU12AU25R = ( %right_scaled_part * right_corner_puller)
%AU12AU25L = ( %left_scaled_part * left_corner_puller)
%AU18R = ( right_puckerer * ( right_puckerer * %right_lip_suppressor))
%AU18L = ( left_puckerer * ( left_puckerer * %left_lip_suppressor))
%AU22R = ( right_funneler * ( right_funneler * %right_lip_suppressor))
%AU22L = ( left_funneler * ( left_funneler * %left_lip_suppressor))
%AU17R = Bad stack
%AU17L = Bad stack
localvar right_depressor_suppressor
%right_depressor_suppressor = (( 1.000 / ((((((( %AU18R * 0.800) + ( %AU22R * 0.800)) + %AU17R) + %biter) + right_corner_puller) + right_stretcher) + right_corner_depressor)) * ( 1.000 - ( jaw_drop * 0.500)))
localvar left_depressor_suppressor
%left_depressor_suppressor = (( 1.000 / ((((((( %AU18L * 0.800) + ( %AU22L * 0.800)) + %AU17L) + %biter) + left_corner_puller) + left_stretcher) + left_corner_depressor)) * ( 1.000 - ( jaw_drop * 0.500)))
%AU15R = ( right_corner_depressor * ( right_corner_depressor * %right_depressor_suppressor))
%AU15L = ( left_corner_depressor * ( left_corner_depressor * %left_depressor_suppressor))
localvar right_corner_suppressor
%right_corner_suppressor = (( 1.000 / ((((((( %AU18R * 0.800) + ( %AU22R * 0.800)) + %AU17R) + %biter) + right_corner_puller) + right_stretcher) + right_corner_depressor)) * ( 1.000 - ( jaw_drop * 0.500)))
localvar left_corner_suppressor
%left_corner_suppressor = (( 1.000 / ((((((( %AU18L * 0.800) + ( %AU22L * 0.800)) + %AU17L) + %biter) + left_corner_puller) + left_stretcher) + left_corner_depressor)) * ( 1.000 - ( jaw_drop * 0.500)))
%AU12R = (( right_corner_puller * ( right_corner_puller * %right_corner_suppressor)) * ( 1.000 - right_part))
%AU12L = (( left_corner_puller * ( left_corner_puller * %left_corner_suppressor)) * ( 1.000 - left_part))
%AU20R = ( right_stretcher * ( right_stretcher * %right_corner_suppressor))
%AU20L = ( left_stretcher * ( left_stretcher * %left_corner_suppressor))
localvar right_drop_suppressor
%right_drop_suppressor = ((( 1.000 / (( 0.500 * %right_open) + right_mouth_drop)) * ( 1.000 - presser)) * ( 1.000 - %biter))
localvar left_drop_suppressor
%left_drop_suppressor = ((( 1.000 / (( 0.500 * %left_open) + left_mouth_drop)) * ( 1.000 - presser)) * ( 1.000 - %biter))
localvar right_drop
%right_drop = ( right_mouth_drop * ( right_mouth_drop * %right_drop_suppressor))
localvar left_drop
%left_drop = ( left_mouth_drop * ( left_mouth_drop * %left_drop_suppressor))
%AU10SL = ( sneer_left * (( sneer_left * %left_lip_suppressor) * 0.500))
%AU32 = ( bite * ( 1.000 - lip_bite))
%AD32 = lip_bite
%AU24 = ( presser + (( 1.000 - presser) * tightener))
%AU31 = Bad stack
%AD96L = Bad stack
%AD96R = Bad stack
%AD30L = Bad stack
%AD30R = Bad stack
localvar jaw_overage
%jaw_overage = Bad stack
localvar jaw_underage
%jaw_underage = Bad stack
%AU26R = (( %jaw_underage * ( 1.000 - %right_drop)) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU26L = (( %jaw_underage * ( 1.000 - %left_drop)) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU27R = (( %jaw_underage * %right_drop) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU27L = (( %jaw_underage * %left_drop) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU26ZR = (( %jaw_overage * ( 1.000 - %right_drop)) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU26ZL = (( %jaw_overage * ( 1.000 - %left_drop)) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU27ZR = (( %jaw_overage * %right_drop) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU27ZL = (( %jaw_overage * %left_drop) * ( jaw_drop / ( jaw_clencher + jaw_drop)))
%AU22ZR = Bad stack
%AU22ZL = Bad stack
%AU22R = Bad stack
%AU22L = Bad stack
%AU16 = Bad stack
localvar mouth
%mouth = (((((((((((((((((((( %AU27R * 0.500) + ( %AU27L * 0.500)) + ( %AU27ZR * 0.500)) + ( %AU27ZL * 0.500)) + ( %AU26ZR * 0.350)) + ( %AU26ZL * 0.350)) + ( %AU22R * 0.350)) + ( %AU22L * 0.350)) + ( %AU22ZR * 0.500)) + ( %AU22ZL * 0.500)) + ( %AU18R * 0.250)) + ( %AU18L * 0.250)) + ( %AU25R * 0.350)) + ( %AU25L * 0.350)) + ( %AU32 * 0.500)) + ( %AU12AU25R * 0.500)) + ( %AU12AU25L * 0.500)) + ( %AU16 * 0.600)) + ( %AD32 * 0.500)) + ( %AU10SL * 0.360))
%AU13R = Bad stack
%AU13L = Bad stack
%AU14R = ( right_dimpler * ( 1.000 - %AU13R))
%AU14L = ( left_dimpler * ( 1.000 - %AU13L))
}
$lod 10
{
replacemodel "gman_high_reference" "lod1_gman_high_reference"
}
$lod 20
{
replacemodel "gman_high_reference" "lod2_gman_high_reference"
}
$lod 32
{
replacemodel "gman_high_reference" "lod3_gman_high_reference"
}
$lod 45
{
replacemodel "gman_high_reference" "lod4_gman_high_reference"
}
$shadowlod
{
replacemodel "gman_high_reference" "lod5_gman_high_reference"
}
$cdmaterials "models\Gman\"
$cdmaterials "models\humans\male\"
$hboxset "default"
$hbox 1 "ValveBiped.Bip01_Head1" -1.250 -6.500 -3.190 8.250 3.500 3.310
$hbox 4 "ValveBiped.Bip01_L_UpperArm" 0.000 -2.750 -2.750 12.510 1.750 2.250
$hbox 4 "ValveBiped.Bip01_L_Forearm" 0.000 -2.190 -2.380 13.000 1.810 1.620
$hbox 4 "ValveBiped.Bip01_L_Hand" 0.060 -2.000 -1.500 4.060 1.000 2.500
$hbox 5 "ValveBiped.Bip01_R_UpperArm" 0.000 -3.000 -2.250 12.390 2.000 2.750
$hbox 5 "ValveBiped.Bip01_R_Forearm" -0.500 -2.200 -1.550 12.500 1.800 2.450
$hbox 5 "ValveBiped.Bip01_R_Hand" 0.060 -2.000 -2.500 4.060 1.000 1.500
$hbox 6 "ValveBiped.Bip01_L_Thigh" 0.000 -3.750 -3.250 17.850 3.750 3.250
$hbox 6 "ValveBiped.Bip01_L_Calf" 0.000 -3.510 -3.280 15.640 3.490 2.720
$hbox 6 "ValveBiped.Bip01_L_Foot" -1.070 -2.000 -2.840 5.040 5.000 2.160
$hbox 6 "ValveBiped.Bip01_L_Toe0" -0.500 -3.000 -2.190 2.500 0.000 2.460
$hbox 7 "ValveBiped.Bip01_R_Thigh" 0.000 -3.750 -3.250 17.850 3.750 3.250
$hbox 7 "ValveBiped.Bip01_R_Calf" 0.000 -3.510 -2.820 15.640 3.490 3.180
$hbox 7 "ValveBiped.Bip01_R_Foot" -1.060 -2.010 -2.280 5.050 4.990 2.720
$hbox 7 "ValveBiped.Bip01_R_Toe0" -0.500 -3.000 -2.600 2.500 0.000 2.100
$hbox 3 "ValveBiped.Bip01_Pelvis" -7.500 -5.500 -6.000 7.500 8.500 5.000
$hbox 2 "ValveBiped.Bip01_Spine2" -2.500 -2.500 -7.000 14.500 7.500 7.000
// Model uses material "gman_facehirez.vmt"
// Model uses material "plyr_sheet.vmt"
// Model uses material "tongue.vmt"
// Model uses material "eyeball_l.vmt"
// Model uses material "eyeball_r.vmt"
// Model uses material "lower_teeth.vmt"
// Model uses material "upper_teeth.vmt"
$attachment "eyes" "ValveBiped.Bip01_Head1" 4.30 -3.57 -0.04 rotate 0.00 -80.10 -90.00
$attachment "mouth" "ValveBiped.Bip01_Head1" 1.40 -4.90 0.00 rotate -0.00 -80.00 -90.00
$attachment "chest" "ValveBiped.Bip01_Spine2" 5.00 4.00 -0.00 rotate -0.00 90.00 90.00
$attachment "cameraeye" "ValveBiped.Bip01_Head1" 4.39 -4.02 -1.23 rotate 90.00 -80.17 0.00
$attachment "mouth_left" "ValveBiped.Bip01_Head1" 1.36 -4.39 -0.71 rotate 90.00 -80.24 0.00
$attachment "cheekbone_left" "ValveBiped.Bip01_Head1" 3.23 -4.14 -1.08 rotate 90.00 -80.20 0.00
$attachment "forward" "ValveBiped.forward" 0.00 0.00 0.00 rotate 0.00 0.00 0.00
$attachment "anim_attachment_RH" "ValveBiped.Anim_Attachment_RH" 0.00 0.00 0.00 rotate -90.00 -90.00 0.00
$attachment "anim_attachment_LH" "ValveBiped.Anim_Attachment_LH" 0.00 0.00 0.00 rotate -90.00 -90.00 0.00
$attachment "anim_attachment_head" "ValveBiped.Bip01_Head1" 0.00 0.00 0.00 rotate -90.00 -90.00 0.00
$includemodel "m_anm.mdl"
$surfaceprop "flesh"
$eyeposition -0.000 0.000 70.000
$illumposition 1.302 0.009 35.302
$sequence idle "idle" loop ACT_IDLE 1 fps 30.00
$sequence ragdoll "ragdoll" ACT_DIERAGDOLL 1 fps 30.00
$ikchain rhand ValveBiped.Bip01_R_Hand knee 0.707 0.707 0.000
$ikchain lhand ValveBiped.Bip01_L_Hand knee 0.707 0.707 0.000
$ikchain rfoot ValveBiped.Bip01_R_Foot knee 0.707 -0.707 0.000
$ikchain lfoot ValveBiped.Bip01_L_Foot knee 0.707 -0.707 0.000
$collisionjoints "phymodel.smd" {
$mass 90.0
$inertia 10.00
$damping 0.01
$rotdamping 1.50
$rootbone "valvebiped.bip01_pelvis"
$jointmerge "ValveBiped.Bip01_Pelvis" "ValveBiped.Bip01_Spine1"
$jointconstrain "valvebiped.bip01_spine2" x limit -48.00 48.00 0.00
$jointconstrain "valvebiped.bip01_spine2" y limit -25.00 25.00 0.00
$jointconstrain "valvebiped.bip01_spine2" z limit -25.00 50.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" x limit -39.00 39.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" y limit -79.00 95.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" z limit -93.00 23.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" x limit -30.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" y limit -95.00 84.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" z limit -86.00 26.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" z limit -149.00 4.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" x limit -37.00 37.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" z limit -57.00 59.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" z limit -149.00 4.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" x limit -60.00 60.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" z limit -57.00 70.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" x limit -12.00 12.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" y limit -8.00 75.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" z limit -97.00 32.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" z limit -12.00 126.00 0.00
$jointconstrain "valvebiped.bip01_head1" x limit -20.00 20.00 0.00
$jointconstrain "valvebiped.bip01_head1" y limit -25.00 25.00 0.00
$jointconstrain "valvebiped.bip01_head1" z limit -13.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" x limit -12.00 12.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" y limit -73.00 6.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" z limit -93.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" z limit -8.00 126.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" y limit -19.00 19.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" z limit -15.00 35.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" y limit -25.00 6.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" z limit -15.00 35.00 0.00
$animatedfriction 1.000 400.000 0.500 0.300 0.000
}
Estaremos estudando as partes simples do qc. Na próxima parte falaremos mais.
- Código:
$cd "C:\Users\Maurinho\Documents\3dsMax\export\TECLADO"
$modelname "MAURO\teclado_key.mdl"
$model "studio" "pkey.smd"
$cdmaterials "models\mauro"
$hboxset "default"
$surfaceprop "metal"
$sequence idle "rkey.smd" fps 1.00
$collisionmodel "pkey.smd" {
$concave
$mass 0.2
$inertia 1.00
$damping 0.00
$rotdamping 0.00
}
Comandos que você deve memorizar:
$cd : indica a pasta onde estão seus arquivos SMD.
$modelname : o nome do arquivo do seu modelo (ex: gman.mdl ou HL2\gman.mdl)
$cdmaterials : a pasta dentro de garrysmod\materials em que vão estar seus VMTs.
$surfaceprop : a "superfície" do seu objeto (ex: metal, flesh, wood, etc. Vou ver se consigo uma lista completa)
Falaremos do $model, $sequence e $collisionmodel na próxima parte. O resto dos comandos são padrão (copiar e colar em praticamente todos os seus qcs.)
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 5: COMPILANDO UM PROP
Vamos começar o nosso tutorial propriamente dito, fazendo um simples prop. Isso demora por volta de 30 min.
Para começarmos, você deve ter instalado o StudioMDL, os plugins do Autodesk e o Source SDK. Vamos começar configurando esses programas.
Começando pelo Source SDK. Rode ele na Steam, vai copiar alguns arquivos e irá aparecer a tela principal. Note que está configurado para Team Fortress 2, nós queremos para Garry's Mod. Clique em "Edit Game Configurations", coloque em "Add" e adicione o path do gameinfo.txt do seu GMod (SteamApps\seunome\garrysmod\garrysmod). Pronto.
Agora temos que configurar o StudioMDL, vá em Config - Set Orange Box Tools Path (o path é SteamApps\seunome\sourcesdk\bin\orangebox\bin). Selecione Orange Box (SDK Version) e coloque novamente o path do gameinfo.txt do GMod.
Vamos ao que interessa. Para nosso tutorial, vou usar de exemplo uma simples Morph Ball. Abrindo o arquivo .obj no Max, vemos isso:
Não precisa memorizar o que eu vou falar agora, cobriremos isso de novo em outro capítulo.
O primeiro passo é deletar os objetos que sejam inúteis (se existirem).
Depois temos que juntar tudo em um único objeto:
Clique em um objeto, selecione "Attach" e clique nos outros objetos. Vá apertando OK nas caixas de mensagem.
Agora só temos que redimensionar nosso prop. Faremos isso com a ajuda de um modelo de colisão oficial da Valve.
https://www.dropbox.com/s/le6v2xjki14xr7c/phymodel.max
GUARDE ESSE ARQUIVO, você precisará dele para todos os modelos que fizer!
Vá no menu do Autodesk, Import - Merge. Escolha esse arquivo.
Importe só o smdimport (não vamos precisar dos bones).
Veja que nosso prop está minúsculo:
Usando a ferramenta de redimensionar, vamos colocá-lo num tamanho adequado.
Pode deletar o smdimport agora.
Agora, uma parte importante: aperte SHIFT+T e anote todos os arquivos de imagem que você está usando.
Neste caso, temos apenas um: ball_n.png .
Só falta exportar. Menu do Autodesk - Export - Export. Crie uma pasta (dentro do Documents\3ds Max\export mesmo) e exporte dois arquivos como Valve HL2 SMD:
Um ragdoll.smd (Skeletal Animation)
Um prop.smd (Reference).
Continua na parte 5.2.
Vamos começar o nosso tutorial propriamente dito, fazendo um simples prop. Isso demora por volta de 30 min.
Para começarmos, você deve ter instalado o StudioMDL, os plugins do Autodesk e o Source SDK. Vamos começar configurando esses programas.
Começando pelo Source SDK. Rode ele na Steam, vai copiar alguns arquivos e irá aparecer a tela principal. Note que está configurado para Team Fortress 2, nós queremos para Garry's Mod. Clique em "Edit Game Configurations", coloque em "Add" e adicione o path do gameinfo.txt do seu GMod (SteamApps\seunome\garrysmod\garrysmod). Pronto.
Agora temos que configurar o StudioMDL, vá em Config - Set Orange Box Tools Path (o path é SteamApps\seunome\sourcesdk\bin\orangebox\bin). Selecione Orange Box (SDK Version) e coloque novamente o path do gameinfo.txt do GMod.
Vamos ao que interessa. Para nosso tutorial, vou usar de exemplo uma simples Morph Ball. Abrindo o arquivo .obj no Max, vemos isso:
Não precisa memorizar o que eu vou falar agora, cobriremos isso de novo em outro capítulo.
O primeiro passo é deletar os objetos que sejam inúteis (se existirem).
Depois temos que juntar tudo em um único objeto:
Clique em um objeto, selecione "Attach" e clique nos outros objetos. Vá apertando OK nas caixas de mensagem.
Agora só temos que redimensionar nosso prop. Faremos isso com a ajuda de um modelo de colisão oficial da Valve.
https://www.dropbox.com/s/le6v2xjki14xr7c/phymodel.max
GUARDE ESSE ARQUIVO, você precisará dele para todos os modelos que fizer!
Vá no menu do Autodesk, Import - Merge. Escolha esse arquivo.
Importe só o smdimport (não vamos precisar dos bones).
Veja que nosso prop está minúsculo:
Usando a ferramenta de redimensionar, vamos colocá-lo num tamanho adequado.
Pode deletar o smdimport agora.
Agora, uma parte importante: aperte SHIFT+T e anote todos os arquivos de imagem que você está usando.
Neste caso, temos apenas um: ball_n.png .
Só falta exportar. Menu do Autodesk - Export - Export. Crie uma pasta (dentro do Documents\3ds Max\export mesmo) e exporte dois arquivos como Valve HL2 SMD:
Um ragdoll.smd (Skeletal Animation)
Um prop.smd (Reference).
Continua na parte 5.2.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 5.2: FAZENDO O QC
Vamos agora compilar o modelo, crie um arquivo .qc e copie e cole isso aqui:
$cd: a pasta em que estão seus SMDs.
$modelname: o nome do arquivo MDL.
$model (name) "prop.smd" : comando que indica o modelo, seu nome (pode ser qualquer um, neste caso, studio) e o SMD correspondente.
$cdmaterials: a pasta em que estarão os VMTs (próxima parte).
$surfaceprop: superfície do modelo.
$sequence (name) "ragdoll.smd" fps 1.00 : uma animação blank.
$collisionmodel "prop.smd" : neste caso, o modelo de colisão é o mesmo que o principal.
Faça as alterações necessárias, salve seu .qc e abra o GUIStudioMDL. Selecione Orange Box e Garry's Mod, vá em "Load QC File", carregue seu qc e clique em Compile.
Você agora deve ter um .MDL na pasta garrysmod\models. Agora abra o Source SDK, e vá em Model Viewer (será chamado de HLMV daqui em diante.) Abra seu modelo. Ops. Está tudo roxo!
Mas é porque não temos os VMTs. Vamos ver isso na parte 6.
Vamos agora compilar o modelo, crie um arquivo .qc e copie e cole isso aqui:
- Código:
$cd "C:\Users\Maurinho\Documents\3dsMax\export\OTHERM\SAMUS\BALL"
$modelname "morphball.mdl"
$model "studio" "prop.smd"
$cdmaterials "models\otherm\samusvaria
$hboxset "default"
$surfaceprop "metal"
$sequence idle "ragdoll.smd" fps 1.00
$collisionmodel "prop.smd" {
$concave
$mass 0.2
$inertia 1.00
$damping 0.00
$rotdamping 0.00
}
$cd: a pasta em que estão seus SMDs.
$modelname: o nome do arquivo MDL.
$model (name) "prop.smd" : comando que indica o modelo, seu nome (pode ser qualquer um, neste caso, studio) e o SMD correspondente.
$cdmaterials: a pasta em que estarão os VMTs (próxima parte).
$surfaceprop: superfície do modelo.
$sequence (name) "ragdoll.smd" fps 1.00 : uma animação blank.
$collisionmodel "prop.smd" : neste caso, o modelo de colisão é o mesmo que o principal.
Faça as alterações necessárias, salve seu .qc e abra o GUIStudioMDL. Selecione Orange Box e Garry's Mod, vá em "Load QC File", carregue seu qc e clique em Compile.
Você agora deve ter um .MDL na pasta garrysmod\models. Agora abra o Source SDK, e vá em Model Viewer (será chamado de HLMV daqui em diante.) Abra seu modelo. Ops. Está tudo roxo!
Mas é porque não temos os VMTs. Vamos ver isso na parte 6.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 6: USANDO O VTFEDIT
Vamos lá, agora é hora de aprender a mexer com texturas. Essa parte é curta e simples, mas depois fica complicada pra caramba (em parâmetros avançados de shaders). Comece abrindo o VTFEdit.
Vá em Tools - Convert Folder. Como Input Folder, coloque a pasta em que estão as imagens usadas pelo seu prop (você anotou na parte 5). Como Output Folder, a sua pasta $cdmaterials (garrysmod\materials\models). Deixe Create VMT Files marcado. No To VTF, escreva o nome do seu arquivo (converta um arquivo por vez). No nosso caso, ball_n.png .
Vá até a sua pasta $cdmaterials e verá que tem dois arquivos: um VMT e um VTF. Abra o VMT. Deve ser mais ou menos isso:
Vamos agora entrar no mundo complicado de RAGDOLLING.
Vamos lá, agora é hora de aprender a mexer com texturas. Essa parte é curta e simples, mas depois fica complicada pra caramba (em parâmetros avançados de shaders). Comece abrindo o VTFEdit.
Vá em Tools - Convert Folder. Como Input Folder, coloque a pasta em que estão as imagens usadas pelo seu prop (você anotou na parte 5). Como Output Folder, a sua pasta $cdmaterials (garrysmod\materials\models). Deixe Create VMT Files marcado. No To VTF, escreva o nome do seu arquivo (converta um arquivo por vez). No nosso caso, ball_n.png .
Vá até a sua pasta $cdmaterials e verá que tem dois arquivos: um VMT e um VTF. Abra o VMT. Deve ser mais ou menos isso:
- Código:
"LightmappedGeneric"
{
"$basetexture" "models/otherm/samusvaria/ball_n"
}
- Código:
"VertexLitGeneric"
{
"$basetexture" "models/otherm/samusvaria/ball_n"
"$halflambert" 1
}
Vamos agora entrar no mundo complicado de RAGDOLLING.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 1: OTIMIZANDO
Vamos para o que interessa: ragdolling propriamente dito. Nesse tutorial só estarei demonstrando como fazer ragdolls humanos, se precisar eu faço um pra não-humanos também (é mais complicado).
Para este tutorial, vou demonstrar o ragdolling por meio de um modelo de um personagem conhecido: Solid Snake.
Vamos começar abrindo nosso arquivo .3ds. Vejam que está uma droga.
A primeira coisa a fazer é apertar SHIFT+T, definir os paths das texturas e anotar o nome de todos os arquivos que estão sendo usados, para podermos usar no VTFEdit depois. Lembre-se de deletar os objetos inúteis.
Obs.: seu modelo pode estar sem textura nenhuma. Neste caso, você terá que colocar as texturas manualmente (simplesmente arraste os arquivos para seus respectivos objetos).
O segundo passo é consertar o problema dos polígonos invertidos. Selecione "Element" na opção "Editable Mesh" e selecione os lugares que parecem estar "de dentro pra fora" (no nosso caso, todos).
Em seguida, ache a opção "Flip" e aperte. Voila! (obs: pode ser que o seu modelo esteja muito poligonal. Nesse caso, selecione as partes poligonais e selecione um "Smoothing Group", é uma das últimas opções.)
Faça isso com todos os lugares invertidos. Em seguida, junte tudo em um único objeto. Já estamos na metade do caminho.
Agora, só falta girar o objeto para que ele fique "de frente" (note que ele estava "deitado") e redimensionar com a ajuda do nosso amigo phymodel. Mas isso você já sabe fazer.
Agora é só adicionar os bones, que irei explicar na próxima parte.
Vamos para o que interessa: ragdolling propriamente dito. Nesse tutorial só estarei demonstrando como fazer ragdolls humanos, se precisar eu faço um pra não-humanos também (é mais complicado).
Para este tutorial, vou demonstrar o ragdolling por meio de um modelo de um personagem conhecido: Solid Snake.
Vamos começar abrindo nosso arquivo .3ds. Vejam que está uma droga.
A primeira coisa a fazer é apertar SHIFT+T, definir os paths das texturas e anotar o nome de todos os arquivos que estão sendo usados, para podermos usar no VTFEdit depois. Lembre-se de deletar os objetos inúteis.
Obs.: seu modelo pode estar sem textura nenhuma. Neste caso, você terá que colocar as texturas manualmente (simplesmente arraste os arquivos para seus respectivos objetos).
O segundo passo é consertar o problema dos polígonos invertidos. Selecione "Element" na opção "Editable Mesh" e selecione os lugares que parecem estar "de dentro pra fora" (no nosso caso, todos).
Em seguida, ache a opção "Flip" e aperte. Voila! (obs: pode ser que o seu modelo esteja muito poligonal. Nesse caso, selecione as partes poligonais e selecione um "Smoothing Group", é uma das últimas opções.)
Faça isso com todos os lugares invertidos. Em seguida, junte tudo em um único objeto. Já estamos na metade do caminho.
Agora, só falta girar o objeto para que ele fique "de frente" (note que ele estava "deitado") e redimensionar com a ajuda do nosso amigo phymodel. Mas isso você já sabe fazer.
Agora é só adicionar os bones, que irei explicar na próxima parte.
Última edição por MauroC em Sáb Abr 20, 2013 9:59 am, editado 2 vez(es)
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 2: BONES
Bom, agora que que já temos nosso modelo pronto, é hora de possibilitar o movimento. Para isso vamos ter que criar seu esqueleto.
O esqueleto é basicamente isso: um conjunto de ossos que quando se movimentam, levam alguns vértices juntos. São formados por duas partes: bones e o envelope.
A maioria dos tutoriais te ensina a fazer seus próprios bones, mas nós vamos usar os oficiais do HL2 porque assim temos menos chance de cometer erros.
Comece abrindo seu modelo. Vá em Import - Merge e escolha nosso amiguinho phymodel.max. Só que desta vez, importe tudo.
Agora delete o modelo do phymodel (deixe só os bones) :
Clique com o botão direito no seu modelo, clique em Object Properties e congele ele e deixe transparente:
O próximo passo é um pouquinho complicado: você tem que "encaixar" os bones dentro do seu modelo (use a ferramenta de Girar). Veja como ficou:
Descongele o seu modelo (botão direito - Unfreeze All) e faça ele ficar visível novamente (See-Through no Object Properties). Vá na aba Modify e adicione a ele um modifier Skin:
Agora, temos que adicionar todos os nossos bones para esse Skin:
Acabamos de fazer a primeira parte. Agora, temos que fazer a envelopagem, que é um processo bem complicado.
Primeiro, gire os bones para que seu modelo fique na posição referência (pose-T) :
Se sua reação foi "WTF", parabéns, você é normal. O que aconteceu é que os bones dos braços puxaram alguns vértices do corpo junto. O processo que vamos fazer agora, chamado envelopagem, consiste em determinar quais vértices estão ligados a quais bones (algo análogo no corpo humano seria quais músculos se movem com quais ossos).
Para começar a envelopagem, vá em Skin, Edit Envelope (lembre-se de marcar Select Vertices) e selecione algum bone que esteja com os vértices puxados (você vai ter que fazer envelopagem com todos, até os que estão normais)
Nesse caso, eu selecionei esses vértices que foram puxados para perto da mão:
Mude o Abs. Effect desses vértices para 1,0 (significa que eles acompanharão 100% o movimento da perna). Note que eles voltaram para seus devidos lugares:
Faça a envelopagem com todos os bones até ter um bom resultado (dica: movimente os bones de vez em quando para ver se nenhum vértice está fora de lugar, mas lembre-se de deixá-lo na pose-T). Para as mãos, você pode envelopar todos os vértices para o valvebiped_hand (não use os fingerbones ainda). Veja como ficou:
Pronto! Se você conseguiu fazer um bom trabalho (ou não), seu ragdoll está quase pronto. Lembre-se: para melhores resultados, teste o movimento agora (vai te poupar um trabalhão).
Exporte seu modelo duas vezes:
ragdoll.smd (Skeletal Animation)
reference.smd (Reference)
Bom, agora que que já temos nosso modelo pronto, é hora de possibilitar o movimento. Para isso vamos ter que criar seu esqueleto.
O esqueleto é basicamente isso: um conjunto de ossos que quando se movimentam, levam alguns vértices juntos. São formados por duas partes: bones e o envelope.
A maioria dos tutoriais te ensina a fazer seus próprios bones, mas nós vamos usar os oficiais do HL2 porque assim temos menos chance de cometer erros.
Comece abrindo seu modelo. Vá em Import - Merge e escolha nosso amiguinho phymodel.max. Só que desta vez, importe tudo.
Agora delete o modelo do phymodel (deixe só os bones) :
Clique com o botão direito no seu modelo, clique em Object Properties e congele ele e deixe transparente:
O próximo passo é um pouquinho complicado: você tem que "encaixar" os bones dentro do seu modelo (use a ferramenta de Girar). Veja como ficou:
Descongele o seu modelo (botão direito - Unfreeze All) e faça ele ficar visível novamente (See-Through no Object Properties). Vá na aba Modify e adicione a ele um modifier Skin:
Agora, temos que adicionar todos os nossos bones para esse Skin:
Acabamos de fazer a primeira parte. Agora, temos que fazer a envelopagem, que é um processo bem complicado.
Primeiro, gire os bones para que seu modelo fique na posição referência (pose-T) :
Se sua reação foi "WTF", parabéns, você é normal. O que aconteceu é que os bones dos braços puxaram alguns vértices do corpo junto. O processo que vamos fazer agora, chamado envelopagem, consiste em determinar quais vértices estão ligados a quais bones (algo análogo no corpo humano seria quais músculos se movem com quais ossos).
Para começar a envelopagem, vá em Skin, Edit Envelope (lembre-se de marcar Select Vertices) e selecione algum bone que esteja com os vértices puxados (você vai ter que fazer envelopagem com todos, até os que estão normais)
Nesse caso, eu selecionei esses vértices que foram puxados para perto da mão:
Mude o Abs. Effect desses vértices para 1,0 (significa que eles acompanharão 100% o movimento da perna). Note que eles voltaram para seus devidos lugares:
Faça a envelopagem com todos os bones até ter um bom resultado (dica: movimente os bones de vez em quando para ver se nenhum vértice está fora de lugar, mas lembre-se de deixá-lo na pose-T). Para as mãos, você pode envelopar todos os vértices para o valvebiped_hand (não use os fingerbones ainda). Veja como ficou:
Pronto! Se você conseguiu fazer um bom trabalho (ou não), seu ragdoll está quase pronto. Lembre-se: para melhores resultados, teste o movimento agora (vai te poupar um trabalhão).
Exporte seu modelo duas vezes:
ragdoll.smd (Skeletal Animation)
reference.smd (Reference)
Última edição por MauroC em Sex Abr 05, 2013 3:13 pm, editado 1 vez(es)
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 3: COLLISION MODELS
Essa parte é bem curta. Bem, o jogo precisa de um modo de calcular as colisões entre os objetos. No caso de um prop, seu modelo de colisão é seu modelo de referência. Mas e no caso de um ragdoll, quando a posição dos vértices fica mudando?
Novamente, a maioria dos tutoriais te ensina como fazer seus próprios modelos de colisão, e é um processo meio complicado também. Para ragdolls não-humanos, você tem que criar seus próprios bones e seu próprio modelo de colisão (além de ter que definir todas as jointconstraints, que veremos depois). Como nosso ragdoll é humano, podemos usar o modelo que foi (é) usado para os personagens de HL2.
Abra o nosso caro phymodel.max:
Já foi meio caminho andado. Exporte o seguinte arquivo:
phymodel.smd (Reference)
Pronto! Acabamos essa parte. Seu ragdoll agora está quase pronto para ser compilado. Só falta fazer o .qc (veremos na próxima parte) e converter as texturas, mas esse você já sabe fazer.
Essa parte é bem curta. Bem, o jogo precisa de um modo de calcular as colisões entre os objetos. No caso de um prop, seu modelo de colisão é seu modelo de referência. Mas e no caso de um ragdoll, quando a posição dos vértices fica mudando?
Novamente, a maioria dos tutoriais te ensina como fazer seus próprios modelos de colisão, e é um processo meio complicado também. Para ragdolls não-humanos, você tem que criar seus próprios bones e seu próprio modelo de colisão (além de ter que definir todas as jointconstraints, que veremos depois). Como nosso ragdoll é humano, podemos usar o modelo que foi (é) usado para os personagens de HL2.
Abra o nosso caro phymodel.max:
Já foi meio caminho andado. Exporte o seguinte arquivo:
phymodel.smd (Reference)
Pronto! Acabamos essa parte. Seu ragdoll agora está quase pronto para ser compilado. Só falta fazer o .qc (veremos na próxima parte) e converter as texturas, mas esse você já sabe fazer.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 10: QC DE UM RAGDOLL
Nessa parte vamos aprender como é o .qc de um ragdoll. Basicamente, ele só vai ser diferente em um aspecto: vamos ter que fazer as jointconstraints. Já vou explicar o que é isso. Nosso QC:
Note que temos um bloco gigante $collisionjoints. Esses comandos, em especial o $jointconstrain, determina o quanto o bone pode girar. Usando o HLMV, você pode usar qualquer valor que você quiser, para deixar o seu ragdoll mais rígido ou mais flexível, mas esses que eu coloquei são os padrões para um humano. Portanto, deixe ele assim.
Agora, salve e compile seu modelo, do mesmo jeito que você fez com o prop. Converta todas as texturas e pronto! Seu ragdoll está prontinho para ser usado (verifique se tudo está certo no HLMV antes de usá-lo) e colocado em um addon.
Na próxima parte vamos aprender algumas técnicas para melhorar as texturas do seu modelo.
Nessa parte vamos aprender como é o .qc de um ragdoll. Basicamente, ele só vai ser diferente em um aspecto: vamos ter que fazer as jointconstraints. Já vou explicar o que é isso. Nosso QC:
- Código:
$cd "C:\Users\Maurinho\Documents\3dsMax\export\SSNAKE"
$surfaceprop "flesh"
$modelname "ssnake.mdl"
$cdmaterials "models\MGS"
$model snake "reference.smd"
$sequence ragdoll "ragdoll.smd" FPS 30 activity ACT_DIERAGDOLL 1
$collisionjoints "phymodel.smd" {
$mass 90.0
$inertia 10.00
$damping 0.01
$rotdamping 1.50
$rootbone "valvebiped.bip01_pelvis"
$jointmerge "valvebiped.bip01_pelvis" "valveviped.bip01_spine"
$jointconstrain "valvebiped.bip01_spine2" x limit -48.00 48.00 0.00
$jointconstrain "valvebiped.bip01_spine2" y limit -25.00 25.00 0.00
$jointconstrain "valvebiped.bip01_spine2" z limit -25.00 50.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" x limit -39.00 39.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" y limit -79.00 95.00 0.00
$jointconstrain "valvebiped.bip01_r_upperarm" z limit -93.00 23.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" x limit -30.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" y limit -95.00 84.00 0.00
$jointconstrain "valvebiped.bip01_l_upperarm" z limit -86.00 26.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_forearm" z limit -149.00 4.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" x limit -37.00 37.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_hand" z limit -57.00 59.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_forearm" z limit -149.00 4.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" x limit -60.00 60.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_hand" z limit -57.00 70.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" x limit -97.00 32.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" y limit -12.00 12.00 0.00
$jointconstrain "valvebiped.bip01_r_thigh" z limit -75.00 8.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" x limit -12.00 126.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_calf" z limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_head1" x limit -20.00 20.00 0.00
$jointconstrain "valvebiped.bip01_head1" y limit -25.00 25.00 0.00
$jointconstrain "valvebiped.bip01_head1" z limit -30.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" x limit -93.00 30.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" y limit -12.00 12.00 0.00
$jointconstrain "valvebiped.bip01_l_thigh" z limit -73.00 6.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" x limit -8.00 126.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" y limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_calf" z limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" y limit -19.00 19.00 0.00
$jointconstrain "valvebiped.bip01_l_foot" z limit -15.00 35.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" x limit 0.00 0.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" y limit -25.00 6.00 0.00
$jointconstrain "valvebiped.bip01_r_foot" z limit -15.00 35.00 0.00
$jointcollide valvebiped.bip01_l_forearm valvebiped.bip01_pelvis
$jointcollide valvebiped.bip01_r_forearm valvebiped.bip01_pelvis
$jointcollide valvebiped.bip01_l_forearm valvebiped.bip01_spine2
$jointcollide valvebiped.bip01_r_forearm valvebiped.bip01_spine2
$jointcollide valvebiped.bip01_r_thigh valvebiped.bip01_l_thigh
$jointcollide valvebiped.bip01_r_calf valvebiped.bip01_l_calf
$jointcollide valvebiped.bip01_l_foot valvebiped.bip01_r_foot
$jointcollide valvebiped.bip01_l_foot valvebiped.bip01_r_calf
$jointcollide valvebiped.bip01_r_foot valvebiped.bip01_l_calf
$jointcollide valvebiped.bip01_l_forearm valvebiped.bip01_l_thigh
$jointcollide valvebiped.bip01_l_forearm valvebiped.bip01_r_thigh
$jointcollide valvebiped.bip01_r_forearm valvebiped.bip01_l_thigh
$jointcollide valvebiped.bip01_r_forearm valvebiped.bip01_r_thigh
}
Note que temos um bloco gigante $collisionjoints. Esses comandos, em especial o $jointconstrain, determina o quanto o bone pode girar. Usando o HLMV, você pode usar qualquer valor que você quiser, para deixar o seu ragdoll mais rígido ou mais flexível, mas esses que eu coloquei são os padrões para um humano. Portanto, deixe ele assim.
Agora, salve e compile seu modelo, do mesmo jeito que você fez com o prop. Converta todas as texturas e pronto! Seu ragdoll está prontinho para ser usado (verifique se tudo está certo no HLMV antes de usá-lo) e colocado em um addon.
Na próxima parte vamos aprender algumas técnicas para melhorar as texturas do seu modelo.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
PARTE 11: SHADERS
Bom, até agora, esse era o VMT que você estava utilizando:
$alphatest
Faz um passe alpha na textura. Significa que, se a textura tiver transparência (geralmente, texturas de sobrancelhas, etc), essa transparência será usada no jogo. Note que esse parâmetro não é opcional, você só irá usá-lo quando for necessário.
Uso:
$bumpmap
Indica o bumpmap do material. Um bumpmap é uma textura cinza especial que serve para indicar a profundidade dos lugares na textura (basicamente, ele especifica a difusão da luz no material). Para converter um bumpmap, clique em Generate Normal Map nas opcões de conversão do VTFEdit e desmarque o Create VMT Files.
O bumpmap do Snake, por exemplo:
Uso:
$envmap
O comando envmap simplesmente faz com que seu material tenha reflexão especular, ou seja, ele vai ter propriedades de reflexão de um metal.
Uso:
Ambient Occlusion
Efeito especial de reflexão usado em rostos e olhos. Nota que você deve ter uma textura especial para isso.
Exemplo de ambient occlusion:
Uso:
Phong Reflection
Esse é provavelmente o efeito de reflexão mais complicado. Ele requer uso de três parâmetros: o exponent (determina o "tamanho" do ponto principal de reflexão), o boost (aumenta os efeitos do phong) e os fresnel terms (determinam o tanto de rim lighting).
Uso:
Na próxima parte vamos aprender outro tipo especial de shader, mas, por enquanto, isso é tudo o que você precisa saber.
Bom, até agora, esse era o VMT que você estava utilizando:
- Código:
"VertexLitGeneric"
{
"$basetexture" "models/otherm/samusvaria/ball_n"
"$halflambert" 1
}
$alphatest
Faz um passe alpha na textura. Significa que, se a textura tiver transparência (geralmente, texturas de sobrancelhas, etc), essa transparência será usada no jogo. Note que esse parâmetro não é opcional, você só irá usá-lo quando for necessário.
Uso:
- Código:
"$alphatest" 1
$bumpmap
Indica o bumpmap do material. Um bumpmap é uma textura cinza especial que serve para indicar a profundidade dos lugares na textura (basicamente, ele especifica a difusão da luz no material). Para converter um bumpmap, clique em Generate Normal Map nas opcões de conversão do VTFEdit e desmarque o Create VMT Files.
O bumpmap do Snake, por exemplo:
Uso:
- Código:
"$bumpmap" "models\suatextura"
$envmap
O comando envmap simplesmente faz com que seu material tenha reflexão especular, ou seja, ele vai ter propriedades de reflexão de um metal.
Uso:
- Código:
"$envmap" "env_cubemap"
Ambient Occlusion
Efeito especial de reflexão usado em rostos e olhos. Nota que você deve ter uma textura especial para isso.
Exemplo de ambient occlusion:
Uso:
- Código:
"$ambientocclusion" 1
"$AmbientOcclColor" "[R G B]" //deafult [0.33 0.33 0.33]
"$AmbientOcclTexture" "models\suatextura"
Phong Reflection
Esse é provavelmente o efeito de reflexão mais complicado. Ele requer uso de três parâmetros: o exponent (determina o "tamanho" do ponto principal de reflexão), o boost (aumenta os efeitos do phong) e os fresnel terms (determinam o tanto de rim lighting).
Uso:
- Código:
"$phong" 1
"$phongexponent" 20 //deafult = 5
"$phongboost" 2 //deafult = 1
"$phongfresnelranges" "[X Y Z]" //deafult [0.05 0.5 1], onde X=refletividade no ângulo de visão 0; Y=refletividade no ângulo de visão 45; Z= refletividade no ângulo de visão 90.
Na próxima parte vamos aprender outro tipo especial de shader, mas, por enquanto, isso é tudo o que você precisa saber.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 4: FINGERPOSING
Agora que já fez seu ragdoll e ele está funcionando bem (ou não), você deve estar querendo fazer as partes mais técnicas e estéticas, como os "posings".
Vamos começar com o fingerposing, que é bem simples.
É só você ter todos os bones das duas mãos (mesmo se for um ragdoll sem um braço, precisa ter todos os bones).
Fazer o fingerposing também é fácil. Em vez de colocar a mão inteira pra só um bone, é só fazer a envelopagem dos bones dos dedos. Cada dedo tem três partes. Sabendo disso, com seus conhecimentos de Gmod, acho que dá pra fazer sozinho, né?
Falando sério, não vou entrar em detalhes porque sou horrível nisso. Meu fingerposing sempre sai bugado. Mas é assim que se faz. Fácil, não?
Agora que já fez seu ragdoll e ele está funcionando bem (ou não), você deve estar querendo fazer as partes mais técnicas e estéticas, como os "posings".
Vamos começar com o fingerposing, que é bem simples.
É só você ter todos os bones das duas mãos (mesmo se for um ragdoll sem um braço, precisa ter todos os bones).
Fazer o fingerposing também é fácil. Em vez de colocar a mão inteira pra só um bone, é só fazer a envelopagem dos bones dos dedos. Cada dedo tem três partes. Sabendo disso, com seus conhecimentos de Gmod, acho que dá pra fazer sozinho, né?
Falando sério, não vou entrar em detalhes porque sou horrível nisso. Meu fingerposing sempre sai bugado. Mas é assim que se faz. Fácil, não?
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 5: EYEPOSING
Depois de muita preguiça, finalmente, a parte 5!
Eyeposing na verdade é muito fácil. Você só vai precisar anotar uns números e fazer um cálculo matemático.
Mas vamos começar. A primeira coisa que temos que ter é uma textura para o olho. Agora duplique essa textura. Tenha uma com o nome "eyeball_l" e a outra com o nome "eyeball_r".
Não usarei o modelo do Snake porque ele não tem uma textura do olho própria. Vamos então usar esse ragdoll do Adam Malkovich. Primeiro, você deve selecionar os dois olhos e transformá-los em objetos separados:
Certinho? Arraste as texturas para seus respectivos olhos e junte tudo de novo num objeto só usando o "Attach".
Agora vamos precisar definir um shader especial para os olhos. Até agora temos usado o VertexLitGeneric, que calcula a reflexão dos vetores de luz baseado na geometria triangular da superfície do nosso modelo. Agora vamos aprender a usar um novo shader, chamado EyeRefract.
Converta suas duas texturas, "eyeball_l e "eyeball_r" para VTF. Tenha dois VMTs também, eles serão iguais. Veja como deve ficar seu VMT:
$Iris : a textura do olho propriamente dito.
$EyeballRadius : o raio do olho (deafult 0.5)
$Dilation : o quanto a íris fica dilatada (deafult 0.5)
$AmbientOcclColor : a cor do ambient occlusion (deafult 0.33 0.33 0.33)
O resto deixe igual. Note que tem três texturas especiais, eye_ambient, eye_cornea e eye_reflection_cubemap. Naturalmente, eu disponibilizei esses arquivos para você baixar:
https://www.dropbox.com/s/9xse9ha1zhfiyyt/eye-ambient.vtf
https://www.dropbox.com/s/9aiuuebuvl6onxx/eye-cornea.vtf
https://www.dropbox.com/s/8mrpn64xa91lqc7/eye-reflection-cubemap-.vtf
Agora vamos precisar especificar o eyeposing no qc. Para isso, teremos que encontrar as coordenadas de cada olho. Volte no 3ds Max. Desta vez, escolha selecionar por Vertex, selecione o vértice central de cada olho e copie suas coordenadas:
Agora, teremos que colocar a seguinte linha duas vezes no qc:
side: coloque lefteye ou righteye (se for o olho esquerdo ou direito)
X Y Z: obviamente, as coordenadas que você obteve no 3ds Max.
eye_vmt: o nome da textura do seu olho (eyeball_l ou eyeball_r)
diameter: o diâmetro do olho. Deixe no valor deafult, 1.000
angle: o ângulo que os olhos estarão desfocados. Geralmente, você vai usar um valor de 2 a 4 (olho esquerdo) e -2 a -4 (direito).
texture: isso nem sei porque tem ainda, coloque o nome de qualquer VMT do seu ragdoll.
iris_scale: a escalagem da sua textura, o deafult é mais ou menos 0.65.
Veja como ficou o meu:
Agora chegou a hora do temido cálculo. Temos que fazer um attachment para os olhos, senão eles não serão reconhecidos pelo engine. Para isso, usamos o seguinte comando (fora do $model) :
E agora só falta colocarmos um último parâmetro, que vai dentro do $model, para dizer que queremos que os olhos se movam:
Salve e compile. Pronto! Não foi tão difícil.
Depois de muita preguiça, finalmente, a parte 5!
Eyeposing na verdade é muito fácil. Você só vai precisar anotar uns números e fazer um cálculo matemático.
Mas vamos começar. A primeira coisa que temos que ter é uma textura para o olho. Agora duplique essa textura. Tenha uma com o nome "eyeball_l" e a outra com o nome "eyeball_r".
Não usarei o modelo do Snake porque ele não tem uma textura do olho própria. Vamos então usar esse ragdoll do Adam Malkovich. Primeiro, você deve selecionar os dois olhos e transformá-los em objetos separados:
Certinho? Arraste as texturas para seus respectivos olhos e junte tudo de novo num objeto só usando o "Attach".
Agora vamos precisar definir um shader especial para os olhos. Até agora temos usado o VertexLitGeneric, que calcula a reflexão dos vetores de luz baseado na geometria triangular da superfície do nosso modelo. Agora vamos aprender a usar um novo shader, chamado EyeRefract.
Converta suas duas texturas, "eyeball_l e "eyeball_r" para VTF. Tenha dois VMTs também, eles serão iguais. Veja como deve ficar seu VMT:
- Código:
"EyeRefract"
{
"$Iris" "models/otherm/adamuniform/adam_eye"
"$Envmap" "models\otherm\adamuniform\eye-reflection-cubemap-"
"$AmbientOcclTexture" "models\otherm\adamuniform\eye-ambient"
"$CorneaTexture" "models\otherm\adamuniform\eye-cornea"
"$EyeballRadius" "0.3"
"$Dilation" "0.5"
"$ParallaxStrength" "0.25"
"$CorneaBumpStrength" "1"
"$AmbientOcclusion" "1"
"$AmbientOcclColor" "[0.33 0.33 0.33]"
"$halflambert" 1
"$nodecal" 1
}
$Iris : a textura do olho propriamente dito.
$EyeballRadius : o raio do olho (deafult 0.5)
$Dilation : o quanto a íris fica dilatada (deafult 0.5)
$AmbientOcclColor : a cor do ambient occlusion (deafult 0.33 0.33 0.33)
O resto deixe igual. Note que tem três texturas especiais, eye_ambient, eye_cornea e eye_reflection_cubemap. Naturalmente, eu disponibilizei esses arquivos para você baixar:
https://www.dropbox.com/s/9xse9ha1zhfiyyt/eye-ambient.vtf
https://www.dropbox.com/s/9aiuuebuvl6onxx/eye-cornea.vtf
https://www.dropbox.com/s/8mrpn64xa91lqc7/eye-reflection-cubemap-.vtf
Agora vamos precisar especificar o eyeposing no qc. Para isso, teremos que encontrar as coordenadas de cada olho. Volte no 3ds Max. Desta vez, escolha selecionar por Vertex, selecione o vértice central de cada olho e copie suas coordenadas:
Agora, teremos que colocar a seguinte linha duas vezes no qc:
- Código:
eyeball side ValveBiped.Bip01_Head1 X Y Z eye_vmt diameter angle texture iris_scale
side: coloque lefteye ou righteye (se for o olho esquerdo ou direito)
X Y Z: obviamente, as coordenadas que você obteve no 3ds Max.
eye_vmt: o nome da textura do seu olho (eyeball_l ou eyeball_r)
diameter: o diâmetro do olho. Deixe no valor deafult, 1.000
angle: o ângulo que os olhos estarão desfocados. Geralmente, você vai usar um valor de 2 a 4 (olho esquerdo) e -2 a -4 (direito).
texture: isso nem sei porque tem ainda, coloque o nome de qualquer VMT do seu ragdoll.
iris_scale: a escalagem da sua textura, o deafult é mais ou menos 0.65.
Veja como ficou o meu:
- Código:
eyeball lefteye ValveBiped.Bip01_Head1 0.510 -3.028 68.605 eyeball_l 1.000 4.000 adam_face 0.630
eyeball righteye ValveBiped.Bip01_Head1 -1.962 -3.028 68.605 eyeball_r 1.000 -4.000 adam_face 0.630
Agora chegou a hora do temido cálculo. Temos que fazer um attachment para os olhos, senão eles não serão reconhecidos pelo engine. Para isso, usamos o seguinte comando (fora do $model) :
- Código:
$attachment "eyes" "ValveBiped.Bip01_Head1" X Y Z absolute
E agora só falta colocarmos um último parâmetro, que vai dentro do $model, para dizer que queremos que os olhos se movam:
- Código:
flexcontroller eyes range -45 45 eyes_updown
flexcontroller eyes range -45 45 eyes_rightleft
Salve e compile. Pronto! Não foi tão difícil.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
RAGDOLLING 6: SKINS E BODYGROUPS
Vamos lá pessoal, não deu nem meia página ainda, estamos acabando de começar...
Essa parte é importante, pois ajuda você a economizar espaço (e trabalho)!
Vamos começar falando de skins (ou skingroups).
Vamos imaginar que seu personagem tenha dois estilos de roupa diferentes (ex: um terno e uma roupa normal, sei lá). Na pasta do seu modelo tem duas texturas diferentes. Então o que você faz? Cria dois .MDLs, obviamente!
ERRADO.
Você pode criar um único ragdoll que utiliza as duas texturas como skins diferentes!
Para isso, basta jogar este comando aqui:
Vamos agora explicar o uso. Basicamente, você coloca os VMTs originais na primeira linha e coloca os VMTs da skin nas outras linhas! Você nem precisa especificar os materiais que não mudam!
Exemplos:
Usando skins, você diminui o tamanho do seu addon e o número de modelos que o jogo tem que carregar.
Bodygroups tem uma função similar. Vamos imaginar que o seu personagem tenha um chapéu. Você não vai criar dois ragdolls, um com e um sem chapéu. Você vai fazer um ragdoll com chapéu removível, ou até com vários chapéus.
Vamos usar para este exemplo um modelo da Samus (que eu não alterei, por isso está sem texturas). Veja como está o modelo principal:
Note que ela está careca. Isso é porque vamos ter dois bodygroups diferentes para o cabelo, veja:
Importante: veja como, mesmo sendo o modelo só de parte do ragdoll, você DEVE ter todos os bones nos bodygroups.
Para colocarmos bodygroups no .qc, usamos o seguinte parâmetro:
Um bodygroup "blank" é simplesmente o bodygroup deafult, ou seja, sem nada (neste caso, careca).
Lembrando que um bodygroup não substitui nada no modelo principal (ex: se o seu blank tiver um chapéu, colocar um bodygroup vai fazer com que ele fique com dois chapéus).
Para o nosso exemplo, ficamos com:
Não colocamos um "blank" porque obviamente não queremos ela careca.
Precisaremos separar um modelo em vários SMDs novamente na próxima parte.
Vamos lá pessoal, não deu nem meia página ainda, estamos acabando de começar...
Essa parte é importante, pois ajuda você a economizar espaço (e trabalho)!
Vamos começar falando de skins (ou skingroups).
Vamos imaginar que seu personagem tenha dois estilos de roupa diferentes (ex: um terno e uma roupa normal, sei lá). Na pasta do seu modelo tem duas texturas diferentes. Então o que você faz? Cria dois .MDLs, obviamente!
ERRADO.
Você pode criar um único ragdoll que utiliza as duas texturas como skins diferentes!
Para isso, basta jogar este comando aqui:
- Código:
$texturegroup skinfamilies
{
{ "original1" "original2" ... "originalX" }
{ "replace1_1" "replace1_2" ... "replace1_X" }
{ ... ... ... ... }
{ "replaceX_1" "replaceX_2" ... "replaceX_X" }
}
Vamos agora explicar o uso. Basicamente, você coloca os VMTs originais na primeira linha e coloca os VMTs da skin nas outras linhas! Você nem precisa especificar os materiais que não mudam!
Exemplos:
- Código:
$texturegroup skinfamilies
{
{ "carinha_main" } \\skin deafult
{ "carinha_terno" } \\skin alternativa
}
- Código:
$texturegroup skinfamilies
{
{ "carinha_main" "calça_main" } \\skin deafult
{ "carinha_terno" "calça_terno" } \\skin do terno
{ "carinha_terno" "calça_main" } \\terno com calça normal
}
Usando skins, você diminui o tamanho do seu addon e o número de modelos que o jogo tem que carregar.
Bodygroups tem uma função similar. Vamos imaginar que o seu personagem tenha um chapéu. Você não vai criar dois ragdolls, um com e um sem chapéu. Você vai fazer um ragdoll com chapéu removível, ou até com vários chapéus.
Vamos usar para este exemplo um modelo da Samus (que eu não alterei, por isso está sem texturas). Veja como está o modelo principal:
Note que ela está careca. Isso é porque vamos ter dois bodygroups diferentes para o cabelo, veja:
Importante: veja como, mesmo sendo o modelo só de parte do ragdoll, você DEVE ter todos os bones nos bodygroups.
Para colocarmos bodygroups no .qc, usamos o seguinte parâmetro:
- Código:
$bodygroup name
{
blank
studio "model1.smd"
studio "modelN.smd"
}
Um bodygroup "blank" é simplesmente o bodygroup deafult, ou seja, sem nada (neste caso, careca).
Lembrando que um bodygroup não substitui nada no modelo principal (ex: se o seu blank tiver um chapéu, colocar um bodygroup vai fazer com que ele fique com dois chapéus).
Para o nosso exemplo, ficamos com:
- Código:
$bodygroup hair
{
studio "samus_bob.smd"
studio "samus_ponytail.smd"
}
Não colocamos um "blank" porque obviamente não queremos ela careca.
Precisaremos separar um modelo em vários SMDs novamente na próxima parte.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
FACEPOSING 1: DIVISÃO EM VÁRIOS SMDS
Atenção. Vamos agora entrar em uma parte extremamente chata e difícil do ragdolling: FACEPOSING.
Se você teve dificuldades até agora, adquira um pouco mais de prática antes de prosseguir. Se você acha que ragdolling é uma moleza, continue, mas se prepare para chorar.
No faceposing, vamos ter que criar várias cópias de um modelo, cada uma com uma expressão facial. Para isso, é muito mais fácil fazer cópias apenas do rosto (ocupa menos espaço e fica mais fácil de manusear). Para isso, vamos ter que dividir nosso modelo em dois SMDs (como se fossem bodygroups obrigatórios).
Vamos utilizar novamente o Snake como exemplo. Primeiro, apagamos tudo menos a cabeça e exportamos um SMD (snake_head)
E depois apagamos a cabeça e exportamos outro SMD (snake_main)
Aí no qc, a única coisa que temos que fazer são essas modificações:
Pronto! Faça isso no modelo que você for fazer faceposing.
Na próxima parte veremos como fazer expressões faciais.
Atenção. Vamos agora entrar em uma parte extremamente chata e difícil do ragdolling: FACEPOSING.
Se você teve dificuldades até agora, adquira um pouco mais de prática antes de prosseguir. Se você acha que ragdolling é uma moleza, continue, mas se prepare para chorar.
No faceposing, vamos ter que criar várias cópias de um modelo, cada uma com uma expressão facial. Para isso, é muito mais fácil fazer cópias apenas do rosto (ocupa menos espaço e fica mais fácil de manusear). Para isso, vamos ter que dividir nosso modelo em dois SMDs (como se fossem bodygroups obrigatórios).
Vamos utilizar novamente o Snake como exemplo. Primeiro, apagamos tudo menos a cabeça e exportamos um SMD (snake_head)
E depois apagamos a cabeça e exportamos outro SMD (snake_main)
Aí no qc, a única coisa que temos que fazer são essas modificações:
- Código:
$model snake "reference.smd" \\em vez disso...
$model main "snake_main.smd"
$model head "snake_head.smd" \\fazemos isso!
Pronto! Faça isso no modelo que você for fazer faceposing.
Na próxima parte veremos como fazer expressões faciais.
Última edição por MauroC em Sáb Abr 20, 2013 12:50 pm, editado 1 vez(es)
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
FACEPOSING 2: FAZENDO AS EXPRESSÕES
Bom, agora é hora de fazermos as expressões faciais do nosso personagem. Para isso temos dois métodos:
EDIÇÃO DE VÉRTICES: mais difícil
FACEBONES: mais fácil, mas nem sempre pode ser usada
Vamos começar com edição de vértices, com o nosso conhecido Snake. Abra o SMD só da cabeça e copie o modelo (clique com botão direito - Clone). Vamos colocar o nome de "smile" porque vamos fazer uma expressão de sorriso (o nome que você colocar aqui é o nome que será usado no Garry's Mod!)
Delete a Skin (clique direito - Delete) :
Agora, vá em Editable Mesh - Vertices e mova os vértices para criar uma expressão, assim como eu fiz:
Fazendo agora do outro lado, temos nossa expressão terminada (nota: eu sou uma droga nisso)
Continue fazendo isso até você ter um modelo de cada expressão que você quiser.
Quanto ao método de facebones, você só vai poder usá-lo quando seu modelo já vem com o rosto envelopado (o que aconteceu comigo com os modelos de Other M que baixei). Vamos começar com nosso modelo "blank" (o que está na Skin do ragdoll) e o modelo que vamos editar:
Agora, simplesmente vamos mover os bones para conseguir nossa expressão:
Preste atenção agora. Copie só o modelo (na imagem os bones estão copiados também, mas foi uma cagada minha) e dê um clique direito em Skin - Collapse All:
Pronto! Para fazer mais expressões, continue editando os bones, copie o modelo e Collapse All.
IMPORTANTE: A sua referência para expressões é essa aqui: https://developer.valvesoftware.com/wiki/Character_Facial_Animation_Shapekey_Set
(Flexes oficiais para personagens do HL2)
Claro, não precisa fazer todas, faça apenas as que você achar necessário.
Bom, agora é hora de fazermos as expressões faciais do nosso personagem. Para isso temos dois métodos:
EDIÇÃO DE VÉRTICES: mais difícil
FACEBONES: mais fácil, mas nem sempre pode ser usada
Vamos começar com edição de vértices, com o nosso conhecido Snake. Abra o SMD só da cabeça e copie o modelo (clique com botão direito - Clone). Vamos colocar o nome de "smile" porque vamos fazer uma expressão de sorriso (o nome que você colocar aqui é o nome que será usado no Garry's Mod!)
Delete a Skin (clique direito - Delete) :
Agora, vá em Editable Mesh - Vertices e mova os vértices para criar uma expressão, assim como eu fiz:
Fazendo agora do outro lado, temos nossa expressão terminada (nota: eu sou uma droga nisso)
Continue fazendo isso até você ter um modelo de cada expressão que você quiser.
Quanto ao método de facebones, você só vai poder usá-lo quando seu modelo já vem com o rosto envelopado (o que aconteceu comigo com os modelos de Other M que baixei). Vamos começar com nosso modelo "blank" (o que está na Skin do ragdoll) e o modelo que vamos editar:
Agora, simplesmente vamos mover os bones para conseguir nossa expressão:
Preste atenção agora. Copie só o modelo (na imagem os bones estão copiados também, mas foi uma cagada minha) e dê um clique direito em Skin - Collapse All:
Pronto! Para fazer mais expressões, continue editando os bones, copie o modelo e Collapse All.
IMPORTANTE: A sua referência para expressões é essa aqui: https://developer.valvesoftware.com/wiki/Character_Facial_Animation_Shapekey_Set
(Flexes oficiais para personagens do HL2)
Claro, não precisa fazer todas, faça apenas as que você achar necessário.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
FACEPOSING 3: AUTOKEY
Agora vamos precisar fazer algo chato: Autokey. Isso consiste em colocar vários frames de animação, cada um com uma expressão. Vamos começar adicionando um modifier "Morpher" para o nosso modelo (note que eu fiz mais duas expressões) :
Vamos agora clicar em "Pick Object from Scene":
Selecione cada uma das suas expressões para um canal de morpher diferente (se você não consegue selecionar, é porque tem diferença no número de vértices, você deve ter deletado ou adicionado alguma coisa)
Agora vamos fazer o autokey. Você vai notar que parece fácil, mas é realmente chato quando você tem um modelo com mais de 20 flexes.
Comece selecionando Frame 1, clique no Auto Key e coloque a primeira expressão a 100% e as outras a zero:
Nota: mesmo as expressões que estão a 0% DEVEM TER O QUADRADINHO VERMELHO. Se não tiverem, irão ocorrer glitches no seu faceposing (devido ao intertweening automático do 3ds Max).
Vamos ir para o frame 2 e repetir o processo:
E novamente para o frame 3:
Agora saia do Auto Key e pronto! (imagine fazer isso com 20 frames e 20 flexes...) Agora, para exportar, selecione seu modelo principal e os bones da Skin do ragdoll (os valvebipeds) e vá em Export Selected - Source Vertex Animation (VTA)
Agora só falta colocar isso no qc.
Agora vamos precisar fazer algo chato: Autokey. Isso consiste em colocar vários frames de animação, cada um com uma expressão. Vamos começar adicionando um modifier "Morpher" para o nosso modelo (note que eu fiz mais duas expressões) :
Vamos agora clicar em "Pick Object from Scene":
Selecione cada uma das suas expressões para um canal de morpher diferente (se você não consegue selecionar, é porque tem diferença no número de vértices, você deve ter deletado ou adicionado alguma coisa)
Agora vamos fazer o autokey. Você vai notar que parece fácil, mas é realmente chato quando você tem um modelo com mais de 20 flexes.
Comece selecionando Frame 1, clique no Auto Key e coloque a primeira expressão a 100% e as outras a zero:
Nota: mesmo as expressões que estão a 0% DEVEM TER O QUADRADINHO VERMELHO. Se não tiverem, irão ocorrer glitches no seu faceposing (devido ao intertweening automático do 3ds Max).
Vamos ir para o frame 2 e repetir o processo:
E novamente para o frame 3:
Agora saia do Auto Key e pronto! (imagine fazer isso com 20 frames e 20 flexes...) Agora, para exportar, selecione seu modelo principal e os bones da Skin do ragdoll (os valvebipeds) e vá em Export Selected - Source Vertex Animation (VTA)
Agora só falta colocar isso no qc.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
FACEPOSING 4: FLEXES NO QC
Vamos agora colocar o faceposing no qc. Não é tão difícil assim.
Vamos começar definindo um $attachment para a cabeça:
Temos agora que definir os flexes, e isso pode ser meio chato. Primeiro, coloque este comando: (ATENÇÃO: TUDO DAQUI PRA FRENTE ESTÁ DENTRO DO $model head)
Comecemos agora a escrever os flexes. Um flex é escrito em três linhas assim:
number: o frame em que essa expressão está
Então, as expressões que fizemos na última parte ficariam assim:
Apesar de não termos feito isso, é de costume colocar um flex "blank" de vez em quando (para evitar bugs) mas isso nem sempre é necessário.
Vamos agora colocar o faceposing no qc. Não é tão difícil assim.
Vamos começar definindo um $attachment para a cabeça:
- Código:
$attachment "anim_attachment_head" "ValveBiped.Bip01_Head1" X Y Z absolute
Temos agora que definir os flexes, e isso pode ser meio chato. Primeiro, coloque este comando: (ATENÇÃO: TUDO DAQUI PRA FRENTE ESTÁ DENTRO DO $model head)
- Código:
flexfile "path"
Comecemos agora a escrever os flexes. Um flex é escrito em três linhas assim:
- Código:
flex "name" frame number
flexcontroller "phoneme" "name" "range" 0 1
%name = name
number: o frame em que essa expressão está
Então, as expressões que fizemos na última parte ficariam assim:
- Código:
flexfile "samus_expressions.vta"
flex "smile" frame 1
flexcontroller "phoneme" "smile" "range" 0 1
%smile = smile
flex "mouth_open" frame 2
flexcontroller "phoneme" "mouth_open" "range" 0 1
%mouth_open = mouth_open
flex "mad" frame 3
flexcontroller "phoneme" "mad" "range" 0 1
%mad = mad
Apesar de não termos feito isso, é de costume colocar um flex "blank" de vez em quando (para evitar bugs) mas isso nem sempre é necessário.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
FINALIZANDO
Obrigado por acompanhar e ler este tutorial, que demorou muito tempo para ficar pronto. Eu espero que você possa cada vez mais acumular conhecimentos com a prática, e que possa fazer muitos addons para Garry's Mod.entrega um diploma
-MauroC
DÚVIDAS E PERGUNTAS E OUTROS AFINS: PODEM COMENTAR
Obrigado por acompanhar e ler este tutorial, que demorou muito tempo para ficar pronto. Eu espero que você possa cada vez mais acumular conhecimentos com a prática, e que possa fazer muitos addons para Garry's Mod.
-MauroC
DÚVIDAS E PERGUNTAS E OUTROS AFINS: PODEM COMENTAR
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
Krl, fico mt bom mesmo asuaushaus
seu desenho tbm XD
Mas, antes de fazer tudo isso aí, eu preciso de um model certo?Mas os q eu quero n tem em lugar nenhum.Aonde q eu crio um?
seu desenho tbm XD
Mas, antes de fazer tudo isso aí, eu preciso de um model certo?Mas os q eu quero n tem em lugar nenhum.Aonde q eu crio um?
Re: Tutorial de Ragdolling
Parte 2. Você pode criar um no 3ds Max (se você souber fazer modelagem 3D) ou conseguir um na internet, com os métodos que eu coloquei lá (especialmente o Models Resource, tem bastante coisa legal lá).
EDIT: Se você não conseguiu achar, eu posso te ajudar a ripar eles diretamente do jogo, é só me dar um toque na steam.
EDIT: Se você não conseguiu achar, eu posso te ajudar a ripar eles diretamente do jogo, é só me dar um toque na steam.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
Caramba, isso ta muito bom ! não tive tempo de ler ele completo mas pretendo, ta nos favoritos aqui. Parabéns.
ElGringo- Special Member
- Inscrição : 11/05/2012
Emprego/lazer : Professor
Localização : Santa Catarina
Re: Tutorial de Ragdolling
UHULL!!! Pena q perdi o primeiro comentario UHAESHUASE
Mas foi por um boa causa =3
Esse tutorial ta simplesmente FODA! Belissima traduçao de portugues maravilhoso e mto bem organizada!!! (Desculpa pelos acentos aih #teclado #ruim)
Esse tutorial n sai do ar ATE a minha MORTE! AUHSEHuasE
Amanha vou tomar uns cuidados com as imgs dele e divulgar =D
Vou salvar tb comigo ele todo editado certinho pra caso caia um meteoro no Forumeiros eu ainda possa te devolver o seu trabalho.
E, cara, eu dou um muito obrigado falando por todos nos!!! Pode ter certeza que nao tem outro tutorial em pt br como esse seu por ai. Sua contribuicao foi / vai ser mto boa para a comunidade =DD
Eu mesmo vou fazer um "teste de qualidade" nele qnd puder asuhehuase
A gente tem uns projetos legais de ragdolls aqui parados q nem começamos por razoes de noobice...
Ai, mto obrigado de novo =')
Vou tentar espalhar ao maximo seu post pra q as pessoas possam encontrar de boa!
Mas foi por um boa causa =3
Esse tutorial ta simplesmente FODA! Belissima traduçao de portugues maravilhoso e mto bem organizada!!! (Desculpa pelos acentos aih #teclado #ruim)
Esse tutorial n sai do ar ATE a minha MORTE! AUHSEHuasE
Amanha vou tomar uns cuidados com as imgs dele e divulgar =D
Vou salvar tb comigo ele todo editado certinho pra caso caia um meteoro no Forumeiros eu ainda possa te devolver o seu trabalho.
E, cara, eu dou um muito obrigado falando por todos nos!!! Pode ter certeza que nao tem outro tutorial em pt br como esse seu por ai. Sua contribuicao foi / vai ser mto boa para a comunidade =DD
Eu mesmo vou fazer um "teste de qualidade" nele qnd puder asuhehuase
A gente tem uns projetos legais de ragdolls aqui parados q nem começamos por razoes de noobice...
Ai, mto obrigado de novo =')
Vou tentar espalhar ao maximo seu post pra q as pessoas possam encontrar de boa!
Re: Tutorial de Ragdolling
Valeu pessoal, eu queria que ficasse o melhor possível: objetivo, fácil de entender e com bastante ajuda visual. Vejo que eu consegui!
Podem testar e aplicar esse tutorial o quanto quiserem. Claro, tem 99% de chance que nas primeiras vezes vocês vão fazer alguma cagada, afinal, nos meus primeiros dias, eu era horrível nisso e meus ragdolls eram podres pra caramba...
E isso me traz a outro tópico: engenharia reversa faz maravilhas. Eu só melhorei nisso porque eu fiz muita engenharia reversa em inúmeros modelos.
E Xala, só 20% (as partes mais importantes) são traduzidas. O resto vem da minha experiência, tanto no ragdolling tanto como "professor"...
Mas, enfim, valeu pessoal, é ótimo poder passar os conhecimentos para frente.
Podem testar e aplicar esse tutorial o quanto quiserem. Claro, tem 99% de chance que nas primeiras vezes vocês vão fazer alguma cagada, afinal, nos meus primeiros dias, eu era horrível nisso e meus ragdolls eram podres pra caramba...
E isso me traz a outro tópico: engenharia reversa faz maravilhas. Eu só melhorei nisso porque eu fiz muita engenharia reversa em inúmeros modelos.
E Xala, só 20% (as partes mais importantes) são traduzidas. O resto vem da minha experiência, tanto no ragdolling tanto como "professor"...
Mas, enfim, valeu pessoal, é ótimo poder passar os conhecimentos para frente.
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
AEW! Conforme prometi: Tutorial divulgado!!!
http://gmbrblog.blogspot.com.br/2011/10/tutoriais.html
http://steamcommunity.com/groups/gmbr2#announcements/detail/1568652965077289154
https://www.facebook.com/gmbroficial
Primeiramente vou deixar só aí, depois vou por mais links por aí na net.
EDIT:
CASO ALGUM DIA AS IMAGENS DO POST SUMAM!!!
Backup das imagens: http://www.mediafire.com/?cgztbmb9pou1noc
http://gmbrblog.blogspot.com.br/2011/10/tutoriais.html
http://steamcommunity.com/groups/gmbr2#announcements/detail/1568652965077289154
https://www.facebook.com/gmbroficial
Primeiramente vou deixar só aí, depois vou por mais links por aí na net.
EDIT:
CASO ALGUM DIA AS IMAGENS DO POST SUMAM!!!
Backup das imagens: http://www.mediafire.com/?cgztbmb9pou1noc
Re: Tutorial de Ragdolling
E uma perguntinha só: vocês gostariam que eu fizesse um tutorial de como fazer animações no 3ds Max (para sourcemodding), outro de como fazer ragdolls não-humanos e um de NPCs e Playermodels?
MauroC- Staff
- Inscrição : 11/02/2013
Idade : 25
Emprego/lazer : Gênio/Estudante
Localização : Na vigésima sétima dimensão
Re: Tutorial de Ragdolling
LoL, quanta coisa Oo
Faz o q vc quiser, a gente agradece =P
Só cuidado com o seu tempo aí pq eu sei q essas coisas consomem a sua alma UHASEUASE
Faz o q vc quiser, a gente agradece =P
Só cuidado com o seu tempo aí pq eu sei q essas coisas consomem a sua alma UHASEUASE
Tópicos semelhantes
» Tutorial composição
» [VÍDEO TUTORIAL] Expression2
» Tutorial - Color Correction
» Tutorial de um prop simples
» [VIDEO TUTORIAL] Básicos do Wiremod
» [VÍDEO TUTORIAL] Expression2
» Tutorial - Color Correction
» Tutorial de um prop simples
» [VIDEO TUTORIAL] Básicos do Wiremod
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|