Jump to content


Notice about Feature Requests & Bug Reports

The bug reporting and feature request forums (except for the Urgent Help section) are going away soon! Please use Mantis to report any bugs and feature requests. the link to Mantis is:
3d-coat.com/mantis/

Read more about it HERE.

Photo

Question for Andrew


  • Please log in to reply
39 replies to this topic

#1 Cube

Cube

    Neophyte

  • Member
  • Pip
  • 54 posts

Posted 11 March 2010 - 09:20 PM

Hi Andrew, i sent you an e-mail a while back about the possibility of changing the rendering method in the Voxel room to improve fine details. Obviously you know a lot more about this stuff than i do, but i wondered if you can clear up some questions for me and perhaps we might be able to discuss some future options to improve things. Everyone else is welcome to add their own ideas/opinions of course!

Firstly i want to illustrate the current situation, and i tried to set up a test to directly compare the fine surface detailing abilities between 3D-Coat and ZBrush (since i have the trials of both software installed).

Here is the 'control' object. A very basic sphere mesh:

Posted Image

Next i scaled the object until one segment filled the viewport (i never moved the camera after this):

Posted Image

Next i subdivided the mesh to ~25,000,000 polygons and made a few marks at very small brush sizes:

Posted Image

Next i opened up 3D-Coat and loaded the same mesh (merge>select mesh) and once again scaled it so one face filled most of the view (again i never moved the camera after this):

Posted Image

Then i subdivided the mesh 4-5 times until the faces were no longer visible to give a closer approximation to the subdivided ZBrush sphere. (poly count reduced slightly due to the volume change):

Posted Image

After the volume had completed the merge operation i tried to make a few marks with increasingly smaller brush sizes:

Posted Image

Now we can see immediately that the difference in surface detail between the two approaches is huge. I know that this is not a direct comparison because of the way polygons are being used is fundamentally different in the two applications, but i think it's still something worth discussing since total usable geometry seems to be what is holding 3DCoat back.

Here are my Questions for you:

1: Would switching to a pure voxel render solution be more efficient (in terms of performance) and allow us to scale object density up further than the current polygon skin render? I know this would result in discrete 'steps' between each voxel, but if we could get the density high enough i think it could work very well.

2: If voxel rendering is not a valid option could the existing 'polygon skin' method be optimized to allow us to work on 60-80m+ poly objects to achieve the same detail level as ZBrush does at ~25m?

Please don't take this thread as an attack on 3D-Coat, i think the program is incredible! I prefer 3D-Coat to ZBrush in every respect except for this issue of very fine details. I'd just be really interested to hear your thoughts on these questions - and possible ideas you might have for improving the fine detailing in 3D-Coat in the future.

Thanks very much for your time!

#2 ChadCapeland

ChadCapeland

    Newbie

  • Member
  • 17 posts

Posted 11 March 2010 - 10:14 PM

1: Would switching to a pure voxel render solution be more efficient (in terms of performance) and allow us to scale object density up further than the current polygon skin render? I know this would result in discrete 'steps' between each voxel, but if we could get the density high enough i think it could work very well.

2: If voxel rendering is not a valid option could the existing 'polygon skin' method be optimized to allow us to work on 60-80m+ poly objects to achieve the same detail level as ZBrush does at ~25m?


It's not the render that is the issue, it's the data structure. Voxels (level set) cannot be compared to polygons, ESPECIALLY when you have something like a sphere, which is a pretty ideal case for polygons, but a huge waste for voxels. With voxels, all the voxels distance from the surface still have to be stored in memory (unless there is a hierarchical data structure) and you aren't using them. Consider, you could create dozens or even hundreds of concentric spherical shells and not use any more memory with voxels, but if you used polygons would have dozens or hundreds of times more polygons to store/process.

Polygons do better on objects where the ratio of surface to volume is small. Spheres, cubes, etc. Voxels do better when the ratio of surface to volume is high. Sponges, trees, etc. Polygons also do better when there is a high variance of frequencies. Voxels do better when there is even frequencies.

Try making a sponge with voxels and polygons and see how the change in data structure makes the voxels so much faster and lighter in memory consumption.

- Chad

#3 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 11 March 2010 - 10:29 PM

Well I've mentioned this a few times already, but the difference in detail is caused by the hardware phong shading in 3D Coat. ZBrush doesn't use any form of shading on its models. This is why ZBrush models look faceted when low poly and yet smooth when high poly.

If you take your 3D Coat model into another program that allows you to disable shading then you'll see that it looks as good as the ZBrush version.

