Hi, thanks for uploading the video. We're trying to visualize a point cloud in imgui (it's for an academic paper). Your code would help us a lot - can it be found somewhere? Thanks.
@dennisrkb4 ай бұрын
imgui does not have any (point cloud) rendering capabilities of its own. It is strictly a UI (windows, menus, buttons, ...) that easily integrates with 3D graphics APIs such as OpenGL, DirectX, ... You could export your point cloud and view it offline in MeshLab or another 3D viewer/editor. Alternatively, you could render the point cloud to a texture and then display said texture. The rendering could be done on the CPU or GPU. Such a program would take ~10 LOC in OpenGL for the render code plus boilerplate/scaffolding. I recommend learnopengl[dot]com We are talking about visualizing points as single pixels or tiny discs here. Anything more fancy/complicated quickly gets into research territory. See Grossmann & Dally 1998; Magnus Strengert, Martin Kraus, and Thomas Ertl 2006; ...
@CabrioDriving10 ай бұрын
Very nice to listen to. 33:32 good design.
@CabrioDriving10 ай бұрын
Cool stuff, Dennis.
@exercisethoughtsanddiscussions10 ай бұрын
I still remember the thrill of mine!😊
@Hunter_R11 ай бұрын
Ωραίος! Παρόλο που το μηχανάκι σου δεν υποστηρίζει την οδήγηση σου το πας καλά. Στο 6:58 το έσωσες παρά τρίχα, το διαχειριστικες σωστα.!
@mattshu11 ай бұрын
Omg I just realized this vid is 12 years old. You definitely had future insight back then!
@world_paths_music Жыл бұрын
Not only a hobby but I can also feel passion. Looks great. Greetings 😊
@darkengine5931 Жыл бұрын
Please correct me if I'm wrong, but intuitively I'm thinking you might already have a solution for fairly extreme deformations (like a character doing contortionist poses) and even without the need to be very conservative with the stretch factor or even avoiding it entirely without visible hole artifacts (along with avoiding stretching artifacts which are too noticeable) provided that your voxel models are high-resolution and filled in. The holes only seem to be an issue with a hollow surface, since a ray that misses a rotated voxel on the surface should still end up hitting one inside, and that doesn't seem to me like it'd create such noticeable artifacts unless the voxels are really large. That is to say, instead of only rasterizing the triangles making up the surface of the character to your voxel hierarchy, perform an additional precomputation step constructing your SVO which fills in the voxels making up the inside of the character's body (perhaps interpolating the material values of neighboring voxels and repeating until the entire character's body is filled in), turning it into a filled solid. For example, it is very challenging to deform the pixels making up a high-resolution outline of a triangle if we're going to do on the fly at render time per-pixel using a quadtree in a way analogous to raytracing without yielding gaps in the deformed outline or very visible stretching of it, but it doesn't seem so much so if the triangle is filled in and not just an outline. Maybe we'll notice a few aliasing artifacts around the triangle's edges if we zoom in close around the filled triangle's edges, but gaps should be eliminated since a ray that misses a rotated pixel will still hit one of its neighbors. Of course that results in way more voxels to store in the SVO, but that seems like the type of content that would lend itself reasonably well to SVDAG compression with lots of redundant octants.
@dennisrkb Жыл бұрын
Or define a mathematically sound, hole-free, ray-SVO intersection test that takes bone transforms and weights into account. That would give you the same guarantees. And while it would work for arbitrary deformations (within the skinned mesh domain that is), the stronger your deformation the less potential for pruning ray-voxel intersections.
@darkengine5931 Жыл бұрын
@@dennisrkb A difficulty I am finding just thinking about it is avoiding the requirement to store a great deal more data per voxel (in my case, even 4 bytes would be a great deal more data) even if I was afforded a great deal of time in precomputation and could anticipate all possible deformations in advance. But also my dream would be to generalize this beyond bone deformations, since a lot of game and VFX engines often also do things like tweens/morphs applied on top with displacement maps to displace vertices arbitrarily for things like facial expressions, making muscles flex, morphing a skinny character into a chubby one (procedural character creation as in the case of games like Mass Effect allowing users to generate their own characters using morph sliders) with results more akin to smooth translation than rotation, etc. It seems very difficult to anticipate every possible case and even if we could, to avoid creating far more false positives with AABBs that encompass the full range of possible relative motion for each voxel in the hierarchy. It seems to me like a filled-in voxel model would be a lot more forgiving in that regard unless I'm overlooking something. I might need to just try it and see.
@darkengine5931 Жыл бұрын
@@dennisrkb Amazing work BTW! I really love voxels and would love to find not only engines utilizing them more but artists to utilize them more directly in the content creation process.
@dennisrkb Жыл бұрын
@@darkengine5931 How should inner voxels be animated? Why wouldn't they suffer from the same dilemma you're describing?
@darkengine5931 Жыл бұрын
@@dennisrkb Same way as the outer voxels with the way I'm conceiving it (which could very possibly be overlooking edge cases). For skinning in the engine we're using even though it's based on polygons, we actually generate a voxel grid and use a heat diffusion type of technique to compute the vertex bone weights given a polygon mesh and bone hierarchy, so we already get the data for how to transform the inner voxels through that process. For something like morphs/tweens and lattice deformations, I'm thinking we can do a similar thing based on the proximity to the vertex that would normally be displaced with a similar kind of diffusion technique. There with weighted translation, avoiding gaps even from outer to inner neighboring voxels seems trickier than rotation, but something I'm thinking we can mitigate by tampering with weight distribution but possibly combining it with your stretch factor. Mostly I'm counting on optimizing and optimizing the SVDAG to achieve higher and higher resolutions and relying on the filled property and possibly some artist parameters to help mitigate any possibility of noticeable gaps since I find that a bit easier in our case, albeit a bit inelegant.
@sp4cerat2 жыл бұрын
Looks good!
@keptleroymg68772 жыл бұрын
Damn 11 years ago.
@8alakai82 жыл бұрын
the wobbler at 8:57 can be by holding on to much with your hands i had when i started riding on mothers bike sort same power as mt 07 if arms are stiff the movement of the front wheel what is normal will go to the back wheel and make the bike shake i did it to
@8alakai82 жыл бұрын
i like to push when riding but this was just not good in same places and a mt 07 with no suspension mods you neet to know that the bike will wobble so be make shure the wobble is before the corner. i have a 2015 mt 07 so i sort knoow what the wobble is
@dennisrkb2 жыл бұрын
Those wobbles were due to my giant windscreen which was directly attached to the handlebars. The wind turbulence induced the wobbling. I've since removed the screen and raised the forks by 5mm (the bike was too neutral, the front too light/wishy-washy from the factory). Never had speed wobbles again thereafter. I recommend raising the forks regardless of wobbles or not. It greatly improves the balance of the bike and its cornering ability^^. Ride on!
@8alakai82 жыл бұрын
at 1:15 wy is the rider in front riding like that for that speed and lean angle you dont need to hang of i think they would take the corner better if they just stay neutrall when riding and focus more on how to take the corner
@dennisrkb2 жыл бұрын
He's what we call a "Klarino" (show-off) in Greece^^. Reminds me of this guy: kzbin.info/www/bejne/gmaul4ylm92NkLM Having said that, he improved a lot since then. Thx for watching^^.
@pa_maj.MARTINI-van-MAN3 жыл бұрын
Nice!
@r11hno3 жыл бұрын
with a full 10:24 minute view as we always give full views for our friends NEW and old.
@r11hno3 жыл бұрын
great presentation and information , like 6 with full support-stay connected
@dairin0d3 жыл бұрын
Um... Dennis, what's your opinion on using cage deformations for skeletal animations of voxel models? I.e., splitting the model into connected cubical or tetrahedral volumes of appropriate size (each with its own octree), and animating the vertices of the resulting "cage" using any of the traditional techniques? Terribly sorry if you've already seen this comment. I'm just not sure if my first attempt to post it was actually successful "^_^
@dennisrkb3 жыл бұрын
I was eager to read your comment but couldn't. It only showed up in my feed but disappeared when I clicked on it. So I'm going straight from voxels to pixels in my work. What you describe would require converting voxels to meshes first (at least temporarily and potentially on the fly)--which sounds very doable especially with "new" technologies such as geometry shaders. But if you already got a mesh, why limit yourself to cage deformations? All the metadata necessary to create a proper mesh (including skeletal data) could be stored in the octree.. In fact this warrants a modern investigation: Could we use voxels only for modelling+intermediary storage and convert them to polygons on the fly at the exact LOD we need? Up for it?^^
@dairin0d3 жыл бұрын
@@dennisrkb I'm certainly not up for it, unfortunately xD But I think that converting voxels to meshes isn't necessarily required for cage deformations. I made a conceptual illustration ( imgur.com/D6BTcPt ) for a 2D case, but the same principles should apply to 3D too. In the illustration, at first we have the original model, and a (relatively) low-poly cage around it (A). The cage consists of connected volumes (or polygons, in the 2D case), which correspond to a particular slice of the model (B). When converting the model to voxels, we don't convert the whole model to a single octree, but rather transform each slice of the model into the un-deformed coordinate space of the corresponding volume, and create an octree in that space (C). As a result, we get a collection of separate octrees which, when deformed in the right way, match (up to octree resolution) the geometry of the original model (D). That way, we don't need to convert anything to meshes during the rendering, we only need to render a bunch of linearly (or trilinearly) deformed octrees. In this scheme, only the cage vertices have actual bone weights, whereas the voxels' positions are determined by their integer coordinates in the octree and the positions of the corresponding volume's vertices.
@dennisrkb3 жыл бұрын
@@dairin0d Now I get you. That's definitely possible. My voxels have bone weights and are driven by skeletal animation. There is nothing in the way of storing 'cage weights' (or inferring them) instead and using cage transforms in their place. I don't see the need for separate octrees though. You can just apply the cage transform on the fly, as you're traversing your (global) octree. Am I missing something?
@dairin0d3 жыл бұрын
@@dennisrkb As far as I understand, applying the cage transform on the fly (during the traversal) would be very troublesome for the octree nodes that don't fall neatly into a single cage cell. I made another illustration ( imgur.com/7B4xjLq ) that, hopefully, demonstrates the problem. Let's assume that, at some finer level of detail, each voxel belongs to one particular cage cell. However, their parent would have to "belong" to every cage cell of its children, which significantly complicates the calculation of its position and bounding box. In principle, a similar problem exists for direct bone transformations as well. The method in your thesis just seems to sidestep it (at least, that's the impression I got) by skipping these calculations for all intermediate LOD levels and relying on moderate animations ;-)
@dennisrkb3 жыл бұрын
@@dairin0d I see the problem now. Yeah originally I wanted to compute an accurate "stretch" factor but couldn't figure it out at that time.. Another idea that could avoid requiring multiple octrees would be to use a non-axis aligned tree, whose hierarchical structure closely follows the model (the skeleton of the character in your example), a kind of "content-aware" subdivision. Although you'd loose quite a few benefits of octrees this way.. so when can we expect ASVO 2.0 from you?^^
@philippbrogli7793 жыл бұрын
I'm relatively new to voxels. One thing I noticed is that people in the comment sections say it is difficult to create the models. Is that true? Let's assume I want to create a landscape with a forest on top of it. How would I go about creating it? Is there a blender-like tool out there?
@dennisrkb3 жыл бұрын
The problem is that there is no standardized format for voxel models. So you'd have to write your own polygon mesh->voxel model conversion tool, after deciding on and specifying your own proprietary voxel format.
@philippbrogli7793 жыл бұрын
@@dennisrkb That would mean I create the landscape in blender, create plants in blender, put those plants wherever they belong and convert the finished product into voxel. Whenever I change something I need to change it in blender first and convert everything into voxels again. Is that order correct? Let's assume I have the skyrim map, how long would that take? A minute, an hour, a day? Obviously it depends on the converter, but I would love to hear a very rough guess. One idea which comes to mind is that if we have a forest with trees which can actually grow, it could switch the polygon treemodel when outside of the render distance and it could convert it in real-time from polygon to voxel when it renders the new chunk. Is that a realistic idea? Also if I create a voxel terrain which is changeable, there needs to be a converter from voxel to polygon again. But this one can take more time. Because it only needs to convert the changed chunks and it basically has all the time it needs. Are the ideas I stated here realistically implementable or are there other ways which you can get the same effect in a way more simple manner?
@dennisrkb3 жыл бұрын
@@philippbrogli779 Or you could write a voxel-based game-engine (+ modelling tools) that can manipulate/render voxels directly without the need for conversions ;)
@philippbrogli7793 жыл бұрын
@@dennisrkb If I want to stand on a mountain and see the cows walking in the valley, with the trees rendering all the way to the horizon, which is better suited? Voxel or polygon? Would it make sense to make a polygon renderer for creatures and a voxel renderer for Plants and landscape? Or would it be better to focus all the energy in only one type of rendering?
@dennisrkb3 жыл бұрын
@@philippbrogli779 You hit on a really great idea! Make a hybrid engine that uses voxels for static (not moving, but destructible) objects such as terrain which they are perfectly suited for, and use polygon meshes for foliage and other animated characters. Blend the two via the z-buffer. Also, before you jump into coding, have a look at "Mega Meshes" to see what's possible with on-the-fly mesh generation: kzbin.info/www/bejne/g2GXhICEoLmrb6c
@Jkauppa3 жыл бұрын
try combining gigatextured triangles to a sparse voxel octree framebuffer and draw everything with breadth first in the octree, or just simple raster all or just simple testing raycast
@Jkauppa3 жыл бұрын
also source pixel cube map path tracing, and n^2 sphere cube map path tracing
@Jkauppa3 жыл бұрын
you dont have to have boxy borders and surfaces, you can have a function determine if and how the surface is being hit, if you use functions as the surface representations, and the ocree as the ray-intersection resolving structure
@Jkauppa3 жыл бұрын
have dynamic accelerated and created from source triangles to octree proxy representation, can be animated
@Jkauppa3 жыл бұрын
you try to represent data storage in the octree, its not optimal
@Jkauppa3 жыл бұрын
it should only be used as intermediate, temporary, dynamic
@Jkauppa3 жыл бұрын
but it can be updated when needed, on demand
@Jkauppa3 жыл бұрын
its like a 3d frame buffer
@Jkauppa3 жыл бұрын
a palette of animated voxels is better, i mean pre-calculated animations, infusing models into the world
@Jkauppa3 жыл бұрын
octree is an acceleration structure for a triangle source data
@Jkauppa3 жыл бұрын
you then jump into the actual source data, through pointers
@Jkauppa3 жыл бұрын
no problem when going really close
@Jkauppa3 жыл бұрын
no need to throw detail out
@Jkauppa3 жыл бұрын
you dont have to calculate the octree all the way down, you just need the intersection point with the geometry
@Jkauppa3 жыл бұрын
its kinda cheating what planes and triangles to check in the ray tracing algorithm
@YYYValentine3 жыл бұрын
So how the data structure looks like? It is not a 3D texture anymore? (Great work BTW!!)
@dennisrkb3 жыл бұрын
It's a sparse octree stored in BFS order github.com/denniskb/asvo
@YYYValentine3 жыл бұрын
@@dennisrkb I download your code, but VS says projects are incompatible, what do I miss? (I used VS only for .NET and Unity projects yet
@dennisrkb3 жыл бұрын
@@YYYValentine It's best if you open an issue on GitHub ;)
@ineedtransformation4 жыл бұрын
Чувак, вернись пожалуйста к вокселям. У тебя же просто шикарно выходило
@CapnSlipp4 жыл бұрын
4:3 aspect ratio videos for the win. ;-D Not only full-sceen on iPad, but easier to watch on a 16:9/16:10 computer screen without consuming a whole screen (leaving room for a browser window, code editor, etc,)
@levipalafox4 жыл бұрын
Here because of the wax donation on Fstoppers you are awesome man.
@dennisrkb4 жыл бұрын
lol can't wait myself! :)
@jncolligan14 жыл бұрын
I came here to see a modified MT 07!? where can i see that! :0) Your airbox removal looks awesome!
@dennisrkb4 жыл бұрын
Hey mate I'm afraid I got barely any videos showing off my MT :( try this: kzbin.info/www/bejne/i6TEmZRtqNaCmMk are you riding one yourself?
@jncolligan14 жыл бұрын
Yeah. I just finished a scrambler-like project on a 2019 bike(much like this kzbin.info/www/bejne/fWPZkGt8qcp5rZo with a few more weight saving mods. Plus a full system Termi and ECU flash. It’s now just an engine and a seat :) but I love the idea of removing the air box, just don’t know if I’ve got the testicular fortitude to go that far! Do you think you sucked much grit into the pistons with them that exposed? I love your blog on your MT. It’s like the Dead Sea scrolls! :). You’re leader in mods on this bike for sure!!!
@davidbobby74 жыл бұрын
Hello! where did you buy the motorcycle plastics?
@dennisrkb4 жыл бұрын
those are chinese knock-offs from ebay, note that we painted the white/black parts ourselves!
@hymnsfordisco5 жыл бұрын
A voxel isn't necessarily a cube, though a regular grid will typically subdivide into cuboid volumes. So even if it is practically the most common and obvious case, maybe there are many breakthroughs to be made if we can imagine voxels in a higher level than just "cubes"
@ultraderek5 жыл бұрын
Good stuff.
@edk.20455 жыл бұрын
You actually can rotate entire models (by model, I mean a tree) in world space. Rotating individual parts like limbs within a single model (in local space) get a bit tricky, however.
@volchonokilliR5 жыл бұрын
Wow- you rock!
@6Twisted6 жыл бұрын
I've come to look at what a 169kg MT-07 looks like. Have you done any more weight savings since? My ABS version is 175kg as I've only changed the exhaust, battery and swapped to aluminium bolts.
@dennisrkb6 жыл бұрын
Thx for reading my blog!!! I've since installed a 520 chain conversion kit with aluminum sprockets. Missed the opportunity to weigh them though :(, but should've saved another 2kg easily, if not more ;)
@6Twisted6 жыл бұрын
@@dennisrkb Not just that but it's rotational and unsprung weight. Did you notice a big performance difference and how often have you needed to adjust the chain since swapping to a smaller one? My chain and sprockets are due for a change so I was going to swap to a steel/aluminium sprocket to save some weight without losing any lifetime.
@dennisrkb6 жыл бұрын
@@6Twisted due to the low weight, high seating position, and geometry of the bike (very front neutral, had to actually raise the forks by 5mm to make it turn in), it was already incredibly agile to begin with, so I would be lying if I say I noticed something. Perhaps you could've measures a split second faster acceleration 0-100 but nothing perceivable with your human senses. I installed a DID ZVM-X and didn't need to adjust it once in 5000km, so I guess I'm gonna opt for the "standard" VX version next time, save some weight and money.
@andrebautembach5286 жыл бұрын
Mr. Kozak
@tfg_85646 жыл бұрын
This was heavily used in DOOM(2016)
@dennisrkb6 жыл бұрын
I doubt that :P
@tfg_85646 жыл бұрын
I think it was used for the environment and not the actual models though
@dudearlo6 жыл бұрын
so let me get this straight.....each box has 8 children and each child has the potential to each have 8 children, and you just choose to render that generation or that child?
@dennisrkb6 жыл бұрын
You're approximating arbitrary shapes by sub-dividing the bounding cube around it evenly in 8 sub-cubes and you repeat this process recursively. After enough steps the voxels become sufficiently small to accurately approximate smooth surfaces even though they are cubical (the same way you can't make out individual polygons in a sufficiently high-resolution mesh - it appears smooth). For rendering, you start at the root node, and, as long as its too large to be displayed, you recurse into the children and so forth. Once the projected size of a voxel becomes ~1px you can stop traversing the tree and draw the voxel. Check out kzbin.info/www/bejne/nHiwpmihebN-i5o
@maitlan7 жыл бұрын
Is it true that you can't rotate a Voxel? Can't you have several independent Octrees attached to the vertices of polygons?
@as12df127 жыл бұрын
"Voxels are little cubes. Nothing more, nothing less". I can't believe you're starting off an "in-depth explaination" with something so blatantly factually wrong.
@dennisrkb7 жыл бұрын
Hey as12 this is a simplified version of my thesis work tailored to non-technical people.
@as12df127 жыл бұрын
Okay, but I would still argue that spreading simplifications that lead to pervasive and hard-to-get-rid-of misconceptions is not a good thing. At the very least, instead of claiming "nothing more, nothing less" you could have said something along the lines of "actually it's more complicated than that, but this notion will do for our purposes". Just saying...
@lukaszsawicki94414 жыл бұрын
@@dennisrkb I think to that you should correct this video.
@johnsherfey36758 жыл бұрын
Question why can't I just have the octree Interpolate between two similar but diffrent octrees?
@Xeloboyo7 жыл бұрын
?
@edk.20456 жыл бұрын
For animation? You can, but if you want a fully destructible game, including destructible people, then the solution he mentions is better.
@Zudomon8 жыл бұрын
Voxels vs polygons are like bitmap vs vector. How can it be memory efficient, when this is the most limited factor? If you take the 2d star example. How many bits do you need to save such a shape as vector graphic? You can't have unlimited detail, because you have not unlimited memory... and even if you save only the surface by LTC or SVO, you need the memory for the surface. So double the resolution will quad to oct your memory. I am still not sure, wether voxels are the future, like some genius predict us. I am excited how much memory a Quake 3 level would take, if you use voxels instead of polygons in atomontage resolution.
@dennisrkb8 жыл бұрын
Depends on the topography of your object. Flat surfaces can be represented more efficiently with polygons. 3D, non-parametric fractals can be represented more efficiently (memory-wise) with voxels.
@Zudomon8 жыл бұрын
Okay, that's right... but in most non fractal cases the voxels should use more memory. You talked about foliage in the last video, but you show a polygon scene. So do you know any voxel foliage? I can't imagine that, because a grass blade or leaf must be very detailed for that.
@johnsherfey36758 жыл бұрын
Zudomon Jon Olick does euclideon better.
@Bestmann3n7 жыл бұрын
have fun deforming and animating models made of voxels...
@void_chicken8 жыл бұрын
Couldn't you just use multiple octrees and rotate them by raymarching on a distance field?
@YYYValentine8 жыл бұрын
Hi! How do you render the voxels? Are those raycasted, or made by tiny triangles? Thanks!
@dennisrkb8 жыл бұрын
A custom rasterizer in CUDA with similarities to QSplat
@MrBratkenSolov8 жыл бұрын
This is great. Didn't know it's possible. P.S: i wanna punch every person who says "OMFG!!!!!! have you seen Euclidean?". Ye, i've seen. Total bullshit.
@FragMentEditing8 жыл бұрын
+MrBratkenSolov It's not bullshit.
@jmdrake7 жыл бұрын
Jealous much?
@descai109 жыл бұрын
For those wondering, this is what is used to make AtomontageEngine (obvious since featured in this video ) and euclideon possible.
@YYYValentine9 жыл бұрын
You determine the center point of every voxel. Does it mean, that it is rather a pointcloud then? Becouse you need the position of the voxels individually? Thanks!
@amineroula9 жыл бұрын
Thank you very much for sharing your knowledge with us :)
@BasilHorizon10 жыл бұрын
I woner what happens if you will try to capture a mirror. :D
@pippettoerparaculo437410 жыл бұрын
I want a voxel animation software now!
@pippettoerparaculo43748 жыл бұрын
***** No!
@pippettoerparaculo43748 жыл бұрын
***** I'll have one for christmas, you're just jealous
@johnsherfey36758 жыл бұрын
Anton Zuykov you want to hear a cooler story? Make a paper / presudocode for it and I will make a render to blow your socks off. >:p