Кіріспе
[[Файл:Полигондық торды өңдеу кітабының мұқабасы.jpg|thumb|right| «Полигондық торды өңдеу» кітабы, Марио Ботч және авторлар тобының еңбегі, Геометриялық өңдеу тақырыбы бойынша оқулық. Геометриялық өңдеу – SIGGRAPH, компьютерлік графика саласындағы жетекші академиялық конференция, сондай-ақ Геометриялық өңдеу симпозиумының негізгі тақырыбы болып табылады.
Геометриялық өңдеу өмірлік цикл ретінде
thumb|Бұрыштық ақау әдісін қолдану арқылы, әр төбесінде кактустың торының Гаусс қисықтығын көрсету. Геометриялық өңдеуге әдетте 2D немесе 3D нысандармен жұмыс істеу кіреді, бірақ нысан кез келген өлшемдегі кеңістікте болуы мүмкін. Нысанды өңдеу оның өмірлік циклі деп аталатын үш кезеңнен тұрады. "Туған" кезде нысанды үш әдістің бірі арқылы құруға болады: модельдеу, математикалық өрнектеу немесе сканерлеу. Нысан құрылғаннан кейін, оны цикл бойынша қайта-қайта талдауға және өңдеуге болады. Бұл әдетте нысан нүктелері арасындағы қашықтық, нысанның тегістігі немесе оның Эйлер сипаттамасы сияқты әртүрлі өлшемдерді алуды қамтиды. Өңдеу шуды жою, деформациялау немесе қатаң түрлендіруді қамтуы мүмкін. Нысанның "өмірінің" соңғы кезеңінде ол қолданылады. Мысалы, оны көрермен ойын немесе фильмде көрсетілетін актив ретінде пайдалануы мүмкін. Нысанның өмірінің соңы, сондай-ақ, нысанның белгілі бір критерийлерге сәйкес келуіне қатысты шешіммен анықталуы мүмкін. Немесе оны 3D-басып шығару немесе лазерлік кесу сияқты әдістер арқылы нақты әлемде жасауға болады.
Пішіннің нақты бейнесі
Басқа пішіндер сияқты, геометрияны өңдеуде қолданылатын пішіндердің де геометриясы мен топологиясына қатысты қасиеттері болады. Пішіннің геометриясы пішін нүктелерінің кеңістіктегі орнына, жанамаларына, нормалдарына және қисықтығына қатысты. Сондай-ақ, пішін қандай өлшемде өмір сүретіні де (мысалы, 2D немесе 3D) оған жатады. Пішіннің топологиясы – пішінге тегіс түрлендірулер қолданғаннан кейін де өзгермейтін қасиеттер жиынтығы. Бұл пішіндегі тесіктер мен шекаралар саны, сондай-ақ пішіннің бағытталуы сияқты өлшемдерге қатысты. Бағытталуы жоқ пішіннің бір мысалы – Мобиус жолағы. Компьютердегі барлық нәрсе дискретті болуы керек. Геометрияны өңдеудегі пішіндер әдетте үшбұрышты торлар түрінде бейнеленеді, оларды граф ретінде қарастыруға болады. Графтағы әрбір түйін – позициясы бар (әдетте 3D кеңістікте) нүкте. Бұл пішіннің геометриясын кодтайды. Бағытталған қабырғалар осы түйіндерді үшбұрыштарға біріктіреді, олар оң қол ережесі бойынша бағытталған және нормаль деп аталады. Әрбір үшбұрыш тордың бетін құрайды. Бұл комбинаторлық сипатқа ие және пішіннің топологиясын кодтайды. Үшбұрыштардан басқа, пішінды көрсету үшін көпбұрышты торлардың да кеңірек класын пайдалануға болады. Прогрессивті торлар сияқты жетілдірілген бейнелеулер, пішіннің жалпы көрінісімен бірге, оны жақсартуға немесе жоғары ажыратылымды бейнелеуге мүмкіндік беретін түрлендірулер тізбегін кодтайды. Бұл торлар геоморфтар, прогрестік тарату, торды қысу және таңдаулы жетілдіру сияқты әртүрлі қолдануларда пайдалы. Сол жақтағы суретте 274x274 пиксельдік Стэнфорд қоянының торы көрсетілген. Пішіндер әдетте тор ретінде бейнеленеді, пішіннің контурларын анықтайтын көпбұрыштар жиынтығы.
Эйлер сипаты
3D пішіннің ерекше маңызды қасиеті – оның Эйлер сипаттамасы, оны балама түрде оның туысы арқылы анықтауға болады. Үнемі жағдайдағы формуласы: , мұнда – байланысты компоненттердің саны, – тесіктердің саны (мысалы, донаттағы тесіктер, торусқа қараңыз), ал – беттің шекарасының байланысты компоненттерінің саны. Мұның нақты мысалы – шалбардың торлы моделі. Онда бір байланысты компонент, 0 тесік және шекараның 3 байланысты компоненті бар (белдеу және екі аяқ тесігі). Сондықтан, бұл жағдайда Эйлер сипаттамасы 1-ге тең. Бұл концепцияны дискретті әлемге енгізу үшін тордың Эйлер сипаттамасы оның төбелері, қабырғалары және жақтары арқылы есептеледі. суретБұл суретте Эйлер сипаттамасы 1-ге тең шалбардың торлы моделі көрсетілген. Бұл сипаттаманы есептеу үшін келесі теңдеу қолданылады: 2c – 2h – b. Тордың 1 байланысқан компоненті, 0 топологиялық тесігі және 3 шекарасы бар (белдеу тесігі және әрбір аяқ тесігі): 2 – 0 – 3 = 1.
Poisson-тың беткі нүктелерден торға дейінгі қалпына келтіруі
thumb 339x339px Үшбұрышты тор нүктелік бұлттан құралады. Кейде пішіндер тек "нүктелік бұлттар" ретінде басталады, яғни пішіннің бетінен алынған нүктелер жиынтығы. Көбінесе, мұндай нүктелік бұлттарды торларға түрлендіру қажет болады. Беттегі нүктелерді торға айналдыру үшін Пуассон реконструкциясы стратегиясын қолдануға болады. Бұл әдіс бойынша, пішіннің бетіндегі кеңістіктегі нүктелерді анықтайтын индикатор функциясын, алынған үлгілерден есептеуге болады. Негізгі идея – индикатор функциясының градиенті барлық жерде 0-ге тең, бірақ үлгіленген нүктелерде ол ішкі бет нормасына тең. Егер үлгіленген нүктелер жиынтығы , кеңістіктегі әрбір нүкте , ал сол нүктедегі сәйкес нормаль болса, онда индикатор функциясының градиенті былай анықталады:
Depending on how a shape is initialized or "birthed," the shape might exist only as a nebula of sampled points that represent its surface in space. To transform the surface points into a mesh, the Poisson reconstruction strategy can be employed. This method states that the indicator function, a function that determines which points in space belong to the surface of the shape, can actually be computed from the sampled points. The key concept is that gradient of the indicator function is 0 everywhere, except at the sampled points, where it is equal to the inward surface normal. More formally, suppose the collection of sampled points from the surface is denoted by , each point in the space by , and the corresponding normal at that point by Then the gradient of the indicator function is defined as:
Реконструкция міндеті осылайша вариациялық проблемаға айналады. Беттің индикатор функциясын табу үшін, векторлық өрісін ең аз қылуға мүмкіндік беретін функцияны табу керек. Вариациялық проблема ретінде, минимализаторды Пуассон теңдеуінің шешімі деп қарастыруға болады. Содан кейін, оңтайлы түрлендіру әрбір және оның проекциясы арасындағы айырмашылық негізінде есептеледі. Келесі итерацияда проекциялар, алдыңғы түрлендіруді үлгілерге қолдану нәтижесіне сүйене отырып есептеледі. Бұл процесс конвергенцияға жеткенше қайталанады.
Параметрлеу
Кейде біз 3D бетін жазық жазықтыққа түсіруіміз қажет. Бұл процесс параметрлеу деп аталады. Мақсаты – беттің бұрмалануын азайту үшін, оны u және v координаттарына бейнелеуге болатын координаттарды табу. Осылайша, параметрлеуді оптимизациялау мәселесі ретінде қарастыруға болады. Тор параметрлеудің маңызды қолданыстарының бірі – текстуралық бейнелеу.
Массалық пружиналар әдісі
thumb|378x378px|Tutte Embedding қоңыздың бүйірінде тегіс емес параметрлеуді көрсетеді. Карталау процесінде туындайтын бұрмалауды өлшеудің бір жолы – 2D картадағы қабырғалардың ұзындығын бастапқы 3D беттегі ұзындықтарымен салыстыру. Формальды түрде, мақсатты функцияны былай жазуға болады:
мұнда – тор қабырғаларының жиыны, ал – төбелер жиыны. Дегенмен, осы мақсатты функцияны оңтайландыру нәтижесінде барлық төбелерді uv координаттарында бір төбеге бейімдейтін шешім шығады. Графтар теориясынан алынған идеяны пайдалана отырып, біз Tutte картасын қолданамыз және тордың шекаралық төбелерін бірлік шеңберге немесе басқа дөңгелек көпбұрышқа шектейміз. Осылай істеу карталау қолданылғанда төбелердің бір төбеге жиырылып кетуіне кедерес жасайды. Шекаралық емес төбелер одан кейін көршілерінің барицентрлік интерполяциясы бойынша орналастырылады. Алайда, Tutte картасы қабырға ұзындықтарын теңдетуге тырысқандықтан, күшті бұрмаланудан әлі де зардап шегеді, сондықтан нақты беттік тордағы үшбұрыштардың өлшемдерін дұрыс ескере алмайды.
Деформация
thumb 394x394px Бұл мүмкіндігінше қатаң деформацияның мысалы. Деформация – белгілі бір бастапқы пішіннің жаңа пішінге өзгеруімен айналысады. Әдетте, мұндай өзгерулер үздіксіз болады және пішіннің топологиясын өзгерте алмайды. Қазіргі заманғы торға негізделген пішін деформациялау әдістері, тұтқалардағы (тордағы таңдалған төбелер немесе аймақтар) пайдаланушының деформация шектеулерін орындайды және осы тұтқалық деформацияларды пішіннің қалған бөлігіне тегіс таратып, ешқандай бөлшектерді жоймай немесе бұрмаламайды. Интерактивті деформацияның ең көп таралған түрлері – нүктелік, қаңқалық және қоршаулық. Нүктелік деформацияда пайдаланушы пішіндегі тұтқалар деп аталатын кішкентай нүктелер жиынына өзгерулер қолдана алады. Қаңқалық деформация пішін үшін қаңқаны анықтайды, бұл пайдаланушыға сүйектерді жылжытуға және буындарды бұруға мүмкіндік береді. Қоршаулық деформацияда пішіннің толық немесе бір бөлігін қоршап тұратын қоршау салу қажет, сондықтан пайдаланушы қоршаудағы нүктелерді өңдегенде, оның ішкі көлемі сәйкесінше өзгереді.
Нүктелік деформация
Тұтқалар деформацияға шектеулердің сирек жиынтығын ұсынады: пайдаланушы бір нүктені жылжытқанда, қалғандары өз орнында қалуы керек. Тынығу беті, белгілі бір кеңістікке енгізілген, картамен сипатталуы мүмкін, мұнда – 2D параметрлік домен. Сол сияқты, трансформацияланған бет үшін де карта қолданылуы мүмкін. Идеалды жағдайда, трансформацияланған пішін бастапқы пішінге ең аз бұрмалауды қосуы керек. Бұл бұрмалауды модельдеудің бір жолы – лапласианға негізделген энергиямен орын ауыстырулар. Осы карталарға Лаплас операторын қолдану, нүктенің орны өз маңына қатысты қалай өзгергенін өлшеуге мүмкіндік береді, бұл тұтқаларды тегіс сақтайды. Осылайша, біз азайтуға тырысатын энергияны былай жазуға болады:
Бұл әдіс трансляция бойынша инвариантты болғанымен, бұрылыстарды ескере алмайды. Мүмкіндігінше қатаң деформация схемасы әр тұтқаға *i* қатаң трансформацияны қолданады, мұнда – бұрылу матрицасы және – трансляция векторы. Өкінішке орай, бұрылыстарды алдын ала білудің жолы жоқ, сондықтан біз орын ауыстыруды азайтатын «ең жақсы» бұрылысты таңдаймыз. Дегенмен, жергілікті бұрылу инварианттылығына қол жеткізу үшін, беттің әрбір нүктесі үшін ең жақсы бұрылысты шығаратын функциясы қажет. Нәтижесінде энергияны және бойынша оңтайландыру қажет:
Айта кетейік, трансляция векторы соңғы мақсатты функцияда жоқ, себебі трансляциялардың градиенті тұрақты.
Ішкі-сыртқы сегменттеу
Көп жағдайда үшбұрышты тордың ішкі жағын сырттан ажырату оңай шаруа емес. Жалпы, берілген бет үшін біз бұл мәселені функцияны анықтау ретінде қарастырамыз, яғни нүкте ішінде болса, функция қайтарады, әйтпесе қайтармайды. Ең қарапайым жағдайда пішін жабық болады. Осы жағдайда, нүкте беттің ішінде ме, сыртында ма, анықтау үшін іздеу нүктесінен кез келген бағытта сәуле жіберіп, оның беттен неше рет өтетінін санауға болады. Егер нүкте беттің сыртында болса, онда сәуле беттен өтуі керек емес (онда ) немесе, әр кірген сайын екі рет өтуі керек, себебі бет шектеулі, сондықтан оған кіретін кез келген сәуле одан шығуы тиіс. Демек, егер сәуле сыртқа шығып жатса, өтулер саны жұп болады. Ал егер нүкте беттің ішінде болса, бұрынғы жағдайға да дәл осы логика қолданылады, бірақ сәуле алғашқы рет шыққанда бір рет кесісуі керек. Мысалы, мақаланың басында келтірілген шалбарды қарастырайық. Бұл торда семантикалық жағынан анықталған ішкі және сыртқы жақтар бар, тіпті бел және аяқтарда тесіктер болса да. Ішкі және сыртқы бөліктерді бөлуді, іздеу нүктесінен әртүрлі санда сәулелерді жіберіп шамалауға болады. Бұл мәселені шешудің қарапайым тәсілі – көптеген сәулелерді кездейсоқ бағытта жіберіп, сәулелердің көпшілігі тақ санда кесіскен жағдайда ғана нүктенің ішкі деп жіктелуі. Бұл санды анықтау үшін, егер біз сәулелер жіберсек, әр сәуледен алынған мәндердің орташасын есептейміз. Сондықтан:
Now, oftentimes we cannot guarantee that the is closed. Take the pair of pants example from the top of this article. This mesh clearly has a semantic inside and outside, despite there being holes at the waist and the legs. thumb|Approximating inside outside segmentation by shooting rays from a query point for varying number of rays. The naive attempt to solve this problem is to shoot many rays in random directions, and classify as being inside if and only if most of the rays intersected an odd number of times. To quantify this, let us say we cast rays, We associate a number which is the average value of from each ray. Therefore:
In the limit of shooting many, many rays, this method handles open meshes, however it in order to become accurate, far too many rays are required for this method to be computationally ideal. Instead, a more robust approach is the Generalized Winding Number. Inspired by the 2D winding number, this approach uses the solid angle at of each triangle in the mesh to determine if is inside or outside. The value of the Generalized Winding Number at , is proportional to the sum of the solid angle contribution from each triangle in the mesh:
For a closed mesh, is equivalent to the characteristic function for the volume represented by Therefore, we say:
Because is a harmonic function, it degrades gracefully, meaning the inside outside segmentation would not change much if we poked holes in a closed mesh. For this reason, the Generalized Winding Number handles open meshes robustly. The boundary between inside and outside smoothly passes over holes in the mesh. In fact, in the limit, the Generalized Winding Number is equivalent to the ray casting method as the number of rays goes to infinity.
Көптеген сәулелерді жібергенде, бұл әдіс ашық торларды өңдей алады, бірақ дәл болуы үшін, бұл әдіс есептеу жағынан тиімді болу үшін тым көп сәулелер қажет. Оның орнына, сенімді тәсіл – Жалпыланған Орау Саны. 2D орау санынан шабыттанған бұл тәсіл, тордың ішінде немесе сыртында екенін анықтау үшін тордағы әрбір үшбұрыштың кеңістіктік бұрышын пайдаланады. нүктесіндегі Жалпыланған Орау Санының мәні, тордағы әрбір үшбұрыштан алынған кеңістіктік бұрыш үлесінің қосындысына пропорционалды:
Now, oftentimes we cannot guarantee that the is closed. Take the pair of pants example from the top of this article. This mesh clearly has a semantic inside and outside, despite there being holes at the waist and the legs. thumb|Approximating inside outside segmentation by shooting rays from a query point for varying number of rays. The naive attempt to solve this problem is to shoot many rays in random directions, and classify as being inside if and only if most of the rays intersected an odd number of times. To quantify this, let us say we cast rays, We associate a number which is the average value of from each ray. Therefore:
In the limit of shooting many, many rays, this method handles open meshes, however it in order to become accurate, far too many rays are required for this method to be computationally ideal. Instead, a more robust approach is the Generalized Winding Number. Inspired by the 2D winding number, this approach uses the solid angle at of each triangle in the mesh to determine if is inside or outside. The value of the Generalized Winding Number at , is proportional to the sum of the solid angle contribution from each triangle in the mesh:
For a closed mesh, is equivalent to the characteristic function for the volume represented by Therefore, we say:
Because is a harmonic function, it degrades gracefully, meaning the inside outside segmentation would not change much if we poked holes in a closed mesh. For this reason, the Generalized Winding Number handles open meshes robustly. The boundary between inside and outside smoothly passes over holes in the mesh. In fact, in the limit, the Generalized Winding Number is equivalent to the ray casting method as the number of rays goes to infinity.
Жабық тор үшін, ол көлемді сипаттайтын функцияға тең. Сондықтан, былай дейміз:
Now, oftentimes we cannot guarantee that the is closed. Take the pair of pants example from the top of this article. This mesh clearly has a semantic inside and outside, despite there being holes at the waist and the legs. thumb|Approximating inside outside segmentation by shooting rays from a query point for varying number of rays. The naive attempt to solve this problem is to shoot many rays in random directions, and classify as being inside if and only if most of the rays intersected an odd number of times. To quantify this, let us say we cast rays, We associate a number which is the average value of from each ray. Therefore:
In the limit of shooting many, many rays, this method handles open meshes, however it in order to become accurate, far too many rays are required for this method to be computationally ideal. Instead, a more robust approach is the Generalized Winding Number. Inspired by the 2D winding number, this approach uses the solid angle at of each triangle in the mesh to determine if is inside or outside. The value of the Generalized Winding Number at , is proportional to the sum of the solid angle contribution from each triangle in the mesh:
For a closed mesh, is equivalent to the characteristic function for the volume represented by Therefore, we say:
Because is a harmonic function, it degrades gracefully, meaning the inside outside segmentation would not change much if we poked holes in a closed mesh. For this reason, the Generalized Winding Number handles open meshes robustly. The boundary between inside and outside smoothly passes over holes in the mesh. In fact, in the limit, the Generalized Winding Number is equivalent to the ray casting method as the number of rays goes to infinity.
Функция гармоникалық болғандықтан, ол жақсы төмендейді, яғни жабық торға тесіктер салсақ, ішкі және сыртқы бөліктердің ажырауы көп өзгермейді. Осы себепті Жалпыланған Орау Саны ашық торларды сенімді түрде өңдей алады. Ішкі және сыртқы шекара тордағы тесіктерден тегіс өтеді. Шындығында, шексіз көп сәулелер жібергенде, Жалпыланған Орау Саны сәуле жіберу әдісімен бірдей болады.
Now, oftentimes we cannot guarantee that the is closed. Take the pair of pants example from the top of this article. This mesh clearly has a semantic inside and outside, despite there being holes at the waist and the legs. thumb|Approximating inside outside segmentation by shooting rays from a query point for varying number of rays. The naive attempt to solve this problem is to shoot many rays in random directions, and classify as being inside if and only if most of the rays intersected an odd number of times. To quantify this, let us say we cast rays, We associate a number which is the average value of from each ray. Therefore:
In the limit of shooting many, many rays, this method handles open meshes, however it in order to become accurate, far too many rays are required for this method to be computationally ideal. Instead, a more robust approach is the Generalized Winding Number. Inspired by the 2D winding number, this approach uses the solid angle at of each triangle in the mesh to determine if is inside or outside. The value of the Generalized Winding Number at , is proportional to the sum of the solid angle contribution from each triangle in the mesh:
For a closed mesh, is equivalent to the characteristic function for the volume represented by Therefore, we say:
Because is a harmonic function, it degrades gracefully, meaning the inside outside segmentation would not change much if we poked holes in a closed mesh. For this reason, the Generalized Winding Number handles open meshes robustly. The boundary between inside and outside smoothly passes over holes in the mesh. In fact, in the limit, the Generalized Winding Number is equivalent to the ray casting method as the number of rays goes to infinity.