VIRTUOS_Docs/_site/search.json

360 lines
78 KiB
JSON
Raw Normal View History

2025-04-06 10:51:02 +00:00
[
2025-04-07 20:33:27 +02:00
{
"objectID": "index.html",
"href": "index.html",
"title": "Home",
"section": "",
"text": "This is the main page of your documentation. You can add more sections or documentation as you need.\n\n\n\nEasy setup\nUser-friendly interface\nRich documentation\n\nFor more details, refer to the Getting Started section in the sidebar."
},
{
"objectID": "index.html#features",
"href": "index.html#features",
"title": "Home",
"section": "",
"text": "Easy setup\nUser-friendly interface\nRich documentation\n\nFor more details, refer to the Getting Started section in the sidebar."
},
2025-04-06 10:51:02 +00:00
{
"objectID": "about.html",
"href": "about.html",
"title": "About",
"section": "",
"text": "About this site"
},
{
2025-04-07 20:33:27 +02:00
"objectID": "sites/styleguide.html#linter-and-style-guide-documentation",
"href": "sites/styleguide.html#linter-and-style-guide-documentation",
"title": "Styleguide",
"section": "Linter and Style Guide Documentation",
"text": "Linter and Style Guide Documentation\nMore technical documentation regarding Linter and the Style Guide can be found at our ReadTheDocs page.",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#discuss-this-style-guide",
"href": "sites/styleguide.html#discuss-this-style-guide",
"title": "Styleguide",
"section": "Discuss This Style Guide",
"text": "Discuss This Style Guide\nGamemakin LLC has a public Discord channel at http://discord.gamemak.in with a #linter channel if youd like to discuss all things style guide and Linter plugin.",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#linking-to-this-document",
"href": "sites/styleguide.html#linking-to-this-document",
"title": "Styleguide",
"section": "Linking To This Document",
"text": "Linking To This Document\nEvery section of this style guide is numbered for both easy reference and easy linking. You can link to any section directly by simply append a hash tag and the section number to the end of http://ue4.style For example, if you want to send someone to the first principle of this style guide you would append #0.1, resulting in http://ue4.style#0.1.",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#forks-and-translations",
"href": "sites/styleguide.html#forks-and-translations",
"title": "Styleguide",
"section": "Forks And Translations",
"text": "Forks And Translations\nIf you have made a notable fork or translation that is not suitable for a pull request into this repo, please submit a pull request to add the fork or translation here.\n\nKorean Translation by ymkim50\nRussian Translation by CosmoMyzrailGorynych\nJapanese Translation by akenatsu\nChinese Translation by Beijing Skylens Tech.",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#important-terminology",
"href": "sites/styleguide.html#important-terminology",
"title": "Styleguide",
"section": "Important Terminology",
"text": "Important Terminology\n\n\nLevels/Maps\nThe word map generally refers to what the average person calls a level and may be used interchangeably. See this terms history here.\n\n\nIdentifiers\nAn Identifier is anything that resembles or serves as a “name”. For example, the name of an asset, or the name of a material later, or a blueprint property, a variable, or a folder name, or for a data table row name, etc…\n\n\n\nCases\nThere are a few different ways you can CaseWordsWhenNaming. Here are some common casing types:\n\nPascalCase\nCapitalize every word and remove all spaces, e.g. DesertEagle, StyleGuide, ASeriesOfWords.\ncamelCase\nThe first letter is always lowercase but every following word starts with uppercase, e.g. desertEagle, styleGuide, aSeriesOfWords.\nSnake_case\nWords can arbitrarily start upper or lowercase but words are separated by an underscore, e.g. desert_Eagle, Style_Guide, a_Series_of_Words.\n\n\n\n\nVariables / Properties\nThe words variable and property in most contexts are interchangable. If they are both used together in the same context however:\n\n\nProperty\nUsually refers to a variable defined in a class. For example, if BP_Barrel had a variable bExploded, bExploded may be referred to as a property of BP_Barrel.\nWhen in the context of a class, it is often used to imply accessing previously defined data.\n\n\n\nVariable\nUsually refers to a variable defined as a function argument or a local variable inside a function.\nWhen in the context of a class, it is often used to convey discussion about its definition and what it will hold.",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#major-contributors",
"href": "sites/styleguide.html#major-contributors",
"title": "Styleguide",
"section": "Major Contributors",
"text": "Major Contributors\n\nMichael Allar: GitHub, Twitter\nCosmoMyzrailGorynych\nbillymcguffin\nakenatsu",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#license",
"href": "sites/styleguide.html#license",
"title": "Styleguide",
"section": "License",
"text": "License\nCopyright (c) 2016 Gamemakin LLC\nSee LICENSE\n⬆ Back to Top",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html#amendments",
"href": "sites/styleguide.html#amendments",
"title": "Styleguide",
"section": "Amendments",
"text": "Amendments\nWe encourage you to fork this guide and change the rules to fit your teams style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts.",
"crumbs": [
"Home",
"Basics"
]
},
{
"objectID": "sites/styleguide.html",
"href": "sites/styleguide.html",
"title": "Styleguide",
"section": "",
"text": "This Styleguiade is adapted by Gamemakin UE5 Styleguide.",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#principles",
"href": "sites/styleguide.html#principles",
"title": "Styleguide",
"section": "0. Principles",
"text": "0. Principles\nThese principles have been adapted from idomatic.js style guide.\n\n\n0.1 If your UE4 project already has a style guide, you should follow it.\nIf you are working on a project or with a team that has a pre-existing style guide, it should be respected. Any inconsistency between an existing style guide and this guide should defer to the existing.\nStyle guides should be living documents. You should propose style guide changes to an existing style guide as well as this guide if you feel the change benefits all usages.\n\n“Arguments over style are pointless. There should be a style guide, and you should follow it.”\nRebecca Murphey\n\n\n\n\n0.2 All structure, assets, and code in any Unreal Engine 4 project should look like a single person created it, no matter how many people contributed.\nMoving from one project to another should not cause a re-learning of style and structure. Conforming to a style guide removes unneeded guesswork and ambiguities.\nIt also allows for more productive creation and maintenance as one does not need to think about style. Simply follow the instructions. This style guide is written with best practices in mind, meaning that by following this style guide you will also minimize hard to track issues.\n\n\n\n0.3 Friends do not let friends have bad style.\nIf you see someone working either against a style guide or no style guide, try to correct them.\nWhen working within a team or discussing within a community such as Unreal Slackers, it is far easier to help and to ask for help when people are consistent. Nobody likes to help untangle someones Blueprint spaghetti or deal with assets that have names they cant understand.\nIf you are helping someone whose work conforms to a different but consistent and sane style guide, you should be able to adapt to it. If they do not conform to any style guide, please direct them here.\n\n\n\n0.4 A team without a style guide is no team of mine.\nWhen joining an Unreal Engine 4 team, one of your first questions should be “Do you have a style guide?”. If the answer is no, you should be skeptical about their ability to work as a team.\n\n\n\n0.5 Dont Break The Law\nGamemakin LLC is not a lawyer, but please dont introduce illegal actions and behavior to a project, including but not limited to:\n\nDont distribute content you dont have the rights to distribute\nDont infringe on someone elses copyrighted or trademark material\nDont steal content\nFollow licensing restrictions on content, e.g. attribute when attributions are needed",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#globally-enforced-opinions",
"href": "sites/styleguide.html#globally-enforced-opinions",
"title": "Styleguide",
"section": "00. Globally Enforced Opinions",
"text": "00. Globally Enforced Opinions\n@TODO: Make this section 1 and update this document accordingly. Or maybe we dont?\n\n\n00.1 Forbidden Characters\n\nIdentifiers\nIn any Identifier of any kind, never use the following unless absolutely forced to:\n\nWhite space of any kind\nBackward slashes \\\nSymbols i.e. #!@$%\nAny Unicode character\n\nAny Identifier should strive to only have the following characters when possible (the [A-Za-z0-9_]+)\n\nABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n1234567890\n_ (sparingly)\n\nThe reasoning for this is this will ensure the greatest compatibility of all data across all platforms across all tools, and help prevent downtime due to potentially bad character handling for identifiers in code you dont control.",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#table-of-contents",
"href": "sites/styleguide.html#table-of-contents",
"title": "Styleguide",
"section": "Table of Contents",
"text": "Table of Contents\n\n\nAsset Naming Conventions\nDirectory Structure\nBlueprints\nStatic Meshes\nParticle Systems\nLevels / Maps\nTextures",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#asset-naming-conventions",
"href": "sites/styleguide.html#asset-naming-conventions",
"title": "Styleguide",
"section": "1. Asset Naming Conventions",
"text": "1. Asset Naming Conventions\nNaming conventions should be treated as law. A project that conforms to a naming convention is able to have its assets managed, searched, parsed, and maintained with incredible ease.\nMost things are prefixed with prefixes being generally an acronym of the asset type followed by an underscore.\n\n\n\n1.1 Base Asset Name - Prefix_BaseAssetName_Variant_Suffix\nAll assets should have a Base Asset Name. A Base Asset Name represents a logical grouping of related assets. Any asset that is part of this logical group should follow the standard of Prefix_BaseAssetName_Variant_Suffix.\nKeeping the pattern Prefix_BaseAssetName_Variant_Suffix and in mind and using common sense is generally enough to warrant good asset names. Here are some detailed rules regarding each element.\nPrefix and Suffix are to be determined by the asset type through the following Asset Name Modifier tables.\nBaseAssetName should be determined by a short and easily recognizable name related to the context of this group of assets. For example, if you had a character named Bob, all of Bobs assets would have the BaseAssetName of Bob.\nFor unique and specific variations of assets, Variant is either a short and easily recognizable name that represents logical grouping of assets that are a subset of an assets base name. For example, if Bob had multiple skins these skins should still use Bob as the BaseAssetName but include a recognizable Variant. An Evil skin would be referred to as Bob_Evil and a Retro skin would be referred to as Bob_Retro.\nFor unique but generic variations of assets, Variant is a two digit number starting at 01. For example, if you have an environment artist generating nondescript rocks, they would be named Rock_01, Rock_02, Rock_03, etc. Except for rare exceptions, you should never require a three digit variant number. If you have more than 100 assets, you should consider organizing them with different base names or using multiple variant names.\nDepending on how your asset variants are made, you can chain together variant names. For example, if you are creating flooring assets for an Arch Viz project you should use the base name Flooring with chained variants such as Flooring_Marble_01, Flooring_Maple_01, Flooring_Tile_Squares_01.\n\n\n1.1 Examples\n\n1.1e1 Bob\n\n\n\n\n\n\n\nAsset Type\nAsset Name\n\n\n\n\nSkeletal Mesh\nSK_Bob\n\n\nMaterial\nM_Bob\n\n\nTexture (Diffuse/Albedo)\nT_Bob_D\n\n\nTexture (Normal)\nT_Bob_N\n\n\nTexture (Evil Diffuse)\nT_Bob_Evil_D\n\n\n\n\n\n1.1e2 Rocks\n\n\n\n\n\n\n\nAsset Type\nAsset Name\n\n\n\n\nStatic Mesh (01)\nS_Rock_01\n\n\nStatic Mesh (02)\nS_Rock_02\n\n\nStatic Mesh (03)\nS_Rock_03\n\n\nMaterial\nM_Rock\n\n\nMaterial Instance (Snow)\nMI_Rock_Snow\n\n\n\n\n\n\n\n\n\n1.2 Asset Name Modifiers\nWhen naming an asset, use these tables to determine the prefix and suffix to use with an assets Base Asset Name.\n\nSections\n\n1.2.1 Most Common\n\n\n1.2.2 Animations\n\n\n1.2.3 Artificial Intelligence\n\n\n1.2.4 Blueprints\n\n\n1.2.5 Materials\n\n\n1.2.6 Textures\n\n\n1.2.7 Miscellaneous\n\n\n1.2.8 Paper 2D\n\n\n1.2.9 Physics\n\n\n1.2.10 Sound\n\n\n1.2.11 User Interface\n\n\n1.2.12 Effects\n\n\n\n\n\n1.2.1 Most Common\n\n\n\nAsset Type\nPrefix\nSuffix\nNotes\n\n\n\n\nLevel / Map\n\n\nShould be in a folder called Maps.\n\n\nLevel (Persistent)\n\n_P\n\n\n\nLevel (Audio)\n\n_Audio\n\n\n\nLevel (Lighting)\n\n_Lighting\n\n\n\nLevel (Geometry)\n\n_Geo\n\n\n\nLevel (Gameplay)\n\n_Gameplay\n\n\n\nBlueprint\nBP_\n\n\n\n\nMaterial\nM_\n\n\n\n\nStatic Mesh\nS_\n\nMany use SM_. We use S_.\n\n\nSkeletal Mesh\nSK_\n\n\n\n\nTexture\nT_\n_?\nSee Textures\n\n\nParticle System\nPS_\n\n\n\n\nWidget Blueprint\nWBP_\n\n\n\n\n\n\n\n\n\n1.2.2 Animations\n\n\n\n\n\n\n\n\n\nAsset Type\nPrefix\nSuffix\nNotes\n\n\n\n\nAim Offset\nAO_\n\n\n\n\nAim Offset 1D\nAO_\n\n\n\n\nAnimation Blueprint\nABP_\n\n\n\n\nAnimation Composite\nAC_\n\n\n\n\nAnimation Montage\nAM_\n\n\n\n\nAnimation Sequence\nA_\n\n\n\n\nBlend Space\nBS_\n\n\n\n\nBlend Space 1D\nBS_\n\n\n\n\nLevel Sequence\nLS_\n\n\
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#content-directory-structure",
"href": "sites/styleguide.html#content-directory-structure",
"title": "Styleguide",
"section": "2. Content Directory Structure",
"text": "2. Content Directory Structure\nEqually important as asset names, the directory structure style of a project should be considered law. Asset naming conventions and content directory structure go hand in hand, and a violation of either causes unneeded chaos.\nThere are multiple ways to lay out the content of a UE4 project. In this style, we will be using a structure that relies more on filtering and search abilities of the Content Browser for those working with assets to find assets of a specific type instead of another common structure that groups asset types with folders.\n\nIf you are using the prefix naming convention above, using folders to contain assets of similar types such as Meshes, Textures, and Materials is a redundant practice as asset types are already both sorted by prefix as well as able to be filtered in the content browser.\n\n ### 2e1 Example Project Content Structure\n|-- Content\n |-- GenericShooter\n\n |-- Art\n | |-- Industrial\n | | |-- Ambient\n | | |-- Machinery\n | | |-- Pipes\n | |-- Nature\n | | |-- Ambient\n | | |-- Foliage\n | | |-- Rocks\n | | |-- Trees\n | |-- Office\n |-- Characters\n | |-- Bob\n | |-- Common\n | | |-- Animations\n\n | | |-- Audio\n | |-- Jack\n | |-- Steve\n | |-- Zoe\n\n |-- Core\n\n | |-- Characters\n | |-- Engine\n | |-- GameModes\n\n | |-- Interactables\n | |-- Pickups\n | |-- Weapons\n |-- Effects\n | |-- Electrical\n | |-- Fire\n | |-- Weather\n |-- Maps\n\n | |-- Campaign1\n | |-- Campaign2\n |-- MaterialLibrary\n\n | |-- Debug\n | |-- Metal\n | |-- Paint\n | |-- Utility\n | |-- Weathering\n |-- Placeables\n | |-- Pickups\n |-- Weapons\n |-- Common\n |-- Pistols\n | |-- DesertEagle\n | |-- RocketPistol\n |-- Rifles\n\nThe reasons for this structure are listed in the following sub-sections.\n\nSections\n\n2.1 Folder Names\n\n\n2.2 Top-Level Folders\n\n\n2.3 Developer Folders\n\n\n2.4 Maps\n\n\n2.5 Core\n\n\n2.6 Assets and AssetTypes\n\n\n2.7 Large Sets\n\n\n2.8 Material Library\n\n\n ### 2.1 Folder Names\nThese are common rules for naming any folder in the content structure.\n\n\n2.1.1 Always Use PascalCase*\nPascalCase refers to starting a name with a capital letter and then instead of using spaces, every following word also starts with a capital letter. For example, DesertEagle, RocketPistol, and ASeriesOfWords.\nSee Cases.\n\n\n\n2.1.2 Never Use Spaces\nRe-enforcing 2.1.1, never use spaces. Spaces can cause various engineering tools and batch processes to fail. Ideally, your projects root also contains no spaces and is located somewhere such as D:\\Project instead of C:\\Users\\My Name\\My Documents\\Unreal Projects.\n\n\n\n2.1.3 Never Use Unicode Characters And Other Symbols\nIf one of your game characters is named Zoë, its folder name should be Zoe. Unicode characters can be worse than Spaces for engineering tool and some parts of UE4 dont support Unicode characters in paths either.\nRelated to this, if your project has unexplained issues and your computers user name has a Unicode character (i.e. your name is Zoë), any project located in your My Documents folder will suffer from this issue. Often simply moving your project to something like D:\\Project will fix these mysterious issues.\nUsing other characters outside a-z, A-Z, and 0-9 such as @, -, _, ,, *, and # can also lead to unexpected and hard to track issues on other platforms, source control, and weaker engineering tools.\n\n ### 2.2 Use A Top Level Folder For Project Specific Assets\nAll of a projects assets should exist in a folder named after the project. For example, if your project is named Generic Shooter, all of its co
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#blueprints-1",
"href": "sites/styleguide.html#blueprints-1",
"title": "Styleguide",
"section": "3. Blueprints",
"text": "3. Blueprints\nThis section will focus on Blueprint classes and their internals. When possible, style rules conform to Epics Coding Standard.\nRemember: Blueprinting badly bears blunders, beware! (Phrase by KorkuVeren)\n\nSections\n\n3.1 Compiling\n\n\n3.2 Variables\n\n\n3.3 Functions\n\n\n3.4 Graphs\n\n\n\n\n\n3.1 Compiling\nAll blueprints should compile with zero warnings and zero errors. You should fix blueprint warnings and errors immediately as they can quickly cascade into very scary unexpected behavior.\nDo not submit broken blueprints to source control. If you must store them on source control, shelve them instead.\nBroken blueprints can cause problems that manifest in other ways, such as broken references, unexpected behavior, cooking failures, and frequent unneeded recompilation. A broken blueprint has the power to break your entire game.\n\n\n\n\n3.2 Variables\nThe words variable and property may be used interchangeably.\n\nSections\n\n3.2.1 Naming\n\n\n3.2.2 Editable\n\n\n3.2.3 Categories\n\n\n3.2.4 Access\n\n\n3.2.5 Advanced\n\n\n3.2.6 Transient\n\n\n3.2.7 Config\n\n\n\n\n\n3.2.1 Naming\n\n\n\n3.2.1.1 Nouns\nAll non-boolean variable names must be clear, unambiguous, and descriptive nouns.\n\n\n\n\n3.2.1.2 PascalCase\nAll non-boolean variables should be in the form of PascalCase.\n\n\n3.2.1.2e Examples:\n\nScore\nKills\nTargetPlayer\nRange\nCrosshairColor\nAbilityID\n\n\n\n\n\n\n3.2.1.3 Boolean b Prefix\nAll booleans should be named in PascalCase but prefixed with a lowercase b.\nExample: Use bDead and bEvil, not Dead and Evil.\nUE4 Blueprint editors know not to include the b in user-friendly displays of the variable.\n\n\n\n\n3.2.1.4 Boolean Names\n\n\n3.2.1.4.1 General And Independent State Information\nAll booleans should be named as descriptive adjectives when possible if representing general information. Do not include words that phrase the variable as a question, such as Is. This is reserved for functions.\nExample: Use bDead and bHostile not bIsDead and bIsHostile.\nTry to not use verbs such as bRunning. Verbs tend to lead to complex states.\n\n\n\n3.2.1.4.2 Complex States\nDo not to use booleans to represent complex and/or dependent states. This makes state adding and removing complex and no longer easily readable. Use an enumeration instead.\nExample: When defining a weapon, do not use bReloading and bEquipping if a weapon cant be both reloading and equipping. Define an enumeration named EWeaponState and use a variable with this type named WeaponState instead. This makes it far easier to add new states to weapons.\nExample: Do not use bRunning if you also need bWalking or bSprinting. This should be defined as an enumeration with clearly defined state names.\n\n\n\n\n\n3.2.1.5 Considered Context\nAll variable names must not be redundant with their context as all variable references in Blueprint will always have context.\n\n\n3.2.1.5e Examples:\nConsider a Blueprint called BP_PlayerCharacter.\nBad\n\nPlayerScore\nPlayerKills\nMyTargetPlayer\nMyCharacterName\nCharacterSkills\nChosenCharacterSkin\n\nAll of these variables are named redundantly. It is implied that the variable is representative of the BP_PlayerCharacter it belongs to because it is BP_PlayerCharacter that is defining these variables.\nGood\n\nScore\nKills\nTargetPlayer\nName\nSkills\nSkin\n\n\n\n\n\n\n3.2.1.6 Do Not Include Atomic Type Names\nAtomic or primitive variables are variables that represent data in their simplest form, such as booleans, integers, floats, and enumerations.\nStrings and vectors are considered atomic in terms of style when working with Blueprints, however they are technically not atomic.\n\nWhile vectors consist of three floats, vectors are often able to be manipulated as a whole, same with rotators.\n\n\nDo not consider Text variables as atomic, they are secretly hiding localization functionality. The atomic type of a string of characters is String, not Text.\n\nAtomic variables should not have their type name in their name.\nExample: Use Score, Kills, and Description not ScoreFloat, FloatKills,
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#static-meshes",
"href": "sites/styleguide.html#static-meshes",
"title": "Styleguide",
"section": "4. Static Meshes",
"text": "4. Static Meshes\nThis section will focus on Static Mesh assets and their internals.\n\nSections\n\n4.1 UVs\n\n\n4.2 LODs\n\n\n4.3 Modular Socketless Snapping\n\n\n4.4 Must Have Collision\n\n\n4.5 Correct Scale\n\n\n\n\n\n4.1 Static Mesh UVs\nIf Linter is reporting bad UVs and you cant seem to track it down, open the resulting .log file in your projects Saved/Logs folder for exact details as to why its failing. I am hoping to include these messages in the Lint report in the future.\n\n\n\n4.1.1 All Meshes Must Have UVs\nPretty simple. All meshes, regardless how they are to be used, should not be missing UVs.\n\n\n\n\n4.1.2 All Meshes Must Not Have Overlapping UVs for Lightmaps\nPretty simple. All meshes, regardless how they are to be used, should have valid non-overlapping UVs.\n\n\n\n\n\n4.2 LODs Should Be Set Up Correctly\nThis is a subjective check on a per-project basis, but as a general rule any mesh that can be seen at varying distances should have proper LODs.\n\n\n\n\n4.3 Modular Socketless Assets Should Snap To The Grid Cleanly\nThis is a subjective check on a per-asset basis, however any modular socketless assets should snap together cleanly based on the projects grid settings.\nIt is up to the project whether to snap based on a power of 2 grid or on a base 10 grid. However if you are authoring modular socketless assets for the marketplace, Epics requirement is that they snap cleanly when the grid is set to 10 units or bigger.\n\n\n\n\n4.4 All Meshes Must Have Collision\nRegardless of whether an asset is going to be used for collision in a level, all meshes should have proper collision defined. This helps the engine with things such as bounds calculations, occlusion, and lighting. Collision should also be well-formed to the asset.\n\n\n\n\n4.5 All Meshes Should Be Scaled Correctly\nThis is a subjective check on a per-project basis, however all assets should be scaled correctly to their project. Level designers or blueprint authors should not have to tweak the scale of meshes to get them to confirm in the editor. Scaling meshes in the engine should be treated as a scale override, not a scale correction.\n⬆ Back to Top",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#niagara",
"href": "sites/styleguide.html#niagara",
"title": "Styleguide",
"section": "5. Niagara",
"text": "5. Niagara\nThis section will focus on Niagara assets and their internals.\n\nSections\n\n5.1 Naming Rules\n\n\n\n\n\n5.1 No Spaces, Ever\nAs mentioned in 00.1 Forbidden Identifiers, spaces and all white space characters are forbidden in identifiers. This is especially true for Niagara systems as it makes working with things significantly harder if not impossible when working with HLSL or other means of scripting within Niagara and trying to reference an identifier.\n(Original Contribution by @dunenkoff)\n⬆ Back to Top",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#levels-maps",
"href": "sites/styleguide.html#levels-maps",
"title": "Styleguide",
"section": "6. Levels / Maps",
"text": "6. Levels / Maps\nSee Terminology Note regarding “levels” vs “maps”.\nThis section will focus on Level assets and their internals.\n\nSections\n\n6.1 No Errors Or Warnings\n\n\n6.2 Lighting Should Be Built\n\n\n6.3 No Player Visible Z Fighting\n\n\n6.4 Marketplace Specific Rules\n\n\n\n\n\n6.1 No Errors Or Warnings\nAll levels should load with zero errors or warnings. If a level loads with any errors or warnings, they should be fixed immediately to prevent cascading issues.\nYou can run a map check on an open level in the editor by using the console command “map check”.\nPlease note: Linter is even more strict on this than the editor is currently, and will catch load errors that the editor will resolve on its own.\n\n\n\n\n6.2 Lighting Should Be Built\nIt is normal during development for levels to occasionally not have lighting built. When doing a test/internal/shipping build or any build that is to be distributed however, lighting should always be built.\n\n\n\n\n6.3 No Player Visible Z Fighting\nLevels should not have any z-fighting in all areas visible to the player.\n\n\n\n\n6.4 Marketplace Specific Rules\nIf a project is to be sold on the UE4 Marketplace, it must follow these rules.\n\n\n\n\n6.4.1 Overview Level\nIf your project contains assets that should be visualized or demoed, you must have a map within your project that contains the name “Overview”.\nThis overview map, if it is visualizing assets, should be set up according to Epics guidelines.\nFor example, InteractionComponent_Overview.\n\n\n\n\n6.4.2 Demo Level\nIf your project contains assets that should be demoed or come with some sort of tutorial, you must have a map within your project that contains the name “Demo”. This level should also contain documentation within it in some form that illustrates how to use your project. See Epics Content Examples project for good examples on how to do this.\nIf your project is a gameplay mechanic or other form of system as opposed to an art pack, this can be the same as your “Overview” map.\nFor example, InteractionComponent_Overview_Demo, ExplosionKit_Demo.\n⬆ Back to Top",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/styleguide.html#textures-1",
"href": "sites/styleguide.html#textures-1",
"title": "Styleguide",
"section": "7. Textures",
"text": "7. Textures\nThis section will focus on Texture assets and their internals.\n\nSections\n\n7.1 Dimensions Are Powers of 2\n\n\n7.2 Texture Density Should Be Uniform\n\n\n7.3 Textures Should Be No Bigger than 8192\n\n\n7.4 Correct Texture Groups\n\n\n\n\n\n7.1 Dimensions Are Powers of 2\nAll textures, except for UI textures, must have its dimensions in multiples of powers of 2. Textures do not have to be square.\nFor example, 128x512, 1024x1024, 2048x1024, 1024x2048, 1x512.\n\n\n\n\n7.2 Texture Density Should Be Uniform\nAll textures should be of a size appropriate for their standard use case. Appropriate texture density varies from project to project, but all textures within that project should have a consistent density.\nFor example, if a projects texture density is 8 pixel per 1 unit, a texture that is meant to be applied to a 100x100 unit cube should be 1024x1024, as that is the closest power of 2 that matches the projects texture density.\n\n\n\n\n7.3 Textures Should Be No Bigger than 8192\nNo texture should have a dimension that exceeds 8192 in size, unless you have a very explicit reason to do so. Often, using a texture this big is simply just a waste of resources.\n\n\n\n\n7.4 Textures Should Be Grouped Correctly\nEvery texture has a Texture Group property used for LODing, and this should be set correctly based on its use. For example, all UI textures should belong in the UI texture group.\n⬆ Back to Top",
"crumbs": [
"Homepage",
"Styleguide"
]
},
{
"objectID": "sites/webservices.html",
"href": "sites/webservices.html",
"title": "Websevices",
"section": "",
"text": "Forgejo is an open source source control system. As game development not only needs to track text files but large binaries (Images, Videos, Audio etc.), traditional providers like GitHub or GitLab might not scale or become quite pricey. This is why a self-hosted solution was set up.\nThe Forgejo instance is currently hosted on Hetzner Cloud cpx11. For storage, a 1tb Hetzner Storage Box is attached via CIFS. The Forgejo instance can be accessed on https://code.virtuos.world.\n\n\n\nOn a new server, add a new user that is not root:\n\nadduser newusername\nusermod -aG sudo newusername\nsudo -i -u git newusername\n\nCreate git user account and add it to the docker usergroup, then switch to the new user.\n\nsudo adduser --system --shell /bin/bash -gecos 'Git Version Control' --group --disabled-password --home /home/git/ git\nsudo usermod -aG docker git\n\nAutomount the storage box by editing /etc/fstab. Important: Use the UID and GID of the newly created git user! You can get them by typing id git.\n\nsudo nano /etc/fstab\n\nAdd this line\n\n//<username>.your-storagebox.de/backup /mnt/<path> cifs iocharset=utf8,rw,credentials=/etc/backup-credentials.txt,uid=<system account>,gid=<system group>,file_mode=0660,dir_mode=0770 0 0\nCreate the credentials file…\nsudo nano /etc/backup-credentials.txt\n…and fill it with your username and password.\nusername=uXXXXXX\npassword=yourpassword\n\nInstall cifs-utils\n\napt install cifs-utils\n\nMounting might result in an error regarding the iocharset, to fix that do:\n\napt install linux-generic\napt install linux-modules-extra-$(uname -r)\nreboot\n\nMount the storage\n\nsudo mount -a\n\nInstall docker-compose\n\nsudo apt install docker-compose \n\nCreate docker directory\n\nsudo mkdir ~/forgejo\n\nCreate docker-compose file\n\nsudo nano docker-compose.yml\n\nPaste the following content. This assumes your UID is 115 and your GID is 120. Use id -u <username> to find your values. It also maps the repository to use the storage box.\n\n\nEdit: I removed - /mnt/source/git/repositories:/data/git/repositories as its slow and hooks wont work on the Storage Box!\n\nversion: '3'\n\nnetworks:\n forgejo:\n external: false\n\nservices:\n server:\n image: codeberg.org/forgejo/forgejo:1.20\n container_name: forgejo\n environment:\n - USER_UID=115\n - USER_GID=120\n restart: always\n networks:\n - forgejo\n volumes:\n - ./forgejo:/data\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n - /mnt/source/git/lfs:/data/lfs\n\n ports:\n - '3000:3000'\n - '222:22'\nFor some reason in my case, the app.ini pointed to /data/git/lfs instead of data/lfs. Fixing this resulted in actually using /mnt/source/git/lfs on the host.\n\nInstall nginx\n\nsudo apt install nginx\n\nSetup firewall\n\nsudo ufw allow OpenSSH\nsudo ufw allow \"Nginx Full\"\nsudo ufw enable\n\nOpen nginx config\n\nsudo nano /etc/nginx/sites-available/forgejo\n\nAdd:\n\nserver {\n listen 80;\n listen [::]:80;\n server_name my.domain.tld;\n\n location / {\n client_max_body_size 4G;\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real_IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n(This assumes you have registered a domain and added A and AAAA records.)\n\nCreate symlink to actually enable the site\n\nsudo ln -s /etc/nginx/sites-available/forgejo /etc/nginx/sites-enabled/\n\nInstall Certbot\n\nsudo apt install snapd\nsudo snap install --classic certbot\nsudo ln -s /snap/bin/certbot /usr/bin/certbot\n\nGet Lets Encrypt certificate. For testing, add --test-cert.\n\nsudo certbot --nginx\n\nRun your docker compose\n\ncd ~/forgejo\nsudo docker-compose up -d\n\nTo redirect the homepage to the repository view:\n\nserver {\n server_name code.virtuos.world;\n\n location / {\n client_max_body_size 4G;\n proxy_pass ht
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#installation-on-ubuntu-server-22.04",
"href": "sites/webservices.html#installation-on-ubuntu-server-22.04",
"title": "Websevices",
"section": "",
"text": "On a new server, add a new user that is not root:\n\nadduser newusername\nusermod -aG sudo newusername\nsudo -i -u git newusername\n\nCreate git user account and add it to the docker usergroup, then switch to the new user.\n\nsudo adduser --system --shell /bin/bash -gecos 'Git Version Control' --group --disabled-password --home /home/git/ git\nsudo usermod -aG docker git\n\nAutomount the storage box by editing /etc/fstab. Important: Use the UID and GID of the newly created git user! You can get them by typing id git.\n\nsudo nano /etc/fstab\n\nAdd this line\n\n//<username>.your-storagebox.de/backup /mnt/<path> cifs iocharset=utf8,rw,credentials=/etc/backup-credentials.txt,uid=<system account>,gid=<system group>,file_mode=0660,dir_mode=0770 0 0\nCreate the credentials file…\nsudo nano /etc/backup-credentials.txt\n…and fill it with your username and password.\nusername=uXXXXXX\npassword=yourpassword\n\nInstall cifs-utils\n\napt install cifs-utils\n\nMounting might result in an error regarding the iocharset, to fix that do:\n\napt install linux-generic\napt install linux-modules-extra-$(uname -r)\nreboot\n\nMount the storage\n\nsudo mount -a\n\nInstall docker-compose\n\nsudo apt install docker-compose \n\nCreate docker directory\n\nsudo mkdir ~/forgejo\n\nCreate docker-compose file\n\nsudo nano docker-compose.yml\n\nPaste the following content. This assumes your UID is 115 and your GID is 120. Use id -u <username> to find your values. It also maps the repository to use the storage box.\n\n\nEdit: I removed - /mnt/source/git/repositories:/data/git/repositories as its slow and hooks wont work on the Storage Box!\n\nversion: '3'\n\nnetworks:\n forgejo:\n external: false\n\nservices:\n server:\n image: codeberg.org/forgejo/forgejo:1.20\n container_name: forgejo\n environment:\n - USER_UID=115\n - USER_GID=120\n restart: always\n networks:\n - forgejo\n volumes:\n - ./forgejo:/data\n - /etc/timezone:/etc/timezone:ro\n - /etc/localtime:/etc/localtime:ro\n - /mnt/source/git/lfs:/data/lfs\n\n ports:\n - '3000:3000'\n - '222:22'\nFor some reason in my case, the app.ini pointed to /data/git/lfs instead of data/lfs. Fixing this resulted in actually using /mnt/source/git/lfs on the host.\n\nInstall nginx\n\nsudo apt install nginx\n\nSetup firewall\n\nsudo ufw allow OpenSSH\nsudo ufw allow \"Nginx Full\"\nsudo ufw enable\n\nOpen nginx config\n\nsudo nano /etc/nginx/sites-available/forgejo\n\nAdd:\n\nserver {\n listen 80;\n listen [::]:80;\n server_name my.domain.tld;\n\n location / {\n client_max_body_size 4G;\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real_IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n(This assumes you have registered a domain and added A and AAAA records.)\n\nCreate symlink to actually enable the site\n\nsudo ln -s /etc/nginx/sites-available/forgejo /etc/nginx/sites-enabled/\n\nInstall Certbot\n\nsudo apt install snapd\nsudo snap install --classic certbot\nsudo ln -s /snap/bin/certbot /usr/bin/certbot\n\nGet Lets Encrypt certificate. For testing, add --test-cert.\n\nsudo certbot --nginx\n\nRun your docker compose\n\ncd ~/forgejo\nsudo docker-compose up -d\n\nTo redirect the homepage to the repository view:\n\nserver {\n server_name code.virtuos.world;\n\n location / {\n client_max_body_size 4G;\n proxy_pass http://localhost:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real_IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n\n location = / {\n return 301 https://$host/explore/repos;\n }\n\n listen [::]:443 ssl ipv6only=on; # managed by Certbot\n listen 443 ssl; # managed by Certbot\n ssl_certificate /etc/letsencrypt/live/code.virtuos.world/full
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#customizing-forgejogitea",
"href": "sites/webservices.html#customizing-forgejogitea",
"title": "Websevices",
"section": "",
"text": "On the host, the path starts from the folder with your docker-compose file, /forgejo/gitea/public/assets/\nPaste the images with the respective names listed below:\n\npublic/img/logo.svg - Used for site icon, app icon\n\npublic/img/logo.png - Used for Open Graph\n\npublic/img/avatar_default.png - Used as the default avatar image\n\npublic/img/apple-touch-icon.png - Used on iOS devices for bookmarks\n\npublic/img/favicon.svg - Used for favicon\n\npublic/img/favicon.png - Used as fallback for browsers that dont support SVG favicons",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#installation-on-uberspace",
"href": "sites/webservices.html#installation-on-uberspace",
"title": "Websevices",
"section": "Installation on Uberspace",
"text": "Installation on Uberspace\n\nDownload latest release package, upload and untar:\n\ntar -xf <name.tar.gz>\n\nCreate an empty MySQL database:\n\nmysql -e \"CREATE DATABASE <username>_leantime\"\n\nPoint your domain to the public/ directory\nEdit /leantime/public/.htaccess:\n\nOptions +SymLinksIfOwnerMatch\nRewriteEngine On\nRewriteBase /\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteRule ^ index.php [L]\n\nGet your MySQL credentials:\n\nmy_print_defaults client\n\nFill in your database credentials (username, password, host, dbname) in config/sample.env\n\nRename config/sample.env to config/.env\n\nNavigate to <yourdomain.com>/install\n\nFollow instructions to install database and set up first user account",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#updating-leantime",
"href": "sites/webservices.html#updating-leantime",
"title": "Websevices",
"section": "Updating Leantime",
"text": "Updating Leantime\nLeantime comes with an update script in /leantime:\n./updateLeantime.sh",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#installation-on-uberspace-1",
"href": "sites/webservices.html#installation-on-uberspace-1",
"title": "Websevices",
"section": "Installation on Uberspace",
"text": "Installation on Uberspace\nThe Wordpress installation is well documented on\nhttps://lab.uberspace.de/guide_wordpress/",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#updating-wordpress",
"href": "sites/webservices.html#updating-wordpress",
"title": "Websevices",
"section": "Updating Wordpress",
"text": "Updating Wordpress\nWordpress updates itself. Plugins may need manual updating via the Wordpress Interface.",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#installation-on-uberspace-2",
"href": "sites/webservices.html#installation-on-uberspace-2",
"title": "Websevices",
"section": "Installation on Uberspace",
"text": "Installation on Uberspace\nThe Wiki.js installation is well documented on\nhttps://lab.uberspace.de/guide_wiki-js/",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/webservices.html#updating-wiki.js",
"href": "sites/webservices.html#updating-wiki.js",
"title": "Websevices",
"section": "Updating Wiki.js",
"text": "Updating Wiki.js\nAn update script is available at the same location:\nhttps://lab.uberspace.de/guide_wiki-js/",
"crumbs": [
"Homepage",
"Webservices"
]
},
{
"objectID": "sites/getstarted.html",
"href": "sites/getstarted.html",
"title": "Getting Started",
"section": "",
"text": "If you want to take a look inside a project, there are currently three important repositories:\n\nVIRTUOS_Playground: The repository contains the Unreal Engine Project\nVIRTUOS_Assets: Contains all Project related assets like 3D-Models, Graphics etc.\nVIRTUOS_Documents: Contains all written Documents\n\n\nSetting up the project with UE5\nIf youre familiar with Git, youll likely already know how to get the files.\ngit pull https://code.virtuos.world/VIRTUOS_WORLD/VIRTUOS_Docs.git\nIf youre not comforatable with the command line, you can install a Git GUI like Github Desktop.",
"crumbs": [
"Homepage",
"Getting Started"
]
},
{
"objectID": "sites/getstarted.html#setting-up-the-project-with-ue5",
"href": "sites/getstarted.html#setting-up-the-project-with-ue5",
"title": "Getting Started",
"section": "Setting up the project with UE5",
"text": "Setting up the project with UE5\nIf youre familiar with Git, youll likely already know how to get the files.\ngit pull https://code.virtuos.world/VIRTUOS_WORLD/VIRTUOS_Docs.git\nIf you*re not comforatable with the command line, you can install a Git GUI like Github Desktop."
},
{
"objectID": "sites/overview.html",
"href": "sites/overview.html",
"title": "About",
2025-04-06 10:51:02 +00:00
"section": "",
2025-04-07 20:33:27 +02:00
"text": "About this site",
"crumbs": [
"Homepage",
"Overview"
]
2025-04-06 10:51:02 +00:00
}
]