Konstruktiv solid geometri
Constructive solid geometri ( CSG ; tidigare kallad computational binary solid geometry ) är en teknik som används vid solid modellering . Konstruktiv solid geometri tillåter en modellerare att skapa en komplex yta eller ett objekt genom att använda booleska operatorer för att kombinera enklare objekt, vilket potentiellt skapar visuellt komplexa objekt genom att kombinera några primitiva.
I 3D-datorgrafik och CAD används CSG ofta i procedurmodellering . CSG kan också utföras på polygonala nät , och kan vara procedurmässigt och/eller parametriskt.
Kontrast CSG med polygonnätmodellering och lådmodellering .
Arbete
De enklaste solida föremålen som används för representationen kallas geometriska primitiver . Vanligtvis är de föremål med enkel form: kuboider , cylindrar , prismor , pyramider , sfärer , kottar . Uppsättningen av tillåtna primitiver begränsas av varje mjukvarupaket. Vissa mjukvarupaket tillåter CSG på böjda objekt medan andra paket inte gör det.
Ett objekt konstrueras från primitiver med hjälp av tillåtna operationer , som typiskt är booleska operationer på mängder : union , skärningspunkt och skillnad , såväl som geometriska transformationer av dessa mängder.
En primitiv kan typiskt beskrivas med en procedur som accepterar ett antal parametrar ; till exempel kan en sfär beskrivas med koordinaterna för dess mittpunkt, tillsammans med ett radievärde. Dessa primitiver kan kombineras till sammansatta objekt med hjälp av operationer som dessa:
Genom att kombinera dessa elementära operationer är det möjligt att bygga upp objekt med hög komplexitet från enkla.
Ray spårning
Återgivning av konstruktiv solid geometri är särskilt enkel vid strålspårning . Strålspårare skär en stråle med båda primitiva som opereras, applicerar operatören på skärningsintervallen längs 1D-strålen och tar sedan punkten närmast kameran längs strålen som resultatet.
Ansökningar
Konstruktiv solid geometri har ett antal praktiska användningsområden. Det används i fall där enkla geometriska objekt önskas, [ citat behövs ] eller där matematisk noggrannhet är viktig. Nästan alla tekniska CAD-paket använder CSG (där det kan vara användbart för att representera verktygssnitt och funktioner där delar måste passa ihop).
Quake - motorn och Unreal Engine använder båda detta system, liksom Hammer (den inbyggda editorn för källmotornivå ) och Torque Game Engine / Torque Game Engine Advanced . CSG är populärt eftersom en modellerare kan använda en uppsättning relativt enkla objekt för att skapa mycket komplicerad geometri. När CSG är procedurmässigt eller parametriskt kan användaren revidera sin komplexa geometri genom att ändra objektens position eller genom att ändra den booleska operationen som används för att kombinera dessa objekt.
En av fördelarna med CSG är att det enkelt kan säkerställa att föremål är "fasta" eller vattentäta om alla de primitiva formerna är vattentäta. Detta kan vara viktigt för vissa tillverknings- eller tekniska beräkningstillämpningar. Som jämförelse, när geometri skapas baserat på gränsrepresentationer krävs ytterligare topologiska data, eller så måste konsistenskontroller utföras för att säkerställa att den givna gränsbeskrivningen anger ett giltigt solid objekt.
En bekväm egenskap hos CSG-former är att det är lätt att klassificera godtyckliga punkter som antingen inuti eller utanför formen skapad av CSG. Punkten klassificeras helt enkelt mot alla underliggande primitiver och det resulterande booleska uttrycket utvärderas. Detta är en önskvärd kvalitet för vissa applikationer som ray tracing .
Konvertering från maskor till CSG
Med CSG-modeller som parametriseras efter konstruktion är de ofta gynnsamma framför vanliga maskor när det kommer till applikationer där målet är att tillverka skräddarsydda modeller. För sådana applikationer kan det vara intressant att konvertera redan befintliga maskor till CSG-träd. Detta problem med att automatiskt konvertera maskor till CSG-träd kallas invers CSG .
Ett resulterande CSG-träd krävs för att uppta samma volym i 3D-rymden som inmatningsnätet samtidigt som det har ett minimalt antal noder. Enkla lösningar föredras för att säkerställa att den resulterande modellen är lätt att redigera. Att lösa detta problem är en utmaning på grund av det stora sökutrymmet som måste utforskas. Den kombinerar kontinuerliga parametrar som dimension och storlek på de primitiva formerna och diskreta parametrar som de booleska operatorerna som används för att bygga det slutliga CSG-trädet.
Deduktiva metoder löser detta problem genom att bygga en uppsättning halvrum som beskriver geometrins inre. Dessa halvrum används för att beskriva primitiver som kan kombineras för att få den slutliga modellen.
Ett annat tillvägagångssätt frikopplar detekteringen av primitiva former och beräkningen av CSG-trädet som definierar den slutliga modellen. Detta tillvägagångssätt utnyttjar möjligheten hos moderna programsyntesverktyg för att hitta ett CSG-träd med minimal komplexitet.
Det finns också metoder som använder genetiska algoritmer för att iterativt optimera en initial form mot formen på det önskade nätet.
Anmärkningsvärda applikationer med CSG-stöd
Generiska modelleringsspråk och programvara
Strålspårning och partikeltransport
Datorstödd design
- AutoCAD
- Autodesk Inventor
- Autodesk Fusion 360
- BRL-CAD
- CATIA
- GratisCAD
- NX CAD
- SolveSpace
- Onshape
- OpenSCAD
- PTC Creo Parametric (tidigare känd som Pro/Engineer )
- Realsoft 3D
- noshörning
- SelfCAD
- Solid kant
- SolidWorks
- Tinkercad
- Vectorworks
Spelande
- Drömmar
- Godot
- GtkRadiant
- Unity , via gratis eller betalda plugin-program från Unity Asset Store .
- UnrealEd
- Valve Hammer Editor
- Roblox
Andra
- 3 Glädje
- Aqsis (från och med version 0.6.0)
- Blender – i första hand en ytmesh-redigerare, men kan enkelt CSG använda metaobjekt och använda den booleska modifieraren på mesh-objekt.
- Clara.io
- Geant4
- MCNP
- SketchUp