- Timestamp:
- 08/25/05 18:16:07 (19 years ago)
- Location:
- trunk/VUT/doc/SciReport
- Files:
-
- 1 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/doc/SciReport/Bib/new.bib
r249 r251 28 28 } 29 29 30 @Article{Staneker:2004:EMO, 31 AUTHOR = "Dirk Staneker and Dirk Bartz and Wolfgang Strasser", 32 TITLE = "Efficient Multiple Occlusion Queries for Scene Graph Systems", 33 JOURNAL = "WSI Report (WSI-2004-6)", 34 INSTITUTION = {Wilhelm Schickard Institute for Computer Science, Graphical Interactive Systems (WSI/GRIS), University of T{\"u}bingen}, 35 YEAR = "2004", 36 KEYWORDS = {GRIS} 37 } 30 38 31 39 @InProceedings{Meissner01, -
trunk/VUT/doc/SciReport/code/pseudocode.tex
r243 r251 1 1 \input default.mac 2 \comment{}\leftline{//----\ initialisation 3 } 4 \normal{}\leftline{ 1:\ \ \ Stack.Push\symbol{}(\normal{}kDTree.Root\symbol{});\normal{} 5 \symbol{} } 6 \comment{}\leftline{ 2:\ \ \ //----\ while\ there\ are\ some\ nodes\ in\ the\ stack\ or\ the\ query\ queue 7 } 8 \keya{}\leftline{ 3:\ \ \ while\symbol{}\ (!\normal{}Stack.Empty\symbol{}()\ \normal{}$\symbol{}||\normal{}$\symbol{}\ !\normal{}QueryQueue.Empty\symbol{}())\ $\{$\normal{} 9 \symbol{} } 10 \leftline{ 4:\ \ \ \ \ \comment{}//----\ PART\ 1:\ processing\ finished\ occlusion\ queries 11 } 12 \symbol{}\leftline{ 5:\ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.Empty\symbol{}()\ \&\&\normal{} 13 \symbol{} } 14 \leftline{ 6:\ \ \ \ \ \ \ \ \ \ \ (\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}())\ \normal{}$\symbol{}||\normal{}$\symbol{}\ \normal{}Stack.Empty\symbol{}()))\ $\{$\normal{} 15 \symbol{} } 16 \leftline{ 7:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}()))\ $\{$\normal{} 17 \symbol{} } 18 \leftline{ 8:\ \ \ \ \ \ \ \ \ \comment{}//---\ result\ is\ not\ available\ and\ the\ stack\ is\ empty 19 } 20 \symbol{}\leftline{ 9:\ \ \ \ \ \ \ \ \ \comment{}//---\ check\ if\ we\ can\ do\ some\ conservative\ decision 21 } 22 \symbol{}\leftline{10:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.GetLeastCostNode\symbol{}();\normal{} 23 \symbol{} } 24 \leftline{11:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}N.renderingCost\symbol{}\ <\ \normal{}MaxRenderCost\symbol{})\ $\{$\normal{} 25 \symbol{} } 26 \leftline{12:\ \ \ \ \ \ \ \ \ \ \normal{}RenderSubtree\symbol{}(\normal{}N\symbol{});\normal{} 27 \symbol{} } 28 \leftline{13:\ \ \ \ \ \ \ \ \ \ \normal{}QueryQueue.DequeLeastCostNode\symbol{}();\normal{} 29 \symbol{} } 30 \leftline{14:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ we\ do\ not\ change\ N's\ visibility\ classfication\ - 31 } 32 \symbol{}\leftline{15:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ N\ remains\ in\ the\ cut\ for\ the\ next\ frame 33 } 34 \symbol{}\leftline{16:\ \ \ \ \ \ \ \ \ $\}$\ \normal{}else 35 \symbol{} } 36 \leftline{17:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ wait\ for\ the\ availability\ of\ the\ result 37 } 38 \symbol{}\leftline{18:\ \ \ \ \ \ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.ResultAvailable\symbol{})\ \normal{}Wait\symbol{}();\normal{} 39 \symbol{} } 40 \leftline{19:\ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$\normal{} 41 \symbol{} } 42 \leftline{20:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.Dequeue\symbol{}();\normal{} 43 \symbol{} } 44 \leftline{21:\ \ \ \ \ \ \ \ \ \comment{}//--\ check\ the\ result\ of\ the\ query 45 } 46 \symbol{}\leftline{22:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}N.visiblePixels\symbol{}\ \normal{}$\symbol{}>\normal{}$\symbol{}\ \normal{}VisibilityThreshold\symbol{}\ )\ \ $\{$\normal{} 47 \symbol{} } 48 \leftline{23:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}VISIBLE\symbol{};\normal{} 49 \symbol{} } 50 \leftline{24:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}IsLeaf\symbol{}(\normal{}N\symbol{}))\normal{} 51 \symbol{} } 52 \leftline{25:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{});\normal{} 53 \symbol{} } 54 \leftline{26:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$\normal{} 55 \symbol{} } 56 \leftline{27:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ down 57 } 58 \symbol{}\leftline{28:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{}));\normal{} 59 \symbol{} } 60 \leftline{29:\ \ \ \ \ \ \ \ \ \ $\}$\normal{} 61 \symbol{} } 62 \leftline{30:\ \ \ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$\normal{} 63 \symbol{} } 64 \leftline{31:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}INVISIBLE\symbol{};\normal{} 65 \symbol{} } 66 \leftline{32:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ up 67 } 68 \symbol{}\leftline{33:\ \ \ \ \ \ \ \ \ \ \normal{}PullUpInvisibility\symbol{}(\normal{}N\symbol{});\normal{} 69 \symbol{} } 70 \leftline{34:\ \ \ \ \ \ \ \ \ $\}$\normal{} 71 \symbol{} } 72 \leftline{35:\ \ \ \ \ \ \ $\}$\normal{} 73 \symbol{} } 74 \leftline{36:\ \ \ \ \ $\}$\normal{} 75 \symbol{} } 76 \leftline{37:\ \ \ \ \ \normal{} 77 \symbol{} } 78 \leftline{38:\ \ \ \ \ \comment{}//----\ PART\ 2:\ kd-tree\ traversal 79 } 80 \symbol{}\leftline{39:\ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}Stack.Empty\symbol{}())\ $\{$\normal{} 81 \symbol{} } 82 \leftline{40:\ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}Stack.Pop\symbol{}();\normal{} 83 \symbol{} } 84 \leftline{41:\ \ \ \ \ \ \ \normal{}N.lastVisited\symbol{}\ =\ \normal{}frameID\symbol{};\normal{} 85 \symbol{} } 86 \leftline{42:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}InsideViewFrustum\symbol{}(\normal{}N\symbol{}))\ $\{$\normal{} 87 \symbol{} } 88 \leftline{43:\ \ \ \ \ \ \ \ \ \comment{}//--\ skip\ testing\ of\ all\ nodes\ above\ the\ cut 89 } 90 \symbol{}\leftline{44:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}IsAboveTheCut\symbol{}(\normal{}N\symbol{}))\ $\{$\normal{} 91 \symbol{} } 92 \leftline{45:\ \ \ \ \ \ \ \ \ \ \normal{}IssueOcclustionQuery\symbol{}(\normal{}N\symbol{});\ \normal{}QueryQueue.Enqueue\symbol{}(\normal{}N\symbol{});\normal{} 93 \symbol{} } 94 \leftline{46:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}WasVisible\symbol{}(\normal{}N\symbol{})\ \normal{}$\symbol{}\&\&\normal{}$\symbol{}\ \normal{}IsLeaf\symbol{}(\normal{}N\symbol{}))\normal{} 95 \symbol{} } 96 \leftline{47:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{});\normal{} 97 \symbol{} } 98 \leftline{48:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$\normal{} 99 \symbol{} } 100 \leftline{49:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ go\ down\ the\ kD-tree 101 } 102 \symbol{}\leftline{50:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{}));\ \normal{} 103 \symbol{} } 104 \leftline{51:\ \ \ \ \ \ \ \ \ \ $\}$\normal{} 105 \symbol{} } 106 \leftline{52:\ \ \ \ \ \ \ \ \ $\}$\normal{} 107 \symbol{} } 108 \leftline{53:\ \ \ \ \ \ \ $\}$\normal{} 109 \symbol{} } 110 \leftline{54:\ \ \ \ \ $\}$\normal{} 111 \symbol{} } 112 \leftline{55:\ \ \ $\}$\normal{} 113 \symbol{} } 2 \comment{}\leftline{//----\ initialisation } 3 \normal{}\leftline{ 1:\ \ \ Stack.Push\symbol{}(\normal{}kDTree.Root\symbol{}); } 4 \comment{}\leftline{ 2:\ \ \ //----\ while\ there\ are\ some\ nodes\ in\ the\ stack\ or\ the\ query\ queue } 5 \keya{}\leftline{ 3:\ \ \ while\symbol{}\ (!\normal{}Stack.Empty\symbol{}()\ \normal{}$\symbol{}||\normal{}$\symbol{}\ !\normal{}QueryQueue.Empty\symbol{}())\ $\{$ } 6 \leftline{ 4:\ \ \ \ \ \comment{}//----\ PART\ 1:\ processing\ finished\ occlusion\ queries } 7 \symbol{}\leftline{ 5:\ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.Empty\symbol{}()\ \&\& } 8 \leftline{ 6:\ \ \ \ \ \ \ \ \ \ \ (\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}())\ \normal{}$\symbol{}||\normal{}$\symbol{}\ \normal{}Stack.Empty\symbol{}()))\ $\{$ } 9 \leftline{ 7:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}ResultAvailable\symbol{}(\normal{}QueryQueue.Front\symbol{}()))\ $\{$ } 10 \leftline{ 8:\ \ \ \ \ \ \ \ \ \comment{}//---\ result\ is\ not\ available\ and\ the\ stack\ is\ empty } 11 \symbol{}\leftline{ 9:\ \ \ \ \ \ \ \ \ \comment{}//---\ check\ if\ we\ can\ do\ some\ conservative\ decision } 12 \symbol{}\leftline{10:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.GetLeastCostNode\symbol{}(); } 13 \leftline{11:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}N.renderingCost\symbol{}\ <\ \normal{}MaxRenderCost\symbol{})\ $\{$ } 14 \leftline{12:\ \ \ \ \ \ \ \ \ \ \normal{}RenderSubtree\symbol{}(\normal{}N\symbol{}); } 15 \leftline{13:\ \ \ \ \ \ \ \ \ \ \normal{}QueryQueue.DequeLeastCostNode\symbol{}(); } 16 \leftline{14:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ we\ do\ not\ change\ N's\ visibility\ classfication\ - } 17 \symbol{}\leftline{15:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ N\ remains\ in\ the\ cut\ for\ the\ next\ frame } 18 \symbol{}\leftline{16:\ \ \ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{} } 19 \leftline{17:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ wait\ for\ the\ availability\ of\ the\ result } 20 \symbol{}\leftline{18:\ \ \ \ \ \ \ \ \ \ \keya{}while\symbol{}\ (!\normal{}QueryQueue.ResultAvailable\symbol{})\ \normal{}Wait\symbol{}(); } 21 \leftline{19:\ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$ } 22 \leftline{20:\ \ \ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}QueryQueue.Dequeue\symbol{}(); } 23 \leftline{21:\ \ \ \ \ \ \ \ \ \comment{}//--\ check\ the\ result\ of\ the\ query } 24 \symbol{}\leftline{22:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\ \normal{}N.visiblePixels\symbol{}\ \normal{}$\symbol{}>\normal{}$\symbol{}\ \normal{}VisibilityThreshold\symbol{}\ )\ \ $\{$ } 25 \leftline{23:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}VISIBLE\symbol{}; } 26 \leftline{24:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}IsLeaf\symbol{}(\normal{}N\symbol{})) } 27 \leftline{25:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{}); } 28 \leftline{26:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$ } 29 \leftline{27:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ down } 30 \symbol{}\leftline{28:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{})); } 31 \leftline{29:\ \ \ \ \ \ \ \ \ \ $\}$ } 32 \leftline{30:\ \ \ \ \ \ \ \ \ $\}$\ \keya{}else\symbol{}\ $\{$ } 33 \leftline{31:\ \ \ \ \ \ \ \ \ \ \normal{}N.visibility\symbol{}\ =\ \normal{}INVISIBLE\symbol{}; } 34 \leftline{32:\ \ \ \ \ \ \ \ \ \ \comment{}//--\ pull\ up } 35 \symbol{}\leftline{33:\ \ \ \ \ \ \ \ \ \ \normal{}PullUpInvisibility\symbol{}(\normal{}N\symbol{}); } 36 \leftline{34:\ \ \ \ \ \ \ \ \ $\}$ } 37 \leftline{35:\ \ \ \ \ \ \ $\}$ } 38 \leftline{36:\ \ \ \ \ $\}$ } 39 \leftline{37:\ \ \ \ \ } 40 \leftline{38:\ \ \ \ \ \comment{}//----\ PART\ 2:\ kd-tree\ traversal } 41 \symbol{}\leftline{39:\ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}Stack.Empty\symbol{}())\ $\{$ } 42 \leftline{40:\ \ \ \ \ \ \ \normal{}N\symbol{}\ =\ \normal{}Stack.Pop\symbol{}(); } 43 \leftline{41:\ \ \ \ \ \ \ \normal{}N.lastVisited\symbol{}\ =\ \normal{}frameID\symbol{}; } 44 \leftline{42:\ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}InsideViewFrustum\symbol{}(\normal{}N\symbol{}))\ $\{$ } 45 \leftline{43:\ \ \ \ \ \ \ \ \ \comment{}//--\ skip\ testing\ of\ all\ nodes\ above\ the\ cut } 46 \symbol{}\leftline{44:\ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (!\normal{}IsAboveTheCut\symbol{}(\normal{}N\symbol{}))\ $\{$ } 47 \leftline{45:\ \ \ \ \ \ \ \ \ \ \normal{}IssueOcclustionQuery\symbol{}(\normal{}N\symbol{});\ \normal{}QueryQueue.Enqueue\symbol{}(\normal{}N\symbol{}); } 48 \leftline{46:\ \ \ \ \ \ \ \ \ \ \keya{}if\symbol{}\ (\normal{}WasVisible\symbol{}(\normal{}N\symbol{})\ \normal{}$\symbol{}\&\&\normal{}$\symbol{}\ \normal{}IsLeaf\symbol{}(\normal{}N\symbol{})) } 49 \leftline{47:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Render\symbol{}(\normal{}N\symbol{}); } 50 \leftline{48:\ \ \ \ \ \ \ \ \ \ \keya{}else\symbol{}\ $\{$ } 51 \leftline{49:\ \ \ \ \ \ \ \ \ \ \ \ \comment{}//--\ go\ down\ the\ kD-tree } 52 \symbol{}\leftline{50:\ \ \ \ \ \ \ \ \ \ \ \ \normal{}Stack.Push\symbol{}(\normal{}FarChild\symbol{}(\normal{}N\symbol{}));\ \normal{}Stack.Push\symbol{}(\normal{}CloseChild\symbol{}(\normal{}N\symbol{}));\ } 53 \leftline{51:\ \ \ \ \ \ \ \ \ \ $\}$ } 54 \leftline{52:\ \ \ \ \ \ \ \ \ $\}$ } 55 \leftline{53:\ \ \ \ \ \ \ $\}$ } 56 \leftline{54:\ \ \ \ \ $\}$ } 57 \leftline{55:\ \ \ $\}$ } -
trunk/VUT/doc/SciReport/figs/basic.eps
r243 r251 2 2 %%Title: basic.fig 3 3 %%Creator: fig2dev Version 3.2 Patchlevel 4 4 %%CreationDate: Mon Aug 22 13:04:5220055 %%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)4 %%CreationDate: Tue Aug 23 20:55:48 2005 5 %%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508) 6 6 %%BoundingBox: 0 0 793 244 7 7 %%Magnification: 1.0000 -
trunk/VUT/doc/SciReport/figs/cut.eps
r243 r251 2 2 %%Title: cut.fig 3 3 %%Creator: fig2dev Version 3.2 Patchlevel 4 4 %%CreationDate: Mon Aug 22 13:04:5220055 %%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)4 %%CreationDate: Tue Aug 23 20:55:48 2005 5 %%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508) 6 6 %%BoundingBox: 0 0 979 330 7 7 %%Magnification: 1.0000 -
trunk/VUT/doc/SciReport/figs/dummy.eps
r243 r251 2 2 %%Title: dummy.fig 3 3 %%Creator: fig2dev Version 3.2 Patchlevel 4 4 %%CreationDate: Mon Aug 22 13:04:5220055 %%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)4 %%CreationDate: Tue Aug 23 20:55:48 2005 5 %%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508) 6 6 %%BoundingBox: 0 0 474 443 7 7 %%Magnification: 1.0000 -
trunk/VUT/doc/SciReport/figs/latency.eps
r243 r251 2 2 %%Title: latency.fig 3 3 %%Creator: fig2dev Version 3.2 Patchlevel 4 4 %%CreationDate: Mon Aug 22 13:04:5220055 %%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)4 %%CreationDate: Tue Aug 23 20:55:48 2005 5 %%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508) 6 6 %%BoundingBox: 0 0 1153 326 7 7 %%Magnification: 1.0000 -
trunk/VUT/doc/SciReport/figs/latency2.eps
r243 r251 2 2 %%Title: latency2.fig 3 3 %%Creator: fig2dev Version 3.2 Patchlevel 4 4 %%CreationDate: Mon Aug 22 13:04:5220055 %%For: bittner@NOTES (Jiri Bittner,U-NOTES\bittner,S-1-5-21-1914904292-1436553889-1205156892-1000)4 %%CreationDate: Tue Aug 23 20:55:48 2005 5 %%For: matt@sakura (matt,U-COMPUTERGRAPHIK\matt,S-1-5-21-1259991482-2646404242-2158041560-3508) 6 6 %%BoundingBox: 0 0 992 393 7 7 %%Magnification: 1.0000 -
trunk/VUT/doc/SciReport/online.tex
r243 r251 1 \chapter{Online Visibility Culling}1 \chapter{Online Culling Tool} 2 2 %***************************************************************************** 3 3 … … 50 50 application of occlusion queries can even decrease the overall 51 51 application performance due the associated CPU stalls and GPU 52 starvation. In this paper, we present an algorithm that aims to52 starvation. In this chapter, we present an algorithm that aims to 53 53 overcome these problems by reducing the number of issued queries and 54 54 eliminating the CPU stalls and GPU starvation. To schedule the … … 149 149 suffers from the CPU stalls and GPU starvation. 150 150 151 %% The methods proposed in this paper can be used to make use of temporal151 %% The methods proposed in this chapter can be used to make use of temporal 152 152 %% and spatial coherence in the scope of existing visibility algorithms, 153 153 %% that utilise a spatial hierarchy. Examples of these are algorithms … … 173 173 acceleration technique for exploiting spatial and temporal coherence 174 174 in hierarchical visibility algorithms. The central idea, which is also 175 vital for th is paper, is to avoid repeated visibility tests of175 vital for the online culling tool, is to avoid repeated visibility tests of 176 176 interior nodes of the hierarchy. The problem of direct adoption of 177 177 this method is that it is designed for the use with instantaneous CPU … … 625 625 626 626 627 627 \subsection{Approximate visibility} 628 628 629 629 The algorithm as presented computes a conservative visibility … … 660 660 the constant we conclude that it is too risky to render the node and 661 661 wait till the result of the query becomes available. 662 663 \subsection{Initial depth pass} 664 \label{sec:initial} 665 666 To achieve maximal performance on modern GPU's, one has to take care of a number of issues. 667 First, it is very important to reduce material switching. Thus modern rendering engines sort the 668 objects (or patches) by materials in order to eliminate the material switching as good as possible. 669 670 Next, materials can be very costly, sometimes complicated shaders have to be evaluated several times per batch. Hence it should be 671 avoided to render the full material for fragments which eventually turn out to be occluded. This can be achieved 672 by rendering an initial depth pass (i.e., enabling only depth write to fill the depth 673 buffer). Afterwards the geometry is rendered again, this time with full shading. Because the 674 depth buffer is already established, invisible fragments will be discarded before any shading is done calculated. 675 676 This approach can be naturally adapted for use with the CHC algorithm. Only an initial depth pass is rendered 677 in front-to-back order using the CHC algorithm. The initial pass is sufficient to fill the depth buffer and determine the visible geometry. Then only the visible geometry is rendered again, exploiting the full optimization and material sorting capability of the rendering engine. 678 679 \subsection{Batching multiple queries} 680 \begin{figure}%[htb] 681 {\footnotesize 682 \input{code/pseudocode_batching} 683 } 684 \caption{Pseudo-code of coherent hierarchical culling using multiple queries.} 685 \label{fig:pseudocode_batching} 686 \end{figure} 687 When occlusion queries are rendered interleaved with geometry, there is always a state change involved. To 688 reduce state changes, it is beneficial not to execute one query at a time, but multiple queries at once~\cite{Staneker:2004:EMO}. 689 Instead of immediately executing a query for a node when we fetch it from the traversal stack, we add it to the {\em pending queue}. If {\em n} of these queries are accumulated in the queue, we can execute them at once. 690 To optain an optimal value for {\em n}, several some heuristics can be applied, e.g., a fraction of the number of queries issued in the last frame. The new pseudo-code of the algorithm is given in Figure~\ref{fig:pseudocode_batching}. 691 662 692 663 693 \section{Results} … … 1028 1058 stop-and-wait application of occlusion queries. 1029 1059 1060 1030 1061 The major potential in improving the method is a better estimation 1031 1062 of changes in the visibility classification of hierarchy nodes. If … … 1037 1068 simpler geometry can be faster than issuing comparably expensive 1038 1069 occlusion queries. 1039 1040 1070 1041 1071 -
trunk/VUT/doc/SciReport/preprocessing.tex
r247 r251 119 119 120 120 121 \subsection{View Cell Representation} 122 123 In order to efficiently use view cells with our sampling method, we require a view cell representation which is 124 125 \begin{itemize} 126 \item optimized for viewcell - ray intersection. 127 \item flexible, i.e., it can represent arbitrary geometry. 128 \item naturally suited for an hierarchical approach. %(i.e., there is a root view cell containing all others) 129 \end{itemize} 130 131 We meet these requirements by using a view cell BSP tree, where the BSP leafs are associated with the view cells. 132 Using the BSP tree, we are able to find the initial view cells with only a few view ray-plane intersections. 133 The hierarchical structure of the BSP tree can be exploited as hierarchy of view cells. If neccessary, the BSP 134 approach makes it very easy to further subdivide a view cell. 135 136 Currently we use two approaches to generate the initial BSP view cell tree. 137 138 \begin{itemize} 139 \item We use a number of dedicated input view cells. As input view cell any closed mesh can be applied. The only requirement 140 is that the view cells do not overlap. We insert one view cell after the other into the tree. The polygons of a view cell are filtered down the tree, guiding the insertion process. Once we reach a leaf and there are no more polygons left, we terminate 141 the tree subdivision. If we are on the inside of the last split plane (i.e., the leaf is representing the inside of the view cell), we associate the leaf with the view cell (i.e., add a pointer to the view cell). Hence a number of leafes 142 can be associated with the same input view cell. 143 \item We apply the BSP tree subdivision to the scene geometry. When the subdivision terminates, the leaf nodes 144 also represent the view cells. 145 \end{itemize} 121 146 122 147 … … 132 157 133 158 134 135 136 159 \subsection{Conservative Verifier} 137 160 -
trunk/VUT/doc/SciReport/sampling.tex
r249 r251 125 125 objects. 126 126 127 127 \subsection{View Cell Representation} 128 128 129 In order to efficiently use view cells with our sampling method, we require a view cell representation which is 130 131 \begin{itemize} 132 \item optimized for viewcell - ray intersection. 133 \item flexible, i.e., it can represent arbitrary geometry. 134 \item naturally suited for an hierarchical approach. %(i.e., there is a root view cell containing all others) 135 \end{itemize} 136 137 We meet these requirements by using a view cell BSP tree, where the BSP leafs are associated with the view cells. 138 Using the BSP tree, we are able to find the initial view cells with only a few view ray-plane intersections. 139 The hierarchical structure of the BSP tree can be exploited as hierarchy of view cells. If neccessary, we could further subdivide a BSP leaf view cell quite easily. 140 141 Currently we use two approaches to generate the initial BSP view cell tree. 142 143 \begin{itemize} 144 \item We use a number of dedicated input view cells. As input view cell any closed mesh can be applied. The only requirement 145 is that the view cells do not overlap. We insert one view cell after the other into the tree. The polygons of a view cell are filtered down the tree, guiding the insertion process. Once we reach a leaf and there are no more polygons left, we terminate 146 the tree subdivision. If we are on the inside of the last split plane (i.e., the leaf is representing the inside of the view cell), we associate the leaf with the view cell (i.e., add a pointer to the view cell). Hence a number of leafes 147 can be associated with the same input view cell. 148 \item We apply the BSP tree subdivision to the scene geometry. When the subdivision terminates, the leaf nodes 149 also represent the view cells. 150 \end{itemize} 151
Note: See TracChangeset
for help on using the changeset viewer.