Якщо ви говорите про це з самого початку, і зауважте, що дуже мало основних ігрових двигунів кодуються вже з нуля, і зауважте, що це приклад, а не обов’язково, як це завжди працює. . .
Надання:
Почніть з виведення куба з плоскими затінками. Додайте до нього базові світлові ефекти. Додайте спосіб переміщення камери. Тепер ви можете літати навколо нудного куба, підвішеного у нескінченній чорній порожнечі. Так.
Далі, ймовірно, ви хочете імпортувати модель. Принаймні, ваш художник може згорнути демонстраційну модель (чайник напрочуд традиційний), але у них може бути реальна ігрова модель, яку вони можуть вам подати. Знову ми зараз дотримуємося плоского затінення, тож воно виявиться схожим на його виготовлення. . . ну ніяка реалістична речовина, але такий собі перехрес між матовим пластиком та порцеляною. Це , але без хорошого освітлення. І ми все ще знаходимося в точці, коли це зовсім не рухається.
Наступні три основні кроки можна зробити в будь-якому порядку.
По-перше, вам захочеться місцевість. Більшість сучасних ігор поділяють рендерінг на "статичну геометрію" та "акторів", де статична геометрія включає речі, які не змінюються (стіни, земля, ліхтарі), а актори включають речі, які змінюються (гравці, транспортні засоби, руйнівні світильники.) основна концепція візуалізації однакова для обох, є оптимізації, які ви можете зробити для статичної геометрії, яку ви не можете зробити для акторів. Вам знадобиться місцевість для інженерів ігрового процесу, щоб дійсно почати діяти, тому якщо вони чекають на вас, настав час придумати хоча б базовий рендеринг місцевості.
По-друге, ви хочете текстурувати. Це величезна тема, і, швидше за все, ви доберетеся до знакової рубежу, зробите щось інше більш важливе, потім повертайтеся до неї неодноразово. Ваш перший пропуск може просто додати текстури до моделі. Ваш другий прохід може додати покращене освітлення та поведінку на поверхні. Ваш третій пропуск може додавати тіні (я можу заповнити цілу відповідь, розмовляючи про тіні). Залежно від того, яку гру ви робите, це може бути довільно складним. Десь тут ви також можете переключити весь ігровий движок на відкладене візуалізацію.
По-третє, вам захочеться анімації. Ваші аніматори (припускаючи, що ви не живете в 1995 році) встановили анімаційні установки для своїх моделей, що складаються з кісток, що проходять через модель, та інформації про те, як рухаються кістки під час певної анімації. Ви, напевно, почнете з можливості відтворювати анімацію на вимогу, а потім додасте можливість змішувати анімацію разом.
Як тільки все це буде зроблено, саме час попрацювати над сумісністю. Якщо ви працюєте над грою на AAA, то у вас є певний спосіб перевірити свій код на багатьох різних видах обладнання - можливо, це є вдома, можливо, ви укладете контракт з тестовою фірмою, що завгодно. Багато вашого коду порушиться на конкретних відеокартах або конкретних версіях драйверів, і ви зможете виправити стільки, скільки зможете.
Пора також розглянути питання про оптимізацію. Візуалізація - це велика, велика проблема швидкості, тому тепер вам доведеться розібратися, як використовувати апаратне забезпечення на найглибшому рівні, щоб якнайшвидше запуститись. Якщо ви думаєте, що це може суперечити "сумісності", ви праві! Це абсолютно робить! Найкращі оптимізації, які ви знайдете, просто не зможуть працювати на деяких картках. Ви зможете збалансувати всі ці фактори.
Приблизно в цей момент ваші художники вимагатимуть нових інструментів для текстурування чи нових функцій анімації, а ваші дизайнери рівня захочуть нові методи рендерингу місцевості. Поверніться до "наступні три основні кроки можна зробити в будь-якому порядку" і повторюйте, поки гра не буде виконана.
Ігровий процес:
Я збираюся пропустити частини, які не дуже помітні візуально. По-перше, вам доведеться чекати, поки не з’явиться рендеринг місцевості, хоча до цього часу ви можете зробити багато речей.
Як тільки ви це отримаєте, ви налаштуєте кілька основних колізій. Це, ймовірно, матиме форму перельоту до місця в грі, а потім натискання кнопки, яка опускає кубик. Куб падає і вдаряється об землю. Як тільки куб послідовно приземлиться на землю, ви можете почати налаштовувати рух гравця, так що ви можете бігати по всьому світу так само, як це робить гравець.
Після того, як ви працюєте з базовою фізикою руху, ви знову в одному з таких сегментів "це можна зробити одночасно":
Боротьбу потрібно впроваджувати. Вам потрібні речі, які можуть знімати речі, і всі ці речі повинні вести себе належним чином.
Фізику потрібно впроваджувати. У вас зіткнення працюють, але зіткнення - лише невеликий сегмент фізики. Коли хтось скачує джип з танка, все повинно вести себе приблизно так, як було призначено.
Механіку ігор потрібно впровадити. Звідки ви знаєте, коли ви виграли чи програли? Як часто нерестові речі і що це контролює? Якщо комуністи завойовують нерестовий пункт, то чому він продовжує нерестувати анархістські машини? Така річ.
Все це може зайняти, знову ж таки, довільний час, виходячи з того, скільки речей ваші дизайнери хочуть зробити. Ви також витратите тону часу на відслідковування помилок ("ей, подивись, що станеться, коли я заїду танк на крило цього винищувача"). Зауважте, що багато чого з цього трапиться з нетекстульованим світом, або з моделями, що бігають в положенні бурового персонажа , або з цистернами, які є просто великими коробочками зі словом "TANK", незграбно намальованим напиленням.
Інтерфейс користувача:
Користувальницький інтерфейс може фактично запускатися до того, як ввійде основний код візуалізації, оскільки інтерфейс інтерфейсу та ігровий режим відображення мають тенденцію до використання абсолютно різних кодових шляхів. Замість того, щоб починати з куба, ви почнете з поля, потім додасте текстури до поля, а потім додасте текст у поле.
На даний момент ваше життя витрачається на те, щоб отримати достатньо часу для написання віджетів загального призначення, при цьому все-таки вкладаючи достатньо часу в інтерфейсі, щоб дизайнери та розробники ігрової механіки могли перевірити гру в розпливчастій подобі реалізму. У якийсь момент ваші виконавці інтерфейсу придумають послідовне відчуття користувальницького інтерфейсу, і тоді ви почнете працювати над доопрацьованими елементами інтерфейсу, проте випробовуючи ці елементи інтерфейсу на реальних програвачах, щоб переконатися, що вони зрозумілі та зручні.
Я можу поговорити про них більше, якщо потрібно, але це перетвориться на мегавідповідь, якщо я це зробити, тому поки що не буду :)