Budapesti Műszaki és Gazdaságtudományi Egyetem Gépészmérnöki Kar
Textília szimulációja grafikus processzoron
Tudományos diákköri dolgozat
Szerző:
Katona Ádám
Konzulens:
Dr. Tamás Péter
Budapest 2013. November
Tartalomjegyzék 1.
BEVEZETŐ .................................................................................................................................................. 1 1.1
2.
3.
4.
TEXTÍLIÁK VIZSGÁLATA ...................................................................................................................... 3 2.1
TEXTÍLIÁK SAJÁTOSSÁGAI...................................................................................................................... 3
2.2
TEXTÍLIÁK KARAKTERISZTIKÁI .............................................................................................................. 3
2.2.1
Húzás ................................................................................................................................................. 3
2.2.2
Nyírás ................................................................................................................................................ 4
2.2.3
Hajlítás .............................................................................................................................................. 4
TÖMEG-RUGÓ MÓDSZER ...................................................................................................................... 7 3.1
ÁTTEKINTÉS ........................................................................................................................................... 7
3.2
STABILITÁSI PROBLÉMÁK ....................................................................................................................... 9
CUDA IMPLEMENTÁCIÓ ...................................................................................................................... 10 4.1
CUDA ÁLTALÁBAN ............................................................................................................................. 10
4.2
PROBLÉMA PÁRHUZAMOSÍTÁSA ........................................................................................................... 12
4.2.1
Erők kiszámítása ............................................................................................................................. 12
4.2.2
Felületi normálok kiszámítása......................................................................................................... 13
4.2.3
Egyéb feladatok ............................................................................................................................... 14
4.3 5.
A DOLGOZAT FELÉPÍTÉSE ....................................................................................................................... 1
FUTÁSI IDŐ ........................................................................................................................................... 14
HAJLÍTÓ RUGÓ BEÁLLÍTÁSA ............................................................................................................ 16 5.1
PIERCE TESZT ÉS MODELLJE.................................................................................................................. 16
5.2
A MODELL MEGOLDÁSA ....................................................................................................................... 17
5.3
A TESZT SZIMULÁCIÓJA ........................................................................................................................ 19
5.4
KÖVETKEZTETÉSEK .............................................................................................................................. 20
5.5
HAJLÍTÓ RUGÓ KARAKTERISZTIKÁJA.................................................................................................... 20
5.6
TORZIÓS RUGÓ ..................................................................................................................................... 24
5.7
A TESZT SZIMULÁCIÓJA TORZIÓS RUGÓVAL ......................................................................................... 25
5.8
A KÉT RUGÓ ÖSSZEHASONLÍTÁSA......................................................................................................... 27
6.
KEZELŐFELÜLET .................................................................................................................................. 29
7.
FEJLESZTÉSI TERVEK .......................................................................................................................... 30 7.1
NYÍRÁS VIZSGÁLATA ............................................................................................................................ 30
7.2
ÖNÜTKÖZÉS KEZELÉSE ......................................................................................................................... 30
7.3
CPU SZEREPÉNEK MINIMALIZÁLÁSA .................................................................................................... 30
8.
ÖSSZEFOGLALÁS ................................................................................................................................... 31
9.
IRODALOMJEGYZÉK ............................................................................................................................ 32
0
1. BEVEZETŐ Az elmúlt évtizedekben egyre jobb textilipari mérőberendezések, valamint egyre jobb, a textíliák viselkedését leíró mechanikai-matematikai modellek készültek. A textíliák viselkedésének megértése, valamint a számítástechnika fejlődése lehetővé tette realisztikus, háromdimenziós szimulációk megvalósítását. A textíliák számítógépes megjelenítését több területen használják. A legújabb animációs filmekben és játékokban fizikai modelleken alapuló szimuláció segítségével jelenítik meg a szereplők ruháit. Egy másik terület, ahol igény van a háromdimenziós szimulációra, a divatipari tervezést és gyártást segítő szoftverek. A tervezést nagymértékben gyorsítaná és könnyítené, ha a tervező egyből látná elképzelésének eredményét. Mikor 2007-ben az Nvidia előált a CUDA platform első verziójával, az átlag felhasználó is hozzájuthatott a több száz Gflops-os számítási teljesítményhez a videókártyáját használva. Dolgozatom célja, hogy olyan programot készítsek CUDA platform használatával, amely valós időben tud szimulálni textíliákat, tömeg-rugó módszer segítségével. A textíliák szimulációjának egyik legnehezebb kérdése, hogy hogyan találjunk összefüggéseket a mérhető anyagtulajdonságok és a szimuláció paraméterei között. A grafikus kártya használata hatalmas előrelépés a korábbi munkámhoz képest [5], hiszen a sebességnövekedés lehetővé teszi a szimulációs paraméterek iterációs közelítését. Ehhez a mérési eredményt, a mérés analitikus modelljét [8] és a szimulációt összehasonlítva határozom meg a legjobb eredményt adó paramétert.
1.1 A dolgozat felépítése A dolgozatom a korábbi munkámra épül, és két főbb újítást mutat be. Az egyik a számítások párhuzamosítása CUDA platformon. A másik a hajlítási merevség beállítására kidolgozott módszer. A fejlesztések bemutatásához elengedhetetlen foglalkozni az előzményekkel, hogy érthető legyen azok indokoltsága. Így a 2. és a 3. fejezet az irodalomkutatásról szól, amelyben főleg a szagdolgozatomban elért eredményeket mutatom be. Az 2. fejezetben a textilanyagok sajátosságait, mérési módszereit mutatom be, különösen kitérve a hajlítási merevség mérésére. 1
A 3. fejezetben bemutatom a tömeg-rugó szimulációs módszert, annak működését. Ezen kívül szó lesz arról miért szükséges a realisztikus szimulációhoz az a hatalmas sebesség, amelyet a grafikus kártyából tudunk kisajtolni. A 4. fejezetben mutatom be milyen problémák adódnak a feladat párhuzamosításából, és hogyan oldottam meg ezeket, valamint bemutatom milyen gyorsulást értem el. Az 5. fejezetben bemutatom hogyan hasonlítottam össze a mérést, a mérés modelljét és a szimuláció eredményét, hogy megkapjam a megfelelő paramétert a hajlítórugó beállításához. Ezután elezem a hajlítórugót, és rámutatok annak hiányosságaira. Majd a probléma megoldására bevezetem a torziós rugót, és annak számítási módját. Végül összehasonlítom a két rugótípust. A 6. fejezetben bemutatom a kezelőfelületet amit készítettem. Majd a 7. fejezteben szót ejtek a jövőbeli terveimről.
2
2. TEXTÍLIÁK VIZSGÁLATA 2.1 Textíliák sajátosságai Textíliák elég bonyolult, nehezen modellezhető anyagok. Az igénybevételekre nem lineáris karakterisztikát mutatnak, az anyagjellemzők függenek a megnyúlási állapottól és a száliránytól. Ráadásul a száliránnyal 45°-os szögben más a megnyúlás mechanizmusa, mint szálirányban, így nem csak a jellemzők értéke, hanem azok jellege is különbözik. Már kis terhelésre is nagy deformációval válaszolnak, saját súlyuk alatt is jelentősen lehajlanak. Különösen kicsi ellenállást tanúsítanak hajlítással szemben. További nehézség, hogy a különböző szálakból többféle módon készítenek fonalat. A fonalat jellemzi a szálak száma és csavarodottsága. Valamint a fonalakat többféleképpen lehet szőni. Különféle szövési mintákat alkalmaznak (1. ábra). Mind a szálak mind a fonalak között fellép súrlódás, amely jelentősen befolyásolja az anyag mozgását.Ez a sokszínűség tovább bonyolítja a mechanikai viselkedés tanulmányozását.
1. ábra Különböző szövéstípusok, balról jobbra: vászon, sávoly, atlasz.[5]
2.2 Textíliák karakterisztikái 2.2.1 Húzás Szálirányban nyújtáskor kezdetben a szálak közötti tapadási súrlódás dominál, majd
a
hullámosság csökkenése. Amikor a hullámosság kezd eltűnni a fonalak között, a hosszváltozást a szálak megnyúlásának kell felvenni. Ez egy nagy meredekségű karakterisztikát eredményez. Ezt láthatjuk a 2. ábrán.
3
2. ábra Textíliák húzókarakterisztikája. [5]
2.2.2 Nyírás Nyírásnál, amikor a nyírófeszültség elég nagy lesz ahhoz, hogy a súrlódást legyőzze, a szálak elcsúsznak egymáson, majd amikor a fonalak keresztmetszete összeér, azok rugalmasan összenyomódnak. A szorosan szőtt textíliáknál nem jellemző a csúszás, mert már alaphelyzetben is összenyomódnak a fonalak. Ezek az anyagok rugalmasan viselkednek nyírással szemben (3.ábra). Azonban a lazán szőtt textíliáknál jellemző a fonalak egymáson való elcsúszása.
3. ábra Tipikus nyírókarakterisztika. [5]
2.2.3 Hajlítás A szimuláció egyik kulcskérdése a hajlítás modellezése. Sok mérőberendezés készült a hajlítási merevség mérésére [1]. Ilyen a Fabric Assurance by Simple Testing (FAST) nevű redszer vagy a TH7 nevű cseh fejlesztésű berendezés. A legelterjetebb ilyen berendezés 4
azonban a Kawabata Evaluation System [KES] hajlításmérője. A hajlítási vizsgálat során a befogott anyagot előre – hátra meghajlítják 2.5 cm-1 görbületűre, és közben mérik a nyomatékot (4.ábra). A mérés függőleges helyzetben történik, hogy a gravitáció ne befolyásolja.
4. ábra: KES Hajlítóvizsgálatot végző berendezés[5], és a kimért hajlítókarakterisztikák [1]
Ezen kívül vannak más módszerek a hajlíthatóság mérésére. Ilyen a drape tester (5.ábra).
5. ábra Drape tester felépítése és működési elve. [5]
A 3-as számmal jelölt fényforrás az 5-össel jelölt tükör segítségével párhuzamos fénysugarakat állít elő. Az 1-essel jelölt kör alakú asztalra egy, az asztalnál nagyobb átmérőjű kör alakú szövetet raknak úgy, hogy a szövet szélei saját súlyuk alatt lehajoljanak. A 6-ossal jelölt, a szövettel megegyező méretű papírgyűrűre vetődik a fény. Ekkor a mérést végzőnek körbe kell rajzolnia az árnyék körvonalát, majd kivágva a körberajzolt részt, a tömegek leméréséből megkaphatjuk a felületek arányát. Manapság a felületek arányát képfeldolgozással, pontosabban határozzák meg.
5
A redőződési tényező: 𝐷=
𝑚2 ∙ 100 % 𝑚1
(2.1)
Ahol: 𝑚1 [g] az eredeti körgyűrű alakú papír tömege, 𝑚2 [g] az árnyékhatárvonal mentén kivágott papírgyűrű tömege, D [%] az esési vagy redőződési tényező. Az egyik legrégebbi hajlítást vizsgáló módszer azonban a Pierce teszt (6.ábra). Egyszerűsége és olcsósága miatt még ma is használt hajlítási merevséget mérő berendezés.
6. ábra Pierce teszter [5]
A hajlítómerevséget úgy kapjuk meg, hogy a berendezés asztalára helyezett sáv alakú mintát elkezdjük kitolni, míg a lehajlott vége el nem éri a 43°-os vonalat, és ekkor leolvassuk a kitolt hosszat.Ebből a hajlító merevség: 𝐵=
𝑙 2
3
∗𝑞
(2.2)
𝑁
Ahol l [m] a kitolt hossz, és q [𝑚 2 ] a területegységre eső tömeg és a gravitációs gyorsulás szorzata.
6
3. TÖMEG-RUGÓ MÓDSZER 3.1 Áttekintés A tömeg-rugó módszert elterjedten alkalmazzák a számítógépes grafikában, nem csak textíliák szimulációjára, hanem egyéb felületekére is. Például vízfelület, vagy bőrfelület mozgásának szimulációjára. Egy dimenziós háló esetén hajat, szőrt, ostort lehet szimulálni, három dimenziós esetén pedig benyomható rugalmas testeket. Textíliák szimulációjakor leggyakrabban három különböző típusú rugót használnak. A szomszédos pontokat szerkezeti rugók kötik össze. Ezek veszik fel a húzásból származó feszültség nagy részét. Azonban szükséges a második szomszédokat összekötő hajlító rugók és az átlós szomszédokat összekötő nyíró rugók bevezetése is, mert kezdeti állapotban a szerkezeti rugók nem állnak ellen nyírásnak, hajlításnak pedig egyáltalán nem állnak ellen. A rugókkal párhuzamosan sebességgel arányos csillapítások is lehetnek, hogy csillapodjon a mozgás.
7. ábra: Tömeg-rugó rendszer által használt rugók.[5]
A tömegpontokra ható erőket két csoportra bonthatjuk. A külső erők közé tartoznak a gravitációs erő, a szél, a légellenállás ereje, az ütközéskor fellépő erők és a másik tárgyon való súrlódásból eredő erő. A belső erők közé tartozik a rugóerő és a csillapító erő. A rugóerők nagysága egyenesen arányos a rugók hosszának nyugalmi hossztól való eltérésével. Az arányossági tényező a k
𝑁 𝑚
rugóállandó. A csillapítási erő pedig egyenesen arányos a
relatív sebességnek a rugó egyenesére eső vetülete nagyságával, az arányossági tényező pedig b
𝑁𝑠 𝑚
csillapítási tényező.
7
Az 𝑖 é𝑠 𝑗 pontokat összekötő kényszer egyenletei, ahol 𝒙 a pozícióvektor, 𝒗 a sebességvektor és 𝑙0 a nyugalmi hossz, a következők:
𝐹𝑟 =
(3.1)
𝒙𝑗 −𝒙𝑖 − 𝑙0 ∙ 𝑘
𝐹𝑟 rugóerő pozitív, ha a rugó húzott, negatív ha nyomott. 𝐹𝑟𝑖 = 𝐹𝑟𝑗 =
𝒙𝑗 −𝒙𝑖 𝒙𝑗 −𝒙𝑖 𝒙𝑖 −𝒙𝑗 𝒙𝑖 −𝒙𝑗
𝐹𝑐𝑠 = 𝒗𝑗 −𝒗𝑖 ∙
∙ 𝐹𝑟
(3.2)
∙ 𝐹𝑟
(3.3)
𝒙𝑗 −𝒙𝑖 𝒙𝑗 −𝒙𝑖
∙𝑏
(3.4)
𝐹𝑐𝑠 csillapítóerő pozitív, ha távolodik egymástól a két pont és negatív ha közeledik. 𝐹𝑐𝑠𝑖 = 𝐹𝑐𝑠𝑗 =
𝒙𝑗 −𝒙𝑖 𝒙𝑗 −𝒙𝑖 𝒙𝑖 −𝒙𝑗 𝒙𝑖 −𝒙𝑗
∙ 𝐹𝑐𝑠
(3.5)
∙ 𝐹𝑐𝑠
(3.6)
Ahhoz, hogy a tömegek helyét megkapjuk az idő függvényében meg kell oldanunk a mozgásegyenletet. Newton második törvénye alapján ahol r a pozíciókat tartalmazó vektor, írhatjuk: (3.7)
𝒇𝒆 𝒓, 𝒓 = 𝑚 ∙ 𝒓
Az 𝒇𝑒 az eredő erők vektora felírható 𝒓, 𝒓 nemlineáris függvényében. A
megoldáshoz
numerikus
differenciálegyenletekhez
integrálást
használunk.
Én
a
másodrendű
alkalmazható fél-implicit módszert használtam. Ehhez először
𝒓 𝑛+1 -et határozzuk meg explicit Euler módszerrel. ℎ az időlépés. 𝒓𝑛+1 = 𝒓𝑛 + 𝒓 𝑛 ∙ ℎ
(3.8)
Azonban 𝑟𝑛+1 -et az 𝑟𝑛+1 ismeretében már számolhatjuk implicit módszerrel, ezért hívják a módszert fél-implicitnek. 𝒓𝑛+1 = 𝒓𝑛 + 𝒓𝑛+1 ∙ ℎ
(3.9)
8
3.2 Stabilitási problémák A rendszer a rugók miatt hajlamos a lengésre, ezért ha a stabilitást meg akarjuk őrizni kis lépésközt
kell
használni.
Egy
rugóra
rögzített
tömegnek
meghatározható
a
sajátkörfrekvenciája, amivel rezeg, ha magára hagyjuk. Ez a körfrekvencia csillapítás nélkül 𝛼=
𝑘 𝑚
𝑏𝛼
, csillapítással 𝛾 = 𝛼 1 − 𝐷2 ahol 𝐷 = 2𝑚 , k rugóállandó, b a csillapítási tényező.
Ebből a periódusidő 𝑇 =
2𝜋 𝛾
. Behelyettesítve: 2𝜋
𝑇= 1−
𝑏2 𝑘 ∙ 4𝑘𝑚 𝑚
(3.10)
Ez a képlet csak akkor használható, ha a rendszer nem túlcsillapított. Túlcsillapított esetben nincs értelme periódusidőről beszélni, mivel a rendszer nem leng. A lépésköznek mindenképp a periódusidő töredékének kell lennie.Ha a k nagy és az m kicsi a lépésköznek nagyon kicsinek kell lennie, ami hatalmas számítási kapacitást igényel. Sűrü hálózás esetén egy pontra nagyon kicsi tömeg jut valamint a megfelelő merevség eléréséhez nagy rugóállandó szükséges. Így a stabilitás megőrzéséhez valósághoz közeli paraméterek esetén akár 10−7 , 10−9 [sec] nagyságrendű időlépés is szükséges lehet.
9
4. CUDA IMPLEMENTÁCIÓ 4.1 CUDA általában A CUDA egy párhuzamos programozási platform, amelyet az NVIDIA készített. Segítségével a
programozók
közvetlenül
hozzáférhetnek
a
grafikus
kártya
memóriájához
és
utasításkészletéhez, így álltalános célu feladatokat oldhatnak meg. Előnye a másik párhuzamos programozási platformmal, az OpenCL-el szemben, hogy kifejezetten az NVIDIA kártyákhoz fejlesztették ki ezért hatékony, valamint jól dokumentált. Hátránya hogy más gyártók termékein nem fog futni a CUDA-ban kifejlesztett program. Az egyszerű személyi számítógépekben árult gpu-k számítási kapacitása nagyságrendekkel meghaladja a legújabb CPU-két (8.ábra). Azonban az elméleti maximális sebesség eléréséhez a feladatunknak tökéletesen párhuzamosíthatónak kell lennie és az adatok másolásának tökéletesen átlapozhatónak. Azonban ha csak a maximum sebesség töredékét tudjuk elérni, még az is hatalmas javulást okozhat.
8. ábra Legújjabb GPU-k és CPU-k számítási sebessége[6] Az általam használt GPU sebessége:172 GFLOPS
10
Ahhoz, hogy minél gyorsabban futó kódot írjunk, ismernünk kell a GPU felépítését és működésének alapjait.A felépítés kis mértékben eltér kártyánként, én a programomat Geforce GT 520MX kártyán teszteltem, amely compute capability 2.1-re képes. A GPU multiprocesszorokból áll, az, hogy mennyiből, az a grafikus kártyától függ. Egy multiprocesszoron a compute capability 2.1 esetében 1532 szál futhat maximum. A program futása blokkokra van osztva. Minden blokkhoz tartozik valamennyi shared memória az én esetemben 49Kb. A blokkok szálakból állnak, amelyeknek van lokális memóriájuk. A lokális memória vagy a regiszterekben, vagy a globális memórián foglalnak helyet, de minden szál csak a sajátját látja. Az egy blokkhoz tartozó szálak kommunikálhatnak egymással a shared memórián vagy a globális memórián keresztül.A nem egy blokkhoz tartozó szálak csak a globális memórián keresztül kommunikálhatnak.A szálak 32-es csoportokban, warpokban futnak. Egy warpon belül minden szálnak ugyanazt kell csinálni, így az elágazásnál amíg az egyik ág fut le addig a többi blokkolva van. Ennek tudatában látszik, hogy a warpon belüli divergenciát el kell kerülni, a blokk nem feltétlenül fut lasabban ha divergencia van. A shared memória nagyon gyors, direktbe van bekötve, így egy órajel alatt kiolvasható 32 bit. A regiszterek is ugyanilyen gyorsak. A globális memória ezzel szemben körülbelül 100-szor lassabb. Azt is tudni kell azonban, hogy a globális memóriából történő másolást chache gyorsítja, így nem biztos, hogy ennyivel lassabb lesz a shared memóriánál.A GPU memória és a CPU memória között a PCIe buszon keresztül történik a másolás ami majdnem még egy nagyságrenddel lassabb. Szerencsére a memória másolgatása és a számítás sokszor átlapolható, de még így is általában az adatok másolása a sebességet korlátozó szűk keresztmetszet, ezért azt célszerű minimalizálni.
9. ábra A CUDA program struktúrája.
11
4.2 Probléma párhuzamosítása 4.2.1 Erők kiszámítása
A tömeg- rugó rendszerrel történő szimuláció viszonylag jól párhuzamosítható. Ebben a fejezetben bemutatom, hogyan párhuzamosítottam az egyes részfeladatokat. Az erők kiszámítása az egyik legszámításigényesebb feladat. Minden pontra 12 rugó hat. Mivel minden erőnek van egy ellenereje, ezt nem éri meg kétszer kiszámolni. Helyette minden pont csak a rugói felét számolja ki, és a többi erőt a szomszédok számolják ki neki. Így a fele számítás megspórolható, azonban a blokkok határainál problémák lesznek a szomszédba írással. A probléma azért van, mert a blokkok között nincsen szinkronizáció, így előfordulhat, hogy két szál egyszerre akarja írni ugyanazt a memóriaterületet. Ez a probléma megoldható atomic műveletek alkalmazásával, azonban ez jelentős sebességvesztéshez vezethet. Egy másik megoldás, hogy a széleken inkább kétszer számoljuk ki az adatokat. Ha elég nagy a blokk, megéri használni ezt a struktúrát. Egy pont a tőle balra és fent lévő rugókat számolja, valamint az átlósan tőle balra fent és jobbra fent lévőket. Így balra, jobbra és fent lesz egy 2 elem szélességű csík a blokkunkban, ahol duplán számolunk.
10. ábra:32x16 méretű blokk(piros), amely 28x14 méretű hálón (zöld) számolja ki az erőket.(minden rácspont egy tömegpontot jelöl a hálón.)
Ahhoz, hogy a csíkoknak, ahol kétszer számolunk, minimalizáljuk az arányát, minél nagyobb blokkra van szükség. A blokkok méretét azonban nem célszerű túl nagyra választani, mert kifogyunk a regiszterekből és a shared memóriából. Azt is érdemes tudni, hogy a blokk 12
mérete 32 többszöröse célszerű, hogy legyen, különben lesz egy olyan warp, amely nem lesz teljes. Ezeket a szempontokat figyelembevéve 512-t választottam blokkméretnek. Hogy minél nagyobb legyen a hatékony terület, a blokk dimenzióit a következő képlettel számoltam ki: 𝑥 − 4 ∗ 𝑦 − 2 = 𝑚𝑎𝑥 (4.1) 𝑥 ∗ 𝑦 = 512
Így a blokk mérete 32x16-ra adódott. Annak, hogy az erőket a shared memóriában tárolom az a nagy előnye, hogy nagyon gyors lesz az olvasás és írás a globális memóriához képest. Ehhez azonban az szükséges, hogy ne legyen bank conflikt. Minden szálhoz 3 float tartozik a shared memóriában. Miután egy rugó erejét kiszámolta a szál, először saját magához adja hozzá, majd szálszinkronizáció után a megfelelő szomszédnak. Mivel az indexelés úgy megy, hogy a warp mindig egy sorban címzi meg a memóriát, így nincs bank konfliktus.
11. ábra Bank konfliktus elkerülése, a pirossal jelölt területeket használja a warp egyszerre, minden bankból csak egyet.
Szálszinkronizációkor a blokkon belüli warpok bevárják egymást.Erre azért van szükség mert különben előfordulhatna, hogy az egyik szál olvasni akarja azt amit a másik éppen ír vagy egyszerre akarják írni. Az új eredmény elmentése miatti másolást úgy küszöböltem ki, hogy az eredményeket, a pozíciókat és a sebességeket, két-két bufferbe raktam és váltogattam, hogy melyik az új és a régi. 4.2.2 Felületi normálok kiszámítása A normálvektorok kiszámítására szügségünk van a megjelenítéshez és egyes erők számításához. Ehhez minden pont 2 háromszög normálvektorát számolja ki, majd hozzáadja azt az összes érintett pont változóihoz. Hasonlóan az erőkhöz, itt is írni akarunk a szomszédos pont változóiba, ezért itt is lesz egy csík a blokk szélén ahol kétszer kell számolni. A blokkméretet 16x16-osra választottam. 𝒏∆ = 𝒙2 −𝒙1 x 𝒙3 −𝒙1
(4.2)
Minden háromszögre a merőlegest (4.2) alapján számoljuk, ahol 𝑥1 , 𝑥2 , 𝑥3 a háromszög pontjainak koordinátáit tartalmazó vektorok, és 𝒏∆ a háromszög síkjára merőleges vektor, 13
melynek nagysága a háromszög területének a kétszerese. Ennél a műveletnél fontos, hogy az algoritmus minden háromszögnél ugyanolyan módon indexelje a pontokat, különben előfordulna, hogy az 𝒏∆ ellentettjére adódik. 𝒏𝑖 =
𝒏∆ 𝒏∆
(4.3)
Így az i-dik pont normálvektora az őt tartalmazó háromszögek normálvektorainak összege. Ilyen módon számítva azok a háromszögek, melyeknek a területe nagyobb, nagyobb súllyal számítanak bele a normálisba.
4.2.3 Egyéb feladatok A megmaradt feladatok mind olyanok, ahol már nincs szükség a szomszéd pont változóit módosítani, így ezek teljes mértékben párhuzamosíthatók. Ilyen az integrálás, a mozgási energia kiszámítása, a légellenállás kiszámítása, ütközés gömbbel, valamint az ütközés síkkal. Ezekhez a feladatokhoz 16x16-os blokkot használtam. Az integráláshoz félimplicit módszert használtam, és nem használtam shared memóriát. A gömbbel és a síkkal történő ütközést úgy oldottam meg, hogy ha ütközés történt, a pontot a felületre vetítettem és a sebességének a felületre merőleges komponensét kinulláztam.
4.3 Futási idő A programot intel core i3-as CPU-n teszteltem, melyen csak egy szálon fut. A használt GPU, GeForce Gt MX520 melynek számítási sebessége 172 GFLOPS, ami már elavultnak számít. A jelenleg személyi számítógépekbe és laptopokba árult GPU-k gyakran 1000-2000 GFLOPS-ot is tudnak. Tömegpontok száma
Rugók száma
6400
38400
40000
240000
250000
1500000
CPU 𝑚𝑠 151 𝑙é𝑝é𝑠 𝑚𝑠 940 𝑙é𝑝é𝑠 𝑚𝑠 7461 𝑙é𝑝é𝑠
GPU 𝑚𝑠 5.25 𝑙é𝑝é𝑠 𝑚𝑠 30 𝑙é𝑝é𝑠 𝑚𝑠 198.5 𝑙é𝑝é𝑠
Gyorsulás x28.7 x31.3 x37.5
1. táblázat Futási idő összehasonlítása.
A futásidő összehasonlítását három beállítással végeztem el [1.táblázat]. A használt hardverekkel több mint harmincszoros gyorsulást értem el, ami jelentő előrelépés, azonban nem tűntek el a stabilitási problémák. Valós paramétereket használva, sokat javult ugyan, de 14
még így is nagyon lassú maradt a szimuláció. Jelemzően minél nagyobb a feladat annál jobban teljesít a GPU. Egyrészt mindenképpen van egy kis számítás ami nem párhuzamosítható, aminek az aránya csökken ha sok tömegpontot használunk. Másrészt a széleken a fix méretű blokkok miatt lesznek olyan szálak amelyek üresjáratban lesznek, mert nem jutott rájuk feladat. A méretnövelés ezeknek az arányát is csökkenti. A 12. ábrán látható a különböző feladatok időigényessége látható. A legnagyobb feladat az erők kiszámítása. Ez 60%-ot emészt fel. A következő fejeztetben bevezetett torziós rugóval, az erők kiszámítása több mint kétszerannyi ideig tart. Ez már majdnem a teljes idő 80%-a.
12. ábra A különböző feladatok időigényessége különböző hálóméreteken a két fajta rugóval.
15
5. HAJLÍTÓ RUGÓ BEÁLLÍTÁSA 5.1 Pierce teszt és modellje Ebben a fejezetben bemutatom a 2. fejezetben ismertetett Pierce teszt hajlítómerevség mérő módszer modelljét. A mérés a rugalmas szál differenciálegyenletét veszi alapul, feltételezi hogy a görbület és a hajlítónyomaték között lineáris kapcsolat van. 𝑀 = 𝐵𝜌
(5.1)
ahol 𝜌 [𝑚−1 ] a görbület, M[N] a fajlagos(egységnyi szélességre vett) nyomaték, B [Nm] a hajlítómerevség. Továbbá feltételezzük, hogy a rugalmas szál nyújthatatlan. Egy differenciálisan kis szeletre felírhatjuk az egyensúlyi egyenleteket a 13.ábra alapján.[8] s-el jelöljük a befogástól vett távolságot. 𝜌=
𝑑𝛼 𝑀 = 𝑑𝑠 𝐵
(5.2)
𝑑𝑀 = 𝐹𝑥 sin 𝛼 + 𝐹𝑦 cos 𝛼 𝑑𝑠
(5.3)
𝑑𝐹𝑥 =0 𝑑𝑠
(5.4)
𝑑𝐹𝑦 =𝑞 𝑑𝑠
(5.5)
valamit még kiegészítésként az 𝛼 és x,y közötti kapcsolat: 𝑑𝑥 = cos 𝛼 𝑑𝑠
(5.6)
𝑑𝑦 = sin 𝛼 𝑑𝑠
(5.7)
16
13. ábra A rugalmas szál egy differenciálisan kicsi szelete [8]
5.2 A modell megoldása Ismerjük a következő peremfeltételeket: 𝑥0 = 0, 𝑦0 = 0, 𝛼0 = 0, 𝐹𝑥 𝑙 = 0, 𝐹𝑦 𝑙 = 0, 𝑀𝑙 = 0 Valamint felírhatjuk az erőket 𝑠 függvényében, mivel 𝑦 irányban csak a gravitáció hat, 𝑥 irányban pedig semmi. 𝐹𝑦 (𝑠)=(s-l)*q
(5.8)
𝐹𝑥 𝑠 = 0
(5.9)
Ezek után mindent tudunk az 𝑠 = 0 kezdeti pontban kivéve a nyomatékot, amelyről csak azt tudjuk, hogy 𝑠 = 𝑙 -nél nulla. A kezdeti nyomaték nélkül nem tudjuk numerikus integrálással meghatározni a megoldást, ezért a shooting módszert használtam [4]. Fel kell írni egy olyan függvényt, amelynek a változója a kezdeti nyomaték, az értéke pedig a nyomaték 𝑠 = 𝑙-nél. Ennek a függvénynek a kiértékelése egy pontban egy kezdetiérték problémát jelent. Ennek a függvénynek kell megkeresni a zérushelyét. Ha 𝑠 = 𝑙-nél a nyomaték pozitív, akkor felülről becsültük 𝑀0 -t, ha negatív, akkor alulról. Itt figyelembe kell venni a értelmezési tartományokat is. α csak 0° és 90° között van értelmezve. Ha α kisebb mint nulla, az azt jelenti, hogy már felfelé görbül a szál, azaz nagyobb kezdeti nyomatékra van szükség. Ha α nagyobb, mint 90°, akkor már nem is értelmes az egyenlet, de biztos, hogy kisebb kezdeti nyomatékra van szükség. A zérushely megkeresésére az intervallumfelezéses módszert választottam, ahol egy alsó és egy felső becslés közötti intervallumot tovább felezem úgy, hogy az intervallum felénél megnézem, hogy alatta vagy felette van e becslés. Ezzel a módszerrel ki tudom számolni a megoldást egy
17
bizonyos 𝑙 esetén, de nekem olyan megoldásra van szükségem amelynél a lehajlás egy megadott szögű. Ehhez
az
előző
módszerrel
intervallumfelezéssel keresem
kiszámolom
a
lehajlást
bizonyos
𝑙-ek
esetén,
és
azt az 𝑙-et, ahol a szál lehajlása a kívánt szögű. Az
intervallumfelezésnél lehetne hatékonyabb zéruskereső eljárást is használni, de így is kevesebb mint egy másodperc alatt kiszámolható a jó eredmény. A végeredmények a kitolt kelmesáv végső hossza, a nyomaték görbe, a lehajlási szög görbéje és az x,y görbék, mind s függvényében. y-t x függvényében ábrázolva pedig megkapjuk a lehajlott textil alakját.
14. ábra A shooting method konvergálása B=0.1, ds=0.001.
15. ábra 𝑀𝑙 𝑀0 függvény megtalált pontjai, amelynek a zérushelyét meg kell keresni.
18
16. ábra 𝛼 𝑙 konvergálása.Cél 𝛼 =50°(0.872 rad)
5.3 A teszt szimulációja
17. ábra A modell és a szimuláció összehasonlítása.(Modell: kék , Szimuláció: zöld)
Miután kiszámoltam a modell megoldását, össze tudom vetni a szimulációval. Ehhez olyan hálót hozok létre, amelynek szélessége 2 pont (hogy légellenállás hathasson), hosszúsága pedig annyi pont, ahány kell a modellben kiszámolt hossz eléréséhez, plusz egy a befogott vég miatt. A szimuláció addig megy, amíg a mozgási energia nem lesz közel nulla egy 19
bizonyos időn keresztül. Mikor ez meg van, van egy tömegpontokból álló textilháló és egy pontokkal közelített görbe, amely a mérés modellje szerinti lehajlott alak. Létrehoztam egy célfüggvényt, amelyet úgy kapunk meg, hogy minden tömegponthoz interpolálunk egy értéket a mérés modellje szerinti lehajlott alak pontjaiból, majd vesszük ezek különbségét és összegezzük minden tömegpontot beleszámolva. a szimulált kelme van a modellnél feljebb, ez a függvény pozitív és kisebb hajlítómerevség kell, ha pedig alatta van, akkor fordítva. Ennek a függvénynek kell a zérushelyét megkeresni a textilben használt hajlítórugó merevségének függvényében, hogy a szimuláció minél jobban hasonlítson a modellre. A zérushely megkeresését intervallumfelezéssel végeztem.
5.4 Következtetések A modell és a szimuláció összevetése nem sikerült jól. A program növelte a rugóállandót, de a lehajlott alak mégsem közeledett kellő mértékben a modellben megjósolthoz, hanem sokkal jobban lehajlott. A hajlító rugó állandójának az értéke már többszörösen meghaladta a szerkezeti rugóét, és még mindig sokkal jobban lehajlott a szimuláció, mint a modell. Ahhoz, hogy ennek az okát megértsem, levezettem a hajlítórugó karakterisztikáját.
5.5 Hajlító rugó karakterisztikája A 17. ábrán az 1, 2, 3 pontok tömegpontokat jelölnek. Az egyes és a hármas pont között hajlítórugó található. Az O pont a három tömegpontra illeszthető kör középpontja, r a sugara. X-el jelöltem az 1-3 és az O-2 egyenesek metszéspontját.𝑙0 jelöli az 1-2 és a 2-3 pontok nyugalmi távolságát. Így az 𝛼 = 0 nyugalmi esetben a hajlítórugó hossza 2𝑙0 .
18. ábra: Hajlítórugó elemzése
20
Ez a rugó lineáris, azaz a megnyúlással egyenesen arányos a kifejtett erő.A k arányossági tényező a rugóállandó. A rugó által kifejtett hajlításnak ellenálló hatást jól jellemezhetjük, ha az erőknek kiszámoljuk a nyomatékát a 2-es pontra. Tömegpontokra persze nem értelmezünk nyomatékot, de ezzel a módszerrel jellemezhetjük a hajlító hatást. Mivel mindkét erő visszahajlítani igyekszik a rendszert, így összegükkel kell számolni. A hajlítórugó aktuális hossza 𝑙.
Az 1-2-O szög nemmás mint
𝑀 = 2 ∙ 𝑙 − 2 ∙ 𝑙0 ∙ 𝑘 ∙ sin 𝛼 ∙ 𝑙0
(5.10)
𝑙 = 2 ∙ 𝑙0 ∙ cos 𝛼
(5.11)
180−2𝛼 2
, így az 1-2-O háromszögből 𝛽 = 180 − 180 − 2𝛼 2
(5.12)
𝛽 = 4𝛼
1-2-O egyenlőszárú háromszögből r és 𝛽 közötti kapcsolat sin
𝛽 𝑙0 ∙𝑟 = 4 2
(5.13)
1
A görbület 𝜌 = 𝑟 , melynek függvényeként így már felírható 𝑀(𝜌). A görbület maximális 2
értéke 𝑙 lehet, ez a rendszer korlátja a térbeli diszkretizáció következményeként. A függvény 0
nem csak a görbülettől függ, hanem az 𝑙0 és a k paraméterektől is. 𝑀 = −𝑘 2 𝑙0 3 𝜌 −2 + 4 − l0 2 ρ2
(5.14)
A probléma egyből szembetűnik. A nyomaték 𝑙0 hálóosztás harmadik hatványával arányos. Ami nekünk fontos, az a hajlító hatás, amely az egységnyi hosszra számított nyomatékkal arányos. A szimulációban minden szomszéd között van hajlító rugó, ami azt jelenti, hogy ez a nyomaték 𝑙0 hálóosztásonként lép fel. A hajlító hatás tehát az
𝑀 𝑙0
hányadossal jellemezhető. A
18-19. ábrákon látszik, hogy a hálóosztás kis változása is nagyságrendekkel változtatja a hajlító hatást. Míg durva háló esetén a hajlítórugó biztosít elég nyomatékot, finom hálózás esetén ahhoz, hogy megfelelő hajlító hatás legyen, olyan hatalmas rugóállandóra van szükség, amelyet időigényessége miatt már nem lehet szimulálni.
21
19. ábra
𝑀 𝑙0
(𝜌) ábrázolva különböző 𝑙0 -ak(zöld:10cm kék:3cm piros:1cm) esetén és a lineáris 𝑁
modell(lila).(k=100 ,B=0.1𝑁𝑚) 𝑚
20. ábra
𝑀 𝑙0
(𝜌) logaritmikus skálán ábrázolva különböző 𝑙0 -ak(zöld:10cm kék:3cm piros:1cm) esetén és 𝑁
a lineáris modell(lila).(k=100 ,B=0.1𝑁𝑚) 𝑚
22
Ez az oka annak, hogy nem sikerült elérni a modell által megjósolt alakot. A 20. ábrán látható egy finom hálózású szimuláció eredménye. A textília szinte teljesen elvesztette a hajlítómerevségét.
21. ábra Finom hálózásással, hajlítórugóval szimulált textília. Nagyon kicsi a hajlításnak való ellenállás.
Több munkában[2], ahol ilyen hajlítórugót használnak lehet látni, hogy nagyon sűrü háló esetén a hajlító hatás minimálisra csökken, a kelme túlságosan fodros lessz.
22. ábra Min Tang munkájában [2] is jól megfigyelhető a hajlítómerevség elvesztése finom hálózásnál.
23
5.6 Torziós rugó Egy alternatíva a hajlítórugó használatára a torziós rugó [3]. A kettes pontban lévő torziós rugó úgy hat a három pontra, hogy azok újra egy egyenesbe kerüljenek. Ezt úgy érjük el, hogy felületre merőleges erővel hatunk a pontokra a 23. ábra szerint. Az erő nagysága a görbülettel arányos.
23. ábra A torziós rugó levezetéséhez használt jelölések
5.1-ből indulunk ki. 𝑀 = 𝐵𝜌 = 2𝐹𝑙0
(5.15)
Az 5.12 és 5.13 egyenletekből: 𝜌=
2 sin 𝛼 𝑙0
𝐹 = 2𝐵 sin 𝛼
(5.16) (5.17)
Ehhez 𝛼-t előjelesen kell ismerni. Abszolút értékének kiszámításához először a skaláris szorzat definícióját használtam. A 23. ábra jelöléseit használva: 𝛼 = cos−1
𝟏𝟐. 𝟏𝟑 𝟏𝟐 ∗ 𝟏𝟑
(5.18)
De a kerekítések miatt hibát kaptam, kifutottam a cos −1 értelmezési tartományából. tan−1 használatával ez a probléma nem áll fent, readásul pontosabb eredményt is kapok, mert tan−1 nem olyan meredek mint a cos −1 . 𝛼 = tan−1
𝟏𝟐 × 𝟏𝟑 = tan−1 𝟏𝟐. 𝟏𝟑
𝟏𝟐 𝟏𝟑 𝟏𝟐 ∗ 𝟏𝟑 ∗ sin 𝛼 sin 𝛼 × ∗ = tan−1 𝟏𝟐 𝟏𝟑 𝟏𝟐 ∗ 𝟏𝟑 ∗ cos 𝛼 cos 𝛼
(5.19)
𝛼 előjelének meghatározásához a felület normálvektorait használtam fel. Ha 𝟏𝟐 × 𝒏𝟏 . (𝟏𝟐 × 𝟏𝟑) pozitív akkor 𝛼 negatív, ellenkező esetben fordítva.
24
Miután 𝛼 megvan az erő nagysága kiszámolható. Az iránya pedig a normálvektor irányával fog megeggyezni a következők szerint: 𝑭𝟏 =
𝑭𝟐 =
𝒏𝟏 𝒏𝟏 𝑭𝟑 =
𝒏𝟏
∗𝐹
𝒏𝟏 +
𝒏𝟑 𝒏𝟑
𝒏𝟑 𝒏𝟑
(5.20)
∗ −𝐹
∗𝐹
(5.21)
(5.22)
5.7 A teszt szimulációja torziós rugóval Torziós rugót használva a program 5-10 iteráció után megtalálta a helyes hajlító merevséget (24.ábra és 25. ábra), amellyel a megadott paraméterekkel szimulált eredmény legjobban hasonlít a modellre. A módszerrel könnyen le lehet ellenőrizni a torziós rugó működését, ha valós paramétereket írunk be a szimulációba. Az összehasonlítás eredményeként vissza kell kapnunk a modellbe megadott hajlító merevséget. A teszt szimulációjának azonban több hiányossága van. A modellben feltettük, hogy a textília nyújthatatlan, míg a szimulációban nyúlik. Az ebből eredő hiba miatt felülről becsüljük a merevséget. Ez kompenzálható merev szerkezeti rugó használatával, azonban így lassabban fog futni az összehasonlítás. A másik probléma, hogy a befogásnál, a diszkretizáció miatt a peremfeltétel, miszerint vizszintes érintővel indul a lehajlás, kielégítése nem egyértelmű. Ez a hiba alulról becslést eredményez. Végül az is pontatlanságot okozhat ,hogy a torziós rugó által tömegpontokra kifejtett erőket nyomatékként írtuk fel, aminek nem ugyanaz a hatása mintha folytonos anyagban ébredne nyomaték. Ez is alulról becslést eredményez. Valamint az iterációnek is van egy hibaküszöbe ahol megáll, ami még okoz egy kis pontatlanságot. Erre a problémára nem túl gyors a GPU-s számítás, ugyanis egy vékony és hosszú csíkot szimulálunk, ami nagyon kis mértékben fedi le a blokkok területét. Nagyon sok szál üresen jár. Nyolc különböző esetet vizsgáltam meg és az eredményeket a 2. táblázatban foglaltam össze. A torziós rugós szimuláció viszonylag jól közelíti a lineáris modellt, és beállításához egy jól definiált mérhető érték szükséges, amely független a hálóosztástól. 25
Háló osztása
10𝑐𝑚 10𝑐𝑚 10𝑐𝑚 10𝑐𝑚 5𝑐𝑚 5𝑐𝑚 3cm 3cm
A megadott
A megadott
Az iteráció
fajlagos tömeg
hajlító merevség
eredménye
kg m2 kg 𝜌 = 0.138 2 m kg 𝜌 = 0.25 2 m kg 𝜌 = 0.25 2 m kg 𝜌 = 0.25 2 m kg 𝜌 = 0.25 2 m kg 𝜌=1 2 m kg 𝜌=1 2 m
𝐵 = 0.1𝑁𝑚
𝐵 = 0.095𝑁𝑚
5%
𝐵 = 0.05𝑁𝑚
𝐵 = 0.058𝑁𝑚
16%
𝐵 = 0.1𝑁𝑚
𝐵 = 0.119𝑁𝑚
19%
𝐵 = 0.05𝑁𝑚
𝐵 = 0.054𝑁𝑚
8%
𝐵 = 0.05𝑁𝑚
𝐵 = 0.0501𝑁𝑚
0.2%
𝐵 = 0.1𝑁𝑚
𝐵 = 0.099𝑁𝑚
1%
𝐵 = 0.05𝑁𝑚
𝐵 = 0.053𝑁𝑚
6%
𝐵 = 0.1𝑁𝑚
𝐵 = 0.106𝑁𝑚
6%
𝜌 = 0.138
Hiba
2. táblázat Különböző paraméterekkel indított összehasonlítás által visszaadott hajlítómerevségek.
Ahhoz, hogy valós paraméterekkel számoljunk nagyon kicsi időlépés szükséges, így ha a gyorsaság a cél, nem használhatunk valós tömeget és merevséget. Ilyenkor az összehasonlító módszer megkeresi azt a hajlítómerevséget, ami a megadott adatokkal a legjobb eredményt adja.
24. ábra A hajlító merevség konvergálása az összehasonlító módszer során
26
25. ábra Az összehasonlító módszer működés közben.(Kék: a modellből kiszámított lehajlott alak, Zöld: a szimulált kelme lehajlott alakja, ahogy a hajlítómerevség tart a helyeshez.)
5.8 A két rugó összehasonlítása Hogy a két rugót összehasonlítsam különböző rugóállandóval egy gömbre ejtettem a ruhát. 80x80-as hálót használtam mindegyik esetben.
𝑁
26. ábra Különböző merevségű hajlító rugókkal rendelkező kelmék. A rugóállandók jobbról(20 , 𝑁
𝑁
𝑁
𝑚
𝑚
𝑚
𝑚
100 ,1000 ,10000 )
A hajlítórugó esetén a rugóállandó növelése nagymértékben lassította a szimulációt, de nem növekedett a hajlításnak való ellenállás (26. ábra). A torziós rugó esetében a hajlítómerevséget növelve a kelme tényleg jobban ellenállt a hajlításnak, és a nagyobb paraméter használata csak kis mértékben lassította a szimulációt (27. ábra).
27
27. ábra Különböző hajlítómerevségű torziós rugókkal rendelkező ruhák.A hajlítómerevségek jobbról(100𝑁𝑚,1000 𝑁𝑚,10000 𝑁𝑚,100000 𝑁𝑚)
28
6.
KEZELŐFELÜLET
A tesztelés megkönnyítésére a már meglévő megjelenítés mellé a GLUI user interface libary-t felhasználva készítettem egy kezelőfelületet. A program indításakor megjelenik a főablak, amelyről hozzáadhatjuk, módosíthatjuk és törölhetjük a szimulálni kívánt kelméket és gömböket.
Az
összes
főbb
paraméter
beállítható,
valamint
elindítható
a
mért
hajlítómerevséggel kiszámolt modell és a szimulált kelme összehasonlítása. Kiválaszthatjuk, milyen megfogást akarunk alkalmazni, vagy hogy milyen hajlító hatást akarunk használni. A konzolban kapunk néhány információt futás közben, mint például milyen GPU-n fut a program, milyen hiba történt, vagy mennyi memóriát használunk. Futás közben a program elmenti a képkockák adatait, hogy számolás után megnézhessük az eredményt más szögből, gyorsítva vagy lassítva.
28. ábra A program kezelőfelülete
29
7. FEJLESZTÉSI TERVEK 7.1 Nyírás vizsgálata Miután a húzó és hajlító rugók működését jobban megismertem, még mindig kérdéses, hogy a nyíró rugó milyen jól írja le a nyíróerőnek való ellenállást, valamint milyen kapcsolatot lehet felírni a mért nyírómerevség és a rugóállandó között.
7.2 Önütközés kezelése Kicsit bonyolultabb mozgások szimulálásához már vizsgálnunk kell, hogy nem ütközött-e saját magának a textília. Például a nadrág két szára. Ez renkívül számításigényes feladat. Egy lehetséges módszer a gyorsításra a térfogat felosztása hierarchikus egységekre. Így csak akkor kell a pontokat vizsgálni, ha közös egységben vannak, és nem kell minden pontot minden másikkal. Azonban óvatosan kell eljárni, mert ha egy ütközést nem veszünk figyelembe, könnyen előfordulhat, hogy összeakad a háló.
7.3 CPU szerepének minimalizálása Jelenleg a program minden képkockát visszamásol a CPU memóriájába, majd onnan jeleníti meg. Ezt a másolást meg lehetne spórolni ha minden adatot kizárólag a GPU-n tárolnék.[2]
30
8. ÖSSZEFOGLALÁS Dolgozatomban textíliák szimulációjával foglalkoztam. A már meglévő szimulációs programhoz [5] két főbb fejlesztést készítettem. Az első a számítás gyorsítása azáltal, hogy a legtöbb feladatot a videókártyán számolom. Ehhez a Nvidia CUDA platformját használtam. Minden részfeladathoz elkészítettem a GPU kódot. A hatékony implementációhoz meg kelett ismernem a videókártya felépítését és működését. Az eredmény harmincszoros gyorsulás lett, ami jelentős javulás a CPU-s verzióhoz képest. Bizonyos megszorításokkal a textília tömegére és merevségére, az alkalmazás képes valós idejű szimulációra. Azonban valós paraméterek használatával, még mindig nagyon lassú a szimuláció, a stabilitás megőrzéséhez nagyon kis időállandót kell használni. A másik újjítás egy módszer a hajlító merevség beállítására. Ehhez felírtam a pierce hajlítómerevség mérő teszt modelljét [8]. A modell megoldásához egy peremértékfeladatot
kelett
megoldani.
Ehhez
a
shooting
módszert
használtam,
intervallumfelezéses zérushelykereséssel. A rugóállandót úgy állítom be, hogy a szimulált lehajlott alakot összehasonlítom a modellel, és a hajlítórugó állandóját úgy változtatom, hogy minél jobban megeggyezzen a kettő. Az algoritmus legtöbb esetben azonban nem találta meg a helyes értéket. Hogy ennek az okát kiderítsem, levezettem a hajlító rugó karakterisztikáját. Ebből kiderült, hogy a hajlító nyomaték a hálóosztás harmadik hatványától függ, így finom hálózás esetén minimálisra csökken a hajlítómerevség. Ezt korábbi szimulációk esetén is tapasztaltam, túl fodros lett a kelme. Az irodalomban fellelhető más munkákban is tapasztalható ez a jelenség [2]. Ha túl finom a hálózás a hajlítórugó nem biztosít elég nyomatékot. A hajlítórugó kiváltására bevezettem a torziós rugót [3], amely a görbülettől lineárisan függő nyomatékot biztosít. Hogy a torziós rugó használhatóságát igazoljam, alávetettem a modellel való összehasonlításnak. A módszer 10%-on belüli hibával visszaadja a modellbe beírt hajlítómerevséget. A torziósrugó nagy előnye szenben a hajlítórugóval hogy egy mérhető paraméter, ami független a hálózástól, readásul a mérése rendkívül olcsó és egyszerű. Valamint ha a fontos szempont a sebesség és hajlandóak vagyunk bizonyos megszorításokat betartani a tömeget és a merevséget illetően, az összehasonlító módszer kiadja azt a hajlítómerevséget amivel a textília ugyanúgy hajlik le, mint a valós paraméterekkel hajlana.
31
9. IRODALOMJEGYZÉK [1] Laura Naujokaityté, Eugenija Strazdiené, Comparative Analisys of Fabrics’ Bending Behaviour Testing Methods , Tekstil 56 (6) 343-349 , 2007. [2] Min Tang, Roufeng Tong, Rahul Narain, Chang Meng and Dinesh Manocha, A GPUbased Streaming Algorithm for High-Resolution Cloth Simulation, to appear in the Proceedings of Pacific Graphics 2013. http://gamma.cs.unc.edu/gcloth/ [3] Brad Werth, Multi-Core Simulation of Soft-Body Characters Using Cloth, article at http://www.gamasutra.com/view/feature/132269/sponsored_feature_multicore_.php [4] Shooting method, Wikipedia article, http://en.wikipedia.org/wiki/Shooting_method 2013.october [5] Katona Ádám: Textíliák dinamikus szimulációja térbeli rugórendszer alkalmazásával, BSc. szakdolgozat BME 2013 [6] http://michaelgalloy.com/2013/06/11/cpu-vs-gpu-performance.html 2013.october [7] http://www.realworldtech.com/gt200/3/ 2013.october [8] Piotr Szablewski, Waldemar Kobza, Numerical Analysis of Peirce’s Cantilever Test for the Bending Rigidity of Textiles, FIBRES & TEXTILES in Eastern Europe October / December 2003, Vol. 11, No. 4 (43)
32