{"id":1991,"date":"2015-11-29T03:49:23","date_gmt":"2015-11-29T03:49:23","guid":{"rendered":"http:\/\/phoenixgamedevelopment.com\/blog\/?p=1991"},"modified":"2015-11-29T03:49:23","modified_gmt":"2015-11-29T03:49:23","slug":"p-152-virtual-world-concept-update-77-chunked-levels-of-detail-using-quad-trees-part-44","status":"publish","type":"post","link":"https:\/\/phoenixgamedevelopment.com\/blog\/p-152-virtual-world-concept-update-77-chunked-levels-of-detail-using-quad-trees-part-44\/","title":{"rendered":"P-152: Virtual World Concept Update 77: Chunked Levels of Detail Using Quad Trees Part 44"},"content":{"rendered":"<p>I have made progress in identifying the issue that was causing the seams to incorrectly line up.<\/p>\n<p>I now believe that this problem has existed at least since I implemented the quad based rendering, and possibly even further back than that. The reason why I didn&#8217;t notice it is that it becomes far less obvious at higher resolutions. The first images shown below are the current state of the terrain. The seams are visible, but far less so then they were in the previous images I posted. The below images were taken with a terrain size (per quad sphere face) of 1024, while the previous images were taken at a terrain size of 64.<\/p>\n<p>While testing the terrain previously, I generally used a resolution of 4096, which means the seams just weren&#8217;t noticeable, but the problem was there. I was able to confirm this by reverting to a previous version of the file I was working on, and lowering the resolution.<\/p>\n<p>I believe the problem is caused by an error in one row in the points generation algorithm. This algorithm works by generating a set of points to match the resolution, so a resolution of 64 will generate 64*64 points, or 4096 points. I have had to create a complex function to iterate through these points however, since they need to be created in quads, with all 4 points of the quad beside each other. This means that I can&#8217;t use a conventional nested for loop. I believe that this algorithm is slightly wrong, and one iteration of the algorithm is off, causing the seaming issues.<\/p>\n<p>Since there are more points at higher resolutions, (eg, 1024*1024 = 1,048,576 \u00a0points) having one row out of sync is far less noticeable.<\/p>\n<p>This problem will need to be fixed, of course, but it does not have to be fixed now. I will be conducting the rest of my work at a reasonably high resolution, so this problem shouldn&#8217;t be too obvious. If I achieve proof of concept, I can come back to this and fix it.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment177-Nov.-28-01.57.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1986\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment185-Nov.-28-04.14-300x233.jpg\" alt=\"PhoenixGameDevelopment185 Nov. 28 04.14\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment185-Nov.-28-04.14-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment185-Nov.-28-04.14-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment185-Nov.-28-04.14.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1988\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment183-Nov.-28-04.14-300x233.jpg\" alt=\"PhoenixGameDevelopment183 Nov. 28 04.14\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment183-Nov.-28-04.14-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment183-Nov.-28-04.14-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment183-Nov.-28-04.14.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1990\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment187-Nov.-28-04.15-300x233.jpg\" alt=\"PhoenixGameDevelopment187 Nov. 28 04.15\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment187-Nov.-28-04.15-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment187-Nov.-28-04.15-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment187-Nov.-28-04.15.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1989\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment182-Nov.-28-04.14-300x233.jpg\" alt=\"PhoenixGameDevelopment182 Nov. 28 04.14\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment182-Nov.-28-04.14-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment182-Nov.-28-04.14-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment182-Nov.-28-04.14.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1978\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment177-Nov.-28-01.57-300x233.jpg\" alt=\"PhoenixGameDevelopment177 Nov. 28 01.57\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment177-Nov.-28-01.57-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment177-Nov.-28-01.57-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment177-Nov.-28-01.57.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment167-Nov.-27-23.12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1979\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment167-Nov.-27-23.12-300x233.jpg\" alt=\"PhoenixGameDevelopment167 Nov. 27 23.12\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment167-Nov.-27-23.12-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment167-Nov.-27-23.12-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment167-Nov.-27-23.12.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1984\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment179-Nov.-28-01.58-300x233.jpg\" alt=\"PhoenixGameDevelopment179 Nov. 28 01.58\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment179-Nov.-28-01.58-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment179-Nov.-28-01.58-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment179-Nov.-28-01.58.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment157-Nov.-27-00.23.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1985\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment178-Nov.-28-01.58-300x233.jpg\" alt=\"PhoenixGameDevelopment178 Nov. 28 01.58\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment178-Nov.-28-01.58-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment178-Nov.-28-01.58-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment178-Nov.-28-01.58.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1983\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment135-Nov.-26-04.08-300x233.jpg\" alt=\"PhoenixGameDevelopment135 Nov. 26 04.08\" width=\"300\" height=\"233\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment135-Nov.-26-04.08-300x233.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment135-Nov.-26-04.08-1024x794.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment135-Nov.-26-04.08.jpg 1040w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1980\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment157-Nov.-27-00.23-207x300.jpg\" alt=\"PhoenixGameDevelopment157 Nov. 27 00.23\" width=\"207\" height=\"300\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment157-Nov.-27-00.23-207x300.jpg 207w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment157-Nov.-27-00.23.jpg 700w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment154-Nov.-26-22.41.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1981\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment154-Nov.-26-22.41-207x300.jpg\" alt=\"PhoenixGameDevelopment154 Nov. 26 22.41\" width=\"207\" height=\"300\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment154-Nov.-26-22.41-207x300.jpg 207w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment154-Nov.-26-22.41.jpg 700w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment151-Nov.-26-20.55.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1982\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment151-Nov.-26-20.55-207x300.jpg\" alt=\"PhoenixGameDevelopment151 Nov. 26 20.55\" width=\"207\" height=\"300\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment151-Nov.-26-20.55-207x300.jpg 207w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2015\/11\/PhoenixGameDevelopment151-Nov.-26-20.55.jpg 700w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have made progress in identifying the issue that was causing the seams to incorrectly line up. I now believe that this problem has existed at least since I implemented the quad based rendering, and possibly even further back than that. The reason why I didn&#8217;t notice it is that it becomes far less obvious [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,10,11],"tags":[],"class_list":["post-1991","post","type-post","status-publish","format-standard","hentry","category-astral-realms","category-software-and-games","category-spiritus-astrum","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"aioseo_notices":[],"builder_content":"","_links":{"self":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/1991"}],"collection":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/comments?post=1991"}],"version-history":[{"count":2,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/1991\/revisions"}],"predecessor-version":[{"id":1993,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/1991\/revisions\/1993"}],"wp:attachment":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/media?parent=1991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/categories?post=1991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/tags?post=1991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}