It would be very easy for Andrew to allow us to disable shading, but because a non shaded model might look great in 3D Coat or ZBrush it doesn't mean it's going to look great when in a game engine or an external renderer when shading is enabled again, or when you drop a normal map onto your model.

So for me I personally prefer the WYSIWYG approach. The only people that would really benefit from disabling shading are the folks that plan to export a multi million poly model from 3D Coat and display it in a renderer with shading disabled. It also might be good for people that just want to render their model in 3D Coat and publish an image of it.

#4 Cube

Cube

    Neophyte

  • Member
  • Pip
  • 54 posts

Posted 11 March 2010 - 10:30 PM

It's not the render that is the issue, it's the data structure. Voxels (level set) cannot be compared to polygons, ESPECIALLY when you have something like a sphere, which is a pretty ideal case for polygons, but a huge waste for voxels. With voxels, all the voxels distance from the surface still have to be stored in memory (unless there is a hierarchical data structure) and you aren't using them. Consider, you could create dozens or even hundreds of concentric spherical shells and not use any more memory with voxels, but if you used polygons would have dozens or hundreds of times more polygons to store/process.

Polygons do better on objects where the ratio of surface to volume is small. Spheres, cubes, etc. Voxels do better when the ratio of surface to volume is high. Sponges, trees, etc. Polygons also do better when there is a high variance of frequencies. Voxels do better when there is even frequencies.

Try making a sponge with voxels and polygons and see how the change in data structure makes the voxels so much faster and lighter in memory consumption.

- Chad


Sorry maybe i should have been clearer in my post, i'm aware of the differences between voxels and polygons (but dont forget 3D-Coat uses a polygonal skin to display the volume, so poly count directly affects performance). The only reason i used a sphere for the example is because i could quickly and easily allign one quad to the screen size, so that i knew i was looking at the same small surface area (realtively) between the 2 apps. I don't see how the overall shape of the object has any bearing in a test like this that's purely for looking at fine surface detail though. Because 3D-Coat essentially becomes unusable beyond ~20 million poly's for most people, that's as far as i took it (ZBrush still runs very smooth at this res). I wasn't intending to say that polygons are the same in both apps, this is just as close to an accurate comparison of surface detailing that i can make.

My question is whether we will ever be able to get the same level of detail on surfaces in 3D-Coat that are possiple is ZBrush. Whether that be by optimizing the current polygonal skin method to allow for much higher resolution, or using true voxel rendering at a super high density or whatever. If it's not possible that's fine, but i'd still like to hear what Andrew might be able do to increase efficiency down the line.

I fully understand the benefits of using voxels, but i just want to know if we will be able to get the same resolution for fine detail work eventually that other apps have.

Does that make sense?

#5 Cube

Cube

    Neophyte

  • Member
  • Pip
  • 54 posts

Posted 11 March 2010 - 10:35 PM

If you take your 3D Coat model into another program that allows you to disable shading then you'll see that it looks as good as the ZBrush version.


Hmm, i can't see how that's possible. In my test 3D-Coat simply failed to even create the detail at smaller brush sizes, the resolution is just not there. Surely to get the same detail as the ZBrush model, you would have to double the poly count or more to compensate for the (relatively) inefficient use of tri's on the Voxel 'skin'. I'm sure shading would make a difference, but you'd still need the geometry there to pick up the details in the first place.

#6 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 11 March 2010 - 10:51 PM

Hmm, i can't see how that's possible. In my test 3D-Coat simply failed to even create the detail at smaller brush sizes, the resolution is just not there. Surely to get the same detail as the ZBrush model, you would have to double the poly count or more to compensate for the (relatively) inefficient use of tri's on the Voxel 'skin'. I'm sure shading would make a difference, but you'd still need the geometry there to pick up the details in the first place.



Your test didn't just demonstrate the difference between shading models but it also demonstrated the difference between two totally different brushes. :)

Another way to demonstrate the shading issue would be to export the above ZBrush model into another program with phong shading and you'll see the super fine detail vanish.

Still, I'm not denying that both surfaces in either programs are different. All I'm saying is that the biggest difference is caused by the shading in 3D Coat and not the poly count.

#7 Cube

Cube

    Neophyte

  • Member
  • Pip
  • 54 posts

Posted 11 March 2010 - 11:02 PM

Your test didn't just demonstrate the difference between shading models but it also demonstrated the difference between two totally different brushes. :)

Another way to demonstrate the shading issue would be to export the above ZBrush model into another program with phong shading and you'll see the super fine detail vanish.

Still, I'm not denying that both surfaces in either programs are different. All I'm saying is that the biggest difference is caused by the shading in 3D Coat and not the poly count.


