Кіріспе
Компьютерлік геометрияда соқтығысуды анықтау
collision detection in computational geometry
Соқтығысуды анықтау – екі немесе одан көп кеңістіктік нысандардың, көбінесе компьютерлік графика нысандарының, қиылысын анықтаудың есептеулік мәселесі. Ол түрлі есептеу салаларында қолданылады, ең бастысы – компьютерлік графика, компьютерлік ойындар, компьютерлік модельдеу, робототехника және есептеу физикасы. Соқтығысуды анықтау – есептеу геометриясының классикалық мәселесі. Соқтығысуды анықтау алгоритмдерін 2D немесе 3D кеңістіктік нысандармен жұмыс істеуге қарай бөлуге болады.
Шолу
Физикалық симуляция кезінде бильярд ойнау сияқты тәжірибелер жүргізіледі. Бильярд шарларының физикасы қатты денелердің қозғалысы және серпімді соқтығысулар аясында жақсы түсініледі. Бірінші кезде, бильярд үстелі мен шарлардың өте нақты физикалық сипаттамасы, сондай-ақ барлық шарлардың бастапқы орналасуы беріледі. Кью-допқа күш түсіргенде (вероятно, ойыншының таяқшамен соққаннан туындаған), компьютерлік бағдарлама арқылы барлық шарлардың траекториясын, нақты қозғалысын және соңғы тоқтау орындарын есептеуді қалаймыз. Осы ойынды симуляциялайтын бағдарлама бірнеше бөліктен тұрады, олардың бірі бильярд шарларының арасындағы соқтығысуларды дәл есептеуге жауапты болады. Бұл мысал да нашар жағдайға ие болып шықты: есептеулердегі кез келген кішкентай қате бильярд шарларының соңғы орнын күрт өзгертеді. Видео ойындарда да ұқсас талаптар бар, бірақ маңызды айырмашылықтар да кездеседі. Кейбір компьютерлік симуляциялар нақты физиканы мүмкіндігінше дәл симуляциялауы керек болса, компьютерлік ойындар нақты физиканы қанағаттанарлық түрде, нақты уақытта және тұрақты түрде симуляциялауы керек. Нәтижеде ойыншыларға ұнайтын симуляция болған жағдайда, шарттардан бас тартуға болады.
Компьютерлік модельдегі соқтығысуды анықтау
Физикалық симуляторлар соқтығысуға реакция жасау әдісімен ерекшеленеді. Кейбіреулері күшті есептеу үшін материалдың жұмсақтығын пайдаланады, бұл соқтығысуды келесі уақыт қадамдарында нақты жағдайдағыдай шешеді. Бұл жұмсақ емес материалдар үшін процессорды көп жүктейді. Кейбір симуляторлар соқтығысу уақытын сызықтық интерполяция арқылы бағалайды, симуляцияны кері қайтарады және соқтығысуды сақталу заңдарының абстрактілі әдістерімен есептейді. Ал кейбіреулері соқтығысу уақытын есептеу үшін сызықтық интерполяцияны (Ньютон әдісі) қайталайды, бұл симуляцияның қалған бөлігіне қарағанда әлдеқайда жоғары дәлдікпен жасалады. Соқтығысуды анықтау уақыт байланыстылығын пайдаланады, бұл процессорлық жүктемені күрт арттырмай, тіпті кішкентай уақыт қадамдарын мүмкін етеді, мысалы, әуе трафигін басқаруда. Икемсіз соқтығысудан кейін сығу және тоқтау сияқты арнайы күйлер пайда болуы мүмкін, мысалы, Open Dynamics Engine оларды симуляциялау үшін шектеулерді қолданады. Шектеулер инерциядан және осылайша тұрақсыздықтан сақтайды. Сахналық граф арқылы тоқтауды іске асыру, қателіктердің туындауына жол бермейді. Басқаша айтқанда, физикалық симуляторлар көбінесе екі тәсілдің бірімен жұмыс істейді: соқтығысу a posteriori (соқтығысу болғаннан кейін) немесе a priori (соқтығысу болғанға дейін) анықталады. A posteriori және a priori арасындағы айырмашылықтан басқа, қазіргі заманғы соқтығысуды анықтау алгоритмдерінің барлығы дерлік алгоритмдердің иерархиясына бөлінеді. Көбінесе "дискретті" және "үздіксіз" терминдері, a posteriori және a priori терминдерінен гөрі қолданылады.
Апостериор (дискретті) және априор (тікелей)
Апостериорлық жағдайда физикалық модельдеу шағын қадаммен ілгерілеумен жүзеге асырылады, содан кейін кез келген нысандардың қиылысып жатыр ма, көрінетіндей қиылысып жатыр ма, жоқ па, тексеріледі. Әрбір модельдеу қадамында қиылысатын барлық денелердің тізімі құрылады және осы нысандардың орналасуы мен траекториялары соқтығысуды ескеру үшін «бекітіледі». Бұл әдіс апостериорлық деп аталады, себебі ол әдетте соқтығысудың нақты сәтін жіберіп алады және соқтығысу болғаннан кейін ғана анықтайды. Априорлық әдістерде физикалық денелердің траекториясын өте дәл болжауға қабілетті соқтығысуды анықтау алгоритмі бар. Соқтығысу сәттері жоғары дәлдікпен есептеледі және физикалық денелер ешқашан бір-бірімен араласпайды. Бұл априорлық деп аталады, өйткені соқтығысуды анықтау алгоритмі физикалық денелердің конфигурациясын жаңартпастан бұрын соқтығысу сәттерін есептейді. Апостериорлық әдістердің басты артықшылықтары төмендегідей. Бұл жағдайда соқтығысуды анықтау алгоритміне физикалық айнымалылардың көптеген түрлерін білудің қажеті жоқ; физикалық денелердің қарапайым тізімі алгоритмге беріледі және бағдарлама қиылысатын денелердің тізімін қайтарады. Соқтығысуды анықтау алгоритміне үйкеліс, серпімді соқтығысулар немесе одан да нашар, серпімсіз соқтығысулар және деформацияланатын денелерді түсінудің қажеті жоқ. Сонымен қатар, апостериорлық алгоритмдер априорлық алгоритмдерге қарағанда бір өлшеммен қарапайым. Априорлық алгоритм уақыт айнымалысымен жұмыс істеуі керек, ол апостериорлық мәселеде жоқ. Екінші жағынан, апостериорлық алгоритмдер «бекіту» қадамында қиындықтар тудырады, онда физикалық тұрғыдан дұрыс емес қиылыстарды түзету қажет. Сонымен қатар, егер дискретті қадам тым үлкен болса, соқтығысу байқалмай қалуы мүмкін, нәтижесінде нысан жеткілікті жылдам немесе кішкентай болса, екінші нысан арқылы өтіп кетуі мүмкін. Априорлық алгоритмдердің артықшылықтары – жоғары сенімділік және тұрақтылық. Физикалық модельдеуді соқтығысуды анықтау алгоритмінен бөлу қиын (бірақ толығымен мүмкін емес). Дегенмен, ең қарапайым жағдайларды қоспағанда, екі дененің қай кезде соқтығысатынын алдын ала анықтау мәселесі (кейбір бастапқы деректерді ескере отырып) жабық түрдегі шешімге ие емес – әдетте сандық түбір іздеуші қолданылады. Кейбір нысандар тыныш күйде болады, яғни соқтығысады, бірақ бір-бірінен секірмейді де, бір-біріне енбейді, мысалы, үстелде тұрған құмыра. Барлық жағдайларда тыныш күйдегі байланысқа арнайы қарау қажет: Егер екі нысан соқтығысса (апостериорлық) немесе сырғыса (априорлық) және олардың салыстырмалы қозғалысы белгілі бір шектен төмен болса, үйкеліс тоқтауға айналады және екі нысан да сахна графигінің бір тармағына орналасады.
Оңтайландыру
Бірнеше нысанды соқтығысуды анықтаудың ең қарапайым тәсілдері өте баяу. Әр нысанды басқа барлық нысандармен тексеру, әрине, жұмыс істейді, бірақ нысандар саны көп болған жағдайда мұндай әдіс тиімсіз болады. Күрделі геометриясы бар нысандарды әр бетін бір-бірімен тексеру арқылы салыстыру да өте баяу. Сондықтан, осы мәселені жылдамдату үшін көптеген зерттеулер жүргізілді.
Уақытша үйлесімділікті пайдалану
Көптеген қолданбаларда физикалық денелердің конфигурациясы бір уақыт қадамынан келесі қадамға өте аз өзгереді. Көптеген объектілер мүлдем қозғалмауы мүмкін. Алгоритмдер бұрынғы уақыт қадамында жасалған есептеулерді ағымдағы қадамда қайта пайдалануға мүмкіндік береді, нәтижесінде есептеудің жылдам аяқталуын қамтамасыз етеді. Соқтығысуды анықтаудың жалпы мақсаты – потенциалды түрде қиылысатын объектілер жұптарын табу. Осы жұптарға қосымша талдау қажет. Осындай жоғары өнімділік алгоритмді Калифорния университетінің (Беркли) профессоры Минг С. Лин жасады, ол сахнадағы барлық n дене үшін осьтерге сәйкес шектейтін қораптарды пайдалануды ұсынды. Әрбір қорап үш интервалдың көбейтіндісімен сипатталады (мысалы, қорап ). Шектейтін қораптардың соқтығысуын анықтау үшін кең таралған алгоритм – «сыпыру және кесу» әдісі. Екі мұндай қораптың қиылысуы, тек қана егер , және қиылысса ғана болады. Егер және қиылысса, келесі уақыт қадамында да олардың қиылысуы ықтимал. Сол сияқты, егер олар бұрынғы уақыт қадамында қиылыспаса, онда олардың қиылыспауы да ықтимал. Сондықтан, мәселені кадрдан кадрға қай интервалдар қиылысып жатқанын анықтауға келтіреміз. Бізде үш интервал тізімі бар (әр ось үшін біреу) және барлық тізімдердің ұзындығы бірдей (әр тізімнің ұзындығы , шектейтін қораптардың саны). Әр тізімде әрбір интервал тізімдегі басқа барлық интервалдармен қиылысуы мүмкін. Сондықтан, әр тізім үшін 0 мен 1-ден тұратын матрица болады: егер және интервалдары қиылысса, онда 1, қиылыспаса – 0. Біздің болжамымыз бойынша, интервалдар тізіміне сәйкес матрица бір уақыт қадамынан келесі қадамға өте аз өзгереді. Бұл мүмкіндікті пайдалану үшін интервалдар тізімі, шын мәнінде, таңбаланған соңғы нүктелер тізімі ретінде сақталады. Тізімнің әрбір элементі интервалдың соңғы нүктесінің координатасын және осы интервалды анықтайтын бірегей бүтін санды қамтиды. Содан кейін тізім координаттар бойынша сұрыпталады және матрица жаңартылады. Егер шектейтін қораптардың конфигурациясы бір уақыт қадамынан келесі қадамға айтарлықтай өзгеретін болса, бұл алгоритмнің салыстырмалы түрде жылдам жұмыс істейтініне сену оңай. Деформацияланатын денелердің (мысалы, мата симуляциясы) жағдайында, төменде талқыланғандай, нақты жұптық кесу алгоритмін қолдану мүмкін болмайды, ал n дене кесу алгоритмі ең жақсы нәтиже береді. Егер сахнадағы физикалық денелердің жылдамдығына жоғарғы шек қойылса, онда объектілер жұптарын олардың бастапқы қашықтығы мен уақыт қадамының мөлшеріне сүйене отырып кесуге болады.
Жұппен кесу
Біз зерттеу үшін екі денені таңдап алғаннан кейін, соқтығысуларды мұқият тексеруіміз керек. Дегенмен, көптеген қолданбаларда жеке денелер (егер олар тым деформацияланбаса) кіші примитивтер жиынтығымен, әсіресе үшбұрыштармен сипатталады. Енді бізде екі үшбұрыштар жиынтығы бар, және (айқындық үшін, әр жиынтықта үшбұрыштар саны бірдей деп есептейміз). Барлық үшбұрыштарды бір-бірімен соқтығысу үшін тексеру – ең қарапайым нәрсе, бірақ бұл көптеген салыстыруларды қажет етеді, бұл өте тиімсіз. Мүмкін болса, тексеруге қажет үшбұрыштар жұптарының санын азайту үшін кесу алгоритмін қолдану ұсынылады. Алгоритмдердің ең көп қолданылатын тобы – иерархиялық шектеу көлемдері әдісі деп аталады. Алдын ала өңдеу кезінде әрбір дене үшін (мысалы, және) шектеу көлемдерінің иерархиясын есептейміз. Содан кейін, әр уақыт қадамында, және арасындағы соқтығысуларды тексеру қажет болғанда, қарастырылып отырған үшбұрыштар жұптарының санын азайту үшін иерархиялық шектеу көлемдері қолданылады. Мысал ретінде шектеу шарларын қолданамыз, бірақ көп жағдайда шарлар тиімсіз болуы мүмкін. Егер – үшбұрыштар жиынтығы болса, онда біз шектеу шарларын алдын ала есептей аламыз. Шарды қалай таңдаудың көптеген тәсілдері бар, біз тек шардың жиынтықты толығымен қамтитынын және мүмкіндігінше кіші екенін ғана қарастырамыз. Алдын ала есептеу арқылы біз есептей аламыз және Егер бұл екі шар қиылыспаса (мұны тексеру оңай), онда және де қиылыспайды. Бірақ бұл n-дене кесу алгоритмінен айтарлықтай жақсырақ емес. Егер – үшбұрыштар жиынтығы болса, онда оны екі бөлікке бөлуге болады, және Біз осыны және үшін де жасай аламыз, содан кейін шектеу шарларын (алдын ала) есептей аламыз және Үміт – бұл шектеу шарлары мен шарларынан әлдеқайда кіші болады. Мысалы, егер және қиылыспаса, онда жиынтықтағы кез келген үшбұрықты жиынтықтағы кез келген үшбұрықпен тексерудің қажеті жоқ. Алдын ала есептеу ретінде, әрбір физикалық денені (үшбұрыштар жиынтығымен бейнеленген) аламыз және оны екілік ағашқа рекурсивті түрде бөлеміз, онда әр түйін үшбұрыштар жиынтығын көрсетеді, ал оның екі баласы және болады. Ағаштағы әр түйінде шектеу шарларын алдын ала есептей аламыз. Егер денелердің соқтығысын тексеру қажет болса, олардың шектеу шарлары ағашы көптеген үшбұрыштар жұптарын жою үшін қолданылуы мүмкін. Алгоритмдердің көптеген нұсқалары шардан басқа нәрсені таңдау арқылы алынады. Егер оське сәйкес шектеу қораптарын таңдасақ, AABBTrees аламыз. Бағытталған шектеу қораптары ағаштары OBBTrees деп аталады. Кейбір ағаштарды негізгі дене өзгерген жағдайда жаңарту оңай. Кейбір ағаштар қарапайым үшбұрыштардың орнына сплайндар сияқты жоғары ретті примитивтерді қабылдай алады.
As a precomputation, we can take each physical body (represented by a set of triangles) and recursively decompose it into a binary tree, where each node represents a set of triangles, and its two children represent and At each node in the tree, we can pre compute the bounding sphere
When the time comes for testing a pair of objects for collision, their bounding sphere tree can be used to eliminate many pairs of triangles. Many variants of the algorithms are obtained by choosing something other than a sphere for If one chooses axis aligned bounding boxes, one gets AABBTrees. Oriented bounding box trees are called OBBTrees. Some trees are easier to update if the underlying object changes. Some trees can accommodate higher order primitives such as splines instead of simple triangles.
Дәл жұптық соқтығысуды анықтау
Біз кесуді аяқтағаннан кейін, дәл соқтығысуды тексеру үшін бірнеше үміткер жұптар қалады. Негізгі байқау мынадай: егер екі дөңгелек нысан бөлек болса, онда оларды бөлетін жазықтықты табуға болады, яғни бір нысан жазықтықтың бір жағында, ал екіншісі – қарама-қарсы жағында орналасады. Бұл дөңгелек нысандар үшін өте жылдам соқтығысуды анықтау алгоритмдерін жасауға мүмкіндік береді. Бұл саладағы алғашқы жұмыстар «бөлу жазықтығы» әдістерін қамтыды. Екі үшбұрыш, егер оларды үш төбесінен өтетін жазықтықпен бөліп алу мүмкін болмаса ғана соқтығысады. Яғни, егер үшбұрыштар және олардың әрқайсысы вектор болса, онда үш төбеден өтетін жазықтықты тауып, оның бөлу жазықтығы болатынын тексеруге болады. Егер мұндай жазықтық бөлу жазықтығы болса, үшбұрыштар бөлек деп есептеледі. Ал егер мұндай жазықтықтардың ешқайсысы бөлу жазықтығы болмаса, үшбұрыштар қиылысады деп саналады. Мұндай жазықтықтар жиырмаға жуық. Егер үшбұрыштар бір жазықтықта жатса, бұл тест толыққанды нәтиже бермейді. Мәселені толық шешу үшін, үшбұрыштың қабырғаларына перпендикуляр жазықтықтар сияқты қосымша жазықтықтарды қосуға болады. Басқа жағдайларда, жазық бетпен кездесетін нысандар міндетті түрде басқа жерде бұрышта да кездесуі керек, сондықтан жалпы соқтығысуды анықтау соқтығысуды таба алады. Содан бері жақсы әдістер әзірленді. Екі дөңгелек көпбұрышты нысанның бетіндегі ең жақын нүктелерді табу үшін өте жылдам алгоритмдер бар. Минг К. Линнің ертедегі жұмыстары сызықтық бағдарламалаудан алынған симплекс алгоритмінің өзгеруін қолданды. Гилберт-Джонсон-Кеертти арақашықтығы алгоритмі бұл тәсілді ескірді. Бұл алгоритмдер, егер олар стационарлық немесе баяу қозғалатын нысандар жұптарына қайта-қайта қолданылса, алдыңғы соқтығысу тексеруінен алынған бастапқы нүктелермен қолданылса, тұрақты уақытқа жақын нәтиже береді. Осы алгоритмдік жұмыстың нәтижесі – соқтығысуды анықтау, мыңдаған қозғалатын нысандарды нақты уақытта, әдеттегі жеке компьютерлер мен ойын консольдерінде тиімді жүзеге асыруға мүмкіндік береді.
Априорлық кесу
Орындалатын нысандардың көпшілігі бейнеойындарға тәндей тұрақты болған жағдайда, орындау жылдамдығын арттыру үшін алдын ала есептеуді қолданатын априорлы әдістерді пайдалануға болады. Мұнда n-дене кесу және жұптық кесу де қажет, бірақ алгоритмдер уақытты және негізгі физикалық жүйеде қолданылатын қозғалыс түрлерін ескеруі тиіс. Дәл жұптық соқтығысуды анықтауда траекторияға тәуелділік өте жоғары, сондықтан соқтығысу сәтін есептеу үшін сандық түбірді табу алгоритмін қолдану қажет. Мысалы, уақыт бойынша қозғалатын екі үшбұрышты қарастырайық. Кез келген уақыт мезгілінде екі үшбұрыштың қиылысуын бұрын айтылған жиырма жазықтықты пайдалана отырып тексеруге болады. Дегенмен, біз одан да жақсы нәтижеге қол жеткізе аламыз, себебі осы жиырма жазықтықтың барлығын уақыт бойынша қадағалауға болады. Егер жазықтық белгілі бір нүктелер арқылы өтетін болса, онда 20 жазықтықты қадағалау қажет. Әрбір жазықтықты үш төбемен салыстыру керек, бұл 60 мәнді береді. Осы алпыс функция бойынша түбірді табу алгоритмін қолдану екі берілген үшбұрыш пен екі берілген траектория үшін дәл соқтығысу уақытын анықтайды. Мұнда егер төбелердің траекториялары сызықтық полиномдар деп есептелсе, онда соңғы алпыс функция шын мәнінде кубикалық полиномдар болып табылады, және осы ерекше жағдайда кубикалық түбірлер формуласын пайдалана отырып, дәл соқтығысу уақытын табу мүмкін. Кейбір сандық талдаушылар кубикалық түбірлер формуласын пайдалану, полиномдар үшін түбір табушыны пайдалануға қарағанда сандық тұрақтылығы жағынан нашар деп санайды.
Ғарыштық бөлік
Альтернативті алгоритмдер кеңістіктік бөлу шаңырағының астында топтастырылған, оған октрелер, екілік кеңістікті бөлу (немесе BSP ағаштары) және басқа да ұқсас тәсілдер кіреді. Егер кеңістік бірнеше қарапайым жасушаға бөлінсе және екі нысан бір жасушада емес екені дәлелденсе, оларды қиылысуға тексерудің қажеті жоқ. BSP ағаштарын алдын ала есептеуге болатындықтан, бұл тәсіл ойындардағы қабырғалар мен тұрақты кедергілерді басқаруға өте ыңғайлы. Бұл алгоритмдер әдетте жоғарыда сипатталған алгоритмдерге қарағанда ескі.
Шектеу қораптары
Шектеуші қораптар (немесе шектеуші көлемдер) көбінесе 2D тіктөртбұрыш немесе 3D кубоид болып келеді, бірақ басқа да пішіндер мүмкін. Видео ойында шектеуші қорап кейде Hitbox деп аталады. Шекаралық алмаз, ең кішкентай шектеуші параллелограмм, дөңгелек қабықша, шектеуші шеңбер немесе шектеуші шар, сондай-ақ шектеуші эллипс та қолданылып көрілген, алайда шектеуші қораптар қарапайымдылығының арқасында ең көп таралған болып табылады. Шектеуші қораптар әдетте соқтығысуды анықтаудың алғашқы (іріктеу) кезеңінде қолданылады, сондықтан егжей-тегжейлі салыстыру тек қана жабысатын шектеуші қораптары бар объектілер үшін қажет.
Үшбұрыштың орталық сегменттері
Үшбұрышты тор объектісі 3D дене модельдеуінде жиі қолданылады. Әдетте соқтығысу функциясы үшбұрышты үшбұрышпен кесісуі немесе тормен байланысты шектеу пішіні болып табылады. Үшбұрыштың центройды – бұл қарындаш ұшында тепе-теңдік сақтайтын масса орталығы. Симуляцияға физикалық параметрлерге центроидты өлшемді қосу жеткілікті. Егер объект пен нысананың центроидтары белгілі болса, осы екі нүктені қосатын сызық сегментін анықтауға болады. Үшбұрыштың центройдысының координаттық векторы оның төбелерінің координаттық векторларының орташа мәніне тең. Егер оның төбелерінің координаттары , және болса, онда центроид мына жерде көрсетілген. Бұл – екі 3D нүкте арасындағы сызық сегментінің арақашықтығын есептейтін функция. Мұнда сегменттің ұзындығы/арақашықтығы сегменттің реттелетін "соқтығысу" өлшемі болып табылады. Объектілер жақындағанда ұзындығы шекті мәнге дейін азаяды. Үшбұрыш-сфера тиімді геометриялық тестке айналады. Центроидта орналасқан сфераның мөлшері үшбұрыштың барлық төбелерін қамтуға мүмкіндік береді.
Here is the function for a line segment distance between two 3D points. Here the length/distance of the segment is an adjustable "hit" criteria size of segment. As the objects approach the length decreases to the threshold value. A triangle sphere becomes the effective geometry test. A sphere centered at the centroid can be sized to encompass all the triangle's vertices.
Бейне ойындар
Видео ойындар өте шектеулі есептеу уақытын бірнеше тапсырмаға бөліп отырады. Бұл ресурстардың шектеулі болуына және салыстырмалы түрде қарапайым соқтығысуды анықтау алгоритмдерін пайдалануға қарамастан, бағдарламашылар ойындарда қолдануға болатын сенімді, бірақ дәл емес жүйелерді жасауға қол жеткізді. Ұзақ уақыт бойы видео ойындарда өте шектеулі сандағы объектілер қарастырылды, сондықтан барлық жұптарды тексеру қиындық тудырмады. Екі өлшемді ойындарда кейбір жағдайларда аппараттық жабдық экрандағы спрайттар арасындағы пикселдердің қабаттасуын тиімді анықтап, хабарлай алды. Басқа жағдайларда, экранды жай ғана плиткалап, әр спрайтты оның үстінен өтетін плиткаларға байлау жеткілікті кесуді қамтамасыз етеді, ал жұптық тексеру үшін шектейтін тіктөртбұрыштар немесе шеңберлер – хитбокстар қолданылады және жеткілікті дәлді деп есептеледі. Үш өлшемді ойындар денелерді кесу үшін кеңістікті бөлу әдістерін қолданды және ұзақ уақыт бойы жұптық тексеру үшін нақты 3D объектіге бір немесе бірнеше шарды қолданды. Нақты тексеру өте сирек кездеседі, тек шындықты жақын симуляциялауға тырысатын ойындарда ғана. Тіпті сонда да, нақты тексеру барлық жағдайларда қолданылмайды. Ойындар нақты физиканы еліктемейді, сондықтан тұрақтылық мәселесі аса маңызды емес. Көптеген ойындар апостериор соқтығысуды анықтауды қолданады, ал соқтығысулар өте қарапайым ережелерді қолдану арқылы шешіледі. Мысалы, егер кейіпкер қабырғаға кіріп кетсе, оны жай ғана соңғы белгілі жақсы орнына қайтаруға болады. Кейбір ойындар кейіпкердің қабырғаға кірмей тұрып қанша қашықтыққа қозғала алатынын есептеп, оған тек осы қашықтықта қозғалуға рұқсат береді. Көптеген жағдайларда бейнеойындарда кейіпкерлерді нүкте ретінде жақындату, оларды қоршаған ортамен соқтығысуды анықтау үшін жеткілікті. Бұл жағдайда, бинарлық кеңістікті бөлу ағаштары нүктенің декорацияға кіргенін немесе кірмегенін тексеру үшін тиімді, жылдам және қарапайым алгоритмді ұсынады. Мұндай дерек құрылымы кейіпкер жерге жүгіріп бара жатқанда "демалыс күйі" жағдайын да тиімді басқаруға мүмкіндік береді. Кейіпкерлер арасындағы соқтығысулар, оқ-дәрілермен және қауіпті нысандармен соқтығысулар бөлек қарастырылады. Сенімді симулятор кез келген кіріске ақылға қонымды жауап береді. Мысалы, егер біз жоғары жылдамдықты жарыс машинасының бейнеойынын елестетсек, бір симуляциялық қадамнан келесісіне машиналар жарыс жолы бойымен айтарлықтай қашықтыққа жылжуы мүмкін. Егер жолда терең емес кедергі болса (мысалы, кірпіш қабырғасы), машина оның үстінен толығымен секіріп өтуі мүмкін, бұл өте жағымсыз. Басқа жағдайларда, апостериор алгоритмдерінің талап ететін "түзету" дұрыс жүзеге асырылмағандықтан, кейіпкерлерді қабырғаларға қамап тастайтын немесе олардың арқылы өтуге және сонда мәңгілік босқа түсуге мүмкіндік беретін қателер пайда болады, онда өлімге әкелетін түпсіз шұңқыр болуы мүмкін немесе болмауы мүмкін, кейде "қара тозақ", "көк тозақ" немесе "жасыл тозақ" деп аталады, басым түсіне байланысты. Бұл – соқтығысуды анықтау және физикалық модельдеу жүйесінің сәтсіздігінің белгілері. Big Rigs: Over the Road Racing – бұл соқтығысуды анықтау жүйесі бұзылған немесе тіпті жоқ ойынның әйгілі мысалы.
Hitbox (жақсылық)
Hitbox – видео ойындарда соқтығысуды нақты уақыт режимінде анықтау үшін жиі қолданылатын көрінбейтін пішін; ол шектеуші қораптың бір түрі. Көбінесе ол 2D ойындарда тіктөртбұрыш, ал 3D ойындарда текше болып келеді және көрінетін нысанға (мысалы, модель немесе спрайт) бекітіліп, оның қозғалысын қадағалайды. Дөңгелек немесе сфера пішіндері де жиі кездеседі, бірақ олар көбінесе «қораптар» деп аталады. Анимациялық нысандардың әрбір қозғалатын бөлігіне, қозғалыс кезінде дәлдікті қамтамасыз ету үшін hitbox тіркелуі мүмкін. Hitbox-тар «бір жақты» соқтығысуларды анықтау үшін қолданылады, мысалы, кейіпкердің соққыға немесе оққа түюі. Олар кері байланыспен соқтығысуларды анықтауға қолайлы емес (мысалы, қабырғаға соқтығысу), себебі адамдар мен жасанды интеллект үшін hitbox-тың үнемі өзгеретін орнын басқару қиынға түседі; мұндай соқтығысулар көбінесе оське сәйкес келетін қарапайым шектеуші қораптармен шешіледі. Ойыншылар осы типтегі өзара әрекеттесулерді білдіру үшін «hitbox» терминін пайдалана береді. Hurtbox – кіріс соққыларын анықтау үшін қолданылатын hitbox. Бұл контексте «hitbox» термині көбінесе зиян келтіретін нысандар үшін қолданылады. Мысалы, шабуыл тек шабуылшының соққысының айналасындағы hitbox, қарсыластың денесіндегі hurtbox-пен жанасқанда ғана тиімді болады, ал қарсыластың hitbox-тарының соқтығысуы ойыншылардың соққыларын алмастыруға немесе тоқтатуға әкелуі мүмкін, ал hurtbox-тар бір-бірімен өзара әрекеттеспейді. Бұл термин индустрияда стандартизацияланбаған; кейбір ойындар hitbox және hurtbox анықтамаларын ауыстырады, ал басқалары екі жақ үшін де тек «hitbox» терминін қолданады.
Hitboxes are used to detect "one way" collisions such as a character being hit by a punch or a bullet. They are unsuitable for the detection of collisions with feedback (e. g. bumping into a wall) due to the difficulty experienced by both humans and AI in managing a hitbox's ever changing locations; these sorts of collisions are typically handled with much simpler axis aligned bounding boxes instead. Players may use the term "hitbox" to refer to these types of interactions regardless. A hurtbox is a hitbox used to detect incoming sources of damage. In this context, the term hitbox is typically reserved for those which deal damage. For example, an attack may only land if the hitbox around an attacker's punch connects with one of the opponent's hurtboxes on their body, while opposing hitboxes colliding may result in the players trading or cancelling blows, and opposing hurtboxes do not interact with each other. The term is not standardized across the industry; some games reverse their definitions of hitbox and hurtbox, while others only use "hitbox" for both sides.