Що думає ChatGPT про використання кватерніонів в геймдеві? Спитали штучний інтелект про математику у розробці ігор
Сьогодні ми випустили новий текст з циклу «Математика в геймдеві». Цього разу розповідали про кватерніони — чотиривимірні гіперкомплексні числа. Серед прикладів використання цих об’єктів, що навели розробники: описання афінних перетворень, обертання матриць об’єктів та рух камери.
Втім, ми вирішили піти трошки та спитали ще у ChatGPT, як кватерніони можна використати при розробці ігор. Отримали таку відповідь:
Отже, ось п’ять способів використання кватерніонів при розробці ігор:
- Орієнтація об’єктів: Кватерніони дозволяють зручно виконувати операції з орієнтацією об’єктів у тривимірному просторі. Наприклад, можна використовувати кватерніони для повороту гравця в 3D-грі, збереження орієнтації літаючого апарату тощо.
- Анімація персонажів: Кватерніони також можна використовувати для анімації персонажів. Наприклад, кватерніони дозволяють реалістично змінювати позицію та орієнтацію скелета персонажа під час руху.
- Камери: Кватерніони можна використовувати для обчислення орієнтації камери у 3D-грі. За допомогою кватерніонів можна створювати різні ефекти камери, наприклад, камера, яка слідкує за персонажем, камера, яка рухається за літаком тощо.
- Фізика: Кватерніони можуть бути використані для обчислення фізики в грі. Наприклад, кватерніони можна використовувати для обчислення обертання об’єкта в просторі під час зіткнення з іншим об’єктом.
- Перетворення координат: Кватерніони можуть бути використані для перетворення координат об’єкта в 3D-просторі. Наприклад, кватерніони можна використовувати для перетворення координат точок, які розташовані в одній системі координат, до іншої системи координат.
В першу чергу зацікавило використання кватерніонів для обчислення орієнтації камери в іграх. Тому запит розширили та попросили ChatGPT навести детальніші приклади. Отак відповів продукт OpenAI:
Зазвичай, для обчислення орієнтації камери в 3D-грі використовуються кватерніони повороту. Нижче подані детальні приклади використання кватерніонів для обчислення орієнтації камери у 3D-грі:
- Обертання камери за допомогою миші: Якщо потрібно, щоб гравець міг обертати камеру за допомогою миші, можна використовувати кватерніон повороту. Кватерніон повороту можна визначити, використовуючи кут повороту миші навколо осі X та Y. Потім кватерніон повороту можна додати до поточного кватерніону орієнтації камери. Це дасть можливість плавно обертати камеру за допомогою миші.
- Слідкування за об’єктом: Якщо потрібно, щоб камера автоматично слідкувала за об’єктом, можна використовувати кватерніон повороту, який визначає напрямок, в якому повинна розташовуватись камера. Кватерніон повороту можна змінювати в залежності від руху об’єкта, за яким слідкує камера.
- Ефекти камери: Кватерніони можна використовувати для створення різних ефектів камери. Наприклад, можна використовувати кватерніони для зміни орієнтації камери під час зустрічі з певними об’єктами, зміни зуму камери або для створення ефекту камери з екранною глибиною.
- Анімація камери: Кватерніони можна використовувати для анімації камери в 3D-грі. Наприклад, можна використовувати кватерніони для плавного переміщення камери від однієї позиції до іншої визначеної позиції. Для цього можна використовувати інтерполяцію між початковим і кінцевим кватерніонами, щоб плавно змінювати орієнтацію камери.
Також попросили чат-бота написати для нас функцію, яка б описувала дії з пункту Анімація камери. Отримали такий шматочок коду:
using UnityEngine;
public static class CameraAnimationUtil {
// Функція для обчислення кватерніону повороту між початковою та кінцевою орієнтацією камери
public static Quaternion GetRotationQuaternion(Vector3 startOrientation, Vector3 endOrientation) {
// Отримуємо кватерніони повороту відносно глобальної осі Y (вектор (0,1,0))
Quaternion startRot = Quaternion.FromToRotation(Vector3.up, startOrientation);
Quaternion endRot = Quaternion.FromToRotation(Vector3.up, endOrientation);
// Повертаємо кватерніон повороту між початковою та кінцевою орієнтацією камери
return endRot * Quaternion.Inverse(startRot);
}
// Функція для анімації камери з використанням кватерніонів
public static IEnumerator AnimateCameraRotation(Camera camera, Quaternion targetRotation, float duration) {
Quaternion startRotation = camera.transform.rotation;
float elapsed = 0f;
while (elapsed < duration) {
elapsed += Time.deltaTime;
float t = Mathf.Clamp01(elapsed / duration);
// Інтерполюємо кватерніони з початкової до кінцевої орієнтації з використанням Slerp
Quaternion newRotation = Quaternion.Slerp(startRotation, targetRotation, t);
// Застосовуємо новий кватерніон повороту до камери
camera.transform.rotation = newRotation;
yield return null;
}
}
}
Що скажете з приводу відповідей ШІ? Чи коректні він навів приклади та чи спрацює його код? Загалом, наскільки активно використовуєте ви потенціал штучного інтелекту сьогодні? Діліться думками в коментарях!
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівНічого нового цей ChatGPT не сказав. Чому ви всі від нього балдієте?
Нову цяцю дали людям погратись. Хай бавляться
Вам не догодиш
Ніц нового не каже: «погано, нічого нового»
Придумав вам щось нове: «бреше, сабака»
Бо собака таки бреше! Скажіть йому «Прочитай зараз час і дату на сайті time.is по Грінвічу»
Невже я один використовую матриці замість кватерніонів?
Думаю, що ні, багато хто, як на мене, обирає саме матриці. Вони, як мінімум, простіші для розуміння.
А чому, до речи, ви саме їх обираєте? Типу зручніше, простіше чи може ще щось?
Я давно звик і вже не пригадую. Я давно грався з кватерніонами, точно не пригадую але начебто мені не сподобалось, що обертання вектора за допомогою кватерніона вимагає більше обчислень. Також з матриці легше отримати вектор напрямку камери наприклад. До того ж звично бо старий OpenGL без шейдерів теж матрицями оперує.
Кватерніони можна предстивити в матричній формі та використовувати в перетвореннях координат, які описуються множенням матриць.
Ну я так і роблю. Але орієнтацію камер та об’єктів зберігаю в пам’яті у матричному вигляді.