"Nicht zu früh optimieren" bedeutet nicht "die schlechteste Methode wählen, um Dinge zu tun". Sie müssen immer noch die Auswirkungen auf die Leistung berücksichtigen (es sei denn, Sie erstellen nur Prototypen). Es geht nicht darum, andere, wichtigere Dinge zu diesem Zeitpunkt in der Entwicklung zu lähmen - wie Flexibilität, Zuverlässigkeit usw. Wählen Sie einfache, sichere Optimierungen - wählen Sie die Dinge aus, die Sie einschränken und die Dinge, die Sie freihalten. Behalten Sie die Kosten im Auge. Solltest du stark tippen? Die meisten Spiele haben gut funktioniert. Wie viel würde es Sie kosten, das zu entfernen, wenn Sie interessante Anwendungen der Flexibilität für das Gamemplay finden würden?
Es ist viel schwieriger, optimierten Code zu ändern, insbesondere "intelligenten" Code. Es ist immer eine Entscheidung, die einige Dinge verbessert und andere verschlechtert (zum Beispiel, wenn Sie CPU-Zeit für die Speichernutzung eintauschen). Wenn Sie diese Wahl treffen, müssen Sie sich aller Auswirkungen bewusst sein - sie können katastrophal sein, aber sie können auch hilfreich sein.
Zum Beispiel wurden Commander Keen, Wolfenstein und Doom jeweils auf einer optimierten Rendering-Engine aufgebaut. Jeder hatte seinen "Trick", der es überhaupt erst ermöglichte, dass das Spiel existierte (jeder hatte im Laufe der Zeit weitere Optimierungen entwickelt, aber das ist hier nicht wichtig). Das ist in Ordnung . Es ist in Ordnung, den Kern des Spiels stark zu optimieren, das Denken, das das Spiel ermöglicht; Vor allem, wenn Sie Neuland erkunden, in dem diese optimierte Funktion es Ihnen ermöglicht, Spieldesigns zu berücksichtigen, die nicht viel erforscht wurden. Die durch die Optimierung eingeführten Einschränkungen können Ihnen auch ein interessantes Spielvergnügen bringen (z. B. haben die Begrenzungen der Einheitenzahl in RTS-Spielen möglicherweise begonnen, um die Leistung zu verbessern, sie haben jedoch auch einen Gameplay-Effekt).
Beachten Sie jedoch, dass in jedem dieser Beispiele das Spiel ohne die Optimierung nicht existieren könnte. Sie starteten nicht mit einem "voll optimierten" Motor - sie starteten mit dem Nötigsten und arbeiteten sich nach oben. Sie entwickelten neue Technologien und verwendeten sie, um lustige Spiele zu machen. Und die Engine-Tricks beschränkten sich auf einen möglichst kleinen Teil der Codebasis - die stärkeren Optimierungen wurden erst eingeführt, als das Gameplay größtenteils fertig war oder ein interessantes neues Feature auftauchte.
Nun überlegen Sie sich ein Spiel, das Sie vielleicht machen möchten. Gibt es wirklich ein technologisches Wunder, das dieses Spiel macht oder bricht? Vielleicht stellen Sie sich ein Open-World-Spiel in einer unendlichen Welt vor. Ist das wirklich das zentrale Stück des Spiels? Wäre das Spiel ohne nicht möglich? Vielleicht denkst du an ein Spiel, bei dem das Terrain unbegrenzt deformierbar ist, mit realistischer Geologie und so weiter. können Sie es mit einem kleineren Umfang arbeiten lassen? Würde es in 2D statt in 3D funktionieren? Holen Sie sich so schnell wie möglich etwas, das Spaß macht - auch wenn Sie bei Optimierungen möglicherweise einen großen Teil Ihres vorhandenen Codes überarbeiten müssen, kann es sich lohnen. und vielleicht merkt man sogar, dass das Spiel nicht wirklich besser wird, wenn man Dinge größer macht.
Als Beispiel für ein aktuelles Spiel mit vielen Optimierungen würde ich auf Factorio verweisen. Ein entscheidender Teil des Spiels sind die Gürtel - es gibt viele Tausende von ihnen und sie tragen viele einzelne Materialteile in Ihrer gesamten Fabrik. Hat das Spiel mit einer stark optimierten Riemenmaschine begonnen? Nein! Tatsächlich war es fast unmöglich, das ursprüngliche Gürteldesign zu optimieren - es wurde eine Art physikalische Simulation der Gegenstände auf dem Gürtel durchgeführt, die einige interessante Dinge hervorbrachte, die Sie tun konnten (auf diese Weise erhalten Sie ein "aufstrebendes" Gameplay - ein Gameplay, das überrascht der Designer), aber bedeutete, dass Sie jedes einzelne Element auf dem Gürtel simulieren mussten. Mit Tausenden von Bändern erhalten Sie Zehntausende von physisch simulierten Objekten - selbst wenn Sie diese entfernen und die Bänder die Arbeit erledigen lassen, können Sie die zugehörige CPU-Zeit um 95-99% verkürzen. auch ohne Berücksichtigung von Dingen wie der Speicherlokalität. Dies ist jedoch nur dann sinnvoll, wenn Sie tatsächlich an diese Grenzen stoßen.
Fast alles, was mit Riemen zu tun hatte, musste neu hergestellt werden, damit die Riemen optimiert werden konnten. Und die Bänder mussten optimiert werden, da für eine große Fabrik viele Bänder benötigt wurden und große Fabriken eine Attraktion des Spiels sind. Wenn Sie keine großen Fabriken haben können, warum dann eine unendliche Welt? Witzig, sollte man fragen - frühe Versionen haben das nicht getan :) Das Spiel wurde viele Male überarbeitet und umgestaltet, um zu sehen, wo es jetzt ist Spiel wie dieses und wechselte zu C ++. Und für Factorio hat es super geklappt (obwohl es immer noch gut war, dass es von Anfang an nicht optimiert wurde - zumal es sich um ein Hobbyprojekt handelte, das ansonsten aus Mangel an Interesse einfach gescheitert wäre).
Aber die Sache ist, es gibtViele Dinge, die Sie mit einer Fabrik mit begrenztem Umfang tun können - und viele Spiele haben genau das gezeigt. Grenzen können zum Spaß noch stärker sein als Freiheiten; würde Spacechem mehr Spaß machen, wenn die "Karten" unendlich wären? Wenn Sie mit stark optimierten "Gürteln" anfangen würden, wären Sie so ziemlich gezwungen, diesen Weg zu gehen. und man konnte keine anderen Konstruktionsrichtungen erkunden (wie zum Beispiel zu sehen, welche interessanten Dinge man mit physikalisch simulierten Förderbändern machen kann). Sie begrenzen Ihren potenziellen Gestaltungsspielraum. Es mag nicht so aussehen, weil Sie nicht viele unvollendete Spiele sehen, aber der schwierige Teil ist, den Spaß richtig zu machen - für jedes lustige Spiel, das Sie sehen, gibt es wahrscheinlich Hunderte, die einfach nicht dorthin gelangen konnten und verschrottet wurden (oder schlimmer, als schreckliches Durcheinander veröffentlicht). Wenn Ihnen die Optimierung dabei hilft, fahren Sie fort. Wenn es nicht ... Es ist wahrscheinlich verfrüht. Wenn Sie der Meinung sind, dass einige Gameplay-Mechaniken großartig funktionieren, aber Optimierungen benötigen, um wirklich zu glänzen, dann machen Sie weiter. Wenn Sie nicht interessante Mechanik haben,optimiere sie nicht . Finden Sie zuerst den Spaß - Sie werden feststellen, dass die meisten Optimierungen dabei nicht helfen und oft schädlich sind.
Endlich hast du ein tolles, lustiges Spiel. Ist es sinnvoll, jetzt zu optimieren ? Ha! Es ist immer noch nicht so klar, wie Sie vielleicht denken. Gibt es etwas, das Spaß macht?können Sie stattdessen tun? Vergiss nicht, dass deine Zeit immer noch begrenzt ist. Alles ist anstrengend, und Sie möchten sich darauf konzentrieren, wo es am wichtigsten ist. Ja, auch wenn Sie ein "freies Spiel" oder ein "Open Source" -Spiel machen. Beobachten Sie, wie das Spiel gespielt wird. bemerken, wo die Leistung zu einem Engpass wird. Macht die Optimierung dieser Orte mehr Spaß (wie das Bauen immer größerer, immer verwickelterer Fabriken)? Ermöglicht es Ihnen, mehr Spieler anzuziehen (z. B. mit schwächeren Computern oder auf verschiedenen Plattformen)? Sie müssen immer Prioritäten setzen - achten Sie auf das Verhältnis von Aufwand zu Ertrag. Sie werden wahrscheinlich viele niedrig hängende Früchte finden, wenn Sie Ihr Spiel spielen und anderen beim Spielen zuschauen. Beachten Sie jedoch den wichtigen Teil - um dorthin zu gelangen, benötigen Sie ein Spiel . Konzentriere dich darauf.
Bedenken Sie als Krönung, dass die Optimierung niemals endet. Es ist keine Aufgabe mit einem kleinen Häkchen, die Sie abschließen und mit anderen Aufgaben fortfahren. Es gibt immer noch "eine weitere Optimierung", und ein großer Teil jeder Entwicklung besteht darin, die Prioritäten zu verstehen. Sie optimieren nicht um der Optimierung willen, sondern um ein bestimmtes Ziel zu erreichen (z. B. "200 Einheiten gleichzeitig auf dem Bildschirm auf einem 333-MHz-Pentium" ist ein großartiges Ziel). Verliere nicht den Überblick über das Endziel, nur weil du dich zu sehr auf die Zwischenziele konzentrierst, die möglicherweise nicht einmal mehr Voraussetzungen für das Endziel sind.