John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 1 / 30 Lecture 18: BLIST FORM of CSG and Blister Jarek Rossignac CS1050: Understanding and.

Slides:



Advertisements
Similar presentations
Model Checking Lecture 4. Outline 1 Specifications: logic vs. automata, linear vs. branching, safety vs. liveness 2 Graph algorithms for model checking.
Advertisements

Visible-Surface Detection(identification)
Introduction to Algorithms Quicksort
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Project P3: CSG Lecture 08, File P3.ppt Due Feb 14 Individual.
Representing Boolean Functions for Symbolic Model Checking Supratik Chakraborty IIT Bombay.
Introduction to Computer Science 2 Lecture 7: Extended binary trees

Michael Alves, Patrick Dugan, Robert Daniels, Carlos Vicuna
CS 352: Computer Graphics Chapter 7: The Rendering Pipeline.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac CSG rendering  Booleans  Space partitions  CSG & BSP  CSG.
03/12/02 (c) 2002 University of Wisconsin, CS559 Last Time Some Visibility (Hidden Surface Removal) algorithms –Painter’s Draw in some order Things drawn.
Two Methods for Fast Ray-Cast Ambient Occlusion Samuli Laine and Tero Karras NVIDIA Research.
CAP4730: Computational Structures in Computer Graphics Visible Surface Determination.
Visibility Culling. Back face culling View-frustrum culling Detail culling Occlusion culling.
Sorting Chapter Sorting Consider list x 1, x 2, x 3, … x n We seek to arrange the elements of the list in order –Ascending or descending Some O(n.
GATE D Object Representations (GATE-540) Dr.Çağatay ÜNDEĞER Instructor Middle East Technical University, GameTechnologies & General Manager SimBT.
Lapped Textures Emil Praun Adam Finkelstein Hugues Hoppe Emil Praun Adam Finkelstein Hugues Hoppe Princeton University Microsoft Research Princeton University.
Surface Simplification & Edgebreaker Compression for 2D Cel Animations Vivek Kwatra & Jarek Rossignac GVU Center, College of Computing Georgia Institute.
Hidden Surface Elimination Wen-Chieh (Steve) Lin Institute of Multimedia Engineering I-Chen Lin’ CG Slides, Rich Riesenfeld’s CG Slides, Shirley, Fundamentals.
Space Efficient Point Location forTriangulations.
Vertices and Fragments III Mohan Sridharan Based on slides created by Edward Angel 1 CS4395: Computer Graphics.
Hidden Surface Removal
BSP Trees, Quadtrees & Octrees Glenn G. Chappell U. of Alaska Fairbanks CS 481/681 Lecture Notes Wednesday, January 28, 2004.
Graphics Pipeline Hidden Surfaces CMSC 435/634. Visibility We can convert simple primitives to pixels Which primitives (or parts of primitives) should.
Graphics Pipeline Hidden Surface CMSC 435/634. Visibility We can convert simple primitives to pixels/fragments How do we know which primitives (or which.
Polygon Scan Conversion and Z-Buffering
10/29/02 (c) 2002 University of Wisconsin, CS559 Today Hidden Surface Removal Exact Visibility.
Comp 249 Programming Methodology Chapter 15 Linked Data Structure - Part B Dr. Aiman Hanna Department of Computer Science & Software Engineering Concordia.
Chapter Tow Search Trees BY HUSSEIN SALIM QASIM WESAM HRBI FADHEEL CS 6310 ADVANCE DATA STRUCTURE AND ALGORITHM DR. ELISE DE DONCKER 1.
Kansas State University Department of Computing and Information Sciences CIS 736: Computer Graphics Wednesday, February 23, 2000 William H. Hsu Department.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Lecture 06: COMPLEXITY Sections 2.2 and 2.3 Jarek Rossignac CS1050:
NDVI-based Vegetation Rendering CGIM ‘07 Stefan Roettger, University of Erlangen
Geometry Textures Rodrigo de Toledo, ( PhD candidate at LORIA-INRIA) (Researcher at Tecgraf, PUC-Rio) Bin Wang and Bruno Levy.
09/09/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Event management Lag Group assignment has happened, like it or not.
Database Management 9. course. Execution of queries.
Graphics Graphics Korea University cgvr.korea.ac.kr Solid Modeling 고려대학교 컴퓨터 그래픽스 연구실.
CSC418 Computer Graphics n BSP tree n Z-Buffer n A-buffer n Scanline.
CS 450: COMPUTER GRAPHICS REVIEW: INTRODUCTION TO COMPUTER GRAPHICS – PART 2 SPRING 2015 DR. MICHAEL J. REALE.
Week 2 - Friday.  What did we talk about last time?  Graphics rendering pipeline  Geometry Stage.
Computer Graphics 2 Lecture 8: Visibility Benjamin Mora 1 University of Wales Swansea Pr. Min Chen Dr. Benjamin Mora.
The BSP-tree from Prof. Seth MIT.. Motivation for BSP Trees: The Visibility Problem We have a set of objects (either 2d or 3d) in space. We have.
Advanced Computer Graphics Depth & Stencil Buffers / Rendering to Textures CO2409 Computer Graphics Week 19.
Visible-Surface Detection Jehee Lee Seoul National University.
1 Joe Meehean.  Problem arrange comparable items in list into sorted order  Most sorting algorithms involve comparing item values  We assume items.
Shadows. Shadows is important in scenes, consolidating spatial relationships “Geometric shadows”: the shape of an area in shadow Early days, just pasted.
Saarland University, Germany B-KD Trees for Hardware Accelerated Ray Tracing of Dynamic Scenes Sven Woop Gerd Marmitt Philipp Slusallek.
Starting at Binary Trees
Sorting Chapter Sorting Consider list x 1, x 2, x 3, … x n We seek to arrange the elements of the list in order –Ascending or descending Some O(n.
Chapter 18: Searching and Sorting Algorithms. Objectives In this chapter, you will: Learn the various search algorithms Implement sequential and binary.
Hierarchical Penumbra Casting Samuli Laine Timo Aila Helsinki University of Technology Hybrid Graphics, Ltd.
Class1 Class2 The methods discussed so far are Linear Discriminants.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Graphic pipeline  Scan-conversion algorithm (high level)  Pixels.
Where We Stand At this point we know how to: –Convert points from local to window coordinates –Clip polygons and lines to the view volume –Determine which.
Real-Time Relief Mapping on Arbitrary Polygonal Surfaces Fabio Policarpo Manuel M. Oliveira Joao L. D. Comba.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Lecture 17a: ACTIVE ZONES of CSG primitives Jarek Rossignac CS1050:
1 CSCE 441: Computer Graphics Hidden Surface Removal Jinxiang Chai.
01/28/09Dinesh Manocha, COMP770 Visibility Computations Visible Surface Determination Visibility Culling.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Lecture 05: SORTING Section 2.1 Jarek Rossignac CS1050: Understanding.
1 Georgia Tech, IIC, GVU, 2006 MAGIC Lab Rossignac Lecture 04: SETS AND FUNCTIONS 1.6, 1.7, 1.8 Jarek Rossignac CS1050:
Solid Modeling Dr. Scott Schaefer.
Real-Time Relief Mapping on Arbitrary Polygonal Surfaces Fabio Policarpo Manuel M. Oliveira Joao L. D. Comba.
3D Object Representations 2009, Fall. Introduction What is CG?  Imaging : Representing 2D images  Modeling : Representing 3D objects  Rendering : Constructing.
CS552: Computer Graphics Lecture 28: Solid Modeling.
Week 2 - Friday CS361.
3D Object Representations
Advanced Sorting Methods: Shellsort
Instructor: Aaron Roth
Disjoint Sets DS.S.1 Chapter 8 Overview Dynamic Equivalence Classes
Advanced Sorting Methods: Shellsort
Presentation transcript:

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 1 / 30 Lecture 18: BLIST FORM of CSG and Blister Jarek Rossignac CS1050: Understanding and Constructing Proofs Spring 2006

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 2 / 30 Lecture Objectives Learn how to convert a CSG expression in to its Blist form Learn how to use a Blist to evaluate a Boolean expression Understand how to use this for CSG rendering on the GPU

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 3 / 30 Blister: GPU-based rendering of Boolean combinations of free-form triangulated shapes John Hable & Jarek Rossignac College of Computing, IRIS cluster, GVU Center Georgia Tech, Atlanta, USA

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 4 / 30 Operators: – A+B (Union) – AB or A*B (Intersection) – A! (Complement) – A–B=AB! (Difference) Primitives (solids): – Bunnies, Triangle meshes – Natural quadrics – Subdivision shells CSG expression: (A+B) ( C– (D–E) ) Define solids Parsing them yields a binary tree CSG (Constructive Solid Geometry) A B + * – A B  D E C Water-tight boundaries

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 5 / 30 3-D: Voxels (classify wrt primitives, merge) [Meagher84, Breen89, Fang98, Chen00] 2-D: Trimmed faces (boundary evaluation) [Mantyla86, Hoffmann89, Krishnan97, Bierman01] 1-D: Rays from eye through pixels [Roth82, Ellis91, Pfister00] 0-D: Surface samples – Model space (surfels) [Rossignac86, Bronsvoort87, Breen91] – Image space (fragments) [Okino84, Sato85, Goldfeather86-89, Epstein89, Wiegant96, McReynolds96, Jansen95-87, Rossignac92, Stewart98, Fang00, Stewart02] Mixed Faces+fragments [Rappoport97] Samples+voxels [Adams03] Examples of prior approaches B A B A–B A Disjunctive form: 31,104 products

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 6 / 30 Blist form of a CSG tree A i B iAB iA!+iAB!=i(AB)! Intersection A i B iA+iA!B=i(A+B) iA!B!=i(A+B)! Union A i iA iA! i A=1 i A=0 i i A A i B! iAB!=i(A–B) iA!+iAB!!=i(A–B)! Difference

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 7 / 30 Merging Blist sub-expressions LRLR Union: L+R Intersection: LR Difference: L–R=LR! LR! Complement: R!

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 8 / 30 Example (A+B)* ( C–(D–E) ) A i BCD!E + * – A B  D E C A i BC E!! A i BCDE! i((A+B)(C–(D–E)))! i((A+B)(C–(D–E)))

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 9 / 30 A–B=AB! (A+B)!=A!B! (AB)!=A!+B! A!!=A Use a positive CSG form (for simplicity) + * * A B + D! E C + * – A B  D E C negative (complemented) primitive (A+B) ( C– (D–E) ) (A+B) ( C(D!+E) ) Conversion to positive form is a trivial recursion

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 10 / 30 Algorithm for computing Blist labels f=false t=true f=B t=D f=C t=true f=B t=D f=C t=D f=false t=true f=false char lml (int m) { # left most leaf of right child char leftMost; if((o[m]!='*')&&(o[m]!='+')) {leftMost=o[m];} else {if (o[m]=='+') {f[m]=lml(r[m]); } else {t[m]=lml(r[m]); }; leftMost=lml(l[m]); }; return(leftMost); } void mb (int m, char pt, char pf) { if((o[m]!='*')&&(o[m]!='+')) { blistName[pc]=o[m]; blistIfTrue[pc]=pt; blistIfFalse[pc]=pf; t[m]=pt; f[m]=pf; pc++;} else {if (o[m]=='+') {mb(l[m],pt,f[m]); } else {mb(l[m],t[m],pf); }; mb(r[m],pt,pf); }; } Going right: inherit t and f. Going left: pick up blue value Assume positive form With each primitive P, store its name, P.n and its P.t (upper) and P.f (lower) labels Assigns to each link the label (color) of its final destination primitive A i BCD!E C C tt B f f Ef P.n=A P.t=C P.f=B

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 11 / 30 Point-in-CSG classification using Blist A i BCD!E C C tt B f f Ef For each primitive P in Blist do: parity := true if point is in-or-on P; If (next==P.n) {if (parity) {next=P.t} else {next=P.f}}; The final content of next indicates whether the CSG expression is true or false Workspace: Boolean parity; 6-bit integer next;

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 12 / 30 We can only afford 6-bit labels 4 2 A i B:0CD!:3E: :1:1 Assign integers as needed. A i BCD!E C C tt B f f Ef Need 3 labels Reuse labels of primitives that have already been reached. A i B:0CD!:1E: :1 1 0

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 13 / 30 Height swaps: D+E+F+C+G+B+H+A+(((K+L)M+J)N+I): 4 labels Minimizing the number of labels Original: (A+((B+((C+((D+E)+F))+G))+H))+(I+(J+(K+L)M)N): 5 labels A+B  B+A, AB  BA Can swap left and right arguments. Strategy: swap to make tree left-heavy There are 64 6-bit labels. We prove that no CSG tree with < 3909 primitives requires more than 64 labels Recently developed linear optimization: No CSG trees with < 2 63 primitives requires more than 64 labels. Cost swaps: (K+L)+JM+IN+(A+(H+(B+(G+(C+(F+(D+E))))))) :3 labels

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 14 / 30 Improving Blist worst-case footprint Height swaps (4 labels): D+E+F+C+G+B+H+A+(((K+L)M+J)N+I) Original (5 labels): (A+((B+((C+((D+E)+F))+G))+H))+(I+(J+(K+L)M)N) Cost swaps (3 labels): (K+L)+JM+IN+(A+(H+(B+(G+(C+(F+(D+E))))))) Smallest expression requiring 5 labels has 15 primitives: ((AB+C)(DE+F)+G)((HI+J)(KL+M)+N)+O In general b stencil-bits support n=2 b labels and n labels suffice for all Blist expressions with up to p=2 n–1 –1 primitives New cost-based pivoting with 6 stencil bits guarantees support for all CSG trees with less than 2 63 primitives! Height-based pivoting ( described in the paper) could guarantee only 3909 primitives

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 15 / 30 Blist is a very special decision graph Boolean functions: many representations [Moret82] Binary Decision Graphs (BDG) [Akers78] Reduced Function Graphs (RFG) [Bryant86] – Acyclic BDGs without repetition – Constructed through Shanon’s Expansion [Shannon38] – Removing empty leaves yields BSP trees – Reduction: recursively tests graph isomorphisms – # nodes may be exponential in # primitives – Size depends on order [Payne77] (optimal is NP-hard) – Footprint is log 2 N bits Blist [Rossignac99] – RFG of a Boolean expression with +, *, – operators – Linear construction & optimization cost – # nodes = # primitives = N – Footprint may be compressed to log 2 log 2 N bits (A+B)–CD=(A+B)(C!+D!) A!(B(C!+D!)+A(C!+D!) A!(B!+B(C!+D!)+A(C!+D!) A!(B!+B(CD!+C!)+A(CD!+C!) A B C! D! A B C! D!

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 16 / 30 Blister Overview Repeat until all pixels are locked – Peel: Push the unlocked fragments to the next layer Scan each primitive: compute foremost fragment behind current layer – Lock: Identify and lock fragments on the CSG solid For each primitive P: – Classify active fragments by toggling parity bit – For all active pixels: Update the Blist next value Contributions of layers (front-to-back) Several primitives may contribute to a layer

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 17 / 30 John Hable 1. Peel 2. Lock 3. Results 4. Extensions 5. Future Work

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 18 / 30 Peel strategy UNC: Peel each primitive with a counter [Goldfeather-Hultquist-Fuchs SIG’89] IBM+: Peel a product with a Depth-Interval Buffer? F=previous layer, B=infinity If (F<z<B) {B:=z} [Epstein-Jansen-Rossignac’89] [Stewart-Leach-John’98, Guha et al.’03] GaTech: Peel it all using texture memory [Mammen CG&A89, Everitt’02, Kirsch&D ö llner WSCG04] Store F as depth texture B:=closest fragment behind F

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 19 / 30 A C B Peel example Second layer fragments Third layer fragments Peel the arrangements of all primitives taken together For each layer, scan the front/back faces of positive/negative primitives Use a Depth-Interval Buffer to advance the layer [Epstein-Jansen-Rossignac’89] Produces layers of fragments in front-to-back order (A+B)–C Negative primitive (A+B)C! First layer fragments

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 20 / 30 Peeling: Implementation details Initialization: Compute (small) set of primitives that cover the CSG solid A–B  A, A+B  A+B, AB  smaller of A and B Store front F and back B’ of the covering set in texture memory Render with GL-LT and GL-GT For each layer: F contains previous layer depth B is initialized to infinity Render primitives In the pixel-shader (z=depth of fragment) If ( z<F || B’<z ) discard fragment If (pixel is locked) discard fragment Standard depth-test on remaining fragments: If (z<B) {B:=z} 

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 21 / 30 A C B First layerlocked Second layer locked Peel & lock example (A+B)–C Each new layer is trimmed Pixels with fragments on the CSG solid S are locked The next layer is only computed at the active (unlocked) pixels Third layer locked

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 22 / 30 Fragment/primitive classification We want to classify the fragments of each active pixel q in the current layer whose depth is S[q] Scan P generating fragments (pixel q, depth z) – If ((q is active) && (z<S[q]) ) {parity[q]=parity[q]!} Fragments of odd parity pixels are inside P

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 23 / 30 Classifying fragments on P We solve on-cases without fake displacement: Use GL_LEQUAL a b c Prior art tested ghost fragment moved back by e: If ((q is active) && (z<S[q])+e) {parity[q]=parity[q]!} [Rossignac-Wu92] Possible artifacts in thin areas Fragments on front-faces of positive primitive P or on the back-face of a negative primitive P must be classified as in-or-on P

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 24 / 30 ON/ON cases (A–B)+C A B C

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 25 / 30 CSG expression has 48 primitives. Disjunctive form has 31,104 products with 5 primitives per product (No pruning possible) Can’t remember past classifications? ** **** ******** * Only 6 stencil-bits per pixel to keep past classification results Storing Boolean for each primitive: < 7 primitives Storing a stack of partially evaluated results < 65 primitives Using a disjunctive form of CSG tree: no limit on N Goldfeather86-89, Epstein89, Wiegant96, Rossignac92, Stewart98, Stewart02… But… the number of products can grow exponentially! So… use Blist instead!

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 26 / 30 A C B Lock for layer 2 in the example Fragments at all active pixels are classified in parallel against each primitive. Their stencils are updated (based on the classification and their previous value). After the last primitive, fragments on the CSG solid are locked, others stay active. (A+B)–C Active fragments of layer 2 In-or-on A (for C)Out of A (for B) In-or-on B (for C) Out of C (active)In-or-on C! (locked) Scan A Scan B Scan C

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 27 / 30 Use Blist to merge past classifications To classify and lock the fragments of the current layer For each primitive P in Blist do: Scan P {toggling parity when P is in front of the tested fragment} Scan all active pixels {If (next==P.n) {if (parity) {next=P.t} else {next=P.f}}} In the stencil of each pixel store: parity (bit-0), next (bits 1-6) A i B:0CD!:1E: :1 1 0 Initialization: Rearrange the CSG tree to minimize the number of labels With each primitive, P, associate its 3 Blist labels: P.n, P.t, P.f P:n P.t P.f

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 28 / 30 Updating the stencil bits of next // Stencil=(parity-bit,next) // if (parity-bit==1 and next==P.n) then next:= P.t IF (Stencil== ) {Stencil:= ;} // if (parity-bit==0 and next==P.n) then next:= P.f IF (Stencil== ) {Stencil:= ;} A BC... Speed-up suggested by Mark Kilgard (nVidia): Mask=next XOR P.t; Then toggle next where it agrees with Mask glStencilMask( P.t ~ next ); glStencilFunc( GL_EQUAL, P.t | 0x80, 0xff ); glStencilOp( GL_KEEP, GL_KEEP, GL_INVERT );

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 29 / 30 An example Free fragments On fragments Locked fragments Layer 1Layer 2Layer 3Layer 4

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 30 / 30 Timing results nVidia GeForce 6800 Bunny has 574K triangles, Bunny2 has 2.3M primslayerskfkf T (sec) Widget Bunny Bunny Complex Gear Average over random directions Actual layers processed when we prune active pixels

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 31 / 30 Extensions Transparency (not always correct) – Internal faces increase opacity Shadows (shadow buffer)

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 32 / 30 Ongoing & future work Increase complexity for which Blister is guaranteed to work – Increased from 3909 to 2 63 primitives when using 6 stencil bits Improve performance – Preliminary Results: already 20% faster Select “correct” color for fragments on 2 primitives – Use Active Zones [Rossignac&Voelcker 89] Correct surface transparency – Custom classification Voxelization / volumetric rendering – Interpolate / integrate between layers Parallelization (SLI/Crossfire) – AFR (Alternate Frame Rendering between two graphics cards) – Split Screen/Tiles, but shared texture

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 33 / 30 Summary of Blister Can render all CSG trees with up to 2 63 primitives – Simple, efficient CSG-to-Blist conversion Time complexity: O(DepthComp*Primitives) Efficient implementation on GPU – Typical performance: 2 fps for CSG of 50 primitives Can be used for shadows (and “transparency”) Many improvements/extensions underway + * – A B  D E C A i B:0C D!: 1 E: :1:1

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 34 / 30 Blister Video: Realtime CSG graphics

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 35 / 30 Blist of a symmetric difference Simple to support, but reduces the size of the worst case CSG models that we can handle. AB!BC!C R LRLR LR! ABCABC

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 36 / 30 A–B=AB! (A+B)!=A!B! (AB)!=A!+B! A!!=A Use a positive CSG form (for simplicity) + * * A B + D! E C + * – A B  D E C negative (complemented) primitive (A+B) ( C– (D–E) ) (A+B) ( C(D!+E) ) Conversion to positive form is a trivial recursion

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 37 / 30 Assigned Reading Read the Blister paper Read the CST paper

John Hable & Jarek Rossignac (Georgia Tech, GVU) BLISTER Page 38 / 30 Assigned Homework Learn how to convert a CSG expression into its Blist form and how to evaluate a Blist