Guide:Hair Mod File Setup: Difference between revisions

Jump to navigation Jump to search
m
Line 76: Line 76:


Public\Autosnapping_Template\Content\Assets\Characters\[PAK]_Hair\_merged.lsf.lsx this is where you will find our file in the Template
Public\Autosnapping_Template\Content\Assets\Characters\[PAK]_Hair\_merged.lsf.lsx this is where you will find our file in the Template


         <region id="VisualBank">
         <region id="VisualBank">
Line 126: Line 125:
location to vanilla hairs merged when unpacked with Multitool. Multitool\UnpackedData\Shared\Public\Shared\Content\Assets\Characters\[PAK]_Hair
location to vanilla hairs merged when unpacked with Multitool. Multitool\UnpackedData\Shared\Public\Shared\Content\Assets\Characters\[PAK]_Hair


If you copied that whole section from the hair you used you can probably skip a few steps here but I will still go through them.
If you copied that whole section from the hair you used you can probably skip a few steps here but I will still go through them. If I skip a line this means you can keep that at the vanilla value.


                     <attribute id="BoundsMax" type="fvec3" value="0.1584038 1.846514 0.167948" />
                     <attribute id="BoundsMax" type="fvec3" value="0.1584038 1.846514 0.167948" />
Line 136: Line 135:


You want this line to have a unique uuid. Either use multitool to generate a new uuid or an extension/plugin for your program. Such as those mentioned in the tools section of this page.
You want this line to have a unique uuid. Either use multitool to generate a new uuid or an extension/plugin for your program. Such as those mentioned in the tools section of this page.
                    <attribute id="Name" type="LSString" value="AT_Hair01" />
You can give this any name you want in the value section. This is just an internal name.
                    <attribute id="NeedsSkeletonRemap" type="bool" value="True" />
This line is what tells the game whether the asset in this case hair is autosnapping or not.
* True = Autosnapping
* False = Non Autosnapping
                    <attribute id="ScalpMaterialId" type="FixedString" value="55534266-4ce2-39d1-d2dd-04a8ec90e841" />
This line determines the scalp material your hair uses. Best to use the one your base hair used but feel free to play around to find the right one. (as of 24.11.23 some hairs in the game files don't have a scalp ID, larian is aware of this bug)
                    <attribute id="SkeletonResource" type="FixedString" value="78d8b5f0-726c-232f-a357-3d05c4b3b859" />
SkeletonResource is normally blank in the game files. However if making an autosnapping hair assigning the skeleton id from the skeleton your hair uses in this line will allow you to skip the conform to original gr2 in lslib. Which is normally needed if having more than two parts to your hair mesh.
                    <attribute id="SourceFile" type="LSString" value="Generated/Public/Autosnapping_Template/[PAK]_Autosnapping_Template/AT_Test.GR2" />
This is the path to your GR2 in your mods folders.
* Make sure to use / and not \
* always start the path from your Generated folder
* double check your meshes extension in the folder is .GR2 not .gr2
                    <attribute id="Template" type="FixedString" value="Generated/Public/Autosnapping_Template/[PAK]_Autosnapping_Template/AT_Test.Dummy_Root.0" />
Same again so feel free to copy and paste your path from before to this line.
* Do not remove .Dummy_Root.0 from the line
* this line does not need .GR2 at the end
                        <node id="AnimationWaterfall">
                            <attribute id="Object" type="FixedString" value="" />
                        </node>
                        <node id="Base">
                            <children>
                                <node id="Tags">
                                    <attribute id="Object" type="FixedString" value="Hair" />
                                </node>
                            </children>
                        </node>
This section is another section where you want to be copying from one of the hairs you used to make the hair.
                        <node id="Objects">
                            <attribute id="LOD" type="uint8" value="0" />
                            <attribute id="MaterialID" type="FixedString" value="89b063ff-7bf3-44a8-7e7d-41b29d0dd469" />
                            <attribute id="ObjectID" type="FixedString" value="AT_Test.AT_Test_Mesh.0" />
                        </node>
This section is the parts that makeup our mesh in the GR2. So if you have 3 mesh parts you want 3 of these sections. But you want this part
                            <attribute id="MaterialID" type="FixedString" value="89b063ff-7bf3-44a8-7e7d-41b29d0dd469" />
The value here matching to the MaterialID so same line from the hair you used for that part. If they are using the same materials you can keep this the same for each new section you make.
However when making a new section make sure to also update "_Mesh.0" by increasing the number by 1.
For example:
                        <node id="Objects">
                            <attribute id="LOD" type="uint8" value="0" />
                            <attribute id="MaterialID" type="FixedString" value="89b063ff-7bf3-44a8-7e7d-41b29d0dd469" />
                            <attribute id="ObjectID" type="FixedString" value="AT_Test.AT_Test_Mesh.0" />
                        </node>
                        <node id="Objects">
                            <attribute id="LOD" type="uint8" value="0" />
                            <attribute id="MaterialID" type="FixedString" value="89b063ff-7bf3-44a8-7e7d-41b29d0dd469" />
                            <attribute id="ObjectID" type="FixedString" value="AT_Test.AT_Test_Mesh.1" />
                        </node>
In blender when you assigned the export order here:
[[File:Exportorder.webp]]
Where this says 1 that in our merged is that first block so .0
* .0 = 1
* .1 = 2
* .3 = 3


== Character Creation Folder ==
== Character Creation Folder ==
381
edits

Navigation menu