We have a Steam curator now. You should be following it. https://store.steampowered.com/curator/44994899-RPGHQ/

[BG3][Resource] How to Change NPC Visuals

Game development hub. Projects, modding, and resources.
Post Reply
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

[BG3][Resource] How to Change NPC Visuals

Post by orinEsque »

This is work in progress :)

Index
  1. OrinEsque's Data Mined Cheatsheets
  2. Prerequisites
  3. Find and Extract NPC's CharacterVisuals code.
  4. Swap Body Model & Animations
  5. Swap Head
  6. Swap Hair Model
  7. Add Horn, Tail, Fangs, Wings
  8. Swap Armor/Clothing
  9. Change Hair, Skin, Eye Color
  10. How to change Portraits
  11. Turning your Visual Changes into a Mod

Good to know: Larian's Shorthand for races

1.OrinEsque's Data Mined Cheatsheets
Hidden Content
This board requires you to be registered and logged-in to view hidden content.

[back to index]
2. Prerequisites
This guide assumes you know how to use BG3 Multimodders tool (BG3MT), unpacked your game data and know how to use the tool's search function. If not, read Getting Started with BG3 Modding.

[back to index]
3. Find and Extract NPC's CharacterVisuals file.
In this particular guide we will turn Lucretious into a bearded dwarf using code only.
  1. Open BGMT and Search Index for "Lucretious" (do not place any filters for file types).
  2. Notice that unlike before, there is no [PAK]_CharacterVisuals\_merged.lsf.lsx in the results. This is because Lucretious is not called by real his name in code.
    Image
  3. Open the results where it says \Levels\***\Characters\_merged.lsx.lsf using notepad++
  4. Ctrl+F and search for "Lucretious". First hit will be "EQP_WYR_Lucretious".
    Image
  5. Copy the UUID of the CharacterVisualResourceID and search for it using BGMT Search Index. This time you will find the [PAK]_CharacterVisuals file.
  6. Open the [PAK]_CharacterVisuals/_merged.lsf.lsx file using notepad++
  7. Search for the UUID we copied before. This will take you to Lucretious' Visuals
  8. Copy to a new file everything starting from "<node id=Resource>" (line 651003) to the corresponding "</node>" (line 651448).
    ► Show Spoiler
  9. Go to the top of the merged.lsf.lsx file and grab the starting parent tags before the first <node id="Resource"> and add it to the line before <node id=Resource> in your new file.
  10. Go to the bottom of the merged.lsf.lsx file and grab the ending parent tags after the paired </node> of the last <node id="Resource"> (in this case the last 4 lines of the file).
    ► Show Spoiler
  11. Save this somewhere as a .lsf.lsx file with a name of your choice. E.g.. lucretious.lsf.lsx. I'll describe where this goes later.

Faster Way to Find Characters
  1. Download the NPC_Lookup Table from the downloads above (need to be logged in)
  2. Open the spreadsheet in Microsoft Excel
  3. Hit Ctrl+F and search for "Lucretious". It will take you to the following row immediately.
    Image
  4. Copy the CharacterVisualResourceID and paste it in BG3MT search Index and it will show give you the required CharacterVisuals file among the results on first try.
Last edited by orinEsque on April 10th, 2024, 00:51, edited 102 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
4. Swap Body & Animations
Now that we extracted Lucretious' Character Visuals we'll change the 3D model of her body, and the corresponding body animations.
  1. Open lucretious.lsf.lsx that we made earlier in Notepad++
  2. Now look for the words "BaseVisuals" & "BodySetVisuals"
  3. Changing the UUID for BodySetVisuals will change the 3D model of Lucretious' Body.
  4. Changing the UUID for BaseVisuals will change Lucretious' Body Animations.
    Image
  5. Easiest way to get the UUIDs you need is to use my BodySetVisuals & BaseVisuals Cheatsheets.
  6. Search for "dwarf" in race column and "male" in gender column and you will find the UUIDs.
  7. Here is the BaseVisuals UUID from BaseVisuals Cheatsheet
    Image
  8. Here is the BodySetVisuals UUID BodySetVisuals Cheatsheet
    Image
  9. Copy and paste these UUIDs to Lucretious' BaseVisuals and BodySetVisuals respectively in your CharacterVisuals file ( lucretious.lsf.lsx ) like so:
    Image

Finding the UUIDs Manually
► Show Spoiler
Last edited by orinEsque on March 5th, 2024, 00:43, edited 24 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
5. Swap Head
  • Open Lucretious.lsf.lsx that we created before.
  • In the file, search for "Head" (include the quotation marks in your search).
    Image
  • Now we want to replace the UUID under head with the UUID of a dwarf head.
  • Easiest way to find a dwarf head UUID is to use my Spreadsheet for Heads.
  • Look for a head with dwarf race/species and male gender.
    Image
  • Copy and Paste one of the VisualResource in place of the "Head" UUID in the Lucretious.lsf.lsx.
Finding Head UUID manually
► Show Spoiler


[back to index]
6. Swap Hair Model
This is very similar to how you find a head model
  • Open Lucretious.lsf.lsx that we created before.
  • Search for "Hair" (include the quotation marks in your search).
  • Now we want to replace the UUID in this section with the UUID of a hair style of your choice.
    Image
  • Easiest way to do this is to use my Spreadsheet for Hairs.
  • Look up the name of a hairstyle in your character creator
  • Search for it in the ingameText column. Because we are looking for hair suitable for a short race, keep looking until you find a hair that has "Hair DWR" in the Slot column and "Male" in the gender column.
  • Copy the UUID from the VisualResourceID column and paste it in place of the "Hair" UUID in the Lucretious.lsf.lsx.
