Кіріспе
Сценалық график – векторлық графикалық редакторлар мен қазіргі заманғы компьютерлік ойындарда кеңінен қолданылатын, графикалық көріністің логикалық және көбінесе кеңістіктік бейнелеуін ұйымдастыратын құрылым. Ол граф немесе ағаш тәрізді құрылымдағы түйіндер жиынтығы болып табылады. Ағаш түйіні көптеген бағынышты түйіндерге ие болуы мүмкін, бірақ тек бір ғана басты түйіні болады, ал басты түйінге қолданылған әсер барлық бағынышты түйіндерге таралады; топта орындалған операция оның барлық элементтеріне автоматты түрде таратылады. Көптеген бағдарламаларда геометриялық түрлендіру матрицасын (түрлендіру және матрица қараңыз) әрбір топ деңгейінде орналастыру және мұндай матрицаларды тізбектеу – мұндай операцияларды өңдеудің тиімді және табиғи жолы. Мысалы, жиі кездесетін мүмкіндік – байланысты пішіндер мен нысандарды бірлескен нысанға біріктіру, осыдан кейін оны жеке нысан сияқты оңай басқаруға болады.
Графикті өңдеу құралдарындағы сахналық графиктер
Векторлық графикалық редакциялау кезінде сахналық графтың әрбір жапырақ түйіні құжаттың атомдық бірлігін, әдетте эллипс немесе Безиер жолы сияқты пішінды білдіреді. Пішіндердің өзі (әсіресе жолдар) сплайн түйіндері сияқты түйіндерге жіктелуі мүмкін болса да, сахналық графты төменгі деңгейдегі бейнелеуге емес, пішіндерден құралған деп санау ыңғайлы. Тағы бір пайдалы және қолданушымен басқарылатын түйін ұғымы – қабат. Қабат – кез келген пішіндер мен пішін топтарын орналастыруға болатын мөлдір парақ сияқты. Содан кейін құжат қабаттар жиынтығына айналады, олардың кез келгенін оңай жасыруға, сөндіруге немесе құлыптауға болады (тек оқуға арналған режимде жасау). Кейбір қолданбалар барлық қабаттарды тізім бойынша орналастырады, ал басқалары қабаттардың ішінде қабаттарды кез келген тереңдікке дейін қолдайды. Ішкі құрылымында қабаттар мен топтар арасында ешқандай нақты айырмашылық болмауы мүмкін, себебі олар екеуі де сахналық графтың түйіндері. Егер айырмашылықтар қажет болса, C++ тілінде жалпы типті декларация жасау үшін жалпы түйін класын құру және содан кейін қабаттар мен топтарды оның қосалқы кластары ретінде жасау мүмкін. Мысалы, көріну мүшесі қабаттың қасиеті болар, бірақ міндетті түрде топтың қасиеті болмайды.
Ойын және 3D қолданбалардағы сахналық графиктер
Сценалық графиктер 3D графикті және үлкен әлемдерді немесе деңгейлерді пайдаланатын заманауи ойындар үшін пайдалы. Мұндай қолданбаларда көрініс графигіндегі түйіндер (әдетте) көріністегі нысандарды немесе объектілерді көрсетеді. Мысалы, ойын рыцарь мен жылқы арасындағы логикалық қатынасты анықтауы мүмкін, сондықтан рыцарь жылқының бір бөлігі болып саналады. Сценалық графикте "жылқы" түйіні болады, оған "рыцарь" түйіні қосылады. Сценалық график әр түрлі нысандардың кеңістіктік, сондай-ақ логикалық байланысын да сипаттай алады: рыцарь жылқы қозғалғанда 3D кеңістікте қозғалады. Осы үлкен қолданбаларда сахналық графикті жобалау кезінде жад талаптары маңызды мәселе болып табылады. Осы себепті көптеген үлкен сахналық графикалық жүйелер жад шығынын азайту және жылдамдықты арттыру үшін геометриялық инстанцияларды қолданады. Жоғарыдағы мысалда әр рыцарь жеке сахналық түйін болып табылады, бірақ рыцарьдың графикалық бейнесі (3D тордан, текстуралардан, материалдардан және шейдерлерден тұрады) инстанцияланады. Бұл деректердің тек бір ғана көшірмесі сақталады, содан кейін ол көрініс графигіндегі кез келген "рыцарь" түйіндерімен сілтемеленеді. Бұл жад бюджетін азайтуға және жылдамдықты арттыруға мүмкіндік береді, өйткені жаңа рыцарь түйіні құрылған кезде графикалық деректерді қайталау қажет емес.
Сценалық графикті іске асыру
Сценалық графиктің ең қарапайым түрі массив немесе тізбекті тізім дерек құрылымын пайдаланады, ал оның нысандарын көрсету – түйіндерді бірінен соң бірі сызықтық түрде қарап шығумен жүзеге асырылады. Тышқан курсоры қай нысанмен қиылысатынын тексеру сияқты басқа да көп қолданылатын операциялар да сызықтық іздеу арқылы жасалады. Кішкентай сценалық графиктер үшін мұндай тәсіл жеткілікті болады.
Сценалық графиктік операциялар және диспетчерлік
Сценалық графқа операция қолдану үшін операцияны түйіннің типіне қарай жіберудің бір жолы қажет. Мысалы, көрсету (render) операциясында трансформация тобының түйіні өзінің трансформациясын матрицалық көбейту, векторлық ығыстыру, кватерниондар немесе Эйлер бұрыштары арқылы жинақтайды. Содан кейін жапырақ түйіні объектіні көрсету үшін рендерге (renderer) жібереді. Кейбір іске асырулар объектіні тікелей көрсетуі мүмкін, бұл DirectX немесе OpenGL сияқты негізгі көрсету API-ін шақырады. Бірақ көрсету API-інің негізгі іске асырылуы көбінесе портативті болмайтындықтан, сценалық граф пен көрсету жүйелерін бөліп қарастыруға болады. Мұндай жіберуді іске асыру үшін бірнеше әртүрлі тәсілдер бар. C++ сияқты объектіге бағытталған тілдерде бұл виртуалды функциялар арқылы оңай жүзеге асырылады, мұнда әрқайсысы түйінде орындалатын операцияны білдіреді. Виртуалды функцияларды жазу оңай, бірақ бастапқы кодқа қол жеткізбестен түйіндерге жаңа операцияларды қосу мүмкін емес. Балама ретінде, келуші (visitor) үлгісін қолдануға болады. Жаңа түйін типтерін қосу да қиын болғандықтан, бұл да ұқсас кемшілікке ие. Басқа әдістерге RTTI (Run Time Type Information) қолдану кіреді. Операция ағымдағы түйінге берілетін класс ретінде іске асырылуы мүмкін; содан кейін ол RTTI арқылы түйіннің типін сұрап, кері шақырулар (callbacks) немесе функторлар массивінен дұрыс операцияны іздейді. Бұл типтерді кері шақыруларға немесе функторларға сәйкестендіруді орындау кезінде бастамалауды қажет етеді, бірақ көбірек икемділік, жылдамдық және кеңейтімділік ұсынады. Бұл техникалардың әртүрлі нұсқалары бар, ал жаңа әдістер қосымша артықшылықтар ұсынуы мүмкін. Бір балама – сценалық графты қайта құру, онда сценалық граф орындалған әр операция үшін қайта құрылады. Бұл өте баяу болуы мүмкін, бірақ жоғары сапалы оңтайландырылған сценалық графты құрайды. Бұл жақсы сценалық графты іске асыру оны қолданатын қосымшаға үлкен тәуелді екенін көрсетеді.
Көлденең
Көрініс графтарында операцияларды қолданудың негізгі күші – айшықтаулар болып табылады. Айшықтау әдетте кез келген түйінден басталады (көбінесе көрініс графтың түбірі), операцияны (көбінесе жаңарту және көрсету операциялары бірінен соң бірі қолданылады) қолдану және рекурсивті түрде көрініс графтан (ағаштан) төмен қарай бала түйіндерге дейін, жапырақ түйініне жеткенге дейін жүреді. Осы сәтте көптеген көрініс граф қозғалтқыштары ағашты кері бағытта айшықтап, ұқсас операцияны қолданады. Мысалы, трансформацияларды ескеретін көрсету операциясын қарастырайық: көрініс граф иерархиясын рекурсивті түрде төмен қарай айшықтап өтетін кезде, алдын ала көрсету операциясы шақырылады. Егер түйін трансформация түйіні болса, ол өзінің трансформациясын ағымдағы трансформация матрицасына қосады. Операция түйіннің барлық балаларын аралап болғаннан кейін, ол түйіннің кейін көрсету операциясын шақырады, осылайша трансформация түйіні трансформацияны кері қайтара алады. Бұл әдіс матрицалық көбейтудің қажетті көлемін күрт азайтады. Кейбір көрініс граф операциялары түйіндер басқа тәртіппен айшықталғанда тиімдірек болады – осы себепті кейбір жүйелер көрініс графты қайта құруды, көрініс графты талдауға оңай форматқа немесе ағашқа қайта реттеу үшін іске асырады. Мысалы, 2D жағдайында көрініс графтар әдетте өздерін ағаштың түбір түйінінен бастайды, содан кейін рекурсивті түрде бала түйіндерін салады. Ағаштың жапырақтары ең алдыңғы нысандарды көрсетеді. Салу артқа қарай жүреді, ал жақын нысандар алыстағыларды жабады, сондықтан бұл процеске Суретшінің алгоритмі қолданылады деп айтылады. 3D жүйелерінде, көбінесе тереңдік буферлерін қолданатын болса, ең жақын нысандарды бірінші кезекте салу тиімдірек, себебі алыс нысандарды көбінесе нақты көрсетудің орнына тек тереңдікті тексеру жеткілікті, өйткені олар жақын нысандармен жабылады.
Сценалық графиктер мен шектейтін көлемдер иерархиясы (BVH)
Шектейтін көлем иерархиясы (BVH) көптеген міндеттер үшін пайдалы – тиімді іріктеу және нысандар арасындағы соқтығысуды анықтау жылдамдығын арттыру сияқты. BVH – кеңістіктік құрылым, бірақ геометрияны бөлуге міндетті емес (төмендегі кеңістіктік бөлуді қараңыз). BVH – шектейтін көлемдер ағашы (көбінесе шарлар, оське сәйкес келетін шектейтін қораптар немесе бағытталған шектейтін қораптар). Иерархияның төменгі жағында көлемнің мөлшері бір ғана нысанды тығыз қамтуға жеткілікті (немесе жоғары ажыратымды BVH-да нысанның кіші бөлігі болуы мүмкін). Иерархияға көтерілген сайын, әрбір түйін өзінің көлеміне ие болады, ол өзінің астындағы барлық көлемдерді тығыз қамтиды. Ағаштың түбінде ағаштың барлық көлемдерін қамтитын көлем орналасқан (барлық көрініс). BVH нысандар арасындағы соқтығысуды анықтау жылдамдығын арттыруға көмектеседі. Егер нысанның шектейтін көлемі ағаштағы жоғары орналасқан көлеммен қиылыспаса, онда ол сол түйіннен төменгі кез келген нысанмен қиылыса алмайды (осылайша олардың барлығы тез қабылданады). BVH және сахналық графтар арасында ұқсастықтар бар. Сахналық графты BVH-қа бейімдеуге болады немесе оны BVH-ға айналдыруға болады – егер әрбір түйінге көлем сәйкес келсе немесе иерархиядағы ыңғайлы жерде мақсатты "байлау түйіні" қосылса. Бұл сахналық графтың стандартты көрінісі болмауы мүмкін, бірақ сахналық графқа BVH қосудың пайдасы бар.
Сценалық графиктер мен кеңістіктік бөлік
Ғарыштық бөлу және сахналық графиктерді үйлестірудің тиімді тәсілі – кеңістіктік бөлу деректерін қамтитын сахналық жапырақ түйінін жасау болып табылады. Бұл рендерингтің есептеу тиімділігін арттыруға мүмкіндік береді. Ғарыштық деректер көбінесе статикалық болады және әдетте қозғалмайтын сахна деректерін белгілі бір бөлінген нысанда қамтиды. Кейбір жүйелерде жүйелер мен олардың рендерингісі бөлек болуы мүмкін. Бұл қалыпты жағдай және екі тәсілдің де айқын артықшылықтары жоқ. Атап айтқанда, сахналық графикті кеңістіктік бөлу жүйесінің ішінде орналастыру дұрыс емес, өйткені сахналық график кеңістіктік бөлуге қарағанда жоғары деңгейдегі жүйе ретінде қарастырылуы тиіс. Өте үлкен суреттер немесе орындалу барысында ғана құрылатын сахналық графиктер (мысалы, сәуле іздеу рендеринг бағдарламаларында) топтық түйіндерді автоматтандырылған түрде анықтауды қажет етеді. Мысалы, сәуле іздеуші 3D модельдің сахналық сипаттамасын алып, оның жеке бөліктерін шектеуші қораптарға (немесе шектеуші плиталар деп те аталады) бөліп, ішкі өрнек құрайды. Бұл қораптар сәулелердің қиылысуын тексеруді (көрінуді анықтаудың бір бөлігі ретінде) тиімді жүзеге асыру үшін иерархиялық түрде топтастырылады. Мысалы, көзге жетпейтін топтық қорап өзінің барлық элементтерін тексеруден толығымен бас тарта алады. Ұқсас тиімділік 2D қолданбаларда да қолданылады. Егер пайдаланушы құжатты компьютер экранында көрінетін бөлігі ғана көрінетіндей етіп ұлғайтып, содан кейін оны жылжытса, шектеуші қорапты (немесе осы жағдайда шектеуші тіктөртбұрыш схемасын) пайдаланып, сахналық графиктің қай элементтері көрінетінін және осылайша сурет салу қажеттігін анықтау пайдалы. Қолданбаның сурет салу өнімділігіне байланысты, сахналық графиктің дизайнының үлкен бөлігі рендеринг тиімділігін ескере отырып жасалуы мүмкін. Quake сияқты 3D видео ойындарда көрінуді азайту үшін екілік кеңістіктік бөлу (BSP) ағаштары кеңінен қолданылады. Дегенмен, BSP ағаштарын дизайн сахнасының графигінен есептеуге көп уақыт кетіп, дизайн сахнасының графигі өзгерген жағдайда оларды қайта есептеу қажет, сондықтан деңгейлер көбінесе статикалық болып қалады және динамикалық нысандар кеңістіктік бөлу схемасында көбінесе қарастырылмайды. Тығыз, реттелген нысандар үшін, мысалы, биіктік карталары мен көпбұрышты торлар үшін сахналық графиктер квадрилер мен октрилерді қолдануға бейім, олар 3D шектеуші қорап иерархиясының арнайы түрлері болып табылады. Биіктік картасы өзі бір қорап көлемін алып жатқандықтан, осы қорапты жеке биіктік картасы элементтеріне жеткенше сегізге бөлу (осыдан октридегі 'окт' атауы) тиімді және табиғи. Квадри – бұл жай ғана 2D октри.
СОЛ
PHIGS – алғашқы коммерциялық сахналық график спецификациясы және 1988 жылы ANSI стандарты болды. Unix аппараттық өндірушілері әртүрлі іске асыруларын ұсынды. HOOPS 3D графикалық жүйесі бір бағдарламалық қамтамасыз етуші ұсынған алғашқы коммерциялық көрініс графикалық кітапханасы еді. Ол әртүрлі төменгі деңгейдегі 2D және 3D интерфейстерде жұмыс істеу үшін жасалған, ал алғашқы ірі өндірістік нұсқасы (v3.0) 1991 жылы аяқталды.
СГИ
Silicon Graphics (SGI) 1991 жылы OpenGL Performer немесе көбінесе Performer деп аталатын жүйені шығарды, ол болашақта көптеген SGI өнімдері үшін негізгі сахналық граф жүйесі болды. 1992 жылы SGI IRIS Inventor 1.0-ды шығарды, ол Performer негізінде құрылған жоғары деңгейдегі сахналық граф еді. 1994 жылы Open Inventor пайда болды, ол Performer-дің жаңа нұсқаларының үстіне салынған жоғары деңгейдегі сахналық графтың келесі нұсқасы болды. Қосымша 3D сахналық граф кітапханаларын :Category:3D scenegraph API-ден табуға болады.
X3D
X3D — XML пайдаланып 3D көріністер мен нысандарды көрсету және таратуға арналған, авторлық төлемсіз ашық стандарттардағы файл форматы және жұмыс іске қосылу архитектурасы. Бұл ISO ратификациялаған стандарт, ол қолданбаларға енгізілген нақты уақыт графикалық мазмұнды сақтау, алу және ойнату жүйесін қамтамасыз етеді, бәрі де кең ауқымды салалар мен пайдаланушы сценарийлерін қолдайтын ашық архитектурада.
Мақалалар
Бар Зев, Ави. "Сценалық графтар: Өткен, қазіргі және болашақ"
Кэри, Рикк және Белл, Гэвин (1997). "Түсіндірмелі VRML 97 анықтамалық нұсқаулығы"
Carey, Rikk and Bell, Gavin (1997). "The Annotated VRML 97 Reference Manual"
Хелман, Джим; Рольф, Джон (1994). "IRIS Performer: Нақты уақыт 3D графикасы үшін жоғары өнімділікті көппроцессорлық құралдар жиынтығы"
PEXTimes – "Ресми емес түрде, PHIGS-ті X-ке кеңейту. Ресми түрде PEX аббревиатура емес." Штраус, Пол (1993). "IRIS Inventor, 3D графикалық құралдар жиынтығы"
PEXTimes – "Unofficially, the PHIGS Extension to X. Officially, PEX was not an acronym." Strauss, Paul (1993). "IRIS Inventor, a 3D Graphics Toolkit"