{"name":"Quick camo selection definition guide","title":"Quick camo selection definition guide","type":"topic","url":"https://community.bistudio.com/wiki/Quick_camo_selection_definition_guide","revid":364105,"updated":"2024-05-04T21:56:34Z","aliases":[],"markdown":"### Intention\n\nThis guide describes a process to easily create camo selections for models to allow reskinning even for a large amount of assets.\n\n### Benefit\n\n1. Instead of defining the camo selection on each RES LOD and the view LODs one by one, this approach just needs one definition and the O2script does the rest.\n1. With the help of tools, you can create easily a mapping for many assets and mass process all assets, thus reducing the effort considerably.\n\n### Scope\n\n1. This is not a beginners guide. Please refer to related information section at the end to learn the basics.\n1. This is not about creating textures.\n1. This is not about explaining tools usage.\n1. This is not explaining config basics.\n1. This does not (yet) include the definition of selections for materials.\n\n### What are camo selections\n\nCamo selections are term to describe named selections to be used to apply different textures to a model.\nThis can be done by either means of [config](http://pmc.editing.wiki/doku.php?id=arma2:texturing:hiddenselectionstextures) or scripting.\n\n### How does the O2script work\n\nNote: technical detail to understand the process in detail.\n\n1. The model needs to have the default textures assigned.\n1. The script creates the camo selections based on the supplied texture - it looks for points/faces with the texture assigned.\n1. It assigns to these points/faces the selection name provided.\n\nSo in simple terms the script looks with the supplied texture in the model and assigns to their surface the camo selection with the desired name.\n\n### Process\n\nBrief summary:\n\n1. Save the two bio.2s scripts on this page to your .\\ObjectBuilder\\O2Scripts folder.\n1. Get the list all textures assigned to a model (for the main components).\n1. Prepare batch file with selectionName to textureName mapping for the model.\n1. Run the batch file.\n1. Add the new selectionNames in the sections[] in cfgModels of the model.cfg.\n1. Set the selectionName-textureName pair in hiddenSelections[] and hiddenSelectionsTextures[] in the config.cpp.\n1. Binarize the models with the updated model.cfg.\n\n#### Get texture list\n\nRequirement:\nYou need the paid subscriber versions of [mikero's tools](https://forums.bistudio.com/topic/113852-mikeros-dos-tools/). Namely **dep3d**.\n\n```\nDeP3d [-options..] AnyFolder | Anyfile[.p3d] | any list | \"comma,separated,list\"\nOptions\n...\n-FL[nn] list files (see readme)\n```\n\nSample calls:\n\n```\nDeP3d.exe -P -FL p:\\namespace\\path\\modelName.p3d\nDeP3d.exe -P -FL p:\\namespace\\path\\ >> TextureListForPath.txt\n```\n\nAlternatives:\n\n- Get the textures assigned to the model via ObjectBuilder or some other tool.\n- Use a hex/text editor and search for paa.\n\n#### Update model\n\nNext create the mapping of selection name to texture name and execute the following O2script with the path to the p3d along with the mapping pair.\n\n> [!WARNING]\n> Only works on source models (MLOD format).\n\nFor convenience you can use this batch file and define multiple mappings for a model, and multiple models with their mapping to mass process multiple files in one go.\n\nCreateNamedSelectionFromMapping.bat\n\n```\ncd /D \"c:\\Steam\\SteamApps\\common\\Arma 3 Tools\\ObjectBuilder\\\"\n\nO2Script.exe -a O2Scripts\\NamedSelectionCreate.bio2s p:\\namespace\\path\\modelName.p3d selectionName namespace\\path\\textureName.paa\n\nexit\n```\n\nNamedSelectionCreate.bio2s (create a text file, paste the following content, save as the said filename with bio2s as extension and move to the O2Scripts folder of ObjectBuilder)\n\n```\n#include \"std\\lodNames.inc\"\n\n_createNewSelection =\n{\n    private [\"_obj\",\"_selName\",\"_sel\"];\n\n    _obj = _this select 0;\n    _selName = _this select 1;\n    _sel = _this select 2;\n\n    if (_obj checkSelectionName _selName) then\n    {\n        //new selection already exists\n        //ToDo: handle that if needed\n    }\n    else\n    {\n        _obj save _sel as _selName;\n    };\n};\n\n_getTexOrMatName =\n{\n    private[\"_obj\",\"_fi\",\"_isMat\"];\n    _obj = _this@0;\n    _fi = _this@1;\n    _isMat = _this@2;\n\n    if(_isMat)then\n    {\n        getMaterial (_obj face _x)\n    }\n    else\n    {\n        getTexture (_obj face _x)\n    }\n};\n\n_getProxyFaces =\n{\n    private [\"_obj\",\"_faces\",\"_face\",\"_proxySel\"];\n    _obj = _this;\n\n    _faces = [];\n    {\n        if (_x @ [0,6]==\"proxy:\") then\n        {\n            _proxySel = _obj loadSelection _x;\n            _face = (getSelectedFaces _proxySel) @ 0;\n            _faces set [count _faces,_face];\n        };\n    } forEach getSelections _obj;\n\n    _faces\n};\n\n_faceIndicesByTexture =\n{\n    private[\"_obj\",\"_texName\",\"_texIsMat\",\"_proxyFaces\",\"_faceIndices\"];\n    _obj = _this@0;\n    _texName = _this@1;\n    _texIsMat = _this@2;\n\n    _proxyFaces = _obj call _getProxyFaces;\n\n    _faceIndices = [];\n    _obj forEachFace [{[_obj,_x,_texIsMat] call _getTexOrMatName == _texName},\n    {\n        if(!(_x in _proxyFaces))then\n        {\n            _faceIndices set [count _faceIndices,_x];\n        };\n    }];\n\n    _faceIndices\n};\n\n_selectByFaceIndices =\n{\n    private [\"_obj\",\"_faceIndices\",\"_sel\"];\n    _obj = _this@0;\n    _facesIndices = _this@1;\n\n    _sel = newSelection _obj;\n    _sel selectFaces _facesIndices;\n    selectPointsFromFaces _sel\n};\n\n_selectionByTexture =\n{\n    private[\"_obj\",\"_texName\",\"_texIsMat\",\"_faceIndices\"];\n    _obj = _this@0;\n    _texName = _this@1;\n    _texIsMat = _this@2;\n\n    _faceIndices = [_obj,_texName,_texIsMat] call _faceIndicesByTexture;\n    [_obj,_faceIndices] call _selectByFaceIndices\n};\n\n_createNewSelectionByTexture =\n{\n    private[\"_obj\",\"_selName\",\"_texName\",\"_texIsMat\",\"_sel\"];\n\n    _obj = _this select 0;\n    _selName = _this select 1;\n    _texName = _this select 2;\n    _texIsMat = _this select 3;\n\n    _sel = [_obj,_texName,_texIsMat] call _selectionByTexture;\n    [_obj,_selName,_sel] call _createNewSelection;\n};\n\n_sourcePath = this@0;\n_targetPath = _sourcePath;\n\nif ((count this) == 2) then {_targetPath = this@1;};\n\n_selectionName = this@1;\n_textureName = this@2;\n\n_p3d = newLODObject;\n_p3d loadP3D _sourcePath;\n\n_LODs = getObjects _p3d;\n_resolutions = getResolutions _p3d;\n\nconsole=openStandardIO;\nconsole<<\"_sourcePath: \"<<_sourcePath<<eoln;\nconsole<<\"_selectionName: \"<<_selectionName<<eoln;\nconsole<<\"_textureName: \"<<_textureName<<eoln;\n\nfor \"_i\" from 0 to (count _p3d-1) do\n{\n    _currentLOD = _LODs @ _i;\n    _currentResolution = _resolutions @ _i;\n\n    if (IS_LOD_RESOLUTION(_currentResolution)) then\n    {\n        [_currentLOD,_selectionName,_textureName,false] call _createNewSelectionByTexture;\n    };\n};\n\nsave (_p3d as _targetPath);\n```\n\n#### Model.cfg\n\nYou need to add the new named selectionNames to the sections[] in cfgModels:\n\n```cpp\nclass CfgModels\n{\n    class ParentClass;\n    class ModelName: ParentClass\n    {\n        sectionsInherit = \"ParentClass\";\n        sections[] = { \"NewCamoSelection_1\", \"NewCamoSelection_2\" };\n    };\n};\n```\n\nSee also: ArmA: Howto Model Config - CfgModels explanations - sections\n\n#### Config\n\nFinally define the named selection to texture pair in the class of the weapon or unit/vehicle/object:\n\n```cpp\nclass CfgWeapons // or CfgVehicles\n{\n    class ParentClass;\n    class YourTAG_ClassName : ParentClass\n    {\n        hiddenSelections[] = { \"camo_1\", \"camo_2\" };\n        hiddenSelectionsTextures[] = { \"\\namespace\\path\\textureName.paa\", \"\\namespace\\path\\textureName.paa\" };\n    };\n};\n```\n\nSee also: CfgVehicles Config Reference - hiddenSelections\n\n> [!WARNING]\n> Define the **correct loading order** via *requiredAddons* in the *cfgPatches* header to make sure your definition overwrites potential other definitions.\n\n### Create named selections overview\n\nIf a model already has named selections defined, you can use this batch script to list them/log them to file.\n\n> [!WARNING]\n> Only works on source models (MLOD format).\n\nListNamedSelectionsMapping.bat\n\n```\n// Adjust path\ncd /D \"c:\\Steam\\SteamApps\\common\\Arma 3 Tools\\ObjectBuilder\\\"\n\nO2Script.exe -a O2Scripts\\NamedSelectionsOverview.bio2s p:\\namespace\\path\\modelName.p3d >> NamedSelectionsOverview.txt\n\nexit\n```\n\nSample output:\n\n```\n_sourcePath: p:\\namespace\\path\\modelName.p3d\n_currentResolution: 1\n_selectionName: name1\n_textures: namespace\\path\\textureName4711.paa\n_selectionName: name2\n_textures: namespace\\path\\textureName4712.paa\n...\n```\n\nNamedSelectionsOverview.bio2s (create a text file, paste the following content, save as the said filename with bio2s as extension and move to the O2Scripts folder of ObjectBuilder)\n\n```\n#include \"std\\lodNames.inc\"\n\n_createOverviewForCurrentLOD =\n{\n    private[\"_object\"];\n\n    _object = _this select 0;\n\n    {\n        private[\"_selectionName\",\"_textures\",\"_selection\",\"_selectedFaces\"];\n        _selectionName = _x;\n\n        _textures = [];\n        _selection = _object loadSelection _selectionName;\n        _selectedFaces = getSelectedFaces _selection;\n\n        {\n            private[\"_face\",\"_texture\"];\n            _face = _x;\n\n            _texture = getTexture (_object face _face);\n            if (!(_texture in _textures)) then\n            {\n\n                _textures set [count _textures,_texture];\n            };\n        } forEach _selectedFaces;\n\n        console<<\"_selectionName: \"<<_selectionName<<eoln;\n\n        {\n            private[\"_texture\"];\n            _texture = _x;\n            if (_texture != \"\") then\n            {\n                console<<\"_textures: \"<<_texture<<eoln;\n            };\n        } forEach _textures;\n    } forEach (getSelections _object);\n};\n\n_sourcePath = this@0;\n\n_p3d = newLODObject;\n_p3d loadP3D _sourcePath;\n\n_LODs = getObjects _p3d;\n_resolutions = getResolutions _p3d;\n\nconsole=openStandardIO;\n\nfor \"_i\" from 0 to ((count _p3d) - 1) do\n{\n    _currentLOD = _LODs @ _i;\n    _currentResolution = _resolutions @ _i;\n\n    if (IS_LOD_RESOLUTION(_currentResolution)) then\n    {\n        console<<\"_currentResolution: \"<<str _currentResolution<<eoln;\n\n        [_currentLOD] call _createOverviewForCurrentLOD;\n    };\n};\n```\n\n### Credits\n\n- T_D\n- mikero\n\n### Related information\n\n#### Videos\n\n- [Retexture tutorial Part 1](https://www.youtube.com/watch?v=F8a6qTURq2A)\n- [Re-Texture Tutorial ♦ Part 1: Starting with the basics](https://www.youtube.com/watch?v=9CYbP5PXBe4)\n- [Modding Tutorial 1 - Retexturing & Config](https://www.youtube.com/watch?v=qZoI7f0ApSI)\n- [How to make and import custom textures into Arma 3 via Editor](https://www.youtube.com/watch?v=ldhhemPPFiA)\n\n#### Text\n\n- [Simple Re-texturing Guide (From Start To Finish)](https://forums.bistudio.com/topic/151777-tutorialsimple-re-texturing-guide-from-start-to-finish/)\n- http://www.battlegroup-xtra.eu/index.php/45-Arma-2-modding/3343-Mod-Restoring-ReTexturing.html\n- [Quick and dirty tut on hidden selections](https://forums.bistudio.com/topic/90124-hidden-selections/)\n- [How to create hidden selections in your models](http://fab.ofp.free.fr/Tutorials/Hidden_Selections.htm)\n- http://www.ofpec.com/addons_depot/index.php?action=details&id=25_Texturing_How-To_for_Armed_Assault_by_Soul_Assassin\n- Arma: Texture Naming Rules\n\n- [PMC wiki: Texturing](http://pmc.editing.wiki/doku.php?id=arma:texturing)\n- [PMC wiki: ReTexturing Tools Basics Tutorial by Scarecrow398](http://pmc.editing.wiki/doku.php?id=arma3:texturing:scarecrow398-retexturing-tools-basics-tutorial)\n- [PMC wiki: Basic Retexturing Tutorial of Arma 3 Character by Stiltman](http://pmc.editing.wiki/doku.php?id=arma3:config:stiltman-retexturing-tutorial)\n- [PMC wiki: hiddenSelectionsTextures](http://pmc.editing.wiki/doku.php?id=arma2:texturing:hiddenselectionstextures)","sections":[{"heading":"Intention","level":3,"markdown":"This guide describes a process to easily create camo selections for models to allow reskinning even for a large amount of assets."},{"heading":"Benefit","level":3,"markdown":"1. Instead of defining the camo selection on each RES LOD and the view LODs one by one, this approach just needs one definition and the O2script does the rest.\n1. With the help of tools, you can create easily a mapping for many assets and mass process all assets, thus reducing the effort considerably."},{"heading":"Scope","level":3,"markdown":"1. This is not a beginners guide. Please refer to related information section at the end to learn the basics.\n1. This is not about creating textures.\n1. This is not about explaining tools usage.\n1. This is not explaining config basics.\n1. This does not (yet) include the definition of selections for materials."},{"heading":"What are camo selections","level":3,"markdown":"Camo selections are term to describe named selections to be used to apply different textures to a model.\nThis can be done by either means of [config](http://pmc.editing.wiki/doku.php?id=arma2:texturing:hiddenselectionstextures) or scripting."},{"heading":"How does the O2script work","level":3,"markdown":"Note: technical detail to understand the process in detail.\n\n1. The model needs to have the default textures assigned.\n1. The script creates the camo selections based on the supplied texture - it looks for points/faces with the texture assigned.\n1. It assigns to these points/faces the selection name provided.\n\nSo in simple terms the script looks with the supplied texture in the model and assigns to their surface the camo selection with the desired name."},{"heading":"Process","level":3,"markdown":"Brief summary:\n\n1. Save the two bio.2s scripts on this page to your .\\ObjectBuilder\\O2Scripts folder.\n1. Get the list all textures assigned to a model (for the main components).\n1. Prepare batch file with selectionName to textureName mapping for the model.\n1. Run the batch file.\n1. Add the new selectionNames in the sections[] in cfgModels of the model.cfg.\n1. Set the selectionName-textureName pair in hiddenSelections[] and hiddenSelectionsTextures[] in the config.cpp.\n1. Binarize the models with the updated model.cfg."},{"heading":"Get texture list","level":4,"markdown":"Requirement:\nYou need the paid subscriber versions of [mikero's tools](https://forums.bistudio.com/topic/113852-mikeros-dos-tools/). Namely **dep3d**.\n\n```\nDeP3d [-options..] AnyFolder | Anyfile[.p3d] | any list | \"comma,separated,list\"\nOptions\n...\n-FL[nn] list files (see readme)\n```\n\nSample calls:\n\n```\nDeP3d.exe -P -FL p:\\namespace\\path\\modelName.p3d\nDeP3d.exe -P -FL p:\\namespace\\path\\ >> TextureListForPath.txt\n```\n\nAlternatives:\n\n- Get the textures assigned to the model via ObjectBuilder or some other tool.\n- Use a hex/text editor and search for paa."},{"heading":"Update model","level":4,"markdown":"Next create the mapping of selection name to texture name and execute the following O2script with the path to the p3d along with the mapping pair.\n\n> [!WARNING]\n> Only works on source models (MLOD format).\n\nFor convenience you can use this batch file and define multiple mappings for a model, and multiple models with their mapping to mass process multiple files in one go.\n\nCreateNamedSelectionFromMapping.bat\n\n```\ncd /D \"c:\\Steam\\SteamApps\\common\\Arma 3 Tools\\ObjectBuilder\\\"\n\nO2Script.exe -a O2Scripts\\NamedSelectionCreate.bio2s p:\\namespace\\path\\modelName.p3d selectionName namespace\\path\\textureName.paa\n\nexit\n```\n\nNamedSelectionCreate.bio2s (create a text file, paste the following content, save as the said filename with bio2s as extension and move to the O2Scripts folder of ObjectBuilder)\n\n```\n#include \"std\\lodNames.inc\"\n\n_createNewSelection =\n{\n    private [\"_obj\",\"_selName\",\"_sel\"];\n\n    _obj = _this select 0;\n    _selName = _this select 1;\n    _sel = _this select 2;\n\n    if (_obj checkSelectionName _selName) then\n    {\n        //new selection already exists\n        //ToDo: handle that if needed\n    }\n    else\n    {\n        _obj save _sel as _selName;\n    };\n};\n\n_getTexOrMatName =\n{\n    private[\"_obj\",\"_fi\",\"_isMat\"];\n    _obj = _this@0;\n    _fi = _this@1;\n    _isMat = _this@2;\n\n    if(_isMat)then\n    {\n        getMaterial (_obj face _x)\n    }\n    else\n    {\n        getTexture (_obj face _x)\n    }\n};\n\n_getProxyFaces =\n{\n    private [\"_obj\",\"_faces\",\"_face\",\"_proxySel\"];\n    _obj = _this;\n\n    _faces = [];\n    {\n        if (_x @ [0,6]==\"proxy:\") then\n        {\n            _proxySel = _obj loadSelection _x;\n            _face = (getSelectedFaces _proxySel) @ 0;\n            _faces set [count _faces,_face];\n        };\n    } forEach getSelections _obj;\n\n    _faces\n};\n\n_faceIndicesByTexture =\n{\n    private[\"_obj\",\"_texName\",\"_texIsMat\",\"_proxyFaces\",\"_faceIndices\"];\n    _obj = _this@0;\n    _texName = _this@1;\n    _texIsMat = _this@2;\n\n    _proxyFaces = _obj call _getProxyFaces;\n\n    _faceIndices = [];\n    _obj forEachFace [{[_obj,_x,_texIsMat] call _getTexOrMatName == _texName},\n    {\n        if(!(_x in _proxyFaces))then\n        {\n            _faceIndices set [count _faceIndices,_x];\n        };\n    }];\n\n    _faceIndices\n};\n\n_selectByFaceIndices =\n{\n    private [\"_obj\",\"_faceIndices\",\"_sel\"];\n    _obj = _this@0;\n    _facesIndices = _this@1;\n\n    _sel = newSelection _obj;\n    _sel selectFaces _facesIndices;\n    selectPointsFromFaces _sel\n};\n\n_selectionByTexture =\n{\n    private[\"_obj\",\"_texName\",\"_texIsMat\",\"_faceIndices\"];\n    _obj = _this@0;\n    _texName = _this@1;\n    _texIsMat = _this@2;\n\n    _faceIndices = [_obj,_texName,_texIsMat] call _faceIndicesByTexture;\n    [_obj,_faceIndices] call _selectByFaceIndices\n};\n\n_createNewSelectionByTexture =\n{\n    private[\"_obj\",\"_selName\",\"_texName\",\"_texIsMat\",\"_sel\"];\n\n    _obj = _this select 0;\n    _selName = _this select 1;\n    _texName = _this select 2;\n    _texIsMat = _this select 3;\n\n    _sel = [_obj,_texName,_texIsMat] call _selectionByTexture;\n    [_obj,_selName,_sel] call _createNewSelection;\n};\n\n_sourcePath = this@0;\n_targetPath = _sourcePath;\n\nif ((count this) == 2) then {_targetPath = this@1;};\n\n_selectionName = this@1;\n_textureName = this@2;\n\n_p3d = newLODObject;\n_p3d loadP3D _sourcePath;\n\n_LODs = getObjects _p3d;\n_resolutions = getResolutions _p3d;\n\nconsole=openStandardIO;\nconsole<<\"_sourcePath: \"<<_sourcePath<<eoln;\nconsole<<\"_selectionName: \"<<_selectionName<<eoln;\nconsole<<\"_textureName: \"<<_textureName<<eoln;\n\nfor \"_i\" from 0 to (count _p3d-1) do\n{\n    _currentLOD = _LODs @ _i;\n    _currentResolution = _resolutions @ _i;\n\n    if (IS_LOD_RESOLUTION(_currentResolution)) then\n    {\n        [_currentLOD,_selectionName,_textureName,false] call _createNewSelectionByTexture;\n    };\n};\n\nsave (_p3d as _targetPath);\n```"},{"heading":"Model.cfg","level":4,"markdown":"You need to add the new named selectionNames to the sections[] in cfgModels:\n\n```cpp\nclass CfgModels\n{\n    class ParentClass;\n    class ModelName: ParentClass\n    {\n        sectionsInherit = \"ParentClass\";\n        sections[] = { \"NewCamoSelection_1\", \"NewCamoSelection_2\" };\n    };\n};\n```\n\nSee also: ArmA: Howto Model Config - CfgModels explanations - sections"},{"heading":"Config","level":4,"markdown":"Finally define the named selection to texture pair in the class of the weapon or unit/vehicle/object:\n\n```cpp\nclass CfgWeapons // or CfgVehicles\n{\n    class ParentClass;\n    class YourTAG_ClassName : ParentClass\n    {\n        hiddenSelections[] = { \"camo_1\", \"camo_2\" };\n        hiddenSelectionsTextures[] = { \"\\namespace\\path\\textureName.paa\", \"\\namespace\\path\\textureName.paa\" };\n    };\n};\n```\n\nSee also: CfgVehicles Config Reference - hiddenSelections\n\n> [!WARNING]\n> Define the **correct loading order** via *requiredAddons* in the *cfgPatches* header to make sure your definition overwrites potential other definitions."},{"heading":"Create named selections overview","level":3,"markdown":"If a model already has named selections defined, you can use this batch script to list them/log them to file.\n\n> [!WARNING]\n> Only works on source models (MLOD format).\n\nListNamedSelectionsMapping.bat\n\n```\n// Adjust path\ncd /D \"c:\\Steam\\SteamApps\\common\\Arma 3 Tools\\ObjectBuilder\\\"\n\nO2Script.exe -a O2Scripts\\NamedSelectionsOverview.bio2s p:\\namespace\\path\\modelName.p3d >> NamedSelectionsOverview.txt\n\nexit\n```\n\nSample output:\n\n```\n_sourcePath: p:\\namespace\\path\\modelName.p3d\n_currentResolution: 1\n_selectionName: name1\n_textures: namespace\\path\\textureName4711.paa\n_selectionName: name2\n_textures: namespace\\path\\textureName4712.paa\n...\n```\n\nNamedSelectionsOverview.bio2s (create a text file, paste the following content, save as the said filename with bio2s as extension and move to the O2Scripts folder of ObjectBuilder)\n\n```\n#include \"std\\lodNames.inc\"\n\n_createOverviewForCurrentLOD =\n{\n    private[\"_object\"];\n\n    _object = _this select 0;\n\n    {\n        private[\"_selectionName\",\"_textures\",\"_selection\",\"_selectedFaces\"];\n        _selectionName = _x;\n\n        _textures = [];\n        _selection = _object loadSelection _selectionName;\n        _selectedFaces = getSelectedFaces _selection;\n\n        {\n            private[\"_face\",\"_texture\"];\n            _face = _x;\n\n            _texture = getTexture (_object face _face);\n            if (!(_texture in _textures)) then\n            {\n\n                _textures set [count _textures,_texture];\n            };\n        } forEach _selectedFaces;\n\n        console<<\"_selectionName: \"<<_selectionName<<eoln;\n\n        {\n            private[\"_texture\"];\n            _texture = _x;\n            if (_texture != \"\") then\n            {\n                console<<\"_textures: \"<<_texture<<eoln;\n            };\n        } forEach _textures;\n    } forEach (getSelections _object);\n};\n\n_sourcePath = this@0;\n\n_p3d = newLODObject;\n_p3d loadP3D _sourcePath;\n\n_LODs = getObjects _p3d;\n_resolutions = getResolutions _p3d;\n\nconsole=openStandardIO;\n\nfor \"_i\" from 0 to ((count _p3d) - 1) do\n{\n    _currentLOD = _LODs @ _i;\n    _currentResolution = _resolutions @ _i;\n\n    if (IS_LOD_RESOLUTION(_currentResolution)) then\n    {\n        console<<\"_currentResolution: \"<<str _currentResolution<<eoln;\n\n        [_currentLOD] call _createOverviewForCurrentLOD;\n    };\n};\n```"},{"heading":"Credits","level":3,"markdown":"- T_D\n- mikero"},{"heading":"Related information","level":3,"markdown":""},{"heading":"Videos","level":4,"markdown":"- [Retexture tutorial Part 1](https://www.youtube.com/watch?v=F8a6qTURq2A)\n- [Re-Texture Tutorial ♦ Part 1: Starting with the basics](https://www.youtube.com/watch?v=9CYbP5PXBe4)\n- [Modding Tutorial 1 - Retexturing & Config](https://www.youtube.com/watch?v=qZoI7f0ApSI)\n- [How to make and import custom textures into Arma 3 via Editor](https://www.youtube.com/watch?v=ldhhemPPFiA)"},{"heading":"Text","level":4,"markdown":"- [Simple Re-texturing Guide (From Start To Finish)](https://forums.bistudio.com/topic/151777-tutorialsimple-re-texturing-guide-from-start-to-finish/)\n- http://www.battlegroup-xtra.eu/index.php/45-Arma-2-modding/3343-Mod-Restoring-ReTexturing.html\n- [Quick and dirty tut on hidden selections](https://forums.bistudio.com/topic/90124-hidden-selections/)\n- [How to create hidden selections in your models](http://fab.ofp.free.fr/Tutorials/Hidden_Selections.htm)\n- http://www.ofpec.com/addons_depot/index.php?action=details&id=25_Texturing_How-To_for_Armed_Assault_by_Soul_Assassin\n- Arma: Texture Naming Rules\n\n- [PMC wiki: Texturing](http://pmc.editing.wiki/doku.php?id=arma:texturing)\n- [PMC wiki: ReTexturing Tools Basics Tutorial by Scarecrow398](http://pmc.editing.wiki/doku.php?id=arma3:texturing:scarecrow398-retexturing-tools-basics-tutorial)\n- [PMC wiki: Basic Retexturing Tutorial of Arma 3 Character by Stiltman](http://pmc.editing.wiki/doku.php?id=arma3:config:stiltman-retexturing-tutorial)\n- [PMC wiki: hiddenSelectionsTextures](http://pmc.editing.wiki/doku.php?id=arma2:texturing:hiddenselectionstextures)"}],"categories":["ArmA: Armed Assault: Editing Tutorials","Arma 2: Tutorials","Arma 3: Tutorials"],"groups":["Modding"]}