Re: [info-performer] Intersection testing

Date view Thread view Subject view Author view

From: Steven Queen (Steven.Z.Queen++at++nasa.gov)
Date: 01/18/2006 06:35:40


I have successfully multi-processed Performer isect tests across 7 CPUs
(sprocs) on an Onyx 350 system.
The load balancing was a bit tricky, but 5x speed up was achieved for
models with large polygon counts.

But, I still wonder if the OpenGL selection/feedback mechanism couldn't
be used to speed-up interestion
testing for some instances. Is there any hardware-accelerated support there?

Gordon Tomlinson wrote:

>Intersection test are expensive especially if you do not have a well
>balanced tree (quad or similar) and or large pools geometry and you can only
>do a limited number per frame depending on you scenes complexity,
>composition and desired frame rate etc
>
>In the first instance your intersections code should be testing bounding
>scene of nodes so that it can quickly reject parts of the scene graph that
>are not with in you line segments, that why a well balanced and spatially
>partition tree is so important for intersection test. If you data is big
>soups of tri's then you need to look at breaking them up into discreet
>spatially partitioned nodes etc
>
>
>The GPU will know nothing about your scene graph so you will get back very
>limited hit information how would you know which node had been hit etc,
>intersections testing is inherently tied to your scene graph and the
>majority of case.
>
>One way to typically way to gain extra performance with isectors is to
>run-them asynchronously and locked on to a separate CPU
>
>Another approach is to run the intersections on a dedicate host machine that
>simple has a copy of the scene graph for intersection and does not have nay
>visuals or draw etc
>
>
>
>90x ? What?
>
>600000 tests with what? is this triangles/primitives or 600000 isectors
>
>
>
>
>
>Best Regards
>
>Gordon
>
>______________________________________________
>
>
>Gordon Tomlinson
>
>Email : gordon++at++gordon-tomlinson.com
>
>Website : www.3dscenegraph.com
>
>______________________________________________
>
>
>
>"Self defence is not a function of learning tricks
>
>but is a function of how quickly and intensely one
>
>can arouse one's instinct for survival"
>
>- Master Tambo Tetsura
>
>
>-----Original Message-----
>From: owner-info-performer++at++performer.engr.sgi.com
>[mailto:owner-info-performer++at++performer.engr.sgi.com] On Behalf Of Christian
>Rothländer
>Sent: 18 January 2006 11:48
>To: info-performer++at++sgi.com
>Subject: [info-performer] Intersection testing
>
>Hi there
>
>I am currently writing code for a project, which needs many Intersection
>tests. While benchmarking the Algorithm it became obvious that the
>Intersection tests run on the processor and not in graphic hardware. Is
>there a possibility to move the code to the graphic system to get a faster
>testing? .. Currently I have about 90x complexity in comparison to the
>testing time, which is simply impossible, because in a normal task the
>system would work for about 2 days :-( .
>I would need about 600.000 Tests per second.
>
>The intersection_testing function is attached, perhaps somebody out there
>has a solution for the Problem, otherwise I need to reduce the testing rate
>and testing resolution to get a better runtime (1 night would be ok).
>
>Christian
>
>
>
>intersection_data nameit::isecTest(pfSeg line){
>
> intersection_data daten;
>
> pfSegSet segset;
> pfHit **hits[32];
> int isect;
>
> segset.activeMask = 1;
> segset.isectMask = 0x01;
> segset.discFunc = NULL;
> segset.mode = PFTRAV_IS_PRIM;
>
> segset.segs[0].pos.set(line.pos[0], line.pos[1], line.pos[2]);
> segset.segs[0].dir.set(line.dir[0], line.dir[1], line.dir[2]);
> segset.segs[0].length = line.length;
>
> isect = Shared->scene->isect(&segset, hits);
>
> #ifdef DEBUG
> std::cout << "Name wird ermittelt fr Objekt Nummer :" <<
>index << std::endl;
> #endif
>
> //Hier wird die Namensbersetzung ausgefhrt:
> //Immer im Elternknoten wird nach dem Namen nachgeschlagen
> pfGeode *node;
> (*hits[0]) -> query(PFQHIT_NODE, &node);
>
>
> if (node->getNumParents() == 0 || node->getName() != NULL) //Wir
>haben keine Elternknoten -> meistens Himmel
> {
> //std::cout << "a" << std::endl;
> if (node->getName() != NULL){
> //std::cout << node->getName() << std::endl;
> daten.name = (node->getName());
> }
> else{ daten.name = "Unbenannt";
> }
> }
> else { //Wir suchen in 3 Ebenen nach einem Namen, wenn
>dieser nicht gefunden wird -> PECH
>
> if (node->getParent(0)->getName() != NULL){
> //std::cout << "b" << std::endl;
> //std::cout << node->getParent(0)->getName() <<
>std::endl;
> daten.name =(node->getParent(0)->getName());
> }
> else if (node->getParent(0)->getNumParents() != 0 &&
>node->getParent(0)->getParent(0)->getName() != NULL){
> //std::cout << "c" << std::endl;
> //std::cout <<
>node->getParent(0)->getParent(0)->getName() << std::endl;
> daten.name
>=(node->getParent(0)->getParent(0)->getName());
> }
> else if (node->getParent(0)->getParent(0)->getNumParents()
>!= 0 &&
>node->getParent(0)->getParent(0)->getParent(0)->getName() != NULL){
> //std::cout << "d" << std::endl;
> //std::cout <<
>node->getParent(0)->getParent(0)->getParent(0)->getName() << std::endl;
> daten.name
>=(node->getParent(0)->getParent(0)->getParent(0)->getName());
> }
> else { daten.name =("Unbenannt");
> //std::cout << "Kein Name gefunden" << std::endl;
> }
> }
>
>
> #ifdef DEBUG
> std::cout << " fertig" << std::endl;
> #endif
>
> //pnt == Punkt der Intersection.. wie komm ich dran mit was die sich
>schneidet
> pfVec3 pnt;
> pfMatrix matt;
> (*hits[0])->query(PFQHIT_POINT, pnt.vec);
> (*hits[0])->query(PFQHIT_XFORM, matt.mat);
> pnt.xformPt(pnt, matt);
>
> ///Punkte der getroffenen Objekte speichern
>
> daten.x = pnt[0];
> daten.y = pnt[1];
> daten.z = pnt[2];
> daten.fix = 0;
>
> return daten;
>}
>
>-----------------------------------------------------------------------
> List Archives, Info, FAQ: http://www.sgi.com/software/performer/
> Open Development Project: http://oss.sgi.com/projects/performer/
> Submissions: info-performer++at++sgi.com
> Admin. requests: info-performer-request++at++sgi.com
>-----------------------------------------------------------------------
>
>
>
>
>-----------------------------------------------------------------------
> List Archives, Info, FAQ: http://www.sgi.com/software/performer/
> Open Development Project: http://oss.sgi.com/projects/performer/
> Submissions: info-performer++at++sgi.com
> Admin. requests: info-performer-request++at++sgi.com
>-----------------------------------------------------------------------
>
>
>
>

-- 
_______________________________________________

Steven.Z.Queen++at++nasa.gov NASA, Goddard Space Flight Center Flight Dynamics Analysis Branch, Code 595 V:(301) 286-0988 F:(301) 286-0369 _______________________________________________


Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Wed Jan 18 2006 - 06:36:33 PST