{"id":5539,"date":"2022-01-13T08:49:54","date_gmt":"2022-01-13T08:49:54","guid":{"rendered":"https:\/\/www.katsbits.com\/codex\/?p=5539"},"modified":"2023-09-07T15:50:39","modified_gmt":"2023-09-07T14:50:39","slug":"imvu-optimising","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/","title":{"rendered":"Optimising Meshes for IMVU"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_83 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69ff96974699e\" class=\"ez-toc-cssicon-toggle-label\"><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><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69ff96974699e\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/#optimising-principle\" >Optimising Principle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/#mesh-optimising\" >Mesh Optimising<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/#optimisation-tools\" >Optimisation Tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/#optimisation-uvs\" >Optimisation &#038; UVs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.katsbits.com\/codex\/imvu-optimising\/#video\" >Video<\/a><\/li><\/ul><\/nav><\/div>\n<p>With the introduction of <b>IMVU Studio<\/b> mesh uploads are limited to around 10,000 or so triangles, anything above this limit now errors-out during import. In other words, products must now be more efficiently or effectively optimised for IMVU so they use as few polygons as possible. Whilst this applies to all high resolution (HD) products, Creators who purchase meshes may be particularly affected as they do not have source file access so will need to familiarise themselves with <a href=\"https:\/\/www.katsbits.com\/codex\/uv-editing\/\">editing<\/a> and optimising purchases for IMVU going forward.<\/p>\n<blockquote style=\"background-color: #fc0; color: #000;\"><p><b>Important<\/b>: notwithstanding copyright issues, modifying third-party meshes may require additional licensing or rights that specifically accommodate editing or use beyond the authors original intent.<\/p><\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"optimising-principle\"><\/span>Optimising Principle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The basic principle of optimising is to reduce the complexity of an object to a minimum, maintaining its overall shape while conforming to any engine (technical) limitations on mesh density and\/or texture usage. To do this the items <b>silhouette<\/b> can be used, the outline or outer profile presented to the viewer, as this more readily instructs on what something is supposed to be than any internal detail. Shown below for example very little difference is noticeable between the silhouettes of the same handbag accessory sitting side-by-side, one high resolution, the other low. In other words, all the structure that&#8217;s in place to make the high resolution version what it is does nothing to describe the object as would be used in IMVU, thus it can be removed.<\/p>\n<blockquote><p><b>Design note<\/b>: as a general rule-of-thumb although silhouettes are a primary tool in determining the degree to which a mesh can be reduced, how aggressively this is done ultimately depends on the technical requirements of the environment into which the object is placed. In other words, individual items generally should not be more complex than the avatars that wear them and\/or how closely they can be viewed or inspected in game (subject to what, and how big, the item is).<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-silhouette.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-silhouette.jpg\" alt=\"Silhouette determines structure\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Green on the left is the high resolution (c. 55,000 triangles), white on the right is low resolution (c. 5,000 trianlges). Looking at the two side-by-side there&#8217;s little obvious difference between them, meaning, all that extra mesh structure in the high res is essentially wasted.<\/i><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-wireframe.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-wireframe.jpg\" alt=\"Silhouette plus wireframe overlaystructure\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Shown in <b>Material Preview<\/b> with <b>Wireframe<\/b> overlay enabled, the difference between the two meshes becomes apparent, so too just how much optimisation can be done to the high resolution mesh (right-side).<\/i><\/p>\n<h3><span class=\"ez-toc-section\" id=\"mesh-optimising\"><\/span>Mesh Optimising<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Generally speaking there are two approaches to optimising objects; <i>manually editing meshes<\/i> or <i>procedurally reducing<\/i> them using the <b>Decimate<\/b> modifier. Whilst the latter (modifier) is much quicker it&#8217;s also a lot messier, often producing structures that are chaotic and random, whereas the former takes much longer but typically results in much more organised structures. <\/p>\n<blockquote><p><b>Design note<\/b>: generally speaking <b>Decimate<\/b> works best on organic forms where its random nature can be obfuscated or disguised by the objects shape.<\/p><\/blockquote>\n<p>To manually optimise, the mesh can be edited in <b>Edit Mode<\/b> <a href=\"https:\/\/www.katsbits.com\/codex\/edit-mode-basics\/\">using the standard tools<\/a> alongside the various <b>Dissolve<\/b> options [1] to selectively remove structure; <b>Dissolve Vertices<\/b>, <b>Dissolve Edges<\/b> and <b>Dissolve Faces<\/b> &#8211; <b><i>Mesh \u00bb Delete \u00bb Dissolve [option]<\/i><\/b> (<i>or press <span class=\"shortcutkey\">X<\/span> \u00bb Dissolve [option]<\/i>). Here vertices, edges and faces can be removed [2] while maintaining the overall integrity of the mesh [3], including the UV map.<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-dissolve.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-dissolve.jpg\" alt=\"Using Dissolve to remove structure\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Using Dissolve [1] the mesh can be reduced by selectively removing elements [2] while maintaining the overall integrity of the mesh [3] including any UV maps.<\/i><\/p>\n<p>Decimate on the other hand only requires the modifier be applied to the mesh. Once placed (<b>Modifier Properties \u00bb Decimate<\/b>) the <b>Ratio<\/b> [4] can be changed (lowered) until a reasonable <b>Face Count<\/b> [5] is achieved, or the mesh looks respectable relative to being optimised for purpose.<\/p>\n<blockquote><p><b>Design note<\/b>: the degree to which Ratio needs to be lowered depends on the initial face count of the mesh; extremely high resolution meshes may mean manually typing a fractional value, 0.1 or lower, due to the way such small increments are represented by the slider.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-decimate.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-decimate.jpg\" alt=\"Using Decimate to remove structure\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Once a Decimate modifier is assigned the Ratio value [4] can be lowered to reduce the Face Count [5] to a reasonable level or the mesh structure is sufficiently reduced.<\/i><\/p>\n<p><video poster=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-decimate_mp4.jpg\" controls=\"controls\" width=\"100%\" height=\"auto\"><source src=\"https:\/\/www.katsbits.com\/media\/optimising-decimate.mp4\" type=\"video\/mp4\" \/><!--<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.ogg\" type=\"video\/ogg\" \/>\n<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.webm\" type=\"video\/webm\" \/>--><\/video><br \/>\n<i>Video overview using the <b>Decimate<\/b> modifier to (aggressively) reduce mesh density.<\/i><\/p>\n<h3><span class=\"ez-toc-section\" id=\"optimisation-tools\"><\/span>Optimisation Tools<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Depending on the mesh the optimisation process might be easier with objects broken down into more manageable sections. This segmentation might be based on the items construction, by Material assignment, on UV mapping, by mesh selection or any combination therein. To this end, once an area is selected it can be detached as an independently editable object using <b>Mesh \u00bb Separate \u00bb Selection<\/b> [6] (or press <span class=\"shortcutkey\">P<\/span>).<\/p>\n<blockquote><p><b>Design note<\/b>: to aid the selection process use <b>Select \u00bb Select More\/Less \u00bb More<\/b> or <b>\u00bb Less<\/b> (or press <span class=\"shortcutkey\">Ctrl<\/span> + <span class=\"shortcutkey\">Numpad+<\/span> or <span class=\"shortcutkey\">Ctrl<\/span> + <span class=\"shortcutkey\">Numpad &#8211;<\/span>)<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-separate.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-separate.jpg\" alt=\"Separating an object for easier editing\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Use Separate [6] to break a larger more detailed mesh into smaller more manageable sections. Make a selection then use <b>Mesh \u00bb Selection \u00bb Separate<\/b>.<\/i><\/p>\n<p>Once elements are separated they may then need to be converted from triangles into quads (faces) to better element selection and processing. To this end select two triangles [7] that would otherwise form a quadratic face [8] and from the <b>Face<\/b> menu click <b>Tris to Quads<\/b> [9] &#8211; <b><i>Face \u00bb Tris to Quads<\/i><\/b> (or press <span class=\"shortcutkey\">Alt<\/span> + <span class=\"shortcutkey\">J<\/span>).<\/p>\n<blockquote><p><b>Design note<\/b>: conversion is selection based, it can be used on limited selections or everything.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-tris-to-quads.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-tris-to-quads.jpg\" alt=\"Converting Tris to Quads\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Third-party purchased meshes tend to be triangulated [7] which make the optimisation process for IMVU difficult. To correct for this triangles can be selectively converted to quads (faces) [8] using <b>Tris to Quads<\/b> [9], which then makes broader selections easier.<\/i><\/p>\n<p>To make the optimisation process easier surfaces and edges should be selected in <i>loops<\/i> or as part of a larger contiguous collection. In converting triangles into faces they sometime end up off axis in that they cause a discontinuation in edge or loop flow around a mesh. To fix this errant surfaces need to be broken back down into triangles &#8211; <b><i>Face \u00bb Triangulate Faces<\/i><\/b> (or <span class=\"shortcutkey\">Ctrl<\/span> + <span class=\"shortcutkey\">T<\/span>) &#8211; so shared edges can to re-orientated before being converted back into a quads. To do this, select a bad edge [10] and from the <b>Edge<\/b> menu click <b>Rotate Edge CW<\/b> (Clockwise) or <b>Rotate Edge CCW<\/b> (Counter Clockwise) &#8211; <b><i>Edge \u00bb Rotate Edge CW\/CCW<\/i><\/b> &#8211; rotating the edge appropriately [12] to form a quad that&#8217;s conducive to fuller edge flow, loop selection and subsequent removal as needed.<\/p>\n<blockquote><p><b>Design note<\/b>: although somewhat optional the purpose of fixing these types of orientation issues to better facilitate edge or face loop selections, that is, being able to select a contiguous strip of edges or faces from one side of a mesh to the other without having to make additional selections. It also reduces the amount of clean-up necessary where stray vertices, edges or faces remain in place after removal of something else.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-orientation.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-orientation.jpg\" alt=\"Edge (re)orientation\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Converting triangles sometimes causes breaks in edge flow (yellow) due to bad edge orientation [10] (red). This can be fixed using <b>Rotate Edge<\/b> [11] which changes edge direction [12] (green) so quads can be reformed that follow the natural flow of the mesh.<\/i><\/p>\n<p><video poster=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-orientation_mp4.jpg\" controls=\"controls\" width=\"100%\" height=\"auto\"><source src=\"https:\/\/www.katsbits.com\/media\/optimising-rotate-edge.mp4\" type=\"video\/mp4\" \/><!--<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.ogg\" type=\"video\/ogg\" \/>\n<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.webm\" type=\"video\/webm\" \/>--><\/video><br \/>\n<i>Video overview fixing loop selection\/continuity issues.<\/i><\/p>\n<p>Where edges or faces cannot be easily removed, for example their removal might break UV mapping, they can be collapsed using <b>Edge Slide<\/b> and cleaned up with <a href=\"https:\/\/www.katsbits.com\/codex\/remove-doubles\/\"><b>Merge by Distance<\/b><\/a> to remove any coincidental elements. For this, make a selection and click-hold the <b>Edge Slide<\/b> [13] icon in the Toolbar until the pop-out appears. Click <b>Edge Slide<\/b>. Click drag the yellow tool handle [14] to slide along the dominant edge to collapse elements together (alternatively make a selection and double-tap <span class=\"shortcutkey\">G<\/span>). Next, select all then from the <b>Mesh<\/b> menu click <b>Clean Up \u00bb Merge by Distance<\/b> [15] &#8211; <b><i>Mesh \u00bb Clean Up \u00bb Merge by Distance<\/i><\/b>.<\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-slide.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-slide.jpg\" alt=\"Edge Slide\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Where elements might not be removed using Dissolve it may be possible to slide [13] and then collapse them together [14], maintaining UV integrity in the process.<\/i><\/p>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-merge.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-merge.jpg\" alt=\"Merge by Distance\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Once edges have been collapsed together the coincidental elements can be removed using Merge by Distance [15] which remove what are then unnecessary duplicate elements.<\/i><\/p>\n<p><video poster=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-edge-slide_mp4.jpg\" controls=\"controls\" width=\"100%\" height=\"auto\"><source src=\"https:\/\/www.katsbits.com\/media\/optimising-collapse-merge.mp4\" type=\"video\/mp4\" \/><!--<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.ogg\" type=\"video\/ogg\" \/>\n<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.webm\" type=\"video\/webm\" \/>--><\/video><br \/>\n<i>Video overview removing edges by collapsing and then merging using Merge by Distance.<\/i><\/p>\n<h3><span class=\"ez-toc-section\" id=\"optimisation-uvs\"><\/span>Optimisation &#038; UVs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Optimising a mesh using dissolve and collapse typically alters UVs by creating new and\/or breaking existing bonds and associations. Whilst resulting texture distortions can be accommodated or worked around during the mesh editing process to varying degrees, it may be necessary to <a href=\"https:\/\/www.katsbits.com\/codex\/uv-editing\/\">update and manually edit UVs<\/a> directly to fix or address issues that occur.<\/p>\n<blockquote><p><b>Design note<\/b>: optimising third-party meshes means working within set limitations, so whilst UVs might break and\/or new bonds be formed, their doing so is relative to an existing layout and mapping. In practice this means the degree to which UVs can be fixed might be limited, for example UVs being merged or edited to fill gaps or disconnections but not moved wholesale to different areas of the map.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-uv-mismatch.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 100%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-uv-mismatch.jpg\" alt=\"Optimising (fixing) UVs\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>The reductive nature of optimisation will typically corrupt UVs [16] as new [17] and old [18] bonds are formed or broken as a result of the process.<\/i><\/p>\n<p><video poster=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu\/optimisation-uv-mismatch_mp4.jpg\" controls=\"controls\" width=\"100%\" height=\"auto\"><source src=\"https:\/\/www.katsbits.com\/media\/optimising-uvs.mp4\" type=\"video\/mp4\" \/><!--<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.ogg\" type=\"video\/ogg\" \/>\n<source src=\"https:\/\/www.katsbits.com\/images\/tutorials\/collections\/collection-shortcut.webm\" type=\"video\/webm\" \/>--><\/video><br \/>\n<i>Video overview fixing UV issues due to the reductive optimisation process.<\/i><\/p>\n<h3><span class=\"ez-toc-section\" id=\"video\"><\/span>Video<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Time-lapse showing the process of optimising a high-resolution, third-party shoulder bag model for IMVU. <\/p>\n<blockquote><p><b>Design note<\/b>: the original model starts out at around 55,000 triangles, which was reduced to c. 5,100. This is still relatively high for IMVU in terms of &#8216;an object&#8217;, but as discussed above when using third-party content, the degree to which something can be optimised is determined by the items original construction and assets use.<\/p><\/blockquote>\n<div style=\"background-color: black; position: relative; padding-bottom: 56.25%; padding-top: 25px; height: 0; overflow: hidden; max-width: 100%;\"><center><iframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/Xl7G_tJbNFg?rel=0\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/div>\n<p><i>A one hour time-lapse reducing a 12+ hour process of optimising a mesh for IMVU (no audio\/no narration).<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":5583,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,37,230],"tags":[575,838,837,194,738,842,841,546,840,655],"class_list":["post-5539","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blender","category-imvu","category-tutorials","tag-accessory","tag-decimate","tag-dissolve","tag-imvu","tag-imvu-studio","tag-optimisation","tag-rotate-edge","tag-separate","tag-tris-to-quads","tag-uv-editing"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/5539","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/comments?post=5539"}],"version-history":[{"count":40,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/5539\/revisions"}],"predecessor-version":[{"id":5588,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/5539\/revisions\/5588"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media\/5583"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media?parent=5539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/categories?post=5539"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/tags?post=5539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}