{"id":362,"date":"2025-09-16T00:30:09","date_gmt":"2025-09-16T00:30:09","guid":{"rendered":"https:\/\/ryanzehm.com\/unity\/?page_id=362"},"modified":"2025-09-16T18:03:38","modified_gmt":"2025-09-16T18:03:38","slug":"charactertexturebuilder","status":"publish","type":"page","link":"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/","title":{"rendered":"Character Texture Builder"},"content":{"rendered":"\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Video_Tutorials\" >Video Tutorials<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Getting_Started\" >Getting Started<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Terminology\" >Terminology<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Texture_Stack\" >Texture Stack<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Texture_Layer\" >Texture Layer<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Texture_Builder_Window\" >Texture Builder Window<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Scripting_Reference\" >Scripting Reference<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Structs\" >Structs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Classes\" >Classes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Functions\" >Functions<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ryanzehm.com\/unity\/charactertexturebuilder\/#Upcoming_Features\" >Upcoming Features<\/a><\/li><\/ul><\/nav><\/div>\n\n<\/div>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Video_Tutorials\"><\/span>Video Tutorials<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\"><strong>Intro v1.0: <\/strong><a href=\"https:\/\/youtu.be\/ZZqfEP5MJJ8\">https:\/\/youtu.be\/ZZqfEP5MJJ8<\/a><\/p>\n\n\n\n<p class=\"\"><strong>Tutorial v1.0: <\/strong><a href=\"https:\/\/youtu.be\/U2GQvL8_dJ8\">https:\/\/youtu.be\/U2GQvL8_dJ8<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Getting_Started\"><\/span>Getting Started<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">This pack is the result of a study into how World Of Warcraft renders their customizable characters and npcs. Complete character textures are only generated at runtime and exist on the GPU. The images which are saved to disk are smaller images, such as <em>ArmLower <\/em>or <em>Hand<\/em>.<\/p>\n\n\n\n<p class=\"\">Here is an example of an <em>_ArmLower.png<\/em> file which is 512&#215;256 pixels:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"300\" height=\"150\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-2.png?resize=300%2C150&#038;ssl=1\" alt=\"\" class=\"wp-image-393\" style=\"width:180px\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-2.png?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-2.png?w=512&amp;ssl=1 512w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"\">And<em> <\/em>a <em>_HandGloves.png<\/em> file which is 512&#215;128 pixels:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"300\" height=\"75\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/plate_raidpaladin_a_01gold_glove_ha_u.png?resize=300%2C75&#038;ssl=1\" alt=\"\" class=\"wp-image-411\" style=\"width:180px\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/plate_raidpaladin_a_01gold_glove_ha_u.png?resize=300%2C75&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/plate_raidpaladin_a_01gold_glove_ha_u.png?w=512&amp;ssl=1 512w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"\">These smaller images are then \u201cLayered\u201d on top of the base texture which is 1024&#215;1024 and put into Slot #1 and Slot #2 and the pixel data is copied using a Graphics.Blit shader.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"512\" height=\"512\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-5.png?resize=512%2C512&#038;ssl=1\" alt=\"\" class=\"wp-image-401\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-5.png?w=512&amp;ssl=1 512w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-5.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-5.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p class=\"\">The complete character textures are not typically saved to disk but exist on the GPU as a RenderTexture at runtime. This is the best approach as there\u2019s no need to create a new image file every time the player changes a clothing item.<\/p>\n\n\n\n<p class=\"\">Change your character\u2019s skin colors, scars, tattoos, hair, facial hair, eye color, jewelry, clothes, or anything that could be drawn to a texture. Your characters will start off naked\/underwear as a base texture and then have all the various options layered onto that base texture. You might apply tattoos first, then clothes, then jewelry, and finally items like boots, gloves, belt, and cape can be drawn last.&nbsp;<\/p>\n\n\n\n<p class=\"\">Textures are layered similar to how Photoshop layers work but by using a special shader the GPU can perform the operation to merge these layers into a single texture on the fly. The final RenderTexture is only re-computed when a change is made to the outfit, so performance is synonymous or better than using a regular Texture2D.<\/p>\n\n\n\n<p class=\"\">Create randomized outfits &amp; characters, procedurally generate a population of people all with unique clothes, skin tones, and accessories!&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>*** Skin Tone changes are typically achieved by changing the full Base Texture. ***<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Terminology\"><\/span>Terminology<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Texture_Stack\"><\/span>Texture Stack<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">A \u201cstack of textures\u201d that covers an area of the Base Texture. Texture Stacks define the position, width, and height of an area. In World of Warcraft\u2019s example above, there are 10 Texture Stacks named Arm Lower, Arm Upper, Hand, etc.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>*** The shader has a limit of 10 Texture Stacks, if you need more than 10 contact support. ***<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Texture_Layer\"><\/span>Texture Layer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">A Texture Stack can contain as many Texture Layers as you want. A Texture Layer contains the actual Texture2D image which will be applied to the Stack\u2019s width and height. Texture Layers would typically be Tattoos, Clothes, Jewelry, etc.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"512\" height=\"128\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image.png?resize=512%2C128&#038;ssl=1\" alt=\"\" class=\"wp-image-396\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image.png?w=512&amp;ssl=1 512w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image.png?resize=300%2C75&amp;ssl=1 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Texture_Builder_Window\"><\/span>Texture Builder Window<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\">Select <strong>Window &gt; Character Texture Builder<\/strong>:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"408\" height=\"215\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-1.png?resize=408%2C215&#038;ssl=1\" alt=\"\" class=\"wp-image-392\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-1.png?w=408&amp;ssl=1 408w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-1.png?resize=300%2C158&amp;ssl=1 300w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li class=\"\"><strong>Texture Builder Window:<\/strong><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"571\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-6.png?resize=1024%2C571&#038;ssl=1\" alt=\"\" class=\"wp-image-402\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-6.png?resize=1024%2C571&amp;ssl=1 1024w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-6.png?resize=300%2C167&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-6.png?resize=768%2C428&amp;ssl=1 768w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-6.png?w=1166&amp;ssl=1 1166w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"><strong>Main Settings<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"\"><em>Base Texture:<\/em> Set your Base Texture \/ skin tone image.<\/p>\n\n\n\n<p class=\"\"><em>Pixel Snap:<\/em> When moving Stacks with the mouse, snap position to a pixel grid.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li class=\"\"><strong>Create Texture Stack: <\/strong>Create a new Texture Stack of size: width and height.<\/li>\n\n\n\n<li class=\"\"><strong>Texture Stack Settings: <\/strong>Settings for the currently selected Texture Stack.<\/li>\n\n\n\n<li class=\"\"><strong>Live Preview: <\/strong>See the final texture generated based on current settings.<\/li>\n\n\n\n<li class=\"\"><strong>Texture Stacks:<\/strong> A list of all the current Texture Stacks.<\/li>\n\n\n\n<li class=\"\"><strong>Texture Layers: <\/strong>A list of each Stack\u2019s Layers and corresponding Texture2D field.<\/li>\n\n\n\n<li class=\"\"><strong>Editing Zone:<\/strong> Here you can click and drag to move Texture Stacks into position.<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li class=\"\">Click the <strong>Live Preview <\/strong>button the preview what the finalized texture will look like:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"864\" height=\"136\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-3.png?resize=864%2C136&#038;ssl=1\" alt=\"\" class=\"wp-image-394\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-3.png?w=864&amp;ssl=1 864w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-3.png?resize=300%2C47&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-3.png?resize=768%2C121&amp;ssl=1 768w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><\/figure>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li class=\"\">To apply the texture to a character, call <strong><em>TextureBuilder.Instance.BakeTexture();<\/em><\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"\">This function returns a RenderTexture so you can set a Material\u2019s MainTexture to this function:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>characterMaterial.mainTexture = <strong><em>TextureBuilder.Instance.BakeTexture();<\/em><\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"\">* An example of this can be seen in the Demo Scene and <strong><em>TextureBuilderTester.cs<\/em><\/strong>&nbsp;<\/p>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li class=\"\">All of the Texture Stacks and Layers have been rendered into a single texture:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"627\" height=\"591\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-4.png?resize=627%2C591&#038;ssl=1\" alt=\"\" class=\"wp-image-400\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-4.png?w=627&amp;ssl=1 627w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-4.png?resize=300%2C283&amp;ssl=1 300w\" sizes=\"auto, (max-width: 627px) 100vw, 627px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Scripting_Reference\"><\/span>Scripting Reference<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Structs\"><\/span>Structs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>struct TextureStack&nbsp;<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>string <\/strong>Name<\/td><td>A name to identify each area (Head Chest, Arms, Legs)<\/td><\/tr><tr><td><strong>Color <\/strong>InspectorColor<\/td><td>An inspector color for each area to differentiate between areas<\/td><\/tr><tr><td><strong>TextureLayer[] <\/strong>Layers<\/td><td>How many layers are needed? (Tattoos, Clothes, Jewelry, etc)<\/td><\/tr><tr><td><strong>RectInt <\/strong>Rect<\/td><td>Predefined rect based on position and size values<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>struct TextureLayer<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>string <\/strong>LayerName<\/td><td>Identifier for each layer (ex: Tattoos, Clothes, Jewelry)<\/td><\/tr><tr><td><strong>Texture <\/strong>Subtexture<\/td><td>The subtexture which will be copied to the final texture<\/td><\/tr><tr><td><strong>bool <\/strong>HasError<\/td><td>Does the subtexture have an error that prevents rendering?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Classes\"><\/span>Classes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>ScriptableObject TextureBuilder<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>ScriptableObject <\/strong>Instance<\/td><td>You can access this singleton from anywhere using <em>TextureBuilder.Instance<\/em><\/td><\/tr><tr><td><strong>Texture <\/strong>BaseTexture<\/td><td>Character&#8217;s base texture \/ skin tone.<\/td><\/tr><tr><td><strong>Material <\/strong>DrawMaterial<\/td><td>Material used to draw the final image<\/td><\/tr><tr><td><strong>TextureStack[]<\/strong> TextureStacks<\/td><td>All the Texture Stacks defined in the Texture Builder Window<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Functions\"><\/span>Functions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>TextureBuilder.<\/strong>cs<\/th><\/tr><\/thead><tbody><tr><td><strong>RenderTexture <\/strong>BakeTexture()<\/td><td>Bake the final texture based on current settings and return a RenderTexture.<\/td><\/tr><tr><td colspan=\"2\">Example: characterMaterial.mainTexture = <strong><em>TextureBuilder.Instance.BakeTexture();<\/em><\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Upcoming_Features\"><\/span>Upcoming Features<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Outfit Manager:<\/strong> Create some way to create outfits: clothes that go with each other. A tuxedo or dress will span across several or all of the Texture Stacks and there needs to be a way to \u201cadd tuxedo\u201d outfit without manually assigning every piece of it.<\/li>\n\n\n\n<li class=\"\"><strong>More C# functions<\/strong> for getting &amp; setting Texture Stack and Texture Layer variables.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Video Tutorials Intro v1.0: https:\/\/youtu.be\/ZZqfEP5MJJ8 Tutorial v1.0: https:\/\/youtu.be\/U2GQvL8_dJ8 Getting Started This pack is the result of a study into how World Of Warcraft renders their customizable characters and npcs. Complete character textures are only generated at runtime and exist on the GPU. The images which are saved to disk are smaller images, such as ArmLower [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","footnotes":""},"class_list":["post-362","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/comments?post=362"}],"version-history":[{"count":17,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/362\/revisions"}],"predecessor-version":[{"id":479,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/362\/revisions\/479"}],"wp:attachment":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/media?parent=362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}