{"id":1970,"date":"2024-04-07T09:46:16","date_gmt":"2024-04-07T08:46:16","guid":{"rendered":"https:\/\/www.katsbits.com\/site\/?p=1970"},"modified":"2024-04-07T09:48:33","modified_gmt":"2024-04-07T08:48:33","slug":"smooth-groups-in-blender","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/site\/smooth-groups-in-blender\/","title":{"rendered":"Adding Smooth Groups to UT3 Models in Blender"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 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-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.katsbits.com\/site\/smooth-groups-in-blender\/#%E2%80%98Super_Forced_Smoothing\" >&#8216;Super&#8217; Forced Smoothing<\/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\/site\/smooth-groups-in-blender\/#Potential_Issues_and_Problems\" >Potential Issues and Problems<\/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\/site\/smooth-groups-in-blender\/#Beveled_Smoothing_Beveled_Smooth_Groups\" >Beveled Smoothing (Beveled Smooth Groups)<\/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\/site\/smooth-groups-in-blender\/#Potential_Issues_Problems\" >Potential Issues &amp; Problems<\/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\/site\/smooth-groups-in-blender\/#Set_SmoothSet_Solid_Combinations\" >Set Smooth\/Set Solid Combinations<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.katsbits.com\/site\/smooth-groups-in-blender\/#Potential_Problems_Issues\" >Potential Problems &amp; Issues<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.katsbits.com\/site\/smooth-groups-in-blender\/#Conclusions\" >Conclusions<\/a><\/li><\/ul><\/nav><\/div>\n<p>NOTE : This tutorial has become <b>slightly obsolete<\/b> as a result of the <a href=\"https:\/\/www.katsbits.com\/site\/category\/tools\/\" title=\"Download Unreal Engine ASE export script for Blender 3D\" target=\"_self\" rel=\"noopener\">release of an Unreal Engine ASE export script<\/a> that keeps and correctly exports &#8216;smoothing&#8217; as outlined below. So whilst the principle for creating the actual smooth group on a model itself remain the same, they are not subject to the same caveats present when using the standard ASE exporter available for Blender.<\/p>\n<blockquote style=\"background-color: #fc0; color: #000;\"><p><strong>Important<\/strong>: For more information on smoothing models for Unreal editing, <a href=\"setting-up-smooth-groups-correctly-in-blender.php\" title=\"Creating smoothing on models used in Unreal editing\" target=\"_self\" class=\"red\" rel=\"noopener\"><b>read the <i>updated tutorial<\/i> here<\/b>.<\/a><\/p><\/blockquote>\n<p>(Tutorial updated Dec 09) Forced smoothing (forced smooth groups). If you&#8217;re familiar with creating 3D content for games using Blender 3D then you may already know that generally the only way to guaranty smooth grouping on a mesh is to do something called <b>face<\/b> or <b>vertex<\/b> &#8216;<b>splitting<\/b>&#8216;, whereby manually selected faces on a 3D model are &#8216;split&#8217; away from their parent to form isolated polygon islands that have their own distinct edge and edge vertices (see images below).<\/p>\n<p>Alternatively the &quot;<b>split edge modifier<\/b>&quot; can be applied to a mesh so that it automatically creates &#8216;groups&#8217; based on the placement of &#8216;hard\/soft&#8217; edges which can then be &#8216;set&#8217; to split vertexes apart as a quicker way to do the above. Again the result would be something similar to the image shown below whereby the selected faces have &#8216;hard&#8217; edges relative to their neighbours. Normally when this is exported the smoothing &#8216;data&#8217; is kept because split faces stay separate due to the presence of the various coincidental vertices attached to each grouping.<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_detach.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_detach_sml.jpg\" width=\"428\" height=\"324\" alt=\"Results of face splitting; hard edges and 'smooth groups'\" title=\"Results of face splitting; hard edges and 'smooth groups'\" border=\"0\" \/><\/a><\/p>\n<p>Results of face splitting; hard edges and &#8216;smooth groups&#8217;.<\/p>\n<\/p><\/div>\n<p>However, 3D models created with the intention of being used within the <b>Unreal Engine editing<\/b> environment have problems with this process of edge\/face splitting because the import process is looking for 3DS Max specific smooth group information &#8211; which is stored in &#8216;face&#8217; data; if the <b>Generic Browser<\/b> can&#8217;t find any appropriate smoothing information it will simply &#8216;re-weld&#8217; the vertexes back together to form a single contiguous mesh which &#8216;breaks&#8217; any smoothing the mesh had on export.<\/p>\n<p>So for non 3DS Max users, opening a custom model into <b>Unreal Editor<\/b> after going through the import process using the <b>Generic Browser<\/b> usually results in models appearing &#8216;mushy&#8217; and undefined because of the re-weld and the now single smooth group applied over the entire model. <a href=\"http:\/\/www.katsbits.com\/tutorials\/idtech\/quake-4-editing.php?subaction=showfull&amp;id=1206428049&amp;archive=&amp;start_from=&amp;ucat=13&amp;\" target=\"_self\" rel=\"noopener\">UVW map islands don&#8217;t work either<\/a>.<\/p>\n<p>So how can smooth groups be &#8216;forced&#8217; on custom models for UT3 then? Well, there are two options that work to varying degrees, depending on what the mesh needs;<\/p>\n<ul>\n<li>       <b>Modified vertex\/face splitting<\/b>      <\/li>\n<li>       <b>Extra edgeloops<\/b> (bevels)      <\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%E2%80%98Super_Forced_Smoothing\"><\/span>&#8216;Super&#8217; Forced Smoothing<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For want of a better way to describe this I&#8217;ve simply called it &#8216;<b>super forced<\/b>&#8216; because it makes use the method mentioned above &#8211; &#8216;forced smoothing&#8217;; faces are detached from the parent mesh &#8211; with a slight but essential modification (as shown\/explained below).<\/p>\n<blockquote>\n<p><b>Keyboard shortcuts:<\/b> &quot;<b>RMB<\/b>&quot; to select faces, keyboard &quot;<b>Y<\/b>&quot; to split them (&quot;<b>P<\/b>&quot; will separate them into independent mesh objects).<\/p>\n<p><b>Design note<\/b>: although it&#8217;s usual for polygons split like this to remain an element of the parent mesh, they can be separated into independent objects that are &#8216;merged&#8217; together on export (format support dependant). <\/p>\n<\/blockquote>\n<p>Basically the principle is to stop the UT3 game engine (assets creation process) from re-welding vertices back together when it finds them separated but in the same place; the only way to do this is the make sure that face vertices do not occupying the same &#8216;XYZ&#8217; co-ordinates in 3D space, if they are, UnrealEd&#8217;s Generic Browser import process will reconnect (re-weld) them.<\/p>\n<p>To stop this from happening the vertices that form the boundaries of a forced group need to be &#8216;nudged&#8217; apart so they don&#8217;t then occupy the same co-ordinates as their neighbours; this is <i>simply a matter of either <\/i><b>expanding, reducing, offsetting or moving<\/b><i> the polygons\/vertices in question a sufficient enough distance<\/i> for the game to &#8216;read&#8217; them as being separate. Polygons only need to be moved tiny fractions for this to work.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Potential_Issues_and_Problems\"><\/span>Potential Issues and Problems<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The downside to this method is that it&#8217;s very fiddly and time consuming to set up, and on complex mesh objects can seem almost impossible to organise correctly in such a way that you don&#8217;t end up with gaps and holes where they shouldn&#8217;t be.<\/p>\n<p>It&#8217;s also possibly to introduce &#8216;artifacts&#8217; depending on where micro-moved edges are; moving the edges of a box inwards runs the risk of a rendered &#8216;line&#8217; artifact error appearing on the outward face of a block (a little bit like shown in the image below &#8211; although that&#8217;s a screen grab from Blender 3D, the black outline visible against the split face shows where there would potentially be a problem in game if that face was the one that represented the &#8216;front&#8217; visible side of the object).<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_detached.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_detached_sml.jpg\" width=\"428\" height=\"324\" border=\"0\" alt=\"Over exaggerated expanded polygon showing the principle behind 'super forcing' smoothing in UT3; vertices need to be separated in order for the game to read them as such otherwise it'll reconnect them.\" title=\"Over exaggerated expanded polygon showing the principle behind 'super forcing' smoothing in UT3; vertices need to be separated in order for the game to read them as such otherwise it'll reconnect them.\" \/><\/a><\/p>\n<p>Over exaggerated expanded polygon showing the principle behind &#8216;super forcing&#8217; smoothing in UT3; vertices need to be separated in order for the game to read them as such otherwise it&#8217;ll reconnect them.<\/p>\n<\/p><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Beveled_Smoothing_Beveled_Smooth_Groups\"><\/span>Beveled Smoothing (Beveled Smooth Groups)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>It might seen odd at first to think that <b>adding extra polygons<\/b> to an object would help in any way with regards to smoothing and smooth groups until you realise that game engines deal with smooth groups by splitting vertices regardless as to which method and\/or which 3D application is used. In other words, telling a game engine to smooth group something will result in the GPU on your graphics cards creating a series of split vertexes anyway, and what <i>that<\/i> means is you effectively create &#8216;extra&#8217; vertexes that <i>could<\/i> have <i>potentially been used to create <b>additional faces<\/b><\/i>.<\/p>\n<p>Now why would you want to create extra faces? Well, if we remind ourselves that smoothing is all about the distribution of shading (light) over an object, and our current problem is to do with that directly, then it makes sense that adding more faces means that shading over an object becomes more evenly distributed, especially over, on or around the edges of an object.<\/p>\n<p>Using the simple cube test object, when looking back at the forced smoothing method above, in splitting a face the way we did it created an extra set of vertices that are associated with that split face; there are now &quot;8&quot; vertices. However, if, instead of splitting the face, an &#8216;edgeloop&#8217; is added, we still have 8 vertices but also now an additional 4 faces (8 triangles) which cause the object shading to behave closer to what is expected; the tighter or closer the edgeloop is to an edge, the &#8216;sharper&#8217; the appearance of the &#8216;faked&#8217; smooth group (see images below).<\/p>\n<blockquote>\n<p><b>Keyboard shortcuts<\/b>: &quot;<b>Tab<\/b>&quot; to enter EDIT mode. &quot;<b>Ctrl+R<\/b>&quot; to active the edgeloop<br \/>\n       cutter, &quot;<b>LMB<\/b>&quot; to position and move the cutting guideline (hold &quot;<b>Ctrl<\/b>&quot; to lock movement to the grid\/increments, &quot;<b>Shift<\/b>&quot; to slow movement), &quot;<b>RMB<\/b>&quot; to set and cut.<\/p>\n<\/blockquote>\n<div class=\"content_images\"> <a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_bevel_edge.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_bevel_editmode_sml.jpg\" width=\"428\" height=\"324\" border=\"0\" alt=\"Adding an edgelooped 'bevel' to one side of an object where a smooth group is required\" title=\"Adding an edgelooped 'bevel' to one side of an object where a smooth group is required\" \/><\/a><\/p>\n<p>Adding an edgelooped &#8216;bevel&#8217; to one side of an object where a smooth group is required<\/p>\n<p>      <a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_bevel_edge.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_smoothing_bevel_edge_sml.jpg\" width=\"428\" height=\"324\" border=\"0\" alt=\"The resulting smoothing when using bevels\" title=\"The resulting smoothing when using bevels\" \/><\/a><\/p>\n<p>The resulting smoothing when using bevels<\/p>\n<\/p><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Potential_Issues_Problems\"><\/span>Potential Issues &amp; Problems<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The only real problem with this method is that it can get very complicated in terms of knowing where to place cuts on anything that&#8217;s more shapely than a box; this does present quite a challenge because it&#8217;s more than likely that a few &#8216;dead&#8217; faces will be created and knowing whether to leave or remove them will depend on how they effect the smoothing you were adding in the first place!.<\/p>\n<p>You&#8217;ll also most likely end up having to re UVW map your models (or at least do quite a bit of amending) because adding extra faces after the fact (after you&#8217;re UVW mapped an object) can often corrupt any UVW layout you may have previously had in place.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Set_SmoothSet_Solid_Combinations\"><\/span>Set Smooth\/Set Solid Combinations<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The following procedure takes advantage of the fact that Unreal Engine 3 applies a single global smoothing to an entire mesh regardless as to whether there is or is not any smoothing present on a mesh by default. (<i>Special thanks to <b>Diego1203<\/b> for confirming independently that it now works. Ed.<\/i>).<\/p>\n<p>In <b>edit mode<\/b>, selections of faces (&#8216;groups&#8217;) are given one of either &quot;<b>Set Solid<\/b>&quot; or &quot;<b>Set Smooth<\/b>&quot; smoothing based on the &#8216;grouping&#8217; required. It results in an object that has both &#8216;smoothed&#8217; and &#8216;solid&#8217; (&#8216;faceted&#8217;) faces which approximate the way smooth groups work in Max. This works best on models with a relatively high poly count (see potential problems below).<\/p>\n<div class=\"content_images\"><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_editmode.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_editmode_sml.jpg\" width=\"428\" height=\"316\" alt=\"Setting a selection of faces to 'solid'\" title=\"Setting a selection of faces to 'solid'\" border=\"0\" \/><\/a><\/p>\n<p>Setting a selection of faces to &#8216;solid&#8217;<\/p>\n<p>      <a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_object.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_object_sml.jpg\" width=\"428\" height=\"316\" alt=\"Faceted faces set to 'Solid' next to neighbouring faces set to 'Smooth'\" title=\"Faceted faces set to 'Solid' next to neighbouring faces set to 'Smooth'\" border=\"0\" \/><\/a><\/p>\n<p>Faceted faces set to &#8216;Solid&#8217; next to neighbouring faces set to &#8216;Smooth&#8217;<\/p>\n<p>      <a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_uted.jpg\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/ut3_editing\/blender_ut3_smooth_groups\/ut_set_solid_smooth_uted_sml.jpg\" width=\"428\" height=\"377\" alt=\"A hard edge visible on the model in UT3's Generic Browser. Because object default to smooth, all 'faceted faces' are forced by the engine to smooth\" title=\"A hard edge visible on the model in UT3's Generic Browser. Because object default to smooth, all 'faceted faces' are forced by the engine to smooth\" border=\"0\" \/><\/a><\/p>\n<p>A hard edge visible on the model in UT3&#8217;s Generic Browser. Because objects default to &#8216;smooth&#8217; in game, all &#8216;faceted&#8217; (solid) faces are forced by the engine to smooth, resulting in &#8216;groups&#8217;.<\/p>\n<\/p><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Potential_Problems_Issues\"><\/span>Potential Problems &amp; Issues<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Because of the way smoothing is either &#8216;on&#8217; or &#8216;off&#8217;, one of the drawbacks with this process is &#8216;bleaching&#8217; &#8211; this is where you can&#8217;t properly separate selections into individual groups, as a result smoothing &#8216;leaks&#8217; or &#8216;bleaches&#8217; into other groupings.<\/p>\n<p>For example, if you select and applied &#8216;smooth&#8217; &#8211; <i>turn them &#8216;<b>on<\/b>&#8216;<\/i> &#8211; to the row of faces that wrap around the middle of the object, in order for those to be a separate &#8216;clean&#8217; grouping the row of faces above and below it would need to be set &#8216;solid&#8217; &#8211; <i>turned &#8216;<b>off<\/b>&#8216;<\/i>. Now if you then wanted to amend the smoothed faces by adding in another grouping, that new grouping would need to be &#8216;solid&#8217; (because you&#8217;ve already used &#8216;smooth&#8217; to define to initial group).<\/p>\n<p>However, in doing that, you&#8217;ve now matched the &#8216;solid&#8217; settings applied to the row of faces on either side of the smoothed row and effectively &#8216;joined&#8217; all of them into one larger smooth group instead of three smaller one (because the smoothing will &#8216;leak&#8217; in game); without adding extra faces or editing to the mesh in some way you can&#8217;t now separate the groups.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Conclusions\"><\/span>Conclusions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Although Blender does have a &#8216;proper&#8217; method to smooth group an object using the <b>Split Edge tool<\/b> from the <b>modifier stack<\/b>, the results aren&#8217;t yet exportable because of they way they work on a mesh in relation to ASE files in particular &#8211; hard\/soft edges <i>currently<\/i> (as of 2.45) present the ASE exporter a problem when trying to create fully compatible 3DS Max style ASE files because of the way Max works with smooth groups (smooth group data is stored in face data not vertex data); it doesn&#8217;t use edges but face groups which means &#8216;translating&#8217; edges into that kind of information can be tricky.<\/p>\n<p>So, whilst the three methods above can awkward and fiddly in some regards, they are and can be useful generally. Right now however, they are the only way to control smoothing on meshes that are to be used in UT3.<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":1972,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[197,498,230,351,300,455,499,322,497,28,500],"class_list":["post-1970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-ase","tag-bevel","tag-blender-2-4x","tag-edge-split","tag-mesh-smoothing","tag-smooth-groups","tag-smoothing","tag-udk","tag-ue3","tag-unreal","tag-unreal-engine"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/comments?post=1970"}],"version-history":[{"count":3,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1970\/revisions"}],"predecessor-version":[{"id":1975,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/posts\/1970\/revisions\/1975"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media\/1972"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/media?parent=1970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/categories?post=1970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/site\/wp-json\/wp\/v2\/tags?post=1970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}