Adding Flexes to Bodygroups: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{orphan}}
[[Category:Modeling]]
[[Category:Modeling]]
{{note|This only works for exporting models in the .DMX format. There's not really a workaround for this using .SMD, so make sure to always export your models in .DMX.}}
{{note|This fix only works with models exported in the .dmx binary type.}}




[[File:Flex.png|thumb|right|Models that don't use this fix may have extra duplicate flexes that don't do anything at all.]]
[[File:Flex.png|thumb|right|Models that don't use this fix may have redundant duplicate flexes.]]
If you are modelling characters with toggable meshes, you may run up to a problem where you will not be able to use flexes/shapekeys on bodygroup models.
 
An example for this is a model with separate head bodygroups, that's meant to have flex controllers assigned to it.
There's an issue in Source with flexes (shapekeys) applied on bodygroup meshes that effectively makes them useless. This is frequent,for example, on models that have head bodygroup variations with flex controllers assigned to them.  
To fix this we are going to use Blender, preferably the latest versions.


== The fix ==
== The fix ==
Assuming you have already created the Shapekeys for your model,and that you have some experience with Blender beforehand, have installed the necessary tools for model editing (crowbar, blender source tools), simply split the mesh (select the vertices and press P on edit mode) that will be used as a separate bodygroup.  
You will need Blender and the other essential source exporting tools (Crowbar, Blender Source Tools) for this fix.
{{note|in order for this to work, both the base model (in my case, the body) '''must''' share the same shapekeys. If they don't, join (select both, CTRL+J) the bodygroup mesh with the base mesh and then separate them again (Hit P  in edit mode) and it should work.}}
 
Assuming the shape keys already exist, split the mesh that will be used as a separate bodygroup.  
 
{{note|The bodygroup mesh and the main mesh '''must''' share the same shapekeys. If they don't, join the bodygroup mesh with the base mesh and then separate them again.}}
[[File:Flexproperties blender.png|thumb|right|Location of the flex properties panel in 2.7x and the latest version]]
[[File:Flexproperties blender.png|thumb|right|Location of the flex properties panel in 2.7x and the latest version]]


Now in order to ship bodygroups with flexes on them, select the '''separate bodygroup mesh''', go to the flex properties panel and set it from "Simple" to "Advanced".
To ship bodygroups with flex controllers, select the mesh you're using as the bodygroup and then go to the flex properties panel and set it from "Simple" to "Advanced".
Do not do these steps for the '''Base''' mesh. Do this only for the bodygroups that will receive the flex controllers.
Next, create a .txt file with the following:
Next, create a .txt file with the following:
<pre>
<pre>
Line 36: Line 38:
</pre>
</pre>


Save this file somewhere and paste its location on the box that says "Controller Source", still on the bodygroup.
Save this file somewhere and paste its location on the box that says "Controller Source", in the bodygroup's properties.
Then simply export your .DMX meshes. You'll get a warning that says there are missing shapekeys but that can be ignored.
Then export your .DMX meshes. You'll get a warning that says there are missing shapekeys but that can be ignored.
Compile your model using Crowbar and this fix should work.
Compile your model using Crowbar and this fix should work.


[[File:Flex2.png|thumb|Result after the fix]]
[[File:Flex2.png|thumb|Result after the fix]]
== Stereo Flexes ==
In order for stereo flexes to work with this method, you will need to manually split the stereo flexes on the mesh(es) without controllers defined into "[flexname]L" and "[flexname]R" versions, with only the left and right sides affected respectively.
{{todo|Tested on Binary 2, Model 1 format for export. Some formats ''might'' need "left_" and "right_" prefixes instead? (Would these not work because of [[Flex_animation#Corrective_shapes|corrective shapes]]?)}}


== References ==  
== References ==  
https://web.archive.org/web/20200710074830/https://steamcommunity.com/app/1840/discussions/0/2153224488982782040/
https://web.archive.org/web/20200710074830/https://steamcommunity.com/app/1840/discussions/0/2153224488982782040/

Latest revision as of 11:29, 9 August 2024

Note.pngNote:This fix only works with models exported in the .dmx binary type.


Models that don't use this fix may have redundant duplicate flexes.

There's an issue in Source with flexes (shapekeys) applied on bodygroup meshes that effectively makes them useless. This is frequent,for example, on models that have head bodygroup variations with flex controllers assigned to them.

The fix

You will need Blender and the other essential source exporting tools (Crowbar, Blender Source Tools) for this fix.

Assuming the shape keys already exist, split the mesh that will be used as a separate bodygroup.

Note.pngNote:The bodygroup mesh and the main mesh must share the same shapekeys. If they don't, join the bodygroup mesh with the base mesh and then separate them again.
Location of the flex properties panel in 2.7x and the latest version

To ship bodygroups with flex controllers, select the mesh you're using as the bodygroup and then go to the flex properties panel and set it from "Simple" to "Advanced". Next, create a .txt file with the following:

<!-- dmx encoding keyvalues2 1 format model 1 -->
"DmElement"
{
	"id" "elementid" "12345678-1234-1234-1234-012345678910"
	"name" "string" "root"
	"combinationOperator" "DmeCombinationOperator"
	{
		"id" "elementid" "01234567-8910-1112-1314-151617181920"
		"name" "string" "combinationOperator"
		"controls" "element_array" []
		"controlValues" "vector3_array" []
		"controlValuesLagged" "vector3_array" []
		"usesLaggedValues" "bool" "0"
		"dominators" "element_array" []
		"targets" "element_array" []
	}
}

Save this file somewhere and paste its location on the box that says "Controller Source", in the bodygroup's properties. Then export your .DMX meshes. You'll get a warning that says there are missing shapekeys but that can be ignored. Compile your model using Crowbar and this fix should work.

Result after the fix

Stereo Flexes

In order for stereo flexes to work with this method, you will need to manually split the stereo flexes on the mesh(es) without controllers defined into "[flexname]L" and "[flexname]R" versions, with only the left and right sides affected respectively.

Todo: Tested on Binary 2, Model 1 format for export. Some formats might need "left_" and "right_" prefixes instead? (Would these not work because of corrective shapes?)

References

https://web.archive.org/web/20200710074830/https://steamcommunity.com/app/1840/discussions/0/2153224488982782040/