русский

ИИ для программиста?

5 Tagen zurück, 14:14
Re: ИИ для программиста?
 
alex445 патриот
in Antwort sboganov 5 Tagen zurück, 12:40, Zuletzt geändert 5 Tagen zurück, 14:23 (alex445)
И я более чем уверен, что подойдя к коллеге и спросив его "unity check if a point is inside any collider" ты конечно узнаешь много интересного - но о collider там не будет ни слова! Так что явный плюс нейросетям.

Вы опять не в курсе, почему используются именно коллайдеры. Я тоже до недавнего удивлялся - почему не для любой фигуры. Потом разобрался. Дело в том, что коллайдеры обычно это очень простые геометрические фигуры, буквально примитивы - кубоид, сфера, что-то чуть более сложное. Но суть в том, что все они описываются не набором вершин и треугольников, а математикой, формулой, задающей множество всех их точек поверхности. Потому проверка на нахождение любой случайной точки внутри этой поверхности будет тоже относительно простая формула из математики.


А все кастомные меши (сетки полигонов) это случайные фигуры, почти всегда очень сложные. Они описываются не математической формулой, а именно набором вершин, треугольников, нормалей и т.д. Поэтому проверить, находится ли произвольная точка внутри такого меша простой формулой нельзя. Вместо этого нужно для каждого треугольника из меша (а их могут быть миллионы) вычислить уравнение, где находится эта произвольная точка относительно этого треугольника. Вот треугольник это примитив, он описывается уравнением. А меш - нет. Поэтому проверка для точки была бы слишком затратной по вычислениям. Поэтому её и нет в том же Юнити из коробки - пиши сам или придумывай упрощение. Или пользуйтесь упрощениями, типа BoundingBox.ClosestPoint, где "окружающая коробка" это кубоид, описанный вокруг вашего сложного меша. Естественно, этот кубоид не учитывает, что в вашем меше могут быть вогнутости, дыры и прочие области, которые к мешу не принадлежат, но в этих областях может находиться тестируемая точка.

Вы это не знаете, поэтому вам ответы тупого ИИ заходят, хотя он несёт в конкретных ответах на этот вопрос чушь более, чем наполовину.


А там дальше ещё можно рыть и рыть. Изначально у меня вообще вопрос был - как определить, что персонаж может прыгнуть перед собой на какую-то поверхность. ИИ естественно выдал набор чуши. Тогда я разделил задачу, что надо сначала сделать рейкастинг (бросание луча) вперёд, определить, есть ли препятствие впереди - есть ли пересечение луча с каким-нибудь мешем (поверхностью). Если препятствие есть, то протестировать точку на высоту прыжка вверх и на какое-то расстояние вперёд. Эта точка не должна находиться внутри препятствия - тогда можно прыгать. А потом оказалсоь, что препятствие не может быть любым мешем, если я хочу, чтобы тесты рейкастинга и нахождения точки внутри проходили. Припятствие должно быть коллайдером, причём примитивным, а не повторяющим меш - выше объяснил, почему. И конечно мой произвольный меш не подходит для таких тестов. Нужно либо придумывать что-то своё, скорее всего трудновычислимое, либо аппроксимировать сложный меш набором более простых коллайдеров - тех же кубоидов - что тоже сложный и трудоёмкий процесс, зачастую ручной. Поэтому ИИ в большинстве игр такой тупой, и зачастую застревает в объектах и узких проходах - у него банальнейшие скрипты, которые не предусматривают анализ геометрии на лету. Там либо почти случайный, мало от чего зависящий набор действий, тот же прыжок, без теста, возможен ли он, либо следование заранее проложенным маршрутам, где места, в которых можно запрыгнуть, обозначены на этапе разработки. Я сделал, что если персонаж при движении к цели не переместился за последний кадр на некоторое заданное минимальное расстояние, значит он скорее всего во что-то упёрся, потому надо сделать прыжок. Естественно, во многих случаях это будет ложное срабатывание и выглядеть комично. Но, как говорится, чем богаты. Все остальные редкие случаи, когда ИИ в игре работает как-то непримитивно, это какие-то хаки или свои ноу-хау, обычно связанные с большими вычислениями или работающими очень ограниченно. Вот до сих пор, за десятки лет развития комьютерной графики, не придумали ничего лучшего. Вся мощь уходит на более подробные текстуры, прорисовку морщинок и прочую лабуду, а те же неординарные действия персонажей или скажем разрушаемость в случайных местах - такого считай нет. А если и где-то сделают, не окупится разработка этого. Отсюда кстати приходим к теме "учиться на игродела" - в мечтах ты изобретаешь новые необычные концепты, технологии "нетупых персонажей" и "случайной разрушаемости", а в реале клепаешь стопятисотый "три в ряд" с разными скинами и прикрученным к каждому действию донатом. Причём клепаешь на конвейере, за мелкий прайс, где очередной Кобаныч стоит над душой с розгами "должно быть сделано ещё вчера!".

 

Sprung zu