Hi Ian and Florin, This problem of when and when not to use TGs was examined by Chien and and to some extent by me sometime last year IIRC. I think it is a compromise and mostly app. specific. Chien gave the useful stat. that TG + Shape3D takes ~3.6K (off the top of my head).
http://swjscmail1.java.sun.com/cgi-bin/wa?A2=ind0204&L=java3d-interest&P=R7684&D=1&O=D&m=29246 http://swjscmail1.java.sun.com/cgi-bin/wa?A2=ind0204&L=java3d-interest&P=R15076&D=1&H=0&O=D&T=1&m=29246 Rgds Raj Vaidya >On Wed, 26 Feb 2003 07:23:33 -0500, Ian M Nieves <[EMAIL PROTECTED]> >wrote: >Florin, > >I am happy you found my explanation useful. Please keep the list updated >on the progress you may make with this problem. > >So then the current conclusion is that in order to control the memory >usage of our applications, we must tradeoff between the memory usage of >1) Many transform groups attached to a single shared geometry >AND >2) A single transform group attached to a single, but compound geometry >containing all the original geometries. > >And as Florin pointed out, there are many shades of grey in between both >solutions. You can achieve these shades of grey by adjusting the amount >of geometry you share. To be more concrete, to go from strategy 2 to >something that is a little more of strategy 1.. you would start with a >single transform group and a single geometry that contains 10 spheres... >and then move to using two transform groups, with each attached to a >single geometry that contains 5 spheres! OBVIOUSLY you must make sure >that the geometry for the combined 5 spheres is shared between the two >Shape3Ds, or else you have saved no memory at all! THEREFORE, >the degree of sharing you use IS the shade of grey between 1 and 2. > > >Sincerely, >Ian Nieves > > > > >On Wed, 26 Feb 2003, Florin Herinean wrote: > >> You are perfectly right in your answer. The trick is to find the perfect >> compromise between the two solutions. Thanks a lot to Ian for pointing that >> very clearly and to Nitin who opened that thread. Now I know how I can >> further improve the memory usage of my app. >> >> Cheers, >> >> Florin >> >> -----Ursprüngliche Nachricht----- >> Von: Ian M Nieves [mailto:[EMAIL PROTECTED] >> Gesendet: Mittwoch, 26. Februar 2003 12:37 >> An: [EMAIL PROTECTED] >> Betreff: Re: [JAVA3D] AW: [JAVA3D] Java 3D or GL4Java (also solution to >> la rge number of geometry problem) >> >> >> Nitin, >> >> You cannot get away from the fact that your application will consume large >> amounts of memory. I will think for a little bit more about this one, but >> it seems that you cannot excape reality here. >> >> The best you can hope for is to choose to either have: >> 1) lots of transform groups and a single shared geometry >> OR >> 2) few transform groups and lots of independant geometry >> >> Use this heuristic: >> If your shared geometry consumes more memory than a transform group, then >> go for option 1. If the geometry uses less memory than the TG, use option >> 2. You will have to use a rough estimate of what amount of memory a TG >> consumes, since there is no STRICT and SIMPLE way of doing this >> automatically in your program. >> >> Whichever one gives the best memory footprint and performance is the one >> you should use. >> >> The overarching point here though is that OpenGL will not help you excape >> this reality, nor will any other system. Please corret me if im wrong. >> >> The killer solution will inevitably be high level, and apply to most 3d >> systems. >> >> Again, I will think about this problem a bit more. >> >> >> Sincerely, >> Ian Nieves >> >> >> On Wed, 26 Feb 2003, Nitin.Jain wrote: >> >> > Ian, >> > >> > Thanks for taking pains of explaining the possible solution. But still in >> > the approach '1', we will not be sharing the geometry if we want to >> tranlate >> > the atoms at there specific position, this would lead to a huge memory >> > requirement for the geometry, given the fact that it is spheres and >> > cylinder. am i grossly wrong somewhere...otherwise I have tried this, it >> is >> > even worse than creating number of TGs >> > >> > nitin >> > >> > -----Original Message----- >> > From: Ian M Nieves [mailto:[EMAIL PROTECTED] >> > Sent: Wednesday, February 26, 2003 4:38 PM >> > To: [EMAIL PROTECTED] >> > Subject: Re: [JAVA3D] AW: [JAVA3D] Java 3D or GL4Java (also solution to >> > large number of geometry problem) >> > >> > >> > Nitin, (and ALL) >> > >> > I have a similar system as you do.. Lots, LOTS of repeated geometry that >> > must be rendered. I have not yet implemented my optimal solution, but I >> > am quite sure it will work, and I will outline it to you, and the rest of >> > the community. >> > >> > First observation: My solution doesnt care if the geometry is often >> > repeated or not. It could process tons of different geometries as fast as >> > if the geometries were all the same. >> > >> > Second observation: My solution works on systems where MOST of the >> > geometries do not need to be simultaneously AND independantly >> > manipullated. That is, when tons of things need to be changed >> > independantly of each other. If that IS the case, then you NEED lots of >> > readily available transform groups, and you must grin and bear it. >> > >> > Solution: >> > 1) Dont waste your CPU time or memory in processing transform groups at >> > runtime. When you add atoms to your molecule, transform the coordinates >> > of your atom so that it is already in the coordinate space of the >> > molecule, and a transform is not needed! The smaller the geometry, the >> > cheaper this transformation is! Now you have only 1 transform group for >> > the entire molecule! WOOHOO! (note, this will not prevent picking) >> > >> > 2) Big deal.. What if you want to move an atom? Well then, extract that >> > shape3D from the molecule, which is easy, transform its coordinates back >> > into world coordinates, slap the appropriate transform group on the >> > Shape3d, and put the new transformgroup into your world! Now you can >> > independantly manippulate that atom! Again, the simpler the geometry, the >> > cheaper it wil be to put the atom into world coordinates. >> > >> > 3) Youre lucky that your geometry is all just spheres and cylinders. J3D >> > has imlementations of these that SHARE geometry. This means that for the >> > first instance of the geometry, the coordinates for the geometry are >> > created, and memory is consumed. After this, all subsequent instances of >> > the geometry simply REFERENCE the original coordiinates, and MUCH memory >> > can be saved here. HOWEVER, this partial solution (step 3 only) is NOT >> > COMPATIBLE with steps 1 and 2. This is because I believe that step 3 here >> > requires that the coordinates are shared, and that you must use transform >> > groups to place each instance within the world. So you will get killed on >> > transform groups here. >> > >> > Therefore, do steps 1 and 2. 3 is good if youre not getting killed on >> > transform groups. >> > >> > Thoughts? >> > >> > Sorry for the length of this email, but I believe this is a good solution, >> > and will work, without knowing the specifics of your project. >> > >> > >> > Sincerely, >> > Ian Nieves >> > >> > >> > >> > On Wed, 26 Feb 2003, Nitin.Jain wrote: >> > >> > > Florin, >> > > >> > > I'll give you an example which was posted few weeks back in this forum. >> > This >> > > gives the problem of memory in certain kind of scenegraph. >> > > In this we are trying to create 'n' shape 3Ds with there individual TGs. >> > > This is for a molecular viewer where the geometry(would be shared) will >> be >> > > spheres or cylinders. >> > > >> > > The scene graph looks like this: >> > > >> > > BG->TG(n numbers)->Shape3D(n numbers)(No Geometry or Appearance added) >> > > >> > > Note that each of the Shape3D was added to a TG and then the TG was >> added >> > to >> > > the BG. So the BG has n TGs with a Shape3D in each. The following were >> > the >> > > results: >> > > >> > > n Memory Used (MB) >> > > ====================== >> > > 1000 3.7 >> > > 2000 8.1 >> > > 3000 12.5 >> > > 28000 115 >> > > >> > > The above memory requirement is only for the empty shape3D objects and >> the >> > > geometry hasn't been attached yet, which makes the matter even worse. I >> > > could not find ANY WAY TO REDUCE THIS MEMORY. In OpenGL I can do all >> this >> > > matrix manupulation at the rendering time. Or make my own TG object >> which >> > is >> > > not as heavy as Java3D's TG. >> > > >> > > regs, >> > > nitin >> > > >> > > I'm attaching the original post by Ranjan George on this >> > > >> > > >>>>>>>>>>>>>>>>>>>>>>>> >> > > Hi All, >> > > Been struggling with this issue for quite a while now. >> > > Requirement: To be able to display a molecule using spheres (for atoms) >> > and >> > > cylinders (for bonds between the atoms) on the Canvas3D. The size of >> the >> > > molecule can range from 1000s of atoms to 10000s of atoms. Number of >> > bonds >> > > per atom can be averaged at 2 to 3 per atom. Am giving you these >> figures >> > so >> > > that you have an idea as to how huge and complex the molecule can be. >> > > >> > > I need to be able to make this molecule display on a machine with a >> basic >> > > configuration of 128MB RAM. Hence I performed the profiling for the >> > > following graph: >> > > >> > > BG->TG(n numbers)->Shape3D(n numbers)(No Geometry or Appearance added) >> > > >> > > Note that each of the Shape3D was added to a TG and then the TG was >> added >> > to >> > > the BG. So the BG has n TGs with a Shape3D in each. The following were >> > the >> > > results: >> > > >> > > n Memory Used (MB) >> > > ====================== >> > > 1000 3.7 >> > > 2000 8.1 >> > > 3000 12.5 >> > > 28000 115 >> > > >> > > The last one probably representing a molecule size of 7000 to 8000 atoms >> > and >> > > gives OutOfMemory exception unless I give the -Xmx option to the JVM. >> > > NOTE THAT EVEN THE GEOMETRIES OR APPEARANCE HASNT BEEN ADDED AND I >> CANNOT >> > > SHARE SHAPES AS EACH ATOM MAY HAVE A DIFFERENT APPEARANCE. >> > > Even with the -Xmx option the system becomes pathetically slow as memory >> > is >> > > used from the hard disk. >> > > >> > > How do I solve this problem and minimize my memory utilization?? Any >> > > thoughts on the above will be most welcome as I have tried all sorts of >> > > things. >> > > >> > > The root of the whole problem seems to be becos Java3D does not give an >> > > option of working on persistant data and neither provides any interfaces >> > > which allow you to enable it to do so. >> > > >> > > I know this is a long mail. Hope you have the patience to go through >> it. >> > > >> > > Thanks in advance. >> > > >> > > Ranjan >> > > >> > > >> > >> =========================================================================== >> > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the >> > body >> > > of the message "signoff JAVA3D-INTEREST". For general help, send email >> to >> > > [EMAIL PROTECTED] and include in the body of the message "help". >> > > >> > > >> > >> =========================================================================== >> > > To unsubscribe, send email to [EMAIL PROTECTED] and include in the >> > body >> > > of the message "signoff JAVA3D-INTEREST". For general help, send email >> to >> > > [EMAIL PROTECTED] and include in the body of the message "help". >> > > >> > > >> > >> > >> =========================================================================== >> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the >> body >> > of the message "signoff JAVA3D-INTEREST". For general help, send email to >> > [EMAIL PROTECTED] and include in the body of the message "help". >> > >> > >> =========================================================================== >> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the >> body >> > of the message "signoff JAVA3D-INTEREST". For general help, send email to >> > [EMAIL PROTECTED] and include in the body of the message "help". >> > >> > >> >> =========================================================================== >> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body >> of the message "signoff JAVA3D-INTEREST". For general help, send email to >> [EMAIL PROTECTED] and include in the body of the message "help". >> >> =====================================To unsubscribe, send email to [EMAIL >> PROTECTED] and include in the body >> of the message "signoff JAVA3D-INTEREST". For general help, send email to >> [EMAIL PROTECTED] and include in the body of the message "help". >> >> > > ========================================================================== >To unsubscribe, send email to [EMAIL PROTECTED] and include in the body >of the message "signoff JAVA3D-INTEREST". For general help, send email to >[EMAIL PROTECTED] and include in the body of the message "help". ==========================================================================To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".