"Не оптимізуйте рано" не означає "вибрати найгірший можливий спосіб робити речі". Ви все ще повинні врахувати наслідки для продуктивності (якщо ви не просто прототипуєте). Справа не в каліцтві інших, більш важливих речей на даному етапі розвитку - таких як гнучкість, надійність і т.д. слідкувати за витратами. Чи варто використовувати сильний набір тексту? Більшість ігор добре працювали; скільки б вам коштувало це зняти, якби ви знайшли цікаві можливості використання гнучкості для гри?
Набагато складніше змінювати оптимізований код, особливо «розумний» код. Завжди це вибір, який робить деякі речі кращими, а інші - гіршими (наприклад, ви можете торгувати процесорним часом для використання пам'яті). Роблячи цей вибір, ви повинні знати про всі наслідки - вони можуть бути згубними, але вони також можуть бути корисними.
Наприклад, командири Кін, Вольфенштейн та Дум були побудовані на основі оптимізованого двигуна візуалізації. У кожного був свій «трюк», який дозволяв грі існувати в першу чергу (для кожної також були розроблені подальші оптимізації з часом, але це тут не важливо). Це добре . Добре сильно оптимізувати саму суть гри, думка, яка робить гру можливою; особливо, якщо ви вивчаєте нову територію, де саме ця оптимізована функція дозволяє розглянути ігрові дизайни, які не були дуже вивчені. Обмеження, які вводить оптимізація, можуть дати вам і цікавий геймплей (наприклад, обмеження кількості одиниць в іграх RTS, можливо, почалися як спосіб підвищення продуктивності, але вони також мають ефект гри).
Але зауважте, що в кожному з цих прикладів гра не могла існувати без оптимізації. Вони не починали з "повністю оптимізованого" двигуна - вони почали з чистої необхідності і пропрацювали свій шлях вгору. Вони розробляли нові технології та використовували їх для створення веселих ігор. А моторні трюки обмежувалися якомога меншою частиною кодової бази - більш важкі оптимізації були введені лише тоді, коли геймплей був зроблений в основному, або там, де це дозволило з’явитись цікаву нову функцію.
Тепер розглянемо гру, яку, можливо, ви хочете зробити. Чи справді є якесь технологічне диво, яке робить або порушує цю гру? Можливо, ви передбачаєте гру відкритого світу про нескінченний світ. Це справді центральна частина гри? Чи гра без нього просто не працюватиме? Можливо, ви думаєте про гру, де місцевість деформується без обмежень, з реалістичною геологією і подібною; чи можете ви змусити його працювати з меншим розмахом? Він би працював у 2D замість 3D? Отримайте щось веселе якнайшвидше - навіть якщо оптимізація може зажадати від вас переробити величезний фрагмент наявного коду, можливо, це варто того; і ви навіть можете усвідомити, що збільшення речі насправді не робить гру кращою.
Як приклад нещодавньої гри з великою кількістю оптимізацій, я назначу Factorio. Однією з важливих частин гри є ремені - їх багато тисяч, і вони несуть безліч окремих шматочків матеріалів по всій фабриці. Чи розпочалася гра з сильно оптимізованим ремінним двигуном? Немає! Насправді оригінальну конструкцію пояса неможливо було оптимізувати - вона на зразок фізичного моделювання предметів на поясі, що створило кілька цікавих речей, які ви могли зробити (саме таким чином ви отримуєте "виникаючий" геймплей - геймплей, який дивує дизайнер), але означало, що вам доведеться моделювати кожен предмет на поясі. З тисячами ременів ви отримуєте десятки тисяч фізично модельованих предметів - навіть просто видалення цього та надання ременів виконувати роботу дозволяє скоротити пов'язаний час процесора на 95-99%, навіть не враховуючи таких речей, як локальність пам'яті. Але це корисно робити лише тоді, коли ви дійсно досягнете цих меж.
Практично все, що мало відношення до ременів, потрібно було переробити, щоб оптимізувати пояси. І ремені потрібно було оптимізувати, адже вам потрібно було багато ременів для великої фабрики, а великі фабрики - одна привабливість гри. Зрештою, якщо ви не можете мати великі заводи, навіщо мати нескінченний світ? Смішно запитати - ранні версії не виходили :) Гра перероблялася та перероблялася протягом багатьох разів, щоб знайти там, де вони є зараз, - включаючи 100% ремейк, коли зрозуміли, що Java - це не шлях до така гра і перейшла на C ++. І це спрацювало чудово для Факторио (хоча це все-таки добре, що його не оптимізували з початку роботи - тим більше, що це був проект хобі, який, можливо, просто не вдався б інакше через відсутність інтересу).
Але справа в тому, що єВи можете зробити багато речей з фабрикою з обмеженою сферою - і багато ігор показали саме це. Обмеження можуть бути навіть більш широкими можливостями для розваги, ніж свободи; Чи було б Spacechem веселіше, якби "карти" були нескінченними? Якби ви почали із сильно оптимізованих "ременів", ви майже змушені були б піти цим шляхом; і ви не змогли вивчити інші напрямки проектування (наприклад, побачити, що цікавого ви можете зробити з імітованими фізикою конвеєрами). Ви обмежуєте потенційний дизайн-простір. Це може здатися не таким, тому що ви не бачите багато незавершених ігор, але важка частина отримує задоволення правильно - для кожної веселої гри, яку ви бачите, напевно є сотні, які просто не змогли дістатися і були забиті (або гірше, випущений як жахливі безлад). Якщо оптимізація допоможе вам у цьому - продовжуйте роботу. Якщо це не так ... це, ймовірно, передчасно. Якщо ви думаєте, що якийсь механік геймплея працює чудово, але йому потрібні оптимізації, щоб справді блищати - продовжуйте. Якщо у вас немає цікавої механіки,не оптимізуйте їх . Спершу знайдіть задоволення - ви знайдете, що більшість оптимізацій не допомагають у цьому і часто є злочинними.
Нарешті, у вас чудова, весела гра. Чи є сенс оптимізувати зараз ? Га! Це все ще не так зрозуміло, як ви могли подумати. Чи є щось веселе?ви можете зробити замість цього? Не забувайте, що ваш час все ще обмежений. Все вимагає зусиль, і ви хочете зосередити це на тому, де це найбільше важливо. Так, навіть якщо ви робите "безкоштовну гру" або гру з відкритим кодом. Дивіться, як грається гра; зауважте, де вистава стає вузьким місцем. Чи оптимізація цих місць робить для себе більше задоволення (як будівництво все більших, все більш заплутаних заводів)? Чи дозволяє вам залучати більше гравців (наприклад, із слабшими комп'ютерами або на різних платформах)? Завжди потрібно розставляти пріоритети - шукайте коефіцієнт зусиль та врожайності. Ви, ймовірно, знайдете велику кількість низько висячих фруктів лише від того, щоб грати у свою гру і спостерігати, як інші грають у цю гру. Але зауважте важливу частину - щоб потрапити туди, вам потрібна гра . Зосередьтеся на цьому.
Як вишня зверху, вважайте, що оптимізація ніколи не закінчується. Це не завдання з невеликою галочкою, яку ви закінчите та переходите до інших завдань. Завжди можна зробити «ще одну оптимізацію», і велика частина будь-якої розробки - це розуміння пріоритетів. Ви не здійснюєте оптимізацію заради оптимізації - ви робите це для досягнення певної мети (наприклад, "200 одиниць на екрані одразу на 333 МГц Пентію" - чудова мета). Не втрачайте слідів кінцевої мети лише тому, що ви занадто сильно зосереджуєтесь на проміжних цілях, які вже навіть не можуть бути передумовою для кінцевої цілі.