{"id":482,"date":"2025-09-23T16:59:51","date_gmt":"2025-09-23T16:59:51","guid":{"rendered":"https:\/\/ryanzehm.com\/unity\/?page_id=482"},"modified":"2025-09-23T17:06:17","modified_gmt":"2025-09-23T17:06:17","slug":"runtime-texture-atlas","status":"publish","type":"page","link":"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/","title":{"rendered":"Runtime Texture Atlas"},"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\/runtime-texture-atlas\/#Introduction\" >Introduction<\/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\/runtime-texture-atlas\/#Terminology\" >Terminology<\/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\/runtime-texture-atlas\/#How_To_Use\" >How To Use<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Scripts\" >Scripts<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#TextureAtlasCreatorcs\" >TextureAtlasCreator.cs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Initialize_Atlas\" >Initialize Atlas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Add_Subimage_To_Atlas\" >Add Subimage To Atlas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Add_Subimages_To_Atlas\" >Add Subimages To Atlas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Assign_Subtexture_To_Material\" >Assign Subtexture To Material<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Get_Subimage_Scale\" >Get Subimage Scale<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Get_Subimage_Offset\" >Get Subimage Offset<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Clear_Atlas_RenderTexture\" >Clear Atlas RenderTexture<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#AtlasSubtexturecs\" >AtlasSubtexture.cs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Assign_Subtexture_At_Index\" >Assign Subtexture At Index&nbsp;<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Help_and_Support\" >Help and Support<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/ryanzehm.com\/unity\/runtime-texture-atlas\/#Credits\" >Credits<\/a><\/li><\/ul><\/nav><\/div>\n\n<\/div>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduction\"><\/span>Introduction<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">Runtime Texture Atlas was needed when I was creating a blood splatter system for Unity.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">A Shadergraph creates a procedural texture saved to a 32&#215;32 <strong>CustomRenderTexture<\/strong>.<\/li>\n\n\n\n<li class=\"\">Next, this small \u201csubtexture\u201d is added to a larger 4096&#215;4096 <strong>RenderTexture <\/strong>atlas.<\/li>\n\n\n\n<li class=\"\">Now 16,384 textures are available for use on the Atlas.\u00a0<\/li>\n<\/ul>\n\n\n\n<p class=\"\">This asset includes 2 methods, Graphics.Blit and Graphics.DrawTexture, with accompanying shaders for each method. The DrawTexture method performs faster because Blit is creating an unnecessary quad during computation. However, depending on the use case, Blit may be desired.&nbsp;<\/p>\n\n\n\n<p class=\"\">Video Tutorial: <a href=\"https:\/\/youtu.be\/kVW_DCm6u4M\">https:\/\/youtu.be\/kVW_DCm6u4M<\/a><\/p>\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<figure class=\"is-style-stripes wp-block-table\"><table><tbody><tr><td><strong>Atlas<\/strong><\/td><td>The huge texture that will host a plethora of Subtextures.&nbsp;Example: 4096&#215;4096 RenderTexture.<\/td><\/tr><tr><td><strong>Subtexture<\/strong><\/td><td>A smaller image that will be placed into a grid on the AtlasExample: Icons for your game; Procedurally generated CustomRenderTextures such as blood splatters or bullet holes.<\/td><\/tr><tr><td><strong>RenderTexture<\/strong><\/td><td>A texture that resides on the GPU. Pixel data is written directly.<em>Graphics.DrawTexture<\/em> &amp; <em>Graphics.Blit<\/em> write pixel data to the texture.The Atlas is a RenderTexture.<a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/RenderTexture.html\">https:\/\/docs.unity3d.com\/ScriptReference\/RenderTexture.html<\/a><\/td><\/tr><tr><td><strong>CustomRenderTexture<\/strong><\/td><td>An extension of RenderTexture: Pixel data is written by a shader.Procedural shaders \/ shadergraphs write pixel data to the texture.Not required, but in my case the 32&#215;32 subtextures are generated by a Shadergraph and are rendered to a CustomRenderTexture.<a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/CustomRenderTexture.html\">https:\/\/docs.unity3d.com\/ScriptReference\/CustomRenderTexture.html<\/a><\/td><\/tr><tr><td><strong>TextureAtlasCreator<\/strong><\/td><td>A Scriptable Object you will create to configure a runtime texture atlas. Multiple TextureAtlasCreators can be used in your game for various effects, 1 for blood splatters, 1 for bullet holes, 1 for icons, etc.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_To_Use\"><\/span>How To Use<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\">Create a <strong>TextureAtlasCreator <\/strong>Scriptable Object by right clicking in your Project Window, <strong><em>Create > Scriptable Objects > Texture Atlas Creator<\/em><\/strong><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"724\" height=\"157\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-7.png?fit=724%2C157&amp;ssl=1\" alt=\"\" class=\"wp-image-484\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-7.png?w=724&amp;ssl=1 724w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-7.png?resize=300%2C65&amp;ssl=1 300w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li class=\"\">Add a <em>Rendertexture <\/em>which will be used for the Atlas or use the default one named: <em>Atlas_RenderTexture_4096x4096<\/em>.<\/li>\n\n\n\n<li class=\"\">Configure your Tile Size, or how big each subimage will be.<\/li>\n\n\n\n<li class=\"\">Select which Graphics API function will be used to copy Pixel Data.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><em>Graphics.DrawTexture<\/em> is fastest.<\/li>\n\n\n\n<li class=\"\"><em>Graphics.Blit<\/em> can also be used depending on your use case.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"733\" height=\"500\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-8.png?fit=733%2C500&amp;ssl=1\" alt=\"\" class=\"wp-image-486\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-8.png?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/09\/image-8.png?resize=300%2C205&amp;ssl=1 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li class=\"\">Call <em>TextureAtlasCreator.<\/em><strong><em>AddSubimageToAtlas(Texture subimage)<\/em><\/strong><strong> <\/strong>to add a texture to the Atlas.<\/li>\n\n\n\n<li class=\"\">Call <em>TextureAtlasCreator.<\/em><strong><em>AddSubimagesToAtlas(Texture[] subimages)<\/em><\/strong><strong> <\/strong>to add an array of textures to the Atlas.<\/li>\n\n\n\n<li class=\"\">To display a Subimage on a material, you can call <em>TextureAtlasCreator.<\/em><strong><em>AssignSubtextureToMaterial(int index, Material material)<\/em><\/strong><\/li>\n\n\n\n<li class=\"\">For testing purposes, you can assign a texture to \u201cSubimage\u201d and then click <em>\u201cAdd Subimage To Atlas\u201d<\/em> to see how the image is added. Also, click <em>\u201cFlood Subimage To Atlas\u201d<\/em> to flood the Atlas with the subimage. This allows you to test performance and see what happens when images have to loop back to 0 and previous subimages are overwritten.\u00a0<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Scripts\"><\/span>Scripts<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"TextureAtlasCreatorcs\"><\/span>TextureAtlasCreator.cs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Initialize_Atlas\"><\/span>Initialize Atlas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>void&nbsp;<\/strong><\/td><td colspan=\"2\"><strong>InitializeAtlas()<\/strong><\/td><\/tr><tr><td colspan=\"3\">Initialize the Atlas variables. Called automatically from Start() and OnValidate() if in the editor.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Add_Subimage_To_Atlas\"><\/span>Add Subimage To Atlas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>int<\/strong><\/td><td colspan=\"2\"><strong>AddSubimageToAtlas(Texture subimage)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Adds Texture \u2018subimage\u2019 to the Atlas. Returns the index of the subimage in the atlas.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Add_Subimages_To_Atlas\"><\/span>Add Subimages To Atlas<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>int<\/strong><\/td><td colspan=\"2\"><strong>AddSubimagesToAtlas(Texture[] subimages)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Adds an array of Textures \u2018subimages\u2019 to the Atlas. Returns the index of the final subimage.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assign_Subtexture_To_Material\"><\/span>Assign Subtexture To Material<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>void<\/strong><\/td><td colspan=\"2\"><strong>AssignSubtextureToMaterial(int index, Material material)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Given an Atlas Index and a Material, the subtexture at that index will be assigned to the material. Material must have Tiling and Offset parameters.Example: <em>AssignSubtextureToMaterial(AddSubimageToAtlas(subimage), material);<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Get_Subimage_Scale\"><\/span>Get Subimage Scale<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Vector2<\/strong><\/td><td colspan=\"2\"><strong>GetSubimageScale(int index)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Returns the scale of the subimage in Vector2. Used by AssignSubtextureToMaterial.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Get_Subimage_Offset\"><\/span>Get Subimage Offset<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Vector2<\/strong><\/td><td colspan=\"2\"><strong>GetSubimageOffset(int index)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Returns the offset of the subimage in Vector2. Used by AssignSubtextureToMaterial.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Clear_Atlas_RenderTexture\"><\/span>Clear Atlas RenderTexture<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>void<\/strong><\/td><td colspan=\"2\"><strong>ClearAtlasRenderTexture()<\/strong><\/td><\/tr><tr><td colspan=\"3\">Clears the Atlas. All subtextures will be deleted.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AtlasSubtexturecs\"><\/span>AtlasSubtexture.cs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">This script is not required and will probably only be used for example purposes. However it may be useful to save a Subtexture\u2019s Index to its Gameobject. For example, a Sword icon is added to the atlas, and the Sword Gameobject has this component added, with a reference to its index in the Atlas. For this case, it\u2019s probably better to just add a \u201cTextureAtlasIndex\u201d variable to your \u201cSword\u201d class.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assign_Subtexture_At_Index\"><\/span>Assign Subtexture At Index&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>void<\/strong><\/td><td colspan=\"2\"><strong>AssignSubtextureAtIndex(int index)<\/strong><\/td><\/tr><tr><td colspan=\"3\">Find the subtexture which exists at <strong><em>Index <\/em><\/strong>in the Texture Atlas and assign it to the GameObject\u2019s material.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Help_and_Support\"><\/span>Help and Support<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">I will respond quickly to support emails. Send to <a href=\"mailto:ryan.zehm2@gmail.com\">ryan.zehm2@gmail.com<\/a><\/p>\n\n\n\n<p class=\"\">Discord Support: <a href=\"https:\/\/discord.gg\/jrvzFbJhYj\">https:\/\/discord.gg\/jrvzFbJhYj<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Credits\"><\/span>Credits<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">RPG Icons in \/Demo\/Textures comes from Ravenmore&#8217;s Icon Pack 2.0 on OpenGameArt.org.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Runtime Texture Atlas was needed when I was creating a blood splatter system for Unity.&nbsp; This asset includes 2 methods, Graphics.Blit and Graphics.DrawTexture, with accompanying shaders for each method. The DrawTexture method performs faster because Blit is creating an unnecessary quad during computation. However, depending on the use case, Blit may be desired.&nbsp; Video [&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-482","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/482","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=482"}],"version-history":[{"count":6,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/482\/revisions"}],"predecessor-version":[{"id":493,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/482\/revisions\/493"}],"wp:attachment":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/media?parent=482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}