I used the standard brush in ZBrush and the Clay brush in 3D-Coat with the solid circular alpha. I can't see how that would make any difference when clearly once you go to a small brush size in 3D-Coat you are at or below the size of an individual voxel. It seems to me that for every voxel in 3D-Coat, ZBrush has about 4 polygons (this is to be expected since a huge number of polygons in 3D-Coat are used up around the edges of each voxel for smoothing - so the voxel 'grid' is much less dense compared to the polygon 'grid' in ZBrush), so i think you would need another subdivision in 3D-Coat to get the same detail. That would mean approximately 100m poly's.

This is why i'm wondering if a pure voxel rendering approach could be made efficient enough to allow for another subdivision level or two than is possible at the moment. That way we mght be able to have the best of both worlds, total freedom from topology concerns and super high detail surfaces as well.

#8 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 11 March 2010 - 11:16 PM

And one more thing - 3D Coat's poly count is in triangles while ZBrush's poly count is quads. So perhaps it might be best to double ZBrush's poly count before comparing it with 3D Coat.

So 20 million quads in ZBrush is the equivalent to 40 million triangles in 3D Coat.

#9 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 11 March 2010 - 11:38 PM

This is why i'm wondering if a pure voxel rendering approach could be made efficient enough to allow for another subdivision level or two than is possible at the moment. That way we mght be able to have the best of both worlds, total freedom from topology concerns and super high detail surfaces as well.


Further subdivision levels will be possible when Andrew adds the planned subdivision/multi-res support in Surface mode. I suspect voxels are a little too memory hungry and wasteful for super high detail.

#10 Cube

Cube

    Neophyte

  • Member
  • Pip
  • 54 posts

Posted 12 March 2010 - 12:13 AM

And one more thing - 3D Coat's poly count is in triangles while ZBrush's poly count is quads. So perhaps it might be best to double ZBrush's poly count before comparing it with 3D Coat.

So 20 million quads in ZBrush is the equivalent to 40 million triangles in 3D Coat.

Further subdivision levels will be possible when Andrew adds the planned subdivision/multi-res support in Surface mode. I suspect voxels are a little too memory hungry and wasteful for super high detail.

Aye that's a good point about ZBrush using quads. So differences in technology aside ZBrush probably has an effective geometry advantage of something like 4:1 over 3DC in super fine details at the moment (that's best case scenario, obviously it depends on topology). That's just going by what is possible on my machine, 20 million triangles and above is unusable for me in 3DC, and about 30-40 million quads is as high as i can go in ZBrush.

Like i said in my first post this is not in any way meant as an attack on 3DCoat, i think the app is simply amazing to use and the very high surface details are literally my only 'problem' with it. I'm just interested in how much room for improvement there is in this one area down the line and thought it might be interesting to have a thread where we could get Andrews opinion as he has the perspective of someone with huge knowledge about this stuff.

If voxels and super high geometry just don't go together on the hardware we have available today then that's fine - i'm just curious about what is possible :)

I'm certainly looking forward to Multi-Res in surface mode if this will go some way to helping!

#11 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 08:56 AM

such a great thread!
+1 to Splodge on the point of adding a FLAT shade mode to the vox room. Has anyone posted a feature request for that one yet...wont looks quite the same for tris... but still, would be a nice addition that Andrew could likely code in a few minutes.

************************************************************

Thank you very much for the comparison images and text for the comparison. You've put into words what many 3DC users also recognize.

Another example of why IMO 3DC might want to consider an ADAPTIVE TESSELLATION method for creating/drawing the POLY skin for the voxels....
Posted Image
http://http.develope..._chapter07.html

For this dynamic tessellation, I would suggest USING ONE OF THE OTHER 7 CORES THAT 3DC REFUSES TO USE IN OSX AND WINDOWS!!!!, MULTITHREAD 3DC PLEASE!; in addition, perhaps use CUDA, or preferably OpenCL so all us Ati users can benefit too.. as now there is an automatic OPEN SOURCE converter for CUDA to OpenCL. All the sudden 20 million turns into 10-15 mil, or less.
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#12 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 09:02 AM

AbnRanger, your post brings to mind a possible feature request(that someone might want to make)...

should the new multi-res mode be turned into actually adding multi-res to the sculpt room so that you just leave the vox room and go into a robust sculpt room for multi-res work... thus we get the multires, but IMO it logically moves the multires mesh from the vox room to the sculpt room... AS LONG AS IT DOES NOT PREVENT THE FURTHER EDITING OF THE VOXELS.... just an idea...