Last edited by orinEsque on March 5th, 2024, 19:52, edited 23 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
7. Add Horns, Tail, Fangs & Teeth

Adding Extra Slots for Horns, Tails etc
  1. Open Lucretious.lsf.lsx that we created before.
  2. Search for "Slot" (include quotation marks)
    Image
  3. Lucretious doesn't have any demonic features so we need to add slots for Tail, Fangs teeth.
  4. To add a new slot just duplicate one of the existing slots and change Slot name and UUID as you desire. (See below)
Adding Horns
  1. Open up the Spreadsheet Horns, Tail, Fangs & Wings
  2. In the horn section you will find that there's no horns specific for dwarves. (blender maybe required to correct horn position).
  3. For tutorial purposes lets pick the horn named "TIF_CHD_NKD_Horns_A" (i.e Tiefling child naked horn A).
  4. The spreadsheet says Slot is "Horns". So change the Slot value in Lucretious.lsf.lsx to match.
  5. Replace the VisualResource value to the corresponding VisualResourceID from the spreadsheet
    Image
Adding Tail
  1. Open up the Spreadsheet Horns, Tail, Fangs & Wings
  2. In the Tail section you will find that there's no tail specific for dwarves. (blender maybe required to correct tail position).
  3. For tutorial purposes lets pick the tail named "TIF_CHD_NKD_Body_A_Tail" (where CHD is child).
  4. The spreadsheet says Slot is "NakedBody". So change the Slot value in Lucretious.lsf.lsx to match.
  5. Replace the VisualResource value to the corresponding VisualResourceID from the spreadsheet
    Image
  6. Important: If your NPC is a tiefling, or your gave him a Tiefling BodySetVisuals, you don't need to give him a tail separately.
Adding Fangs
  1. Open up the Spreadsheet for Horns, Tail, Fangs & Wings
  2. In the Fangs section you will find that there are fangs for gnomes. (this maybe suitable for dwarves (untested))
  3. For tutorial purposes lets pick the fangs named "GNO_M_NKD_Head_C_Vampire_Fangs".
  4. The spreadsheet says Slot is "Headwear". So change the Slot value in Lucretious.lsf.lsx to match.
  5. Replace the VisualResource value to the corresponding VisualResourceID from the spreadsheet
    Image
Adding Wings
  1. Open up the Spreadsheet Horns, Tail, Fangs & Wings
  2. There are no Wings for dwarves, you would have to add new wings assets to the game by resizing existing wings in blender to fit the dwarf body.
  3. If this were a regular sized character, you would pick one of the wings from the Wings spreadsheet and use the "Slot" and VisualResourceID given there as we have done for Fangs, tail and horns.
Last edited by orinEsque on March 5th, 2024, 22:11, edited 17 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
8. Swap Armor/Clothing
  1. Open Lucretious.lsf.lsx that we created before.
  2. Search for "Slot" (include the quotation marks in your search).
    Image
  3. This section contains inventory "Slot"s whose value could be "Body"/"Footwear"/"Headwear"/"Gloves"/"Underwear"/"Private Parts" etc. These are the clothing/armor the NPC is wearing. "Body" can occur multiple times if the outfit is modular.
  4. To keep things simple give this new Lucretia the same outfit but suitable for Dwarves. To do this we have to look up what each of these Slot's UUIDs are.
  5. Copy one of the UUID's that I underlined e.g. "978ca733-f6c2-bc57-5449-42380d1747b9", and search for it in the Clothing/Armor Spreadsheet
    Image
  6. Search for the same UUID. This specific ones takes you to an outfit named: HUM_FS_ARM_Desire_Dress
  7. "HUM_FS_" stands for human female strong. Delete that part and copy everything after, i.e. ARM_Desire_Dress
  8. Search for "ARM_Desire_Dress" in the spreadsheet and you will find that another version of the dress exists but only for regular human sized females not dwarves or males.
  9. Let's then look for a different mage outfit. In Subtype column look for "Robe".
  10. I'll go with the one named "Simple Robe" in the ingameText column. Find the version of the robe for a Male Dwarf
    Image
  11. Notice the robe has two components, the Body and the Pants.
  12. Go to Lucretious.lsf.lsx and replace the UUID we started with, with the UUID for the Body component of simple robe.
  13. One of other two "Body" Slots for Lucretious is taken up by ARM_Desire_Pants. Replace the UUID with that of the Simple Robe Pants
  14. Delete the last "Body" Slot as it corresponds to ARM_Desire_Shoulder, as Simple Robe doesn't have a shoulder component
    Image
  15. If you follow the UUID for Lucretious' Footwear slot, you will find that it's called HUM_FS_ARM_Footwear_Leather_D. If you search for ARM_Footwear_Leather_D in the spreadsheet you will find a DWR_M_ARM_Footwear_Leather_D. This pair will fit the dwarven Lucretious. The process is similar for other slots as well.
Finding Clothing Manually
► Show Spoiler
Last edited by orinEsque on March 5th, 2024, 20:19, edited 12 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
9. Change Color of Hair, Skin, Eyes
  1. Open up the Lucretious.lsx.lsf file that we made before.
  2. Search for 02Skin. You should now see the MaterialPresets Section.
    Image
  3. Here you will find color presets for different things defined by the MapKeys:
    • Skin color = 02Skin Properties
    • Hair=03Hair
    • Eye color = 06Eyes
  4. If you want to change them you have to alter the UUID for the MaterialPresetResource to something else. You can find existing presets for Skin, Hair or Eye in my Spreadsheets
  5. Note: sometimes skin/eye/hair presets maybe missing because they are defined differently. But you can overwrite that by copy pasting the entire eye section I've marked above and changing the eye present to the one you want. This also applies to skin and hair color.

[back to index]
10. How to Change Portraits
All the portraits are in DDS format within the following locations.
Gustav_Textures.pak Mods\Gustav\GUI\Assets\Portraits
Gustav_Textures.pak Mods\GustavDev\GUI\Assets\Portraits
Shared.pak Mods\Shared\GUI\Assets\Portraits
Shared.pak Mods\SharedDev\GUI\Assets\Portraits

Find an NPC's Portrait
  1. Open Lucretious.lsf.lsx we made before.
  2. Copy her "ID" and search for it using BG3MT.
    Image
  3. You will find a .DDS file within Gustav_Textures
    Image
Portrait Generation using Ninja Ripper
  1. Install Ninja Ripper 1.7.1 - Download
  2. Find the VisualResourceID for an origin character, e.g. Wyll. You want the one that says "ORIGIN_Wyll" (not devil)
  3. Make a copy of Lucretious.lsf.lsx, e.g. Lucretious_portrait.lsf.lsx file earlier. Open it.
  4. Replace this ID with ORIGIN_Wyll's VisualResourceID using the NPCFinder Spreadsheet.
  5. Pack the mod.
  6. Drop it in your Mod Manager.
  7. Set up your ninja ripper to open dx11 version of bg3.exe
    Image
  8. Click "Settings" and specify your Rip Key for Textures. That's the only one you need for portraits.
  9. "Run" the game through NinjaRipper
  10. Create a new game, Select Wyll as your player character. Start game.
  11. You will find that this wyll and his portrait looks like lucretious now!
  12. Press the Rip Key for Textures. This should dump the files you need into the Output directory you specified in Ninja Ripper.
  13. Open up your output folder, and look for the .DDS file visually using windows explorer.
  14. You want this DDS file to overwrite Lucretious' icon in location we identified before: (Gustav_Textures\Mods\GustavDev\GUI\Assets\Portraits)
  15. To match this create the following folder within your mod: myFirstMod-v1.0\Mods\GustavDev\GUI\Assets\Portraits.
    Note: For portraits you cannot prevent an override by renaming "GustavDev" to your mod name like you can with LSF files. But this does not matter since you are only changing specific portraits with specific names.
  16. Rename your ripped DDS file to that of the original: "eb90eea1-afd3-4ad5-c6ee-79f26fcb8c26-EQP_WYR_Lucretious_(Icon_Human_Female_Strong).DDS"
  17. Place in in the Portraits folder you just created.
  18. Delete the Lucretious_portrait.lsf.lsx file (so wyll doesn't get overwritten)
  19. Repack your mod.
Portrait Generation using Screenshots
1. Take an ingame screenshot.
1. Install DDS file plugin for Photoshop (https://fnordware.blogspot.com/2014/09/ ... s-and.html)
2. Open original .DDS file in Photoshop
3. Paste in your screenshot of the NPC
4. Save with no changes to DDS file format.
5. WARNING: Photoshop saves your file as .dds (small letter). BG3 expects the file to be .DDS (capitals). You will need to manually check that the file extension is upper case. Otherwise the override won't work.

Turn based-combat, Character Creation, and portraits of transformed version of your Companions/Origins rely on these DDS files
Portraits in game of untransformed Companions/Origins is actually obtained from your live in game 3D model and is unaffected by the Portraits folder. So you need to rely on a level up to refresh the portrait.



[back to index]
Larian's Shorthand for races
  • DGB=Dragonborn
  • DWR=Dwarf
  • GTY=Githiyanki
  • HEL=Half Elf
  • HFL=Halfling
  • HUM=Human
  • TIF=Tiefling
  • ELF=Elf
  • HRC=Half Orc
Last edited by orinEsque on March 6th, 2024, 17:35, edited 16 times in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

[back to index]
10. Turning your Visual Changes into a Mod
Now that you are done editing your Lucretious.lsf.lsx. We want to move it to your mod package. This section assumes you have created the basic file structure required to create a mod package. Let's continue assuming your mod name is myFirstMod
  1. Your current file structure should look as follows:
    Image
  2. Now create this folder structure under myFirstMod-v1.0
    Public/myFirstMod/Content/[PAK]_CharacterVisuals

    Notice that CharacterVisual lsx files normally live in 4 different place in the base game. You are mimicking this file structure exactly, except the part in bold should be your mod's "Folder" name.
    • Public/Gustav/Content/[PAK]_CharacterVisuals/_merged.lsf
    • Public/GustavDev/Content/[PAK]_CharacterVisuals/_merged.lsf
    • Public/Shared/Content/[PAK]_CharacterVisuals/_merged.lsf
    • Public/SharedDev/Content/[PAK]_CharacterVisuals/_merged.lsf
  3. Move Lucretious.lsf.lsx to the [PAK]_CharacterVisuals folder. If you created everything correctly the structure of your mod should look like this:
    Image
    You can get this tree by opening myFirstMod-v1.0 as a workspace in Notepad++. If your structure looks nothing like this, consult the tutorial on basic file structure required to create a mod package
  4. Now you can drop the myFirstMod-v1.0 folder into the blue area in BG3MT.
    Image
  5. This should create myFirstMod-v1.0.zip.
  6. Drop this zip into mod manager > Move to the left > export load order
  7. If you did everything correctly Lucretious' new looks should show up in-game


[back to index]
Editing Virtual Textures
Let's assume you want to extract and edit the texture for the "Simple Robe" worn by a Female Human Mage.

Find and Extract the Code pointing to the Mesh

We will be creating a new robe with the same 3D meshes but assign different texture to the meshes.
  1. Look for the VisualResourceID for Simple Robe in the "Armour & Clothing" spreadsheet.
    Image
  2. Open BG3MT and search for the VisualResourceID.
  3. In the results you should look for [PAK]_Female_Clothing or [PAK]_Female_Armor
    Image
  4. Open the lsf.lsx file using notepad++ and search for the same VisualResourceID
  5. This will take you to a VisualBank resource that looks like this (first attribute has "AttachBone")
    Image
  6. Copy this resource and put it in a new file called NewRobeTexture.lsf.lsx. Then add headers and footers as indicated.

    Code: Select all

    <!--header start-->
    <?xml version="1.0" encoding="utf-8"?>
    <save>
    	<version major="4" minor="0" revision="9" build="0" lslib_meta="v1,bswap_guids" />
    	<region id="VisualBank">
    		<node id="VisualBank">
    			<children>
    			<!--header end-->
    			<!--resource start-->
    				<node id="Resource">
    					<attribute id="AttachBone" type="FixedString" value="" />
    					<attribute id="AttachmentSkeletonResource" type="FixedString" value="" />
    					<attribute id="BlueprintInstanceResourceID" type="FixedString" value="" />
    					<attribute id="BoundsMax" type="fvec3" value="0.6168748 1.63359 0.2678758" />
    					<attribute id="BoundsMin" type="fvec3" value="-0.6182736 0.2625153 -0.2551202" />
    					<attribute id="ClothColliderResourceID" type="FixedString" value="" />
    					<attribute id="HairPresetResourceId" type="FixedString" value="" />
    					<attribute id="HairType" type="uint8" value="0" />
    					<attribute id="ID" type="FixedString" value="4084d9c1-de9e-bb68-f0bc-0395ad80357b" />
    					<attribute id="MaterialType" type="uint8" value="13" />
    					<attribute id="Name" type="LSString" value="HUM_F_ARM_Robe_A_Body" />
    					<attribute id="NeedsSkeletonRemap" type="bool" value="False" />
    					<attribute id="RemapperSlotId" type="FixedString" value="" />
    					<attribute id="ScalpMaterialId" type="FixedString" value="" />
    					<attribute id="SkeletonResource" type="FixedString" value="" />
    					<attribute id="SkeletonSlot" type="FixedString" value="" />
    					<attribute id="Slot" type="FixedString" value="Body" />
    					<attribute id="SoftbodyResourceID" type="FixedString" value="" />
    					<attribute id="SourceFile" type="LSString" value="Generated/Public/Shared/Assets/Characters/_Models/Humans/_Female/Resources/HUM_F_ARM_Robe_A_Body.GR2" />
    					<attribute id="SupportsVertexColorMask" type="bool" value="True" />
    					<attribute id="Template" type="FixedString" value="Generated/Public/Shared/Assets/Characters/_Models/Humans/_Female/Resources/HUM_F_ARM_Robe_A_Body.Dummy_Root.0" />
    					<attribute id="_OriginalFileVersion_" type="int64" value="144115207403209033" />
    					<children>
    						<node id="AnimationWaterfall">
    							<attribute id="Object" type="FixedString" value="" />
    						</node>
    						<node id="Base" />
    						<node id="ClothParams">
    							<attribute id="AngularDrag" type="fvec3" value="0.0001 0.0001 0.0001" />
    							<attribute id="AngularInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="AnimDriveDampingForce" type="float" value="75" />
    							<attribute id="AnimDriveSpringForce" type="float" value="225" />
    							<attribute id="AnimInfluenceMultiplier" type="float" value="1" />
    							<attribute id="AtmosphericWindEnabled" type="bool" value="False" />
    							<attribute id="BendingStiffness" type="float" value="1" />
    							<attribute id="CentrifugalInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="ClothMainWindFrequency" type="float" value="0" />
    							<attribute id="ClothMainWindSpeed" type="float" value="0" />
    							<attribute id="ClothMainWindVariance" type="float" value="0" />
    							<attribute id="ClothMaxWindDirectionOffset" type="float" value="0" />
    							<attribute id="ClothWindDirectionOffsetFrequency" type="float" value="0" />
    							<attribute id="ClothWindSpeed" type="float" value="0" />
    							<attribute id="CollisionMassScale" type="float" value="1" />
    							<attribute id="CompressionLimit" type="float" value="0.8" />
    							<attribute id="Damping" type="fvec3" value="0.04 0.04 0.04" />
    							<attribute id="DragCoefficient" type="float" value="0.4" />
    							<attribute id="EnableCCD" type="bool" value="False" />
    							<attribute id="EnableVirtualParticles" type="bool" value="False" />
    							<attribute id="FluidDensity" type="float" value="0.1" />
    							<attribute id="Friction" type="float" value="0.1" />
    							<attribute id="FrontalWindSpeed" type="float" value="0" />
    							<attribute id="FrontalWindVariance" type="float" value="0" />
    							<attribute id="LiftCoefficient" type="float" value="0.01" />
    							<attribute id="LinearDrag" type="fvec3" value="0.0001 0.0001 0.0001" />
    							<attribute id="LinearInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="LinearStiffness" type="float" value="1" />
    							<attribute id="OverrideAtmosphericWind" type="bool" value="False" />
    							<attribute id="SelfCollisionDistance" type="float" value="0" />
    							<attribute id="SelfCollisionStiffness" type="float" value="0" />
    							<attribute id="SolverFrequency" type="float" value="30" />
    							<attribute id="StiffnessFrequency" type="float" value="350" />
    							<attribute id="StiffnessMultiplier" type="float" value="1" />
    							<attribute id="StretchLimit" type="float" value="1.2" />
    							<attribute id="TetherConstraintScale" type="float" value="1" />
    							<attribute id="TetherConstraintStiffness" type="float" value="1" />
    							<attribute id="UUID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh.2" />
    						</node>
    						<node id="ClothParams">
    							<attribute id="AngularDrag" type="fvec3" value="0.0001 0.0001 0.0001" />
    							<attribute id="AngularInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="AnimDriveDampingForce" type="float" value="75" />
    							<attribute id="AnimDriveSpringForce" type="float" value="225" />
    							<attribute id="AnimInfluenceMultiplier" type="float" value="1" />
    							<attribute id="AtmosphericWindEnabled" type="bool" value="False" />
    							<attribute id="BendingStiffness" type="float" value="1" />
    							<attribute id="CentrifugalInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="ClothMainWindFrequency" type="float" value="0" />
    							<attribute id="ClothMainWindSpeed" type="float" value="0" />
    							<attribute id="ClothMainWindVariance" type="float" value="0" />
    							<attribute id="ClothMaxWindDirectionOffset" type="float" value="0" />
    							<attribute id="ClothWindDirectionOffsetFrequency" type="float" value="0" />
    							<attribute id="ClothWindSpeed" type="float" value="0" />
    							<attribute id="CollisionMassScale" type="float" value="1" />
    							<attribute id="CompressionLimit" type="float" value="0.8" />
    							<attribute id="Damping" type="fvec3" value="0.04 0.04 0.04" />
    							<attribute id="DragCoefficient" type="float" value="0.4" />
    							<attribute id="EnableCCD" type="bool" value="False" />
    							<attribute id="EnableVirtualParticles" type="bool" value="False" />
    							<attribute id="FluidDensity" type="float" value="0.1" />
    							<attribute id="Friction" type="float" value="0.1" />
    							<attribute id="FrontalWindSpeed" type="float" value="0" />
    							<attribute id="FrontalWindVariance" type="float" value="0" />
    							<attribute id="LiftCoefficient" type="float" value="0.01" />
    							<attribute id="LinearDrag" type="fvec3" value="0.0001 0.0001 0.0001" />
    							<attribute id="LinearInertia" type="fvec3" value="0.5 0.5 0.5" />
    							<attribute id="LinearStiffness" type="float" value="1" />
    							<attribute id="OverrideAtmosphericWind" type="bool" value="False" />
    							<attribute id="SelfCollisionDistance" type="float" value="0" />
    							<attribute id="SelfCollisionStiffness" type="float" value="0" />
    							<attribute id="SolverFrequency" type="float" value="30" />
    							<attribute id="StiffnessFrequency" type="float" value="350" />
    							<attribute id="StiffnessMultiplier" type="float" value="1" />
    							<attribute id="StretchLimit" type="float" value="1.2" />
    							<attribute id="TetherConstraintScale" type="float" value="1" />
    							<attribute id="TetherConstraintStiffness" type="float" value="1" />
    							<attribute id="UUID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh_LOD1.5" />
    						</node>
    						<node id="ClothProxyMapping">
    							<children>
    								<node id="Object">
    									<attribute id="MapKey" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh.2" />
    									<children>
    										<node id="MapValue">
    											<children>
    												<node id="Object">
    													<attribute id="ClosestVertices" type="ScratchBuffer" value="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" />
    													<attribute id="Name" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Mesh.1" />
    													<attribute id="NbClosestVertices" type="int32" value="4428" />
    												</node>
    											</children>
    										</node>
    									</children>
    								</node>
    								<node id="Object">
    									<attribute id="MapKey" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh_LOD1.5" />
    									<children>
    										<node id="MapValue">
    											<children>
    												<node id="Object">
    													<attribute id="ClosestVertices" type="ScratchBuffer" value="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" />
    													<attribute id="Name" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Mesh_LOD1.4" />
    													<attribute id="NbClosestVertices" type="int32" value="4428" />
    												</node>
    											</children>
    										</node>
    									</children>
    								</node>
    							</children>
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="0" />
    							<attribute id="MaterialID" type="FixedString" value="8e81efd2-f7e0-0a04-6b32-9101c28b6af3" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Bracers_Mesh.0" />
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="0" />
    							<attribute id="MaterialID" type="FixedString" value="4bf29629-687c-5330-bce8-8d22432941c8" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Mesh.1" />
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="0" />
    							<attribute id="MaterialID" type="FixedString" value="9e2966c7-b61c-4bc1-bef1-a79cb5fde067" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh.2" />
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="1" />
    							<attribute id="MaterialID" type="FixedString" value="8e81efd2-f7e0-0a04-6b32-9101c28b6af3" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Bracers_Mesh_LOD1.3" />
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="1" />
    							<attribute id="MaterialID" type="FixedString" value="4bf29629-687c-5330-bce8-8d22432941c8" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Mesh_LOD1.4" />
    						</node>
    						<node id="Objects">
    							<attribute id="LOD" type="uint8" value="1" />
    							<attribute id="MaterialID" type="FixedString" value="9e2966c7-b61c-4bc1-bef1-a79cb5fde067" />
    							<attribute id="ObjectID" type="FixedString" value="HUM_F_ARM_Robe_A_Body.HUM_F_ARM_Robe_A_Body_Cloth_Mesh_LOD1.5" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="Torso" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="upperarm" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="decolletage_02" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="lowerarm" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="Shoulders" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="Underwear_Bra" />
    						</node>
    						<node id="VertexColorMaskSlots">
    							<attribute id="Object" type="FixedString" value="Nipple Covers" />
    						</node>
    					</children>
    				</node>			
    				<!--footer start-->
    			</children>
    		</node>
    	</region>
    </save>			
    <!--footer end-->			
    
  7. Scroll down until you find <node id="Objects">
  8. Notice this robe is composed of 3 main objects, "Robe_A_Bracers", "Robe_A_Body" & "Robe_A_Body_Cloth"
    Image
    The first 2 are self explanatory. But any mesh ending with "_Cloth" designates an invisible mesh that is used to control the movement of the cloth (cloth physics). Unless you alter the robe mesh in blender, there is no need to touch this. Let's extract the texture for "Robe_A_Body" for now.
  9. Notice each object has a MaterialID. This is the texture and other visual parameters of the cloth. Search for this MaterialID in Notepad++
  10. This should take you to a MaterialBank resource whose first attribute is "DiffusionProfileUUID". Note: sometimes this is simply missing, because the MaterialID is present in a different race/ gender's [PAK] file. Usually you'll find what you need in the Human Male version of the same item.
    Image
  11. Scroll down till you find "VirtualTextureParameters"
  12. Copy this resource and paste it after </region> in NewRobeTexture.lsf.lsx. Add the Material Bank region id and node id tags before and after the resource. The portion we paste into NewRobeTexture.lsf.lsx, including MaterialBank tags, is below:

    Code: Select all

    	<!--MaterialBankHeader start-->
    	<region id="MaterialBank">
    		<node id="MaterialBank">
    			<!--MaterialBankHeader end-->
    			<children>
    				<node id="Resource">
    					<attribute id="DiffusionProfileUUID" type="FixedString" value="" />
    					<attribute id="ID" type="FixedString" value="4bf29629-687c-5330-bce8-8d22432941c8" />
    					<attribute id="MaterialType" type="uint8" value="13" />
    					<attribute id="Name" type="LSString" value="HUM_F_ARM_Robe_A_Body" />
    					<attribute id="SourceFile" type="LSString" value="Public/Shared/Assets/Materials/Characters/CHAR_BASE_VertCut_VT.lsf" />
    					<attribute id="_OriginalFileVersion_" type="int64" value="144115207403209030" />
    					<children>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="0.7" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Armor_Dirt_Sharpness" />
    							<attribute id="Value" type="float" value="0.7" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="0.5" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Armor_Blood_Sharpness" />
    							<attribute id="Value" type="float" value="0.5" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="4" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="False" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Dirt_AO_Sharpness" />
    							<attribute id="Value" type="float" value="4" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="4" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="False" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Blood_AO_Sharpness" />
    							<attribute id="Value" type="float" value="4" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="0" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Dirt" />
    							<attribute id="Value" type="float" value="0" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="0" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Blood" />
    							<attribute id="Value" type="float" value="0" />
    						</node>
    						<node id="ScalarParameters">
    							<attribute id="BaseValue" type="float" value="0.5" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ParameterName" type="FixedString" value="Reflectance" />
    							<attribute id="Value" type="float" value="0.5" />
    						</node>
    						<node id="Texture2DParameters">
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ID" type="FixedString" value="8f1f209a-dd37-4531-b1ee-5e81c1d169cc" />
    							<attribute id="ParameterName" type="FixedString" value="VertexColor_MSK" />
    						</node>
    						<node id="Texture2DParameters">
    							<attribute id="Enabled" type="bool" value="True" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="01 Texture Map" />
    							<attribute id="ID" type="FixedString" value="949ed002-24d5-c042-52bc-3c163b03445d" />
    							<attribute id="ParameterName" type="FixedString" value="MSKColor" />
    						</node>
    						<node id="Texture2DParameters">
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="" />
    							<attribute id="ID" type="FixedString" value="2765e270-52ce-6f45-eddf-d0451042b54c" />
    							<attribute id="ParameterName" type="FixedString" value="" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.151058 0.2932161 0.4877652" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Cloth_Primary" />
    							<attribute id="Value" type="fvec3" value="0.151058 0.2932161 0.4877652" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.1701384 0.04614884 0.04614884" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Cloth_Secondary" />
    							<attribute id="Value" type="fvec3" value="0.1701384 0.04614884 0.04614884" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.07176144 0.06190747 0.1061561" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Cloth_Tertiary" />
    							<attribute id="Value" type="fvec3" value="0.07176144 0.06190747 0.1061561" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="1 1 1" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Accent_Color" />
    							<attribute id="Value" type="fvec3" value="1 1 1" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.238828 0.1036341 0.0600316" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Leather_Primary" />
    							<attribute id="Value" type="fvec3" value="0.238828 0.1036341 0.0600316" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.151058 0.0342302 0.02654868" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Leather_Secondary" />
    							<attribute id="Value" type="fvec3" value="0.151058 0.0342302 0.02654868" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.1219857 0.0600316 0.05112205" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Leather_Tertiary" />
    							<attribute id="Value" type="fvec3" value="0.1219857 0.0600316 0.05112205" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="1 1 1" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Custom_1" />
    							<attribute id="Value" type="fvec3" value="1 1 1" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.7667436 0.7667436 0.7667436" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Metal_Primary" />
    							<attribute id="Value" type="fvec3" value="0.7667436 0.7667436 0.7667436" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.7686275 0.7686275 0.7686275" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Metal_Secondary" />
    							<attribute id="Value" type="fvec3" value="0.7686275 0.7686275 0.7686275" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.7686275 0.7686275 0.7686275" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Metal_Tertiary" />
    							<attribute id="Value" type="fvec3" value="0.7686275 0.7686275 0.7686275" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="1 1 1" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="02 Colour" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Custom_2" />
    							<attribute id="Value" type="fvec3" value="1 1 1" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.1176471 0.06666667 0.04705882" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="08Dirt&amp;Blood&amp;Sweat" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="DirtColor" />
    							<attribute id="Value" type="fvec3" value="0.1176471 0.06666667 0.04705882" />
    						</node>
    						<node id="Vector3Parameters">
    							<attribute id="BaseValue" type="fvec3" value="0.1294118 0.007843138 0.003921569" />
    							<attribute id="Enabled" type="bool" value="False" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="08Dirt&amp;Blood&amp;Sweat" />
    							<attribute id="IsColor" type="bool" value="True" />
    							<attribute id="ParameterName" type="FixedString" value="Blood_Color" />
    							<attribute id="Value" type="fvec3" value="0.1294118 0.007843138 0.003921569" />
    						</node>
    						<node id="VirtualTextureParameters">
    							<attribute id="Enabled" type="bool" value="True" />
    							<attribute id="ExportAsPreset" type="bool" value="True" />
    							<attribute id="GroupName" type="FixedString" value="Texture Map" />
    							<attribute id="ID" type="FixedString" value="2e041542-207c-c3a0-2408-0159491d10be" />
    							<attribute id="Index" type="int32" value="0" />
    							<attribute id="ParameterName" type="FixedString" value="virtualtexture" />
    						</node>						
    					</children>
    				</node>
    			</children>
    		<!--Footer start-->
    		</node>
    	</region>			
    	<!--Footer end-->
    
  13. At the very bottom of this resource you will find a ParameterName called "virtualtexture". Copy it's ID. Keep it handy for later.
    Image
  14. Searching for this ID will take you to a VirtualTextureBank with a GTexFileName
    Image
  15. If you haven't done it already extract the VirtualTextures.pak using BG3MT and index it (See to Unpacking Game Files )
  16. Now search for the GTexFileName ID from step 13 using BG3MT tool. This will take you to a gtp file.
    Image
  17. Note that the gtp filename begins with Albedo_Normal_Physical_9 (ignore the remaining string consisting of GTexFilename for now)
  18. Right click on the gtp file result, and open it's folder location by clicking on the folder icon on the right. This will open your File Explorer.
  19. Search for Albedo_Normal_Physical_9 in your File Explorer. You should see this a file called Albedo_Normal_Physical_9.gts. Copy the path to this file from your explorer address bar.
  20. Open Norbyte's Lslib Tool, otherwise known as Converter Tool.
  21. Go to the Virtual Textures tab, and paste the direct path to the GTS file in "Tileset (GTS) path". Set the Destination to the same folder as the GTS file:
    Image
  22. Now in the VirtualTextures folder where you extracted the GTS file, search for the GTexFilename you found in step 13
  23. This time you will find three .dds files. The texture type depends on the number at the end of the file e.g. xxx_0.dds, xxx_1.dds
    Image
  24. It's a good idea to rename them to match the base items that the texture is for. In this case it's for HUM_F_ARM_Robe_A_Body. So lets rename the textures as follows:
    • HUM_F_ARM_Robe_A_Body_BM.DDS (base color map)
    • HUM_F_ARM_Robe_A_Body_NM.DDS (normal map)
    • HUM_F_ARM_Robe_A_Body_PM.DDS (physical map)
    Work in Progress
Last edited by orinEsque on April 22nd, 2024, 18:36, edited 20 times in total.
User avatar
Art Department
Posts: 4
Joined: Dec 11, '23

Post by Art Department »

Regards color options, the game uses fvec3 for colors, its like imagine a float RGB (with decimals instead only integers). So everytime you find something like:

type="fvec3" value="0.1569008 0.1870828 0.1975549", for anything like skin colors, hair, eyes, clothes etc... you can customize at your color choice, and don't need only uses presets.

here 2 sites that can be useful for you create your desired color and put in game.
https://airtightinteractive.com/util/hex-to-glsl/
https://rgbcolorpicker.com/0-1

Just remember to add "," between each number on those calculators: (0.1569008, 0.1870828, 0.1975549), but not in game files 😉
Last edited by Art Department on March 5th, 2024, 18:51, edited 1 time in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

Art Department wrote: March 5th, 2024, 18:45
Regards color options, the game uses fvec3 for colors, its like imagine a float RGB (with decimals instead only integers). So everytime you find something like:

type="fvec3" value="0.1569008 0.1870828 0.1975549", for anything like skin colors, hair, eyes, clothes etc... you can customize at your color choice, and don't need only uses presets.

here 2 sites that can be useful for you create your desired color and put in game.
https://airtightinteractive.com/util/hex-to-glsl/
https://rgbcolorpicker.com/0-1

Just remember to add "," between each number on those calculators: (0.1569008, 0.1870828, 0.1975549), but not in game files 😉
FYI
"fvec3" are floating vectors with 3 dimensions (or 3 distinct numbers) in this case RGB (red green blue) given in decimals
"fvec4" also exists with is floating vectors with 4 dimensions and will take RGBA (red green blue alpha) where alpha is opacity.
Last edited by orinEsque on March 5th, 2024, 19:49, edited 2 times in total.
User avatar
OnTilt
Posts: 248
Joined: Feb 25, '24

Post by OnTilt »

This was a really great tutorial and it made things really simple. Thank you for the effort, I wouldn't even know how to get started otherwise.

I can now edit random NPCs pretty quickly, however editing origin characters seems to be a totally different ballgame. I've been cracking open mods to learn, but there's a lot I'm not getting. I'm not going to ask you to write a guide for that, but if you (or anyone else reading this) knows of one, or other resources to continue learning I'd really appreciate it.

Also, if you weren't already aware, your Hair & Beards cheat sheet says its been deleted by an owner.

Thank you again for the awesome work.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

OnTilt wrote: March 6th, 2024, 11:22
This was a really great tutorial and it made things really simple. Thank you for the effort, I wouldn't even know how to get started otherwise.

I can now edit random NPCs pretty quickly, however editing origin characters seems to be a totally different ballgame. I've been cracking open mods to learn, but there's a lot I'm not getting. I'm not going to ask you to write a guide for that, but if you (or anyone else reading this) knows of one, or other resources to continue learning I'd really appreciate it.

Also, if you weren't already aware, your Hair & Beards cheat sheet says its been deleted by an owner.

Thank you again for the awesome work.
Whoops! Fixed the hair and beard link. Thanks for the feedback :)

With origin characters, all of their character visuals are in the NPC finder, but there are multiple visual resources per origin character.
Since the online sheet can't be sorted or filtered. I suggest you download it to your own pc, then filter the "Codename" for lets say "Astarion". and you should get a list of hits. The ones with ORIGIN_Astarion and INTRO_Astarion are the ones you care about. Their Skin/Eye/Hair color present lives in a different place so it isn't in the excel sheet. But you can trace the UUID back to where they are using BG3MT

You can see though now how the visual part of changing all the fembosses in the game to male would be SUPER easy. Even voice AI isn't THAT bad, unless you are dubbing over their pronouns.
Last edited by orinEsque on March 6th, 2024, 14:02, edited 3 times in total.
User avatar
Kowe
Posts: 68
Joined: Feb 6, '24

Post by Kowe »

OnTilt wrote: March 6th, 2024, 11:22
This was a really great tutorial and it made things really simple. Thank you for the effort, I wouldn't even know how to get started otherwise.

I can now edit random NPCs pretty quickly, however editing origin characters seems to be a totally different ballgame. I've been cracking open mods to learn, but there's a lot I'm not getting. I'm not going to ask you to write a guide for that, but if you (or anyone else reading this) knows of one, or other resources to continue learning I'd really appreciate it.

Also, if you weren't already aware, your Hair & Beards cheat sheet says its been deleted by an owner.

Thank you again for the awesome work.
To add a bit to what Orin wrote.
The companions with origin stories, like Astarion, have ORIGIN_INTRO_Astarion (or any companion's name) for their introductory cut-scene. To use our vampire companion for another example, ORIGIN_Astarion responds to his in-game visuals, meaning what he looks like when you have him around while playing, and what he looks like on the character creation menu.
Something has to be added here though. A few companions undergo "transformations", i.e. Wyll and Gale. In the case of Wyll, you have ORIGIN_Wyll_Devil. And for Gale, something like ORIGIN_Gale_God or ORIGIN_Gale_Epi_NoTattoo. So with an incomplete .lsf file, you may have Wyll or Gale suddenly turn back to their original forms and visuals. Without the use of the necessary resource nodes.
Last edited by Kowe on March 6th, 2024, 20:51, edited 1 time in total.
User avatar
Oldtimer
Posts: 65
Joined: Jan 15, '24

Post by Oldtimer »

This is damn comprehensive - not sure I'd want to try my hand at it though, at least not quite yet, since I Have a bigger problem, the writing and the NPCs from the old games that I really want replaced with new unknown people. That said, just replacing them won't be enough since the game's general writing stinks, and I assume that's a lot bigger fish to gut than some visuals...

Dear god, I so want to like this game, I would love to return to it, but seeing an old Jaheira, hearing about the speedbump Sarevok (never finished the game so I never met him, Minsc or Viconia) and realising there is no cure (spoiler alert) to just mention a few problems I have, I just can't.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

Oldtimer wrote: March 6th, 2024, 21:32
This is damn comprehensive - not sure I'd want to try my hand at it though, at least not quite yet, since I Have a bigger problem, the writing and the NPCs from the old games that I really want replaced with new unknown people. That said, just replacing them won't be enough since the game's general writing stinks, and I assume that's a lot bigger fish to gut than some visuals...

Dear god, I so want to like this game, I would love to return to it, but seeing an old Jaheira, hearing about the speedbump Sarevok (never finished the game so I never met him, Minsc or Viconia) and realising there is no cure (spoiler alert) to just mention a few problems I have, I just can't.
Well, you can at least remove Jaheira's wrinkles and give her a young body. No saving the writing though.
User avatar
lowryder
Posts: 4
Joined: Apr 22, '24

Post by lowryder »

Orin, thank you immensely. Your tutorial being helpful is an understatement. Just out of curiosity, how did you begin with this? It’s always fascinating to learn about the original insights and innovative approaches of pioneers. I've successfully repaired my Marcus and even managed to incorporate custom assets. I'm considering releasing the mod eventually -- I'd like to reimagine a few of the bosses in the game. :)

I lack the necessary privileges to send you a private message. Could you possibly share a link or a password to the spreadsheet? Interested in the data regarding eyes, tattoos, and clothing.

I guess I just need to add new slots for, say, a tattoo, right?
Last edited by lowryder on April 23rd, 2024, 20:15, edited 1 time in total.
User avatar
orinEsque
Posts: 1588
Joined: Oct 9, '23
Location: Narnia

Post by orinEsque »

lowryder wrote: April 23rd, 2024, 20:12
Orin, thank you immensely. Your tutorial being helpful is an understatement. Just out of curiosity, how did you begin with this? It’s always fascinating to learn about the original insights and innovative approaches of pioneers. I've successfully repaired my Marcus and even managed to incorporate custom assets. I'm considering releasing the mod eventually -- I'd like to reimagine a few of the bosses in the game. :)

I lack the necessary privileges to send you a private message. Could you possibly share a link or a password to the spreadsheet? Interested in the data regarding eyes, tattoos, and clothing.

I guess I just need to add new slots for, say, a tattoo, right?
You should reply/mention users when you post. I completely missed this message, in case you were wondering why I didn't reply :D

Begin with the tutorial? I started off by reverse engineering mods, then reverse engineering the vanilla game files. There are BG3 wiki and various modding resources out there that got me going. Some better made than others (virtual texture editing is so poorly done I had an aneurysm decoding that nonsense). But none of these tutorials address NPC modding and I pretty much became a pro by the time No Alphabets was done. So I decided I should just share my learnings. Still a lot left to share actually.
Post Reply