Take me to...
- How To: Add a Newly Created Gear Item to a Vendor
- Adding Gear to a Vendor
- How To: Obtaining Houdini license for Creator Kit
- Tips for Debugging
- How To: Asset Validation
- Manually Validating Assets
- Validation at Mod Upload
- Validation Exemptions
- CreatorKit Verification Rules - Detailed
- Creator Kit
- Generic
- Animation
- Blueprint
- Brush
- Foliage
- Grass
- Material
- MaterialInstance
- Niagara System
- RenderTarget
- Texture
- Wrong compression settings
- Wrong SRGB settings
- Suggest packing texture
- Compress without Alpha settings
- Texture dimensions not power of two but mip generation is enabled
- Texture dimensions not divisible by four while compression is enabled
- TextureCube not compressed
- Texture dimensions exceed texture group limit
- Non Default Adjustments on Texture
- Texture has incorrect mip map generation settings
- SkeletalMesh
- Empty material slot in Skeletal Mesh
- Duplicated materials in Skeletal Mesh
- Using placeholder material in Skeletal Mesh
- Skeletal mesh with more LODs than optimization settings
- Max bone influencers mismatch
- Skeletal mesh lods outdated
- Skeletal mesh has extra bone influences
- Morph target with high vertex count
- Skeletal mesh has self collision cloth
- Skeletal mesh has legacy wind cloth
- Skeletal mesh has legacy backstop cloth
- Skeletal mesh has clothing assets with bad name
- Skeletal mesh clothing data lod mismatch
- Skeletal mesh needs physics asset
- Skeletal mesh needs capsule shadow physics asset
- Skeletal mesh has clothing assets with too many fixed verts
- Skeletal mesh has clothing assets with too many simulated verts
- Skeletal mesh clothing data unused
- Skeletal mesh section with clothing data bad slot name
- Invalid material section generate up to
- Invalid material section shadow casting enabled
- WARNING
- StaticMesh
- Triangle count not in budget
- Source asset triangle count not in budget
- UV channel count not in budget
- Material count not in budget
- Lod count not in desired range
- Empty material slot in Static Mesh
- Duplicated materials in Static Mesh
- Using placeholder material in Static Mesh
- Mesh Distance Field Scale too large
- Mesh using complex as simple collision with high triangle count
- Mesh has lightmap UVs
- Collision primitives count is (too) high
- Scale is negative
- Start Awake is enabled
- Skeleton
- VFX
- World
- Map check error
- Map check warning
- Map check info
- Multiple LevelBound Actors
- Actor Outside LevelBounds
- Instance Outside LevelBounds
- LevelBounds AutoUpdate Enabled
- LevelBounds are setup incorrectly
- Sanctuary Blueprint In Overland
- Runtime errors during Map Check
- Runtime warnings during Map Check
- Landscape material instance is using too many textures
- Landscape component is using too many layers
- Landscape grass map invalidated
- Station Component has failed its self-check
- Reflection Capture has issues
- Collision primitive on component is invalid
- Mercuna Setup Issue
- Actor is blacklisted
- Global Lighting Master Setup Issue
- Post Process Volume using post process materials
- Post Process Volume using blacklisted material
- Post Process Volume overrides exposure settings
- Static mesh component uses lod mesh
- Trigger Is Movable
- Too many level script actors
- Data Assets
Dynamic Object Volumes: How to Use Them and Why
Here is a short step-by-step guide on how to use Dynamic Object Volumes to spawn enemies or items.
There are a couple different ways to make the player face enemies.
We can place enemies directly inside a level, but to make things more dynamic, we can use Dynamic Object Volumes (DOV) so enemies appear when the player reaches a certain spot in that level. One single DOV can spawn multiple beings at once, and allow the player to choose exactly where they want these enemies/items/characters to spawn.
Additionally, using Dynamic Object Volumes can allow you to create an event that would get triggered when all the enemies have been defeated, and making this event communicate with Quest Editor unlocks many possibilities.
Instructions
Here’s how you can use a Dynamic Object Volume:
- Open a level (it is suggested to work inside a custom dungeon instead of in the Overland).
- In the Place Actor window, search for Dynamic Object Volume.
- Drag and drop this asset where you’d want the Player to trigger an encounter in your level.
- Select your Dynamic Object Volume, and go in the Spawn Properties inside its Details panel.
- Next to ‘Items to Spawn’, select the data table you want to pull from (ex: EnemyDefinition).
- Next to this, select an enemy you’d want to spawn with this volume.
- To make your enemy/item/character spawn at a specific location, drag and drop some Spawn Location assets from the Place Actor window.
- Back in the Details panel of your Dynamic Object Volume, under Spawn Groups, click on the drop down arrow of the enemy/item you choose on step 6.
- Under Spawn Location, click on the + sign, and select one of your Spawn Locations that you dropped in your level.
- Press the Play button above the viewer and walk your character into the volume to see if your DOV works properly.
Other possibilities
Restrictions:
It is possible to prevent your DOV from spawning anything unless a particular condition has been met. By going in the Restrictions section in the Details panel of the respective DOV, we can see that a database of existing restrictions exists. Clicking ‘Goto Named Restrictions’ will open this database. New rows can be added to create custom restrictions. Here are some types of restrictions:
- Mission Active: This will makes it so the DOV will only spawn if a specific quest is in the Active state, meaning it hasn’t been completed and appears in your Quest submenu in game.
- LockIsUnlocked or LockIsLocked: By using a lock from the LockDefinition static table, we can prevent the DOV from spawning anything unless that lock is in the state (locked or unlocked) we want. Changing the status of a lock can be done via a Set Lock task in Quest Editor or a Set Lock node in a blueprint. For example, adding this node to an interactable object’s construction script could make it so the DOV will only spawn after the player interacts with that object, or vice versa.
- Stats: Using stats from the StatsDynamic data table lets you block the DOV from spawning unless that stat reaches a certain number. Fill the StatID column with the name of a custom stat you created in the StatsDynamic data table, add a number to its Value column to specify at which value the Stat will stop blocking this DOV from spawning. Similarly to using locks, stats can be updated by using a Stat Update task in Quest Editor or a Stat Update node in a blueprint. Essentially, the main difference between a Stat and a Lock is that Stats use integers and Locks use booleans.
‘ON ALL ENEMIES DEAD’ event:
Setting up a DOV’s blueprint so that it recognizes when all enemies spawning from it are dead can be a useful tool to make a quest progress or trigger other events. Here are some instructions on how to set that up.
- Once the Dynamic Object Volume has been set up following the steps mentioned above, select the DOV in your level and make it a blueprint by clicking the ‘Blueprint/Add Script’ button in its Details panel.
- Name this blueprint however you want and press OK, this should open the DOV’s blueprint.
- In the Event Graph, pull on the arrow of the Event Begin Play node, and search for ‘Bind Event To On All Enemies Dead Event’.
- Next, we need to create a new function, so in the My Blueprint panel, click the + sign next to the Functions section. for this example, name this function HandleOnAllEnemiesDead. Doing this will bring you to this function’s event graph.
- Here, we can specify what will happen when all enemies are dead. It can be any event that you are able to set up. For this example, let’s make it unlock a custom Lock, allowing us to interact with the Quest Editor interface.
- Drag on the arrow of the function’s node and type Set Lock. If you have previously created a custom lock, enter its name in this node and choose the status you want the lock to be in.
- Back to the blueprint’s event graph, we need to add a Create Event node, so that the function gets triggered when all enemies from this DOV are dead.
- Drag on the ‘Bind To Event On ALL Enemies Are Dead’ red box and type ‘Create Event’.
- Under Select function, select the function you have created earlier.
- Now, when all enemies from this Dynamic Object Volume are dead, a lock will get unlocked which can be used in another blueprint to fire another event, or in Quest Editor to make a Quest progress.
Setting up encounters in this fashion will give a lot of flexibility when it comes to have gameplay aspects influence other parts of the game, such as quest building.
Using custom audio
Use this guide to help you use custom audio inside your mods.
Hogwarts Legacy uses Wwise to handle audio processes, and as such, importing and using custom audio into the Creator Kit requires a few workarounds to navigate.
Introduction
Firstly, there are a few things to be aware of:
- Unreal supports .wav audio files
- Any node or dropdown that supports audiokinetic events only supports files imported through Wwise
- It is possible to rewire existing event graphs to allow us to replace Wwise files with our own
Recording new audio
For the purposes of this guide, we will using OBS to create our new audio.
1. Launch OBS
2. In OBS, click the + button in the Sources Panel
3. Select Audio Output Capture and click OK
4. Make sure that only the Audio Output Capture is activated This will allow OBS to record any sound coming from our PC without any video input.
5. Play whatever sound you would like to record, be it from an already existing audiofile on your PC, or other sources.
6. In OBS, click the “Start Recording” button in the Controls panel and click “Stop Recording” once done.
7. Locate your newly recorded video file
OBS records its videos using the .mkv format, which is not supported by Unreal Engine. Which means we now need to convert your new video to a .wav file.
Converting audio file formats
For the purposes of this guide, we will be using VLC to convert our audio file.
1. Launch VLC
2. Click the Media tab at the top of the window
3. Select Convert/Save
Alternatively, use Ctrl+R
4. In the Open Media window, click Add + and select your video
5. Click the Convert/Savebutton at the bottom of the Open Media window
This will open the Convert window
6. In the Convert window, click the Profile dropdown menu and select Audio - Wav
You may need to click the wrench button and edit the profile manually
7. Click the Browse button in the Destination section
8. Rename your fileto something other than its original name and select its save location
9. Make sure that format in the Type dropdown menu of your Browse window is set to .wav
10. Keeping the same name for your file will make it so that it simply saves it in its original format instead of the new one
11. Click Start in the Convert window
Your new file should now be available at your desired file location and should be in .wav format, and it is now ready to be imported into the Creator Kit.
Importing new audio files
As Unreal fully supports .wav files, simply click and drag your .wav files into the Creator Kit’s Content Browser.
Once imported, it will appear as a Sound Wave file. Most event graph actions involving sound, other than audio kinetic events, will support Sound Cues and not Sound Waves.
To create a Sound Cue file, simply right click your Sound Wave audio file and click Create Cue. A new sound cue file should appear in the Content Browser.
Now that your custom audio is imported and ready to be used, it’s time to add it in-game.
Using custom audio
There are a few ways to use modded audio, some being easier than others, mostly done by using the base Unreal Engine tools to workaround not having access to Wwise.
Blueprints
The easiest way to use modded sound would simply be to add one of the sound nodes to your blueprint.
For example:
Here, the Play Sound 2D node allows us to use sound cues instead of audiokinetic events.
Therefore, it is possible to take an existing blueprint and simply replace the AK event nodes with ones using sound cues.
This won’t be possible for every single blueprint however, as some of them have no exposed nodes, such as data-only blueprints.
Custom audio can also be used to change the background music by using the state stack system.
- The AVA state determines what background music plays on any given level. The state stacks are groupings of those states.
- By using the Set State node, a modder can determine what state the game should be in. Connecting an audio node of any kind will allow it to essentially overwrite the audio that would normally have been called by that state.
The “Music Stack Add Mod Music at Location” node, for example, will allow the user to use any soundwave or sound cue and it to the existing stack. - Here are a few of the nodes that will allow you to manage the state stacks:
- Add ‘State to Stack' and 'Remove State from Stack’
- 'Set State'
- ‘Is State on Top of Stack’
- ‘Music Stack Add Event at Location by Name’ and ‘Music Stack Remove Event by Name’
- 'Music Stack Add Mod Music at Location' and 'Music Stack Remove Mod Music'
Troubleshooting custom audio
If you can’t get any sound to play in the Creator Kit, you might have to check your Editor Preferences. Your Editor’s game sounds might be disabled:
- In the Creator Kit, click the Edit Tab at the top of the screen and select Editor Preferences.
- In the Editor Preferences, click Play in the Level Editor Section.
- Make sure that the “Enable Game Sound” setting is on.
How To: Add a Newly Created Gear Item to a Vendor
Introduction
This guide will not discuss the creation of new gear items and is strictly intended as an outline of how to get a piece of gear into the game on a vendor so that players can purchase and wear it. That functionality will be covered in a different document.
Adding Gear to a Vendor
1. Set your active mod as appropriate by either creating a new one using the CreateUGC button above the viewport or using the “Select Active Mod” button to select the appropriate mod (also above the viewport).
2. Create a new gear appearance using the Gear editor mode in the Character Creator level.
3. Open the data table editor tool (Window -> Scroll down -> DB Text Entry -> Static)
4. Find the “VirtualContainerList” table in the “STATIC DB Text Entry” window and open it.
5. Scroll to the bottom and add a new row with VContainerID column set to the text "ITEM_#ItemName#" (replacing #ItemName# with your item's name) and the SubtypeID column to "SingleItem". For example, if your item was called BigScarf, its GearAppearance asset would be called GA_BigScarf and its VContainerID here would be ITEM_BigScarf.
6. Returning to the “STATIC DB Text Entry” window, find and open the “LootContainerContents” table and add a new row with the following column settings (the others can be left at their defaults):
- LootCategoryID
Set this to the vendor you want to sell the item (the name will be formatted as "VEND_#VendorName#", such as VEND_AugustusHill for the vendor at Gladrags Wizardwear) - ContainerID
The VContainerID you set in step 4. For example, for the item BigScarf this would be ITEM_BigScarf
1. Find the line that reads 'INSERT INTO Registry(RegistryID, SubtypeID) VALUES("#YourItemName#Common", "Gear#GearSlot#");'
For example, for an item named BigScarf, the line would read -
INSERT INTO Registry(RegistryID, SubtypeID) VALUES("BigScarf_Common", "GearHand");
2. This line should be followed by three additional "INSERT INTO" line statements that insert into, in order, the LockDefinition, ItemDefinition, and GearItems tables.
They should appear like so -
- INSERT INTO LockDefinition(LockID, LockTypeID) VALUES("BigScarf_Common", "Simple_Locked");
- INSERT INTO ItemDefinition(ItemID, ItemType, RarityTier, EconomyValue, SellPrice, Inventoryable, Persistent, Giftable, Sellable, Dropable, SlotLevel, Consumable, TriggerAbilityOnConsume, LockID, UsableFromInventory, UIDisplayMethod, UsableOnDiamond, StorageLocation) VALUES("BigScarf_Common", "GearAesthetic", "Common", "0", "0", "1", "0", "1", "1", "1", "Single", "0", "0", "BigScarf_0120_Common", "0", "NoNotification", "0", "CostumeStorage");
- INSERT INTO GearItems(GearID, SlotID, GearAppearanceID, NumGeneralAbilities) VALUES("BigScarf_Common", "Hand", "GA_BigScarf", "1");
- Copy all 4 of these lines, create a new line under the statement to "INSERT INTO GearItems", and paste the four lines into that newline.
- The other rarity types are defined in the “RarityTierType” data table, but for vendor gear generally you'll want to stick with Common, Rare, Epic, and Legendary rarities.
Decide which rarity you want to add for this gear and then replace any instance of the word "Common" in the lines you just pasted with the text for the tier you want to add.
So, if we were adding a Rare version of BigScarf, we'd replace every instance of "BigScarf_Common" in the 4 lines you just pasted with "BigScarf_Rare". Note that this value appears twice in the "ItemDefinition" insertion statement. - In the "ItemDefinition" insertion statement, the third VALUE denotes the rarity tier. Replace the text "Common" with your rarity (for example, for a Rare BigScarf, change it from "Common" to "Rare").
The text should look something like this:- INSERT INTO LockDefinition(LockID, LockTypeID) VALUES("BigScarf_Rare", "Simple_Locked");
- INSERT INTO ItemDefinition(ItemID, ItemType, RarityTier, EconomyValue, SellPrice, Inventoryable, Persistent, Giftable, Sellable, Dropable, SlotLevel, Consumable, TriggerAbilityOnConsume, LockID, UsableFromInventory, UIDisplayMethod, UsableOnDiamond, StorageLocation) VALUES("BigScarf_Rare", "GearAesthetic", "Rare", "0", "0", "1", "0", "1", "1", "1", "Single", "0", "0", "BigScarf_0120_Rare", "0", "NoNotification", "0", "CostumeStorage");
- INSERT INTO LockDefinition(LockID, LockTypeID) VALUES("BigScarf_Rare", "Simple_Locked");
INSERT INTO GearItems(GearID, SlotID, GearAppearanceID, NumGeneralAbilities) VALUES("BigScarf_Rare", "Hand", "GA_BigScarf", "1");
4. The two VALUES after the RarityTier in the "ItemDefinition" insertion statement determine, respectively, the cost to purchase this piece of gear and the price players can sell the item for. Set these to whatever you'd like.
5. The final numerical value in the "GearItems" insertion statement determines the number of ability slots on the item. This is generally 0 for Common items, 1 for Rare items, 1 (and rarely 2) for Epic items, and 1 (and rarely up to 3) for Legendary items.
6. Note that you will likely have to restart the Creator Kit to see changes made to this file by hand reflected in the editor.
7. By this point you should have the rarity set up that you want the vendor to sell. Open the "VirtualContainerContents" table.
8. Add a new row with the following column settings (settings not mentioned may be left at defaults):
- VContainerID
- The ITEM prefixed name of your item (for example, ITEM_BigScarf)
- ItemID
- The #RarityTier# name identifier for your item (for example, for a rare BigScarf, this would be BigScarf_Rare)
9. The item should now appear in the vendor's inventory for sale, but its name will appear as "[#ItemName##Rarity#]" (for example, "BigScarf_Common"). To add a localization for the item's name, open the localization text tool (Window -> Scroll down -> Localization Text Editor).
10. In the top right of the window that pops up, enter your item's name in the "ID" field (for example, BigScarf_Rare). Next, enter the name you want players to see when inspecting the item in the "Localization" field. After, just hit the "Apply Changes" button once. You can search for your modded ID using the search bar at the top left if you want to verify that it was added.
When viewing the item, it should now display the "Localization" string you selected.
11. Lastly, you can give your item a localized description by going back to the Localization Text Editor and adding a new entry. For the ID, enter your items name followed by “_desc” (for example, BigScarf_Rare_desc), and for the “Localization” field, enter a brief description of your item. After, just hit the “Apply Changes” button once again.
How To: Obtaining Houdini license for Creator Kit
Multiple tools in Creator Kit utilize Houdini. This means that if you do not have a valid Houdini license installed then those tools will do nothing. Some tools such as creating your own custom rivers and lakes will require you to obtain a license. After installing valid license you can learn how to create rivers and lakes by visiting: https://wbg-avalanche.atlassian.net/wiki/x/xwIkF
Step 1: Visit SideFX
- Go to https://www.sidefx.com/buy/#houdini-indie
- Click 'Add to Cart' under Houdini Engine Indie.
- You will be required to sign up with SideFX.
Step 2: Download and Setup Houdini Launcher
- Go to https://www.sidefx.com/download/
- Download the launcher.
- After installation. You will want to launch the license server window.
- Go to Licenses → License Administrator. Click Install License Server.
- Click Production Build.
- Login to your SideFX account and check to see if you using the correct license server. Go to Licenses → License Administrator.
- Make sure to login with the account you had setup with SideFX.
- If your account login doesn’t work. Click Use 3rd Party to open a browser window.
- If it says login failed, try resetting your Houdini password.
- Change the Quantity for each to 1 to redeem your licenses. Then click Install.
- You should see them under Product and also localhost should be green at the bottom. You can close License Administrator now.
- Go back to the Houdini Launcher and go to the Houdini tab and click Install.
- Choose Production Build.
- Choose Unreal Plug-In (also any others you may use). Change the other settings as you wish. Then click Install.
- You will need to launch Houdini once in order for it to work. Under the Houdini tab click Launch.
- Click the third option and then click Next.
- Click File Change License Server. Also make sure you’re Logged In.
- To find your Server that you installed your License on, you can check your License Manager on your Houdini Account.
- Click the + by the Server under Found Servers. Then click the up arrow under Search these license server(s) to move it up. Then click Accept.
- After launching once, go ahead and close Houdini.
Step 3: Launch Creator Kit
You are now able to use Houdini tools within Creator Kit. Important: you will want to have the license server window running in the background. Houdini requires a internet connection to validate your license.
Please note that if you want to create your own custom Houdini tools you will need to download Houdini Engine from the launcher. Creator Kit is using Houdini Engine 1.18.676.
Tips for Debugging
Important Note:
For AIs (and maybe more), the user will need to make another blueprint of the existing one
(duplicating/copy pasting works) or making a mutator for the mod. If the user is just fixing the
issues on the default BPs, it’s going to work in editor but not in-game.
Mutator tutorial:
Section 1: Guide on general concept of 'debugging'
1. Before modding Hogwarts Legacy, backup your save files.
It is highly suggest backing up your save files before modding your copy of Hogwarts Legacy. To do so, you can locate your files by doing the following steps:
- Press Windows Key + R, and in the Run window, type “%LocalAppData%”.
- A File Explorer window will open.
Steam & Epic Games
- For Steam:
Hogwarts Legacy > Saved > SavedGames - For Epic Games:
HogwartsLegacy > Saved > SavedGames
In this location, you should find a numbered folder. Do not delete that folder, as it is crucial to Steam’s game file management.
To back up your save files:
- Select all files within the numbered folder
- Right click > Send to > Compressed (zipped) folder
- Select the location where you want to store your save files
2. Always have your message log window open.
This will allow the user to catch any possible errors in the project which would cause some issues with the cooker.
If you don’t have the window already open, you can find the it by going selecting ‘Window’ > ‘Developper Tools’ > ‘Message Log’ , as seen below.
You can find the errors under the 'Data Validation' tab on the left.
The user can then try to fix the issue by reading the information that causes the error, or simply delete the assets that causes the issue.
Section 2: List of items on how to debug
Dungeon mods
- If you have created a new dungeon mod and you still have the base dungeon template. You can simply delete the level since it may cause issues with the cooker. However make sure to add your new level dungeon in the data table.
- If you wish to keep the dungeon templete as a reference, you can simply delete all the ‘SphereReflectionCapture’ mentioned in the message log.
File issues
Question: “After installing and starting a modded save file, the game got stuck on an infinite loading screen. After force-stopping the game, it keeps crashing when I try to launch it again.”
Answer: An installed and staged mod may not be compatible with the latest version of the game. A simple way to unstage or uninstall your mods manually can be done using the following methods:
Steam
- In your Steam library, right click on Hogwarts Legacy > Manage > Browser local files.
- A file explorer window should open
- Phoenix > Mods
- Delete the mod folder(s) that causes the issue
With Steam, this method will unstage your mods without uninstalling them. You can uninstall your mods through the mods menu in-game, or manually with the following method:
- Press Windows Key + R, and in the Run window, type “%LocalAppData%”
- A File Explorer window will open
- Hogwarts Legacy > Saved > Mods
Epic Games
- In your Epic Games library, click on the 3 dots below Hogwarts Legacy > Manage > Installation > Folder icon with magnifying glass
- A file explorer window should open
- Phoenix > Mods
- Delete the mod folder(s) that causes the issue
With Epic Games, this will unstage AND uninstall your mods.
How To: Asset Validation
Asset validation helps with the following:
- Prevent potential cook errors/warnings
- Misuse of tools that can cause runtime issues
- Performance suggestions
- Enforcing standards on content for mods produced by large mod groups
Manually Validating Assets
Validating via Content Browser
You can select multiple assets from the Content Browser and manually validate. After selecting the assets for validation, right-click to open the context menu and select “Assets Validation“.
If any assets fail to validate the Message Log will appear. If there are no errors then the validation was successful. The Message Log will not appear when there are only warnings.
If the Message Log doesn’t appear; you can open it from the “Windows” button in the editor toolbar at the top left of the screen.
Validation Report via PEEVES Asset ToolPle
You can also get the validation report through the PEEVES Asset Tool. It can be seen in the level editor toolbar.
You should see the PEEVES Asset Tool window appear on screen. Depending if you already have an asset selected from the content browser, you should see the asset in the list that is shown on the left side of the window.
- Asset list (Selection)
- Syncs the asset list to contain the current opened level in the editor.
- Syncs the asset list to contain selected assets from the content browser.
After selecting which assets you want to verify, then open the “Report” tab and select the “Verify” option.
Depending on the number of assets or complexity of each asset, this could take a bit. But when finished you should be able to see the report in the window.
Validation at Mod Upload
Before a mod is uploaded to CurseForge, it goes through validation. It will validate ALL unreal content within the Mod. If the mod fails validation then the following warning will appear:
The user can choose to upload the mod even if validation errors exist. The validation errors are there to help guide the user in troubleshooting errors. If they choose to proceed with the mod upload and find that their mod fails to cook, it could be useful to go back and check the validation errors that were found for troubleshooting.
CreatorKit Verification Rules - Detailed
Similar to validating manually. The Message Log will appear when errors are found during validation.
Validation Exemptions
There will be a chance that you will run into warnings and errors when creating your mod. These errors/warnings are useful for troubleshooting issues and help ensure your mod will cook successfully. However, there are always unique cases where the validation errors do not reflect the content. If you are 100% confident that your content in the mod will not have issues you may add exemptions.
Adding exemptions via PEEVES Asset Tool
First you will want to look at the validation error and see which test it is failing.
Click on the asset link and then open the PEEVES Asset Tool. https://wbg-avalanche.atlassian.net/wiki/spaces/PT/pages/edit-v2/350355540#Validation-Report-via-PEEVES-Asset-Tool
Once opened, make sure the asset shows up in the asset list. Click on the item in the list and navigate to “Classify“ view at the bottom left. Then click “Verify Exemptions”.
Click on the check icon to navigate to this screen.
Click on the “[actor_blacklisted_class]“ text to choose which error you want the asset to be exempt from. Once you found the error name, you can click the little check at the bottom right to confirm.
You can find out which error you need by navigating to the config file located “<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json“.
Now you can verify that the asset will pass validation by running Asset Validation. To run asset validation please see https://wbg-avalanche.atlassian.net/wiki/spaces/PT/pages/edit-v2/350355540#Manually-Validating-Assets .
CreatorKit Verification Rules - Detailed
Take me to...
- Creator Kit
- Generic
- Animation
- Blueprint
- Brush
- Foliage
- Grass
- Material
- MaterialInstance
- Niagara System
- RenderTarget
- Texture
- Wrong compression settings
- Wrong SRGB settings
- Suggest packing texture
- Compress without Alpha settings
- Texture dimensions not power of two but mip generation is enabled
- Texture dimensions not divisible by four while compression is enabled
- TextureCube not compressed
- Texture dimensions exceed texture group limit
- Non Default Adjustments on Texture
- Texture has incorrect mip map generation settings
- SkeletalMesh
- Empty material slot in Skeletal Mesh
- Duplicated materials in Skeletal Mesh
- Using placeholder material in Skeletal Mesh
- Skeletal mesh with more LODs than optimization settings
- Max bone influencers mismatch
- Skeletal mesh lods outdated
- Skeletal mesh has extra bone influences
- Morph target with high vertex count
- Skeletal mesh has self collision cloth
- Skeletal mesh has legacy wind cloth
- Skeletal mesh has legacy backstop cloth
- Skeletal mesh has clothing assets with bad name
- Skeletal mesh clothing data lod mismatch
- Skeletal mesh needs physics asset
- Skeletal mesh needs capsule shadow physics asset
- Skeletal mesh has clothing assets with too many fixed verts
- Skeletal mesh has clothing assets with too many simulated verts
- Skeletal mesh clothing data unused
- Skeletal mesh section with clothing data bad slot name
- Invalid material section generate up to
- Invalid material section shadow casting enabled
- WARNING
- StaticMesh
- Triangle count not in budget
- Source asset triangle count not in budget
- UV channel count not in budget
- Material count not in budget
- Lod count not in desired range
- Empty material slot in Static Mesh
- Duplicated materials in Static Mesh
- Using placeholder material in Static Mesh
- Mesh Distance Field Scale too large
- Mesh using complex as simple collision with high triangle count
- Mesh has lightmap UVs
- Collision primitives count is (too) high
- Scale is negative
- Start Awake is enabled
- Skeleton
- VFX
- World
- Map check error
- Map check warning
- Map check info
- Multiple LevelBound Actors
- Actor Outside LevelBounds
- Instance Outside LevelBounds
- LevelBounds AutoUpdate Enabled
- LevelBounds are setup incorrectly
- Sanctuary Blueprint In Overland
- Runtime errors during Map Check
- Runtime warnings during Map Check
- Landscape material instance is using too many textures
- Landscape component is using too many layers
- Landscape grass map invalidated
- Station Component has failed its self-check
- Reflection Capture has issues
- Collision primitive on component is invalid
- Mercuna Setup Issue
- Actor is blacklisted
- Global Lighting Master Setup Issue
- Post Process Volume using post process materials
- Post Process Volume using blacklisted material
- Post Process Volume overrides exposure settings
- Static mesh component uses lod mesh
- Trigger Is Movable
- Too many level script actors
- Data Assets
Creator Kit
Errors attempting to upload mod
ERROR
Requirements:
- Mod Logo (File Upload)
- Must have a ratio of 1:1
- Must be between 400x400p by 1,000x1,000p
- Must be smaller than 3MB
- Must be a JPG, JPEG, or PNG file
- Mod Title
- Must be 3 to 38 characters long
- Cannot start with a number
- Must contain at least one letter
- Mod Summary
- Must not be longer than 256 characters
- Must be shorter than the description
Solution: Read info in error description on how to fix.
Warnings attempting to upload mod
WARNING
Warnings were found during initial upload of mod. These are suggestions and won't prevent mod upload.
Solution: Read info in error description on how to fix.
Generic
Could not load asset in Editor
ERROR
The asset has some sort of problem while loading.
Solution: Try opening the asset in the editor to find out what the problem is
Warnings while loading asset
WARNING
While loading an asset or map Unreal logged warnings related to the asset or an asset loaded by the map.
Solution: Try opening the asset in the editor to find out what the problem is. Open the asset or map and check the OutputLog for warnings.
Errors while loading asset
ERROR
While loading an asset or map Unreal logged errors related to the asset or an asset loaded by the map.
Solution: Try opening the asset in the editor to find out what the problem is. Open the asset or map and check the OutputLog for errors.
Failed to load referenced asset
ERROR
While loading an asset or map Unreal failed to load a referenced asset package because it was missing or corrupt.
Solution: This is usually because your asset is referencing something that was deleted.
Illegal Asset Reference
ERROR
Asset has reference to an asset in an illegal location. This usually means asset in Mod A is referencing an asset in Mod B.
Solution: Fix up dependencies. Possible solution is to make sure that assets are referencing each other within the same mod or base game assets.
Illegal Cooked Asset
ERROR
Cooked asset is tagged as "Never Cooked".
IF YOUR ASSET IS USED IN THE PACKAGED MOD you must remove the metadata flag "Never Cooked" using the Peeves Asset Tool. This will make the asset subject to more verification tests.
Solution: Remove the "Never Cooked" flag through the PEEVES asset tool.
Asset path too long
ERROR
The physical file path of the asset is too long. Shorten the file path to avoid cook failures in CurseForge.
Solution: Simple shorten the path by either making the file name shorter or moving it to a folder with a shorter path length.
Object Redirector
WARNING
The asset is a redirector. This can cause issues when folders get restructured / deleted etc...
Solution: Unreal Documentation
Animation
Anim has no skeleton
ERROR
Animation Sequence doesn't have an associated skeleton. The previous skeleton might have been deleted or become invalid.
Solution: Load the asset in Unreal Editor and you will be prompted to fix it.
Animation has the wrong Bone Compression Settings
ERROR
All animations should have the same project default value.
Solution: Open the animation sequence in the Editor and set the Bone Compression Settings property to the settings asset "/Game/Animation/Settings/AC_PhxAnimBoneCompressionSettings", which can be found in the Content Browser.
Animation has the wrong Curve Compression Settings
ERROR
All animations should have the same project default value.
Solution: Open the animation sequence in the Editor and set the Curve Compression Settings property to the settings asset "/Game/Animation/Settings/AC_PhxAnimCurveCompressionSettings", which can be found in the Content Browser.
Animation needs to Use Default Sample Rate
WARNING
All animations should have the "Use Default Sample Rate" check box set in their FBX import settings properties. This ensures anims import at 30FPS.
Solution: Open the animation sequence in the Editor and set the Import Settings->Use Default Sample Rate property to true.
Anim has zero data
WARNING
Animation Sequence reports its uncompressed data stream length as zero. The asset is probably invalid or not loading correctly.
Solution: Does the anim asset have any data? Is it needed? Please check it in the Editor.
Animation frame rate too low
WARNING
The animation frame rate is too low. Max/min permitted frame rates are defined in Peeves config and the valid range will be printed in the details of this error.
Solution: Increase the frame rate.
Animation frame rate too high
ERROR
The animation frame rate is too high. Max/min permitted frame rates are defined in Peeves config and the valid range will be printed in the details of this error.
Solution: Decrease the frame rate.
Blueprint
Using blacklisted blueprint node
ERROR
A blacklisted node has been used. This could be for performance reasons or because a certain system uses more bespoke nodes.
A list of blacklisted nodes can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Blueprint" "node_blacklist" section.
If required, more blacklisted can be added to this list.
Solution: The nodes should be replaced with more appropriate nodes.
Empty Tick
ERROR
Blueprint has Tick enabled but is not using it.
Solution: Disable the Tick event for this blueprint to optimize run-time performance.
Transfiguration Validation
ERROR
Blueprint is a transfiguration object and failed it's validation.
Solution: Check the details of the error for what things have failed.
Referencing Blueprint does not compile
ERROR
One or more blueprints that are referencing the asset that is being verified do not compile successfully.
Solution: Resolve compile errors in referencer blueprint.
Blueprint has negative scaled render components
WARNING
One or more components have negative scale.
Solution: All scale coordinates (x, y, z) must be set to a positive number.
Blueprint has negative scaled render components -++
WARNING
One or more components have negative scale.
Solution: All scale coordinates (x, y, z) must be set to a positive number.
Anim Dynamics using wrong simulation space
ERROR
Post Process animation bp contains Anim Dynamics node with a bad simulation space.
Solution: Change simulation space to: Bone Relative
Anim Dynamics using invalid lod threshold
ERROR
Post Process animation bp contains Anim Dynamics node with lod threshold > 2.
Solution: Change lod threshold to 2
Brush
BSP In Production Map
ERROR
BSP exists in a map and must be removed due to issues with Chaos collision performance.
Solution:
- Either delete and replace the BSP with basic static mesh collision OR
- Convert all brushes in the map into Static Mesh Actors using Create Static Mesh option in the Details panel after selecting the brushes.
Make sure you have all the brushes you want to convert in the same level and that the level is set as the Current Level
We found it wouldn't create the mesh if this wasn't done before hand.
Foliage
Actor foliage uses lod meshes
ERROR
Actor foliage has a blueprint assigned that uses a mesh with '_LOD' in its name.
Solution:
- If the mesh with '_LOD' in its name was generated for level LOD purposes. Find the non-lod version in the content browser and use that instead.
- If the mesh was created by a content creator but accidentally has '_LOD' in its name (for example a mesh from megascans often has '_LOD' in the name by default), remove _LOD from its name.
Static mesh foliage uses lod meshes
ERROR
Static mesh foliage has a mesh assigned with '_LOD' in its name.
Solution:
- If the mesh with '_LOD' in its name was generated for level LOD purposes (look at it's perforce history). Find the non-lod version in the content browser and use that.
- If the mesh was created by a content creator but accidentally has '_LOD' in its name (for example a mesh from megascans often has '_LOD#' in the name by default), remove _LOD# from its name.
Foliage and Grass use the same mesh
WARNING
Solution:
While not necessarily an issue, being aware that this mesh is used in both a foliage type asset and a landscape grass asset, avoid painting in large areas.
Foliage no collision with no density scaling
WARNING
Solution:
Foliage without collision also does not have density scaling enabled.
Density scaling removes foliage in line with the engine scalability settings and is particularly useful on small foliage assets that do not require collision such as bushes, grass, etc...
To fix this check the "Enable density scaling" option in the foliage type editor. This can also be updated in "bulk edit via property matrix"
Grass and foliage presents shadows enabled
ERROR
Solution:
This foliage asset is also present in a grass type asset, its likely that "Cast dynamic shadow" needs to be disabled unless it is a large asset.
Grass and foliage presents without density scaling
ERROR
Solution:
This foliage type shares meshes with a grass type and likely needs to adhere to the same density scaling settings.
To fix this check the "Enable density scaling" option in the foliage type editor. This can also be updated in "bulk edit via property matrix"
Grass
Landscape grass shadow casting enabled
ERROR
Solution:
Landscape grass does not require dynamic shadow casting. If enabled open up the asset and turn it off per present grass mesh.
Landscape grass multiple meshes present
WARNING
Solution:
Be aware landscape grass has multiple meshes present and check to ensure this is correct.
Material
Using blacklisted material node
ERROR
A blacklisted material node has been used. These have been blacklisted for performance reasons.
A list of blacklisted material nodes can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Material" "node_blacklist" section.
If required, more blacklisted can be added to this list.
Node Blacklist
- Noise
- Arccosine
- Arcsine
- Arctangent
- Arctangent2
- VectorNoise
- DistanceToNearestSurface
- AtmosphericFogColor
- GeneratedBand
- GeneratedOffsetBands
- NormalFromFunction
- NormalFromHeightmap
- NormalFromHeighmapChaos
- ObjectSpaceFalloff
- TextureBombing
- Texture_Bombing_POM
- RGBToHSV
- HSVToRGB
- DebugBinaryValues-Float
- DebugBinaryValues-Int
- DebugFloat2Values
- DebugFloat3Values
- DebugFloat4Values
- DebugOnOff
- DebugScalarValues
- DebugTimeSine
- MF_Debug_MatchColor
- VFX_MF_DebugTimeSine
- MF_VisualizeNormals
- DebugIntValues
- FunctionGraphSetup
- PlotFunctionOnGraph_Derivative
- PlotFunctionOnGraph_Setup_Input
- SpiralBlur-Texture
- AbberatedBlur-Texture
- RayMarchHeightMap
- ParallaxOcclusionMapping
Solution: The nodes should be replaced with more appropriate nodes or use different methods.
Using deprecated material node
WARNING
Material nodes with "DEPRECATED" in its name are considered deprecated and should not be used.
Solution: Replace the material node with another appropriate node
Material Error
ERROR
Material has a compile error.
Resolve the compile error in the material graph
Referencing Material does not compile
ERROR
A material, material instance or material function that references this material.
This verification is similar to how we verify blueprints. All referencing materials should compile.
Solution: Fix compile error in referencer
MaterialInstance
Material Instance warning
ERROR
A texture parameter is wrongly used. Either the texture used to override the parameter is wrong or its compression settings are wrong.
Solution: Provide the right texture or update the texture settings
Niagara System
Missing Effect Type
WARNING
Niagara system is missing an effect type which will prevent scalability settings to be applied.
Solution: Set an Effect Type
RenderTarget
Rendertarget larger than budget
WARNING
The render target texture is too large.
This size limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "RenderTarget" "large_texture" section.
The config value can be changed if more appropriate.
Solution: Reduce the resolution of the RenderTarget texture under 2048 (width and height)
Texture
Key Components: Color Space, Compression Settings, Packing
Color Space (sRGB)
Color space setting directly affect how textures are calculated in the shader numerically.
In general
- Any textures used as color directly (authored as sRGB) should be set as sRGB.
- Any textures used for numerical information such as Normal Map, Roughness Map. and Alpha Mask etc should be set to Linear (sRGB unchecked).
Compression Settings
Compression settings helps to compress textures and save space. Based on how textures are used, the compression settings should be select accordingly, and the texture itself should be named correctly.
Compression setting setup incorrectly in a material instance can generate warning since the texture sampler in the shader is set to a different type.
(In this case, the sampler is exacting an Alpha texture)
There are many different usage for textures, but here are the commonly used ones that people are confused about:
- BC7 or Default - Color Maps (Mostly _D, or anything used directly as color info)
- Normal Map - Normal Maps (B channel will be ignored)
- Alpha - Single channel alpha mask. This is usually used for unpacked _R or _A such as
- Masks - Multiple alpha masks packed into different channels for different usages. This is usually used for _MSK, _SROA etc
Wrong compression settings
ERROR
Based on naming convention, the given texture does not have the right compression settings.
This is derived from looking at the name of the texture and deriving it's texture type.
Each texture type has its own preset settings that need to be set.
The texture groups can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Texture" section.
Solution:
Click here to expand...
Set up the correct texture compression setting (Texture Validation Rules) or use the correct naming convention in the asset name.
To identify if it's a naming issue, or a compression setting issue (or both), you will need to check where the texture is being used.
Used in Material Instance
- Right click → reference viewer
- Find the Material Instance using the texture
- Read the warning. The warning shows the correct compassion setting.
If there's NO warning, then update the name accordingly
Used in Material
If the texture is used directly in a material, you will probably need to update the naming. However, there are rare case that you will need to update the compression settings too.
- When you do update the compression setting, make sure to update the sampler type. It will normally cause a compiling error
The cooking error will ask you to update to the correct type.
However, in this case, the texture is a gray texture, used to tinting. So the correct compression setting should be Alpha, and naming convention should be _A
Wrong SRGB settings
ERROR
Based on naming convention, the given texture does not have the right sRGB settings.
This is derived from looking at the name of the texture and deriving it's texture type.
The texture groups can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Texture" section.
Solution:
Click here to expand...
Set up the correct sRGB setting or use the correct naming convention in the asset name.
In general, the following rules apply, but you can check the usage for the correct sRGB when you have doubt.
sRGB
- Diffuse _D
Linear (sRGB unchecked)
- Masks
- Alpha
- Normal
Suggest packing texture
HINT
Name suggests that this texture is either a Tip (Hair) or a Variation (Hair) texture.
It is suggested to pack this texture to be a VHTA texture.
Solution: Pack texture into VHTA or use the correct naming convention in the asset name.
Compress without Alpha settings
ERROR
Based on naming convention, the given texture has an alpha channel but it isn't used. This effectively doubles the memory footprint when compressed (DXT1 vs DXT5)
The texture groups can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Texture" section.
Solution:
Click here to expand...
Remove alpha channel,enable Compress Without Alpha or use the correct naming convention in the asset name.
Texture dimensions not power of two but mip generation is enabled
ERROR
Mip maps allow for faster and more accurate rendering of textures on objects further away. Textures can only generate mip maps when its dimensions are a power of two (512, 1024, 2048, ...). This texture has mip generation enabled but its dimensions are not a power of two.
Solution: Depending on the intention of this texture, you want to either make the texture dimensions a power of two or disable mip generation for this texture (for example on UI elements)
Texture dimensions not divisible by four while compression is enabled
ERROR
Textures can only be compressed when its dimensions are divisible by four. This texture has compression enabled but its dimensions are not divisible by four.
Solution: Depending on the intention of the texture, you want to either make the texture dimensions divisible by four or explicitly disable compression for this texture.
TextureCube not compressed
ERROR
Cube textures should be compressed.
Solution: Compress the TextureCube
Texture dimensions exceed texture group limit
ERROR
The texture has been configured to not generate mip-maps. For this reason, the size limit set in the texture group can not be applied automatically.
Instead, the texture size must be capped manually.
Solution: Set the maximum in-game size of the texture using the "Maximum Texture Size" field located in the "Compression" section of the texture editor (need to expand the section).
Note that in order to do this, both the width and height, must be power of two.
Non Default Adjustments on Texture
ERROR
The following texture adjustments mustn't be used.
Solution: Author the source texture instead
Texture has incorrect mip map generation settings
ERROR
s
The mip generation settings on this texture are incorrect based on the naming convention of the texture.
This usually happens when the texture has explicit mip generation settings. If you're not sure what to do, it's usually best to set the setting to "From Texture Group"
Doing this can have a positive impact on memory and also improve quality.
Solution: If you're not sure what to do, it's usually best to set the setting to "From Texture Group".
UI Textures usually don't need mip maps. Otherwise, set the texture group to "Scene_UI"
Other textures usually do need mip maps
SkeletalMesh
Empty material slot in Skeletal Mesh
ERROR
Skeletal mesh has material slots that are empty.
Duplicated materials in Skeletal Mesh
WARNING
Skeletal Mesh has duplicate materials. This increases draw call count because elements can not be automatically instanced.
The duplicated material's name is shown in the report.
Solution: Modify the source asset to merge these material channels.
Using placeholder material in Skeletal Mesh
ERROR
Some materials are considered placeholder as these get generated automatically during mesh importing when not careful or are "ERROR" materials.
The problematic material is described in the verify details.
The list of placeholder materials is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Materials" "placeholder_materials" section.
Solution: Replace the material with the appropriate material.
Skeletal mesh with more LODs than optimization settings
WARNING
The skeletal mesh has more LODs than PEEVES has optimization settings.
Solution: The mesh either needs fewer LODs or the PEEVES settings need to be updated to support the given amount of LODs.
Max bone influencers mismatch
WARNING
The skeletal mesh has vertices with more than a certain bone influencers. This maximum is defined on a per-lod basis in the PEEVES configuration.
This issue is likely to happen when LODs still need generating
Solution: Generate LODs or revisit mesh rig
Skeletal mesh lods outdated
ERROR
LODs must be generate for all skeletal meshes that are not excluded based on file paths.
Solution: Use the Peeves Asset Tool to generate proper LOD settings and Lods.
Skeletal mesh has extra bone influences
ERROR
In order to limiting our skeletal meshes to one vertex stream we are requiring that all lods have less than 4 bone influences per vertex.
Solution: Soon this will be automated on LOD0, it is already automated on LOD1+. Until then you can make sure the vertex weights never exceed 4 bone influences.
Morph target with high vertex count
ERROR
The skeletal mesh has a morph target with a very high vertex count (> 15 000)
Solution: This can be costly. Consider lowering vertex count or adding exemption. Exemptions can be added through the PEEVES Asset Tool.
Skeletal mesh has self collision cloth
ERROR
The skeletal mesh has a Chaos Clothing Config with Self Collision enabled.
Solution: Disable self collision on cloth as it is not fully implemented in Chaos.
Skeletal mesh has legacy wind cloth
ERROR
The skeletal mesh has a Chaos Clothing Config with bUsePointBasedWindModel enabled.
Solution: Set bUsePointBasedWindModel=false and adjust lift and drag to look good in all wind speeds.
Skeletal mesh has legacy backstop cloth
ERROR
The skeletal mesh has a Chaos Clothing Config with bUseLegacyBackstop enabled.
Solution: Disable bUseLegacyBackstop and make sure backstops still work as desired.
Skeletal mesh has clothing assets with bad name
ERROR
The skeletal mesh has a ClothingAsset who's name is not in our white list.
Any name in the whitelist is allowed including having an appended instance number: ie: Robe_1
Click here to expand...
Whitelist
"clothing_asset_whitelisted_names":
[
"apron",
"cape",
"coattails",
"dress",
"ears",
"feathers",
"fur",
"hat",
"hair",
"hood",
"hoodup",
"jacket",
"misc",
"pelt",
"ribbon",
"robe",
"scarf",
"skirt",
"sleeves",
"shirt",
"smock",
"textiles",
"veil"
]
Jacket
Cape
Robe
Solution: Rename the ClothingAsset to a whitelisted name.
Skeletal mesh clothing data lod mismatch
ERROR
The skeletal mesh lods are connected to ClothAsset lods that don't match LOD index.
Even though this is legal, it has side effects. It means that each LOD has its own cloth config settings. When transitioning from one LOD to another LOD it won't properly transition between the two sim meshes.
example:
Skeletal Mesh LOD1 is referencing ClothingData ("clothSim_1") LOD0
As you can see the user made 3 ClothingDatas, with only a LOD0, rather than 1 ClothingData with 3 LODs.
Solution: Use ClothAsset lods for Skeletal Mesh lods
Skeletal mesh needs physics asset
ERROR
The Skeletal Mesh needs a physics asset assigned to it because it is the animation owning mesh. This is typically needed in the head meshes and one offs.
Solution: Add the collision physic asset to the skeletal mesh
Skeletal mesh needs capsule shadow physics asset
ERROR
The Skeletal Mesh needs a capsule shadow physics asset assigned to it because it is the animation owning mesh.
Solution: Add the capsule shadow physic asset to the skeletal mesh
Skeletal mesh has clothing assets with too many fixed verts
WARNING
The skeletal mesh has too many fixed verts. This are the pink pinned verts. Ideally you only need one row of fixed verts for the cloth simulation to stay pinned to the skeletal mesh. There is an expense and overhead to fixed verts and we should try to keep them to a minimum.
Here is an example of bad fixed verts
Solution: Reduce the number of fixed verts to just the number needed to pin the clothing to the skeletal mesh.
Skeletal mesh has clothing assets with too many simulated verts
WARNING
The skeletal mesh has too many simulated verts. There is an expense to every simulated vertex and the clothing asset is over budget.
Solution: Reduce the number of simulated.
Skeletal mesh clothing data unused
ERROR
The skeletal mesh contains unused ClothAsset
No LOD Section uses the ClothData. The ClothData should be deleted from the Skeletal Mesh, or properly hooked up to a Section.
Solution: Delete unused Clothing Assets
Skeletal mesh section with clothing data bad slot name
ERROR
In order to help with finding Clothing Datas assigned to the wrong Lod section we have decided to create a naming convention.
If the section is to be assigned a Clothing the material slot name MUST end with _clothRender.
Solution: Rename the Material Slot used for sections that are assigned clothing data to a name ending with _clothRender
Invalid material section generate up to
WARNING
These material sections should have "Generate Up To" settings:
- EyeLash_shdr
- Teeth_shdr
- EyeAO_shdr
Solution: Set generate up to on these sections to the provided number.
Invalid material section shadow casting enabled
WARNING
These material sections should have "Cast shadows" disabled "Unchecked":
- EyeLash_shdr
- Eye_Shdr
- EyeAO_shdr
Solution: Uncheck the Cast Shadows button on the mesh section.
StaticMesh
Triangle count not in budget
ERROR
The cooked static mesh exceeds triangle count budget (15,000 triangles).
This limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Mesh" "Budgets" section.
The config value can be changed if more appropriate.
Solution:
Click here to expand...
- Bring source asset under 15000 triangles.
- If you barely notice a difference between LOD0 (100 percent triangles) and LOD1 (50 percent triangles) your triangle count is still too high.
- Split off reusable high detail meshes and reconstruct asset in a blueprint if needed.
Source asset triangle count not in budget
WARNING
The static mesh source asset exceeds triangle count budget (the cooked static mesh is within budget though).
This limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Mesh" "Budgets" section.
The config value can be changed if more appropriate.
Solution:
Click here to expand...
- Bring source asset under 15000 triangles.
- If you barely notice a difference between LOD0 (100 percent triangles) and LOD1 (50 percent triangles) your triangle count is still too high.
- Split off reusable high detail meshes and reconstruct asset in a blueprint if needed.
UV channel count not in budget
ERROR
The Static Mesh exceeds UV channel count budget.
This limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Mesh" "Budgets" section.
Solution:
Click here to expand...
- View and remove unused UV Channels in the editor when possible
- If more than one uv channel is being used on different parts of a mesh, they can be merged in Maya.
Exemption: Exemptions are allowed when multiple UV sets are required by the material (for scrolling vfx etc...)
Material count not in budget
ERROR
StaticMesh exceeds material count budget.
This limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Mesh" "Budgets" section.
The config value can be changed if more appropriate.
Solution: Reduce the material count.
Exemption: Exemptions can be made for meshes that are not very common in the mod. Exemptions can be added with the PEEVES Asset Tool.
Lod count not in desired range
ERROR
Static Mesh does not have the right amount of LODs.
This limit is defined by a preset value found in in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Mesh" "Budgets" section.
Solution: Bring the LOD count under 5 by generating lods automatically or setting them up manually.
Empty material slot in Static Mesh
ERROR
Static mesh has material slots that are empty.
Duplicated materials in Static Mesh
ERROR
StaticMesh has duplicate materials. This increases draw call count because elements can not be automatically instanced.
Solution: Modify the source asset to merge these material channels.
294px If some material slots cannot be removed in Unreal and the FBX seems to be correct, the next step is to inspect the materials on all LODs in the uasset, Fix anything wrong, save, re-open the asset, and then it will be possible to delete the offending materials in the material slots menu.
When re-importing the asset, the "Reset To FBX" option should be selected.
Using placeholder material in Static Mesh
ERROR
Materials with the name 'lambert##" are considered placeholder as these get generated automatically during mesh importing when not careful. Material names considered placeholder can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "Material" "Budgets" section.
Solution: Replace the material with the appropriate material name.
Mesh Distance Field Scale too large
ERROR
Mesh distance field scale should be 1.0 or lower.
Solution: Reduce mesh distance field.
Exemption: Exemptions can be made for meshes that are not very common in the game.
Mesh using complex as simple collision with high triangle count
ERROR
The Collision Complexity of this mesh is set to ComplexAsSimple and the collision mesh is over a 1000 triangles. This is very expensive compared to the other collision alternatives available.
Solution: Preferably don't use complex as simple collision (use classic collision setup with boxes, convex hulls etc...) or assign a LOD for collision under 500-1000 triangles if Complex As Simple collision is necessary.
Mesh has lightmap UVs
ERROR
Meshes should not have lightmap UVs as we don't bake any lighting offline.
Solution: Remove lightmap UVs.
Collision primitives count is (too) high
WARNING
Collision primitives count is on the high side (warning) or too high (error).
Budgets:
size | size_min | size_max | warning_threshold |
Small | 0 | 75cm | 2 collision primitives |
Medium | 75cm | 200cm | 4 collision primitives |
Large | 200cm | 500cm | 5 collision primitives |
Extra Large | 500cm | infinity | 10 collision primitives |
Budgets are defined in peeves config ('collision_primitive_count').
There is a weighting applied for each collision primitive based on its type when the total primitive count is calculated. This means that you're allowed more box collisions compared to convex hulls.
Type | Convex | Sphylinder | Box | Sphere |
Weight | 1.0 | 0.5 | 0.4 | 0.3 |
As an example if your model has 2 convex primitives and 5 box collisions your weighted collision primitive count would be (2 x 1.0) + (5 x 0.4) = 4.
Solution: It's worth lowering the collision primitives count if possible.
Scale is negative
WARNING
The scale of the mesh is negative.
Solution: All scale coordinates (x, y, z) must be set to a positive number.
Start Awake is enabled
WARNING
"Start Awake" is enabled on Static Mesh Component.
Solution: Disable "Start Awake".
Skeleton
Potential unwanted AnimCurve
WARNING
AnimCurves with names "Pose_##" are considered "unused".
AnimCurves don't come for free, each frame a character gets posed, all curves get allocated.
Solution:
Either rename or remove these AnimCurves.
VFX
Large static vector field
ERROR
The dimensions of the vector field are outside the budget.
Solution: Reduce Axis Size.
Particle system has high warm up time
ERROR
The warmup time of the particle system can not exceed the maximum time because this will cause hitches.
Solution: Reduce the warm up time
World
Map check error
ERROR
We run UE4's inbuilt Map Check on Worlds that we verify and report the errors as this rule.
Solution: Read the Details of the failure report item for instructions. Try running a manual Map Check on your map for more context. Epic Games documentation is here.
Map check warning
WARNING
We run UE4's inbuilt Map Check on Worlds that we verify and report the warnings as this rule.
Solution: Read the Details of the failure report item for instructions. Try running a manual Map Check on your map for more context. Epic Games documentation is here.
Map check info
HINT
We run UE4's inbuilt Map Check on Worlds that we verify and report the helpful info as this rule.
Solution: Read the Details of the failure report item for instructions. Try running a manual Map Check on your map for more context. Epic Games documentation is here.
Multiple LevelBound Actors
WARNING
There is more than one LevelBounds actor in the level, when there should be only one.
Solution: Remove the unnecessary LevelBound actors.
Actor Outside LevelBounds
WARNING
The actor is located outside of the LevelBounds.
Solution: Change the location of the actor so that it falls within the LevelBounds or move the actor to the correct level (usually a neighbor tile).
Instance Outside LevelBounds
WARNING
A Static Mesh Component instance is located outside of the LevelBounds.
Solution: Change the location of the instance so that it falls within the LevelBounds or move the instance to the correct component in the correct level (usually a neighbor tile).
LevelBounds AutoUpdate Enabled
WARNING
LevelBounds has the setting called "Auto Update Bounds" set to True.
Solution: Uncheck "Auto Update Bounds" on the LevelBounds actor.
LevelBounds are setup incorrectly
WARNING
LevelBounds had either their box extent adjusted or their actor transform rotated.
Solution: Use actor transform Scale instead of Box Extent (reset it to <0.5, 0.5, 0.5>) to scale the level bounds. Reset Level Bounds transform Rotation (<0, 0, 0>).
Sanctuary Blueprint In Overland
WARNING
Sanctuary Blueprints should not be used outside of the Sanctuary space.
Solution: Remove Sanctuary Blueprints from your level or replace them with something else.
Runtime errors during Map Check
ERROR
While running Map Check on a map Unreal logged errors related to the map or an actor in the map.
Solution: Try opening the map in the editor and running a manual Map Check then check the OutputLog for errors.
Runtime warnings during Map Check
WARNING
While running Map Check on a map Unreal logged warnings related to the map or an actor in the map.
Solution: Try opening the map in the editor and running a manual Map Check then check the OutputLog for errors.
Landscape material instance is using too many textures
ERROR
We define a hard texture limit for individual material instances on Landscapes. This instances is using too many textures.
Solution: Reduce landscape complexity.
Landscape component is using too many layers
ERROR
We define a hard layer usage limit for individual components/sections on Landscapes. This component is using too many layers.
Solution: Reduce landscape complexity.
Landscape grass map invalidated
ERROR
Landscape grass map is invalidated due to material changes.
Solution: Grass map needs to be rebuilt
Station Component has failed its self-check
ERROR
Stations perform a battery of checks. The detail text of this error will explain what needs to be done to fix the component and its owner actor.
Solution: See the detail text of the error.
Reflection Capture has issues
WARNING
There is an issue with a reflection capture in the level.
This can be due to several issues.
Solution: Make sure to refresh the reflection capture or make sure the static cubemap is assigned
Collision primitive on component is invalid
ERROR
A PrimitiveComponent on an actor in the World has an invalid collision primitive.
Solution: See the detail text of the error. If the component is a mesh component, look at the collision properties of the static mesh asset.
- If it uses Complex As Simple collision for a valid reason*, remove the unused collision primitives in the static mesh editor using the
Collision -> Remove collision
menu - If it doesn't need Complex As Simple collision, set collision complexity to the project default in the details panel
* Complex collision can be used when accurate player collision response is needed on a static mesh where collision is hard to define with standard collision primitives (box, sphere, convex hulls) without going over collision primitive budget. Do keep collision triangle count as low as possible (under 200-1000) and use the lod for collision where possible.
Example: floor meshes in the dungeons, large cliff rocks that are walkable, large bridge low poly shells, etc...
Mercuna Setup Issue
WARNING
There was an issue with an actor component which is not setup correctly to interact with Mercuna
Solution: The way Mercuna determines if an actor should be considered an obstacle when rebuilding octrees is it looks at all the primitive components on the actor, and for each it...
- Ensure that "CanEverAffectNavigation" is set to true AND
- "HasCustomNavigableGeometry" needs to be set to `EvenIfNotCollidable` or `DontExport
- OR "Collision" is `Enabled` AND the "Collision Response vs Pawn" is `Block`
Actor is blacklisted
ERROR
The actor specified is blacklisted.
Solution: Usually, this actor simply needs deleting.
Global Lighting Master Setup Issue
ERROR
The GlobalLightingMaster Actor in the level is setup incorrectly.
Solution: See the error details for more info.
Post Process Volume using post process materials
WARNING
The Post Process Volume actor in the level has post process materials assigned.
This will negatively impact performance especially on high resolution displays and should ideally be removed.
Solution: Remove materials in Post Process Volume.
Post Process Volume using blacklisted material
ERROR
The Post Process Volume is using a blacklisted material. This can hinder performance.
A list of blacklisted materials can be found in "<creatorkit directory>\PhoenixGame\Tools\Scripts\EditorPython\PEEVES\Config\peeves.ini.json". In the "PostProcessVolume" "blacklisted_post_process_materials" section.
Solution: Remove blacklisted material from Post Process Volume.
Post Process Volume overrides exposure settings
WARNING
The Post Process Volume actor in the level is overriding exposure settings.
This should not be done in production levels and should be modified using the light presets.
Solution: Change exposure settings through light presets.
Static mesh component uses lod mesh
WARNING
A static mesh component in a non-lod level is using a mesh with '_LOD' in its name.
Solution:
- If the mesh with '_LOD' in its name was generated for level LOD purposes (look at it's perforce history). Find the non-lod version in the content browser and use that.
- If the mesh was created by a content creator but accidentally has '_LOD' in its name (for example a mesh from megascans often has '_LOD#' in the name by default), remove _LOD# from its name.
Trigger Is Movable
WARNING
A Trigger (Box, Volume, ...) has its Mobility set to Movable. This can cause costly update overlaps on begin play when streaming in.
Solution:
- Set Mobility to Static
Too many level script actors
WARNING
There are too many level script actors. This can cause level actors to have BeginPlay() run more than once
Solution:
- Remove level script actors so there is only one in level
Data Assets
Customizable Character Blacklisted Character Piece Used
ERROR
A Customizable Character is referencing a black listed character piece.
Solution: Use the Character Creator and replace the blacklisted character piece with a valid one.