tag:blogger.com,1999:blog-3779956188045272690.post2574468039909617427..comments2024-03-22T01:46:59.425-04:00Comments on Procedural World: From Voxels to PolygonsMiguel Ceperohttp://www.blogger.com/profile/17586513342346629237noreply@blogger.comBlogger49125tag:blogger.com,1999:blog-3779956188045272690.post-33288649696237175332016-12-06T17:57:59.689-05:002016-12-06T17:57:59.689-05:00Anonymoushttps://www.blogger.com/profile/12172907601091047520noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-13496994359483223042016-12-06T17:55:57.402-05:002016-12-06T17:55:57.402-05:00I was wondering if you continually reconstruct the...I was wondering if you continually reconstruct the octree as the camera moves or do you re-use part of the old octree? Also, is your entire world stored as an octree or do you use chunks? (I would prefer not to use chunks if possible)Anonymoushttps://www.blogger.com/profile/12172907601091047520noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-59338548988766684612016-11-30T15:35:32.107-05:002016-11-30T15:35:32.107-05:00I would also like a link, if possibleI would also like a link, if possibleAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-27469105510148955912016-03-09T09:43:26.548-05:002016-03-09T09:43:26.548-05:00Hermite data stores points and surface normals on ...Hermite data stores points and surface normals on edges of a voxel to later on have enough info to build a plane. <br /><br />QEF is the sum of the squares of the distances between a given point inside a voxel and each of the planes of this voxel.<br /><br />For Dual Contouring, you may want to find a point that optimally "minimize" it, the lowest QEF value. With this point and the normal of the surface on the edge, you get the plane equation for this point location.OKhttps://www.blogger.com/profile/16570831600350605291noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-59613610977176820132016-03-06T23:34:03.271-05:002016-03-06T23:34:03.271-05:00Can someone explain what exactly QEF is?Can someone explain what exactly QEF is?dsdsds123100https://www.blogger.com/profile/04074203666861761656noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-47921970402389447532014-07-25T18:49:23.592-04:002014-07-25T18:49:23.592-04:00Is there a simple way to take destruction and crea...Is there a simple way to take destruction and creation of objects into a game so it works much the same way in realtime outside your editor? Preferrably with a zero sum of mass, meaning if i attempt ingame to create say a sphere it only cuts out the prexisting part but doesnt destroy it(or does but recreates only the destroyed part at the same time). Think "i point at wall in a game, it cuts out a chunk of it but it doesnt disappear". Gravity gun kind of but on the terrain itself. Otherwise i want it to work pretty much exactly like you show on your youtube videos. I simply want to add an avatar and some gameplay elements to your editor in a way.<br /><br />Is this possible at all? If it is, how much would someone who needs unity to model a game need to learn to make it possible?Anonymoushttps://www.blogger.com/profile/12336585454626220652noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-77440237615359448242014-01-06T14:35:01.481-05:002014-01-06T14:35:01.481-05:00Hi Miguel Cepero,
I'm a very big fan of your w...Hi Miguel Cepero,<br />I'm a very big fan of your work and excited to see a game created with your engine. I already thought of such an engine myself and during my research I found out about your blog. <br />Now I would like to ask you how Dual Contouring works. I did not understand the thing with the QEFs and the paper does not help me. Can you explain how exactly the QEFs are working and are minimized? <br />So, if you have the twelve normals of the isosurface at the edges of the cube, how do you place the point in that cube?<br />Greetings from Germany <br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-5977538892255056942013-10-03T10:55:48.157-04:002013-10-03T10:55:48.157-04:00I think I understand now. From the Dual Contour pa...I think I understand now. From the Dual Contour paper you link (http://www.frankpetterson.com/publications/dualcontour/dualcontour.pdf), I found a good two-sentence answer to what was confusing me:<br /><br />"The resulting representation is an octree whose leaf cubes have signs at their corners with exact intersections and normals tagging edges that exhibit sign changes… Interior nodes in the octree contain QEFs used during simplification."Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-6960425036029566112013-10-03T10:28:39.557-04:002013-10-03T10:28:39.557-04:00Ok, I understand the output from the algorithms de...Ok, I understand the output from the algorithms described here is traditional 3D triangle geometry, but what are your inputs? Are voxels the input or simply the resolution at which you sample your procedural functions? If the inputs are functions, then what about when someone starts making explicit modifications to the procedural world? Is that when you start storing per-voxel data?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-88058673394284735182013-09-26T08:43:59.188-04:002013-09-26T08:43:59.188-04:00Do you handle the non-manifold cases for dual cont...Do you handle the non-manifold cases for dual contouring somehow? Alternatively, is there some trick to still get smooth normals over triangles connected to singular features? Forcing a sub-division to resolve ambiguities seems to work, but is there another way?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-79976464795365888172013-09-06T23:39:57.561-04:002013-09-06T23:39:57.561-04:00I have been trying to implement DC as well, howeve...I have been trying to implement DC as well, however I've hit a bit of a snag.<br /><br />How are you modifying the octree with the model shaping and whatnot, are you using some sort of branching CSG tree?Anonymoushttps://www.blogger.com/profile/14465940787326988066noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-67697795813746786512013-08-30T15:13:12.094-04:002013-08-30T15:13:12.094-04:00Ah, you are right. It was mentioned at the bottom ...Ah, you are right. It was mentioned at the bottom of http://procworld.blogspot.com/2010/11/opencl-first-iteration.html, which I had read some time earlier and forgotten about. Thanks!<br /><br />All of your posts have been very good reads. Thanks for making voxel rendering and the problems inherent with it so interesting!Anonymoushttps://www.blogger.com/profile/06459589309487468612noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-15434178381075754362013-08-30T12:06:48.204-04:002013-08-30T12:06:48.204-04:00If you have a 3D field function (procedural or not...If you have a 3D field function (procedural or not), you can compute normals as the gradient of the function. It does require you to evaluate the function at least another three times. I think I mentioned this in one of the OpenCL contouring articles.Miguel Ceperohttps://www.blogger.com/profile/17586513342346629237noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-31502160959621625542013-08-30T11:57:27.224-04:002013-08-30T11:57:27.224-04:00I have a similar (or perhaps identical) question a...I have a similar (or perhaps identical) question as Anonymous up above - dual contouring as described in the paper requires explicitly tagging each intersection point with the surface normal. For a procedurally generated surface, how do you calculate the normal at an arbitrary point in the grid? Or do you use some sort of heuristic for determining the normal based on the relative positions of the surface around the point? The only tangentially related article I could find was http://dl.acm.org/citation.cfm?id=777792.777840, but that describes an iterative approach that doesn't seem like it would cleanly extend to 3D space (nor be computationally feasible).Anonymoushttps://www.blogger.com/profile/06459589309487468612noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-30313530188460336722013-07-14T12:26:05.804-04:002013-07-14T12:26:05.804-04:00Hi, thanks for you work. It is awesome. In this ar...Hi, thanks for you work. It is awesome. In this article you mentioned that later you will describe how is world represented as 3D field. Can you point me to your blog post about this?Anonymoushttps://www.blogger.com/profile/05671208162343966987noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-20286901590618880212013-06-10T14:19:33.411-04:002013-06-10T14:19:33.411-04:00Hi, everyone!
I still have problem to get correct ...Hi, everyone!<br />I still have problem to get correct gradients. I noticed that everywere they are calculated using a function (sphere, cube) or they are already on the model used (hermite data). <br /><br />What if i want to generate terrain AND building? <br />I MUST have the freedom of build (and destroy) any kind (and any part) of tridimensional object by simply arbitrarly set latticePoints to "internal" or "external", but if i do so, correct gradients are impossible to get with my methods.<br />Actually i "tag" latticepoints as internal or external, then i calculate their density using hte number of adjacent "internal" points. Then i calculate gradients by using the formula <br />Gxyz = [Dx-1yz - Dx+1yz, Dxy-1z - Dxy+1z, Dxyz-1 - Dxyz+1]/2<br />Gradients are good on sphere but aren't so on sharp edges.<br />Any idea?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-18959846357989138162013-05-28T19:30:06.944-04:002013-05-28T19:30:06.944-04:00Do you happen to have a link to the library where ...Do you happen to have a link to the library where you got your QEF solver?Anonymoushttps://www.blogger.com/profile/14465940787326988066noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-82048736923406665582013-02-26T16:42:07.022-05:002013-02-26T16:42:07.022-05:00MCepero will help you much better.
Minimizing QEF...MCepero will help you much better.<br /><br />Minimizing QEF's is required for grabbing the 3d points needed for building your DC quads.<br />I am not sure but I think you may bake your minimizers offline. But I guess this is just if you really need to stick to your exact implicit function's shape.<br /><br />If you are not that interested in shaping the exact noise you were sampling, maybe you can save some streams but if you want to store/pack the noise's real values, then I think there is no lighter alternative so far.<br /><br />Good luckOKhttps://www.blogger.com/profile/16570831600350605291noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-34756644519250142302013-02-26T16:02:59.493-05:002013-02-26T16:02:59.493-05:00Hi, you've got pretty cool stuff here :)
How d...Hi, you've got pretty cool stuff here :)<br />How does it work?<br /><br />First you calculate exact intersection points and normals for voxels?<br />Then you apply QEF?<br />And than you use Dual Contouring? (Because for dual contouring you need normal)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-10074930542772645502012-12-28T06:22:59.756-05:002012-12-28T06:22:59.756-05:00Hiya! I am curious if you have a lot of traffic on...Hiya! I am curious if you have a lot of traffic on your weblog?ScientificAwesomeness Bloghttp://scientificawesomeness.wordpress.com/noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-54986555685502450342012-03-15T16:23:05.379-04:002012-03-15T16:23:05.379-04:00Hi MCeperoG,
Sorry for my poor clarity due to my ...Hi MCeperoG,<br /><br />Sorry for my poor clarity due to my lack of training on such approaches.<br /><br />It is very cool to kindly answer, I really appreciate this.<br /><br />To put it in other words, I have hard time to understand how the octree could stop sub-dividing when underlying caves(if sampling a 3D noise for a planet surface in my case) are yet occluded by upper levels of surface. So I guess I should force the core of the octree to be skipped at a certain planet diameter.<br /><br />In other words, how to prevent generating this piece of cheese with closed underground pockets that are not visible even if they are close to camera.<br /><br />But you said you are applying extra pass to detect them.<br /><br />I am slowly getting it, much thanks again for your inputs.<br /><br />Kindest regards<br /><br />PS: I checked Tao Ju's intersection free DC on sf.net... Wow...I need to study it a bit more.OKhttps://www.blogger.com/profile/16570831600350605291noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-47021563738168158162012-03-15T15:40:08.029-04:002012-03-15T15:40:08.029-04:00Not sure what you mean. I do not perform any tests...Not sure what you mean. I do not perform any tests on triangles. I extract the isosurface as a triangle mesh using Dual Contouring. Very often there are pockets of surface that are hidden, or floating bits of terrain, which is the same. I'm adding a phase to detect and remove these later from the meshes.Miguel Ceperohttps://www.blogger.com/profile/17586513342346629237noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-27193646393186043382012-03-14T03:43:52.173-04:002012-03-14T03:43:52.173-04:00How do you predict if no triangle will later on, o...How do you predict if no triangle will later on, or yet already, occlude new candidate ones ? Are you casting rays from camera to far voxels vertices and check if they intersect previously generated triangles ?<br /><br />I guess this could be also possibly extracted from octree's vertices sampled density values but it not yet so obvious for me.<br /><br />Thanks !OKhttps://www.blogger.com/profile/16570831600350605291noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-14431511244038134212012-03-13T11:58:51.403-04:002012-03-13T11:58:51.403-04:00Hi MCeperoG,
Much thanks for the light-speed assi...Hi MCeperoG,<br /><br />Much thanks for the light-speed assistance !<br /><br />OK, gotcha, the octree should be simple, I am going to try that.<br /><br />Yes, even lowering octaves/grid res to a poor level, I want to first have something encouraging and move on with tightening the whole stuff. I did quite extensive tests with various noise implementations exposing the trade off for sampling simplex in such scenario and you are right, we can at least gather as much as possible samples and see what we get depending on hardware.<br /><br />OK gotcha on this too : Adaptive sampling relative to octree traversal. This definitely looks yum ! <br /><br />In all cases, much thanks again for your precious inputs.OKhttps://www.blogger.com/profile/16570831600350605291noreply@blogger.comtag:blogger.com,1999:blog-3779956188045272690.post-61717473699154777782012-03-13T11:27:43.001-04:002012-03-13T11:27:43.001-04:00I don't know of any papers doing this. My tech...I don't know of any papers doing this. My technique is simple, the octree is increasingly divided according to the camera position. Then a second pass makes sure neighbor octree cells match the subdivision level. You end up with rings of cells that become larger as they are further from the view.<br /><br />You should have no problem running a simplex density function in real-time, even if you don't use the GPU. Of course this is a function of the grid resolution you use and how many octaves of noise you have. <br /><br />I recommend you use adaptive sampling as well, that is you can test bigger cells of the octree, if you see there is no surface crossing you can skip all the children cells. However this is tricky since you may get some details overlooked.Miguel Ceperohttps://www.blogger.com/profile/17586513342346629237noreply@blogger.com