**************

But for multi-res, using the current poly skinning method, wouldn't it need to be quads(or turned into quads) for proper subdividing(equation wise) anyway?
Wonder what Andrew is going to do there... Maybe quadrangulate then subdivide, but then I'm getting lots of snapping errors in the retopo room with quadrangulates meshes...
so hmmm.... Fix the snapping algorithm too(PLEASE!)
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#13 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 12 March 2010 - 12:52 PM

For this dynamic tessellation, I would suggest USING ONE OF THE OTHER 7 CORES THAT 3DC REFUSES TO USE IN OSX AND WINDOWS!!!!, MULTITHREAD 3DC PLEASE!; in addition, perhaps use CUDA, or preferably OpenCL so all us Ati users can benefit too.. as now there



Tessellation isn't the same as decimation. You couldn't apply that method to a voxel mesh. Doing so would result in 10x more polygons. It would be the total opposite of what you want.

Tessellation takes a low poly object and smooths it out by subdividing the geometry in real time. As you've shown, somebody has developed a smarter version that is a little more optimal, but it's still adding geometry to a low poly object. It doesn't reduce the geometry.

#14 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 01:02 PM

ADAPTIVE TESSELLATION!

use a less accurate world space measurement of a voxel region to generate a lower-res poly mesh(say 1X for example), then apply adaptive tessellation to the poly skin according to a calculation with more spatial accuracy to generate a more detailed poly-skin(say 2x or 4x) using that more accurate calculation for a given voxel region the user is sculpting on, gather areas with lower regional incidences of normal-angle differences(surfaces that are more flat than volatile) and use adaptive tessellation to calculate a MUCH MORE OPTIMIZED version of the poly-skin allowing for much higher detail while applying the detail intelligently, with low cpu usage, while making for a much faster workflow/redraw/memory use on GPU.

Or you could decimate if you wanted to waste cpu/gpgpu cycles... would still get mostly the same product, but have to work with an initially higher res poly skin, which IMO is unnecessary given the ability to use spatial calc references of the actual voxels(8x8 i think per voxel)

hope that quick description comes through semi-coherently, I'm busy sculpting in 3DC at the moment... :-)
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#15 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 12 March 2010 - 01:29 PM

hope that quick description comes through semi-coherently, I'm busy sculpting in 3DC at the moment... :-)


What you may be failing to understand is that the adaptive tessellated mesh will always have more polygons than the original mesh.

I thought that you wanted less polygons?

#16 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 01:34 PM

What you may be failing to understand is that the adaptive tessellated mesh will always have more polygons than the original mesh.
I thought that you wanted less polygons?

which mesh has more polys in your opinion? Left or Right? Guess which one is adaptive?

Posted Image
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#17 splodge

splodge

    Apprentice

  • Member
  • PipPipPip
  • 506 posts

Posted 12 March 2010 - 01:58 PM

which mesh has more polys in your opinion? Left or Right? Guess which one is adaptive?



The original low poly mesh isn't being shown. The image is showing the difference between standard tessellation and adaptive tessellation. The image is assuming that the viewer understands that a low poly object was the source object.

#18 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 02:15 PM

The original low poly mesh isn't being shown. The image is showing the difference between standard tessellation and adaptive tessellation. The image is assuming that the viewer understands that a low poly object was the source object.

a voxel calculation of lower accuracy could easily generate a low-poly skin to a highly detail voxel object. You could also average out the voxel calculation to a specified degree to generate a spatially "blurred/smoothed" object for low poly vox skin generation.
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#19 ifxs

ifxs

    Novice

  • Member
  • PipPip
  • 387 posts

Posted 12 March 2010 - 03:02 PM

other apps and tech demos do this for skinning and recalculating meshes in realtime, there's likely an open-source paper on the subject.
8x cores XEON
16+gig RAM
OSX / Linux / (and reluctantly sometimes Windows)

#20 ChadCapeland

ChadCapeland

    Newbie

  • Member
  • 17 posts

Posted 12 March 2010 - 06:50 PM

Sorry maybe i should have been clearer in my post, i'm aware of the differences between voxels and polygons (but dont forget 3D-Coat uses a polygonal skin to display the volume, so poly count directly affects performance).


No, voxel count + polygon count affects performance. In Zbrush, you are only worried about polygon count. If you want to compare apples to apples, don't add the voxel overhead, compare teh two when using only polygons. The mesh shown is only a proxy of the underlying levelset surface. The SDK allows you to export this array to your rendering software so you can render the levelset directly. Zero polygons.

- Chad




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users