Ця стаття не містить . (грудень 2018) |
Граф сцени (англ. scene graph) — загальна структура даних, що зазвичай використовується в застосуваннях для роботи з векторною графікою і в сучасних комп'ютерних іграх, яка впорядковує логічне і часто (але не обов'язково) просторове представлення графічної сцени. Прикладами таких програм є , Adobe Illustrator, AutoCAD, CorelDRAW, OpenSceneGraph, , , X3D, і .
Граф сцени є колекцією вузлів у структурі графу або дерева. Вузол дерева (у загальній структурі дерева графу сцени) може мати багато дочірніх вузлів але найчастіше лише один спільний корінь, і ефекти, що застосовуються до кореня застосовуються і до всіх його дочірніх вузлів; операції виконані з групою автоматично переносять їх ефект на всіх членів групи. У багатьох програмах, ефективним і природним способом здійснювати операції є об'єднання геометричних матриць перетворення (див. також перетворення і матриці) на кожному рівні групування і зв'язування таких матриць разом. Загальним функціоналом, наприклад, є можливість групувати пов'язані фігури/об'єкти у складений об'єкт, який можна переміщувати, перетворювати, виділяти тощо, так само просто як і будь-який окремий об'єкт.
Визначення графа сцени нечітке, оскільки програмісти, які здійснюють його реалізацію в додатках і, зокрема, в індустрії розроблення ігор беруть базові принципи та адаптують їх для застосування в конкретних додатках. Це означає, що немає домовленості про те, яким має бути граф сцени. Термін «граф сцени» іноді плутають з поняттям , оскільки деякі реалізації канваса містять функціональність графу сцени.
Граф сцени в графічних редакторах
У векторних графічних редакторах кожен листовий вузол графа сцени представляє деяку неподільну одиницю документа, зазвичай форму, наприклад, еліпс або шлях Безьє. Хоча форми самі по собі (зокрема, шляхи) можуть бути декомпоновані й далі на такі елементи, як вузли сплайнів, на практиці зручніше вважати, що граф сцени складається з форм, не опускаючись на нижчий рівень представлення.
Іншою корисною концепцією вузла, яка визначається користувачем, є шар. Він діє як прозорий аркуш, на якому може бути розміщено будь-яку кількість форм та їхніх груп. Потім документ стає набором шарів, кожен з яких за необхідності може бути зроблений невидимим, напівпрозорим або заблокований (доступний тільки для читання). Деякі додатки розташовують усі шари у вигляді лінійного списку, тоді як інші підтримують підрівні (тобто шари в шарах будь-якого бажаного рівня вкладеності).
Між шарами й групами може не бути взагалі ніякої внутрішньої відмінності в структурі, оскільки як шари, так і групи є лише вузлами графа сцени. Якщо будуть потрібні відмінності, за допомогою оголошення загальних типів C++ був би описаний загальний клас вузла, а потім успадковані шари і групи як підкласи. Видимість елемента, наприклад, була б властивістю шару, але не обов'язково групи.
Граф сцени в іграх і 3D-додатках
Граф сцени є корисним у сучасних іграх, що використовують 3D-графіку та постійно зростаючі величезні світи та рівні. У таких додатках вузли графа сцени (зазвичай) представляють сутності або об'єкти на сцені.
Наприклад, у грі може бути визначено логічний зв'язок між лицарем і конем, отже, лицар розглядається як розширення коня. У графі сцени був би вузол "кінь" із прив'язаним вузлом "лицар".
Крім опису логічних відносин, граф сцени також може описувати просторові відносини різних сутностей: лицар рухається тривимірним простором разом із конем. У таких великих додатках під час проєктування графа сцени вимоги до пам'яті є визначальними. З цієї причини багато систем із великими графами сцени використовують клонування для скорочення витрат пам'яті та збільшення швидкості. У наведеному вище прикладі кожен лицар - окремий вузол сцени, але його графічне представлення (що складається з 3D-сітки, текстур, матеріалів і шейдерів) піддається клонуванню. Це означає, що дані зберігаються тільки в єдиному екземплярі, на який потім посилаються всі вузли "лицарів" графа сцени. Це дає змогу скоротити вимоги до пам'яті та збільшити швидкість, оскільки під час створення нового вузла "лицар" не потрібно дублювати інформацію про зовнішній вигляд.
Реалізація графа сцени
Найпростіша форма графа сцени використовує масив або структуру даних зв'язний список, а відображення його форм є лише послідовна ітерація вузлів один за одним. Інші загальні операції, як-от визначення, яка форма перетинається з курсором миші (наприклад, у додатках, що базуються на графічному інтерфейсі користувача) також здійснюються шляхом лінійного пошуку. Для невеликих графів сцени цього зазвичай достатньо.
Масштабніші графи сцени призводять до помітного сповільнення лінійних операцій, тож використовуються складніші структури зберігання основних даних, найпопулярніша та найзагальніша форма - це дерево. У цих графах сцени складовий шаблон проєктування часто покликаний створити ієрархічне представлення вузлів угруповання і листових вузлів. Згруповані вузли можуть мати будь-яку кількість прикріплених дочірніх вузлів. Згруповані вузли включають вузли трансформацій і комутаційні вузли. Листові вузли - це вузли, які насправді підлягають візуалізації, або вузли, на яких видно результат будь-якої дії. До них належать об'єкти, спрайти, звуки, джерела освітлення і все, що можна розглядати як таке, що підлягає "рендерингу" в деякому абстрактному сенсі
Операції над графом сцени та пересилання
Застосування операцій до графа сцени вимагає деякого способу пересилання операції, заснованого на типі вузла. Наприклад, у разі візуалізації вузол трансформації групи накопичував би інформацію про трансформацію за допомогою множення матриць, зміщення векторів, кватерніонів або кутів Ейлера. Після чого листовий вузол відправляє об'єкт на візуалізацію. У деяких реалізаціях візуалізація може здійснюватися безпосередньо, за допомогою використовуваного API візуалізації - такого, як DirectX або OpenGL. Але, оскільки API використовуваної реалізації зазвичай призводить до складнощів у перенесенні на інші платформи, можна розділяти граф сцени і систему візуалізації. Щоб здійснити цей вид пересилання, можуть бути застосовані кілька підходів.
В об'єктноорієнтованих мовах, таких як C++, це легко здійснити за допомогою віртуальних функцій, кожна з яких представляє операцію, яку можна застосувати до вузла. Віртуальні функції прості в написанні, але зазвичай немає можливості додавати нові операції без доступу до вихідного коду. Як альтернативу може бути використано шаблон проєктування "Відвідувач". Але цей підхід не позбавлений того самого недоліку через неможливість додавати нові види вузлів.
Інші методи використовують RTTI (Run-Time Type Information, динамічна ідентифікація типу). Операція може бути виконана у вигляді класу, який передається в поточний вузол; потім він запитує інформацію про тип вузла з використанням RTTI і здійснює пошук коректної операції в масиві функцій зворотного виклику або функторів. Це вимагає того, щоб асоціативний масив типів функцій зворотного виклику або функторів було ініціалізовано під час виконання програми, але надає більшу гнучкість, швидкість і розширюваність. Існують різновиди цих методів, і нові методи можуть пропонувати додаткові переваги. Одним із таких варіантів є перебудова графа сцени під час кожної з виконуваних операцій. Це призводить до зниження швидкості та створення добре оптимізованого графа сцени. Це показує, що хороша реалізація графа сцени сильно залежить від програми, в якій він використовується.
Стандарти
PHIGS
був першою комерційною специфікацією графу сцени, і став стандартом ANSI в 1988. Розрізнені реалізації були надані виробниками обладнання на Unix. була першою комерційною бібліотекою, що надавала функціонал графу сцени. Вона дозволяла виконувати низькорівневі 2D і 3D інтерфейси в 1991. Згодом, Silicon Graphics випустила 1.0 (1992), що було збіркою графу сцени поверх програмного інтерфейсу IRIS GL 3D API. За нею слідувала в 1994, переносний граф сцени на базі OpenGL.
X3D
X3D є безоплатним відкритим стандартом формату файлів і архітектури програм часу виконання для представлення і передачі 3D сцен і об'єктів на основі XML. Це міжнародний ISO-одобрений стандарт, який надає структуровану систему для збереження, відкриття і програвання вмісту з графікою реального часу вбудованою в застосування, і все це на базі відкритої архітектури, аби надати підтримку великій кількості доменів і сценаріїв користувачів.
Посилання
-
- Aviatrix3D [ 1 квітня 2004 у Wayback Machine.]
- OpenSceneGraph [ 4 квітня 2009 у Wayback Machine.]
- OSG.JS [Архівовано 16 березня 2013 у WebCite] Javascript Implementation of OpenSceneGraph
- Visualization Library
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2018 Graf sceni angl scene graph zagalna struktura danih sho zazvichaj vikoristovuyetsya v zastosuvannyah dlya roboti z vektornoyu grafikoyu i v suchasnih komp yuternih igrah yaka vporyadkovuye logichne i chasto ale ne obov yazkovo prostorove predstavlennya grafichnoyi sceni Prikladami takih program ye Adobe Illustrator AutoCAD CorelDRAW OpenSceneGraph X3D i Graf sceni ye kolekciyeyu vuzliv u strukturi grafu abo dereva Vuzol dereva u zagalnij strukturi dereva grafu sceni mozhe mati bagato dochirnih vuzliv ale najchastishe lishe odin spilnij korin i efekti sho zastosovuyutsya do korenya zastosovuyutsya i do vsih jogo dochirnih vuzliv operaciyi vikonani z grupoyu avtomatichno perenosyat yih efekt na vsih chleniv grupi U bagatoh programah efektivnim i prirodnim sposobom zdijsnyuvati operaciyi ye ob yednannya geometrichnih matric peretvorennya div takozh peretvorennya i matrici na kozhnomu rivni grupuvannya i zv yazuvannya takih matric razom Zagalnim funkcionalom napriklad ye mozhlivist grupuvati pov yazani figuri ob yekti u skladenij ob yekt yakij mozhna peremishuvati peretvoryuvati vidilyati tosho tak samo prosto yak i bud yakij okremij ob yekt Viznachennya grafa sceni nechitke oskilki programisti yaki zdijsnyuyut jogo realizaciyu v dodatkah i zokrema v industriyi rozroblennya igor berut bazovi principi ta adaptuyut yih dlya zastosuvannya v konkretnih dodatkah Ce oznachaye sho nemaye domovlenosti pro te yakim maye buti graf sceni Termin graf sceni inodi plutayut z ponyattyam oskilki deyaki realizaciyi kanvasa mistyat funkcionalnist grafu sceni Graf sceni v grafichnih redaktorahU vektornih grafichnih redaktorah kozhen listovij vuzol grafa sceni predstavlyaye deyaku nepodilnu odinicyu dokumenta zazvichaj formu napriklad elips abo shlyah Bezye Hocha formi sami po sobi zokrema shlyahi mozhut buti dekomponovani j dali na taki elementi yak vuzli splajniv na praktici zruchnishe vvazhati sho graf sceni skladayetsya z form ne opuskayuchis na nizhchij riven predstavlennya Inshoyu korisnoyu koncepciyeyu vuzla yaka viznachayetsya koristuvachem ye shar Vin diye yak prozorij arkush na yakomu mozhe buti rozmisheno bud yaku kilkist form ta yihnih grup Potim dokument staye naborom shariv kozhen z yakih za neobhidnosti mozhe buti zroblenij nevidimim napivprozorim abo zablokovanij dostupnij tilki dlya chitannya Deyaki dodatki roztashovuyut usi shari u viglyadi linijnogo spisku todi yak inshi pidtrimuyut pidrivni tobto shari v sharah bud yakogo bazhanogo rivnya vkladenosti Mizh sharami j grupami mozhe ne buti vzagali niyakoyi vnutrishnoyi vidminnosti v strukturi oskilki yak shari tak i grupi ye lishe vuzlami grafa sceni Yaksho budut potribni vidminnosti za dopomogoyu ogoloshennya zagalnih tipiv C buv bi opisanij zagalnij klas vuzla a potim uspadkovani shari i grupi yak pidklasi Vidimist elementa napriklad bula b vlastivistyu sharu ale ne obov yazkovo grupi Graf sceni v igrah i 3D dodatkahGraf sceni ye korisnim u suchasnih igrah sho vikoristovuyut 3D grafiku ta postijno zrostayuchi velichezni sviti ta rivni U takih dodatkah vuzli grafa sceni zazvichaj predstavlyayut sutnosti abo ob yekti na sceni Napriklad u gri mozhe buti viznacheno logichnij zv yazok mizh licarem i konem otzhe licar rozglyadayetsya yak rozshirennya konya U grafi sceni buv bi vuzol kin iz priv yazanim vuzlom licar Krim opisu logichnih vidnosin graf sceni takozh mozhe opisuvati prostorovi vidnosini riznih sutnostej licar ruhayetsya trivimirnim prostorom razom iz konem U takih velikih dodatkah pid chas proyektuvannya grafa sceni vimogi do pam yati ye viznachalnimi Z ciyeyi prichini bagato sistem iz velikimi grafami sceni vikoristovuyut klonuvannya dlya skorochennya vitrat pam yati ta zbilshennya shvidkosti U navedenomu vishe prikladi kozhen licar okremij vuzol sceni ale jogo grafichne predstavlennya sho skladayetsya z 3D sitki tekstur materialiv i shejderiv piddayetsya klonuvannyu Ce oznachaye sho dani zberigayutsya tilki v yedinomu ekzemplyari na yakij potim posilayutsya vsi vuzli licariv grafa sceni Ce daye zmogu skorotiti vimogi do pam yati ta zbilshiti shvidkist oskilki pid chas stvorennya novogo vuzla licar ne potribno dublyuvati informaciyu pro zovnishnij viglyad Realizaciya grafa sceniNajprostisha forma grafa sceni vikoristovuye masiv abo strukturu danih zv yaznij spisok a vidobrazhennya jogo form ye lishe poslidovna iteraciya vuzliv odin za odnim Inshi zagalni operaciyi yak ot viznachennya yaka forma peretinayetsya z kursorom mishi napriklad u dodatkah sho bazuyutsya na grafichnomu interfejsi koristuvacha takozh zdijsnyuyutsya shlyahom linijnogo poshuku Dlya nevelikih grafiv sceni cogo zazvichaj dostatno Masshtabnishi grafi sceni prizvodyat do pomitnogo spovilnennya linijnih operacij tozh vikoristovuyutsya skladnishi strukturi zberigannya osnovnih danih najpopulyarnisha ta najzagalnisha forma ce derevo U cih grafah sceni skladovij shablon proyektuvannya chasto poklikanij stvoriti iyerarhichne predstavlennya vuzliv ugrupovannya i listovih vuzliv Zgrupovani vuzli mozhut mati bud yaku kilkist prikriplenih dochirnih vuzliv Zgrupovani vuzli vklyuchayut vuzli transformacij i komutacijni vuzli Listovi vuzli ce vuzli yaki naspravdi pidlyagayut vizualizaciyi abo vuzli na yakih vidno rezultat bud yakoyi diyi Do nih nalezhat ob yekti sprajti zvuki dzherela osvitlennya i vse sho mozhna rozglyadati yak take sho pidlyagaye renderingu v deyakomu abstraktnomu sensi Operaciyi nad grafom sceni ta peresilannya Zastosuvannya operacij do grafa sceni vimagaye deyakogo sposobu peresilannya operaciyi zasnovanogo na tipi vuzla Napriklad u razi vizualizaciyi vuzol transformaciyi grupi nakopichuvav bi informaciyu pro transformaciyu za dopomogoyu mnozhennya matric zmishennya vektoriv kvaternioniv abo kutiv Ejlera Pislya chogo listovij vuzol vidpravlyaye ob yekt na vizualizaciyu U deyakih realizaciyah vizualizaciya mozhe zdijsnyuvatisya bezposeredno za dopomogoyu vikoristovuvanogo API vizualizaciyi takogo yak DirectX abo OpenGL Ale oskilki API vikoristovuvanoyi realizaciyi zazvichaj prizvodit do skladnoshiv u perenesenni na inshi platformi mozhna rozdilyati graf sceni i sistemu vizualizaciyi Shob zdijsniti cej vid peresilannya mozhut buti zastosovani kilka pidhodiv V ob yektnooriyentovanih movah takih yak C ce legko zdijsniti za dopomogoyu virtualnih funkcij kozhna z yakih predstavlyaye operaciyu yaku mozhna zastosuvati do vuzla Virtualni funkciyi prosti v napisanni ale zazvichaj nemaye mozhlivosti dodavati novi operaciyi bez dostupu do vihidnogo kodu Yak alternativu mozhe buti vikoristano shablon proyektuvannya Vidviduvach Ale cej pidhid ne pozbavlenij togo samogo nedoliku cherez nemozhlivist dodavati novi vidi vuzliv Inshi metodi vikoristovuyut RTTI Run Time Type Information dinamichna identifikaciya tipu Operaciya mozhe buti vikonana u viglyadi klasu yakij peredayetsya v potochnij vuzol potim vin zapituye informaciyu pro tip vuzla z vikoristannyam RTTI i zdijsnyuye poshuk korektnoyi operaciyi v masivi funkcij zvorotnogo vikliku abo funktoriv Ce vimagaye togo shob asociativnij masiv tipiv funkcij zvorotnogo vikliku abo funktoriv bulo inicializovano pid chas vikonannya programi ale nadaye bilshu gnuchkist shvidkist i rozshiryuvanist Isnuyut riznovidi cih metodiv i novi metodi mozhut proponuvati dodatkovi perevagi Odnim iz takih variantiv ye perebudova grafa sceni pid chas kozhnoyi z vikonuvanih operacij Ce prizvodit do znizhennya shvidkosti ta stvorennya dobre optimizovanogo grafa sceni Ce pokazuye sho horosha realizaciya grafa sceni silno zalezhit vid programi v yakij vin vikoristovuyetsya StandartiPHIGS buv pershoyu komercijnoyu specifikaciyeyu grafu sceni i stav standartom ANSI v 1988 Rozrizneni realizaciyi buli nadani virobnikami obladnannya na Unix bula pershoyu komercijnoyu bibliotekoyu sho nadavala funkcional grafu sceni Vona dozvolyala vikonuvati nizkorivnevi 2D i 3D interfejsi v 1991 Zgodom Silicon Graphics vipustila 1 0 1992 sho bulo zbirkoyu grafu sceni poverh programnogo interfejsu IRIS GL 3D API Za neyu sliduvala v 1994 perenosnij graf sceni na bazi OpenGL X3D X3D ye bezoplatnim vidkritim standartom formatu fajliv i arhitekturi program chasu vikonannya dlya predstavlennya i peredachi 3D scen i ob yektiv na osnovi XML Ce mizhnarodnij ISO odobrenij standart yakij nadaye strukturovanu sistemu dlya zberezhennya vidkrittya i progravannya vmistu z grafikoyu realnogo chasu vbudovanoyu v zastosuvannya i vse ce na bazi vidkritoyi arhitekturi abi nadati pidtrimku velikij kilkosti domeniv i scenariyiv koristuvachiv PosilannyaAviatrix3D 1 kvitnya 2004 u Wayback Machine OpenSceneGraph 4 kvitnya 2009 u Wayback Machine OSG JS Arhivovano 16 bereznya 2013 u WebCite Javascript Implementation of OpenSceneGraph Visualization Library