This presentation is created in a Marketing Internship under the guidance of Prof. Sameer Mathur, IIM Lucknow. This Presentation is a detailed study of Disney Mini Case.
The document discusses the history and development of cartoons from their origins as preparatory drawings to their evolution into animated films. It notes that some of the earliest cartoons date back to the early 1900s and were black and white and silent. It then covers some of the major developments like the introduction of sound and color as well as the rise of animated television shows and Saturday morning cartoons. The document also mentions how cartoons are now commonly created using computer animation technology.
- Game development involves large teams working together to create high quality code. Coding standards and conventions help ensure uniform style across teams.
- Key aspects of development include debugging priorities, testing code quality through test harnesses, and focusing on speed, size, flexibility and other factors.
- Effective design principles include reusing code, documenting work, scheduling tasks, fixing errors early, and balancing production needs with creative work. Managing teams and processes well is important for success.
Animation has its origins in early cinema through stop-motion photography and trick effects. It evolved through the work of pioneers like Émile Cohl, Winsor McCay, the Fleischer brothers, and Walt Disney. Disney popularized character animation and brought color and sound to full-length animated films. Advances in computer graphics have enabled highly realistic computer-generated animation. The history of animation involves contributions from both American and international studios across different styles and technologies.
The document discusses various architectural styles for software design including traditional, object-oriented, layered, client-server, data flow, shared, interpreter, implicit invocation, and peer-to-peer styles. It also covers tier-based architectures with different tiers residing on the same or different machines. The key aspects of architecture design discussed are establishing a conceptual framework, documenting viewpoints, ensuring consistency, and considering the development environment context.
[Ubisoft] Perforce Integration in a AAA Game EnginePerforce
This document discusses the integration of Perforce source control software into the Anvil game engine used for Assassin's Creed games. It describes how Ubisoft built a custom integration library called Guildlib using the Perforce C++ API to fully integrate Perforce into the engine. This allowed them to store massive game assets efficiently in a "Bigfile" and handle synchronization of hundreds of developers across locations. The tight integration provided benefits like improved performance, custom file statuses, and full control over file system operations.
The first animated cartoon was produced in 1908 in France. In the 1930s-1960s, cartoons flourished and were commonly shown before movies. Walt Disney produced Steamboat Willie in 1928, introducing synchronized sound to cartoons. Disney later produced the first full-color cartoon, Flowers and Trees, in 1931. While animation is now often computer-generated, professionals consider hand-drawn films to be the true cartoons.
Use a game engine to create a video game. Its reusable components provide the general functionality. Define resources and building blocks.
What are the key elements of a game engine?
This presentation is created in a Marketing Internship under the guidance of Prof. Sameer Mathur, IIM Lucknow. This Presentation is a detailed study of Disney Mini Case.
The document discusses the history and development of cartoons from their origins as preparatory drawings to their evolution into animated films. It notes that some of the earliest cartoons date back to the early 1900s and were black and white and silent. It then covers some of the major developments like the introduction of sound and color as well as the rise of animated television shows and Saturday morning cartoons. The document also mentions how cartoons are now commonly created using computer animation technology.
- Game development involves large teams working together to create high quality code. Coding standards and conventions help ensure uniform style across teams.
- Key aspects of development include debugging priorities, testing code quality through test harnesses, and focusing on speed, size, flexibility and other factors.
- Effective design principles include reusing code, documenting work, scheduling tasks, fixing errors early, and balancing production needs with creative work. Managing teams and processes well is important for success.
Animation has its origins in early cinema through stop-motion photography and trick effects. It evolved through the work of pioneers like Émile Cohl, Winsor McCay, the Fleischer brothers, and Walt Disney. Disney popularized character animation and brought color and sound to full-length animated films. Advances in computer graphics have enabled highly realistic computer-generated animation. The history of animation involves contributions from both American and international studios across different styles and technologies.
The document discusses various architectural styles for software design including traditional, object-oriented, layered, client-server, data flow, shared, interpreter, implicit invocation, and peer-to-peer styles. It also covers tier-based architectures with different tiers residing on the same or different machines. The key aspects of architecture design discussed are establishing a conceptual framework, documenting viewpoints, ensuring consistency, and considering the development environment context.
[Ubisoft] Perforce Integration in a AAA Game EnginePerforce
This document discusses the integration of Perforce source control software into the Anvil game engine used for Assassin's Creed games. It describes how Ubisoft built a custom integration library called Guildlib using the Perforce C++ API to fully integrate Perforce into the engine. This allowed them to store massive game assets efficiently in a "Bigfile" and handle synchronization of hundreds of developers across locations. The tight integration provided benefits like improved performance, custom file statuses, and full control over file system operations.
The first animated cartoon was produced in 1908 in France. In the 1930s-1960s, cartoons flourished and were commonly shown before movies. Walt Disney produced Steamboat Willie in 1928, introducing synchronized sound to cartoons. Disney later produced the first full-color cartoon, Flowers and Trees, in 1931. While animation is now often computer-generated, professionals consider hand-drawn films to be the true cartoons.
Use a game engine to create a video game. Its reusable components provide the general functionality. Define resources and building blocks.
What are the key elements of a game engine?
Niezależnie od używanego języka programowania, korzystając z liczb zmiennoprzecinkowych można natknąć się na wiele pułapek. Dlatego warto posiąść podstawową wiedzę związaną z tymi typami danych oraz trzymać się reguł, które pozwolą uniknąć niemiłych niespodzianek podczas programowania obliczeń.
"C++ in game programming" [Polish] Prezentacja do wykładu przygotowanego na Koło Naukowe Twórców Gier "Polygon" przy Politechnice Warszawskiej. Opisuje: dlaczego do programowania gier używa się właśnie języka C++, co stosować, a czego unikać, aby pisany kod był dobry i przede wszystkim wydajny w działaniu.
Date: 2010-10-30
"Pitfalls of Object-Oriented Programming" [Polish] Prezentacja do wykładu przygotowanego na Koło Naukowe Twórców Gier "Polygon" na Politechnice Warszawskiej, a w drugiej wersji wygłoszonego także na AGH w Krakowie.
Opracowana na podstawie tekstu Fanatyzm obiektowy, przedstawia krytyczne podejście do projektowania i programowania obiektowego (m.in. pisania wrapperów na używane biblioteki, nadmiernej generalizacji, nadużywania dziedziczenia, enkapsulacji, wzorców projektowych) oraz jego negatywny wpływ na prostotę i czytelność kodu. Jako alternatywę prezentuje podejście DOD (Data-Oriented Design).
Published 2011-03-30
Tworzenie wydajnego kodu c++ w podejściu zorientowanym na daneAdam Sawicki
(Polish) Prezentacja do prelekcji wygłoszonej podczas VIII Ogólnopolskiej Konferencji Inżynierii Gier Komputerowych IGK'8-2011 w Siedlcach.
Autorzy: Adam Sawicki i Tomasz Dąbrowski.
Streszczenie referatu: Artykuł opisuje wady programowania obiektowego - zarówno od strony projektowej, jak i ze względu na wydajność kodu. Porusza problem opóźnienia w dostępie do pamięci RAM we współczesnych architekturach komputerowych. Przedstawia programowanie zorientowane na dane (ang. DOD - Data-Oriented Design) jako alternatywne podejście do projektowania i implementowania silnika gry kładące nacisk na optymalizację struktur danych pod kątem szybkości. Porusza także problem wydajności poszczególnych konstrukcji języka C++.
Published 2011-03-26
Prezentacja do wykładu na temat J2ME, czyli programowania w języku Java midletów na komórki. Omawia bardziej lub mniej dokładnie wszystkie moduły wchodzące w skład standardu MIDP 2.0. Ma 98 slajdów.
Prezentacja do wykładu na temat Direct3D 9. Przegląd biblioteki od inicjalizacji, poprzez renderowanie trójkątów, bufory wierzchołków i indeksów, teksturowanie, oświetlenie aż do shaderów. Ma 96 slajdów.
Niezależnie od używanego języka programowania, korzystając z liczb zmiennoprzecinkowych można natknąć się na wiele pułapek. Dlatego warto posiąść podstawową wiedzę związaną z tymi typami danych oraz trzymać się reguł, które pozwolą uniknąć niemiłych niespodzianek podczas programowania obliczeń.
"C++ in game programming" [Polish] Prezentacja do wykładu przygotowanego na Koło Naukowe Twórców Gier "Polygon" przy Politechnice Warszawskiej. Opisuje: dlaczego do programowania gier używa się właśnie języka C++, co stosować, a czego unikać, aby pisany kod był dobry i przede wszystkim wydajny w działaniu.
Date: 2010-10-30
"Pitfalls of Object-Oriented Programming" [Polish] Prezentacja do wykładu przygotowanego na Koło Naukowe Twórców Gier "Polygon" na Politechnice Warszawskiej, a w drugiej wersji wygłoszonego także na AGH w Krakowie.
Opracowana na podstawie tekstu Fanatyzm obiektowy, przedstawia krytyczne podejście do projektowania i programowania obiektowego (m.in. pisania wrapperów na używane biblioteki, nadmiernej generalizacji, nadużywania dziedziczenia, enkapsulacji, wzorców projektowych) oraz jego negatywny wpływ na prostotę i czytelność kodu. Jako alternatywę prezentuje podejście DOD (Data-Oriented Design).
Published 2011-03-30
Tworzenie wydajnego kodu c++ w podejściu zorientowanym na daneAdam Sawicki
(Polish) Prezentacja do prelekcji wygłoszonej podczas VIII Ogólnopolskiej Konferencji Inżynierii Gier Komputerowych IGK'8-2011 w Siedlcach.
Autorzy: Adam Sawicki i Tomasz Dąbrowski.
Streszczenie referatu: Artykuł opisuje wady programowania obiektowego - zarówno od strony projektowej, jak i ze względu na wydajność kodu. Porusza problem opóźnienia w dostępie do pamięci RAM we współczesnych architekturach komputerowych. Przedstawia programowanie zorientowane na dane (ang. DOD - Data-Oriented Design) jako alternatywne podejście do projektowania i implementowania silnika gry kładące nacisk na optymalizację struktur danych pod kątem szybkości. Porusza także problem wydajności poszczególnych konstrukcji języka C++.
Published 2011-03-26
Prezentacja do wykładu na temat J2ME, czyli programowania w języku Java midletów na komórki. Omawia bardziej lub mniej dokładnie wszystkie moduły wchodzące w skład standardu MIDP 2.0. Ma 98 slajdów.
Prezentacja do wykładu na temat Direct3D 9. Przegląd biblioteki od inicjalizacji, poprzez renderowanie trójkątów, bufory wierzchołków i indeksów, teksturowanie, oświetlenie aż do shaderów. Ma 96 slajdów.
2. Agenda
• Część I: Gry ogólnie
– Czym jest: gra, silnik gry
– Elementy składowe
• Część II: Szczegóły techniczne
– Warstwy
– Jak działa gra
– Wydajność
• Część III: Praca
– Stanowiska
– Wymagania
2
6. Elementy: Grafika
• 2D lub 3D
• Wydajne renderowanie wielu obiektów
• Efekty oświetlenia i inne
• Animacje
• Wykorzystanie GPU
– DirectX lub OpenGL
– Shadery
6
7. Elementy: Fizyka
• Fizyka ciała sztywnego
– Wykrywanie kolizji
– Działanie sił
• Fizyka pojazdów, płynów,
ciał miękkich, ragdoll,
character controller...
7
8. Elementy: AI
• Znajdowanie drogi
• Podejmowanie decyzji
• Zachowania postaci
• Technologie:
– Automaty stanów
– Behavior Trees
8
14. Pętla gry
• Gra działa w pętli
• Renderuje kolejne klatki obrazu
• Płynność animacji mierzymy w FPS
14
while(!Exit())
{
ReadInput();
UpdateObjects();
RenderFrame();
}
15. Wydajność
• Wydajność jest kluczowa (na niższych warstwach)
– Język C++
– Specyficzne techniki: architektura komponentowa,
Data-Oriented Design
• Programowanie równoległe
15
CPU 1
CPU 2
CPU 3
CPU 4
GPU
16. Praca – Stanowiska
• Game Programmer
• Engine/Tech Programmer
• Graphics/Renderer Programmer
• Gameplay/Script Programmer
• Animation Programmer
• AI Programmer
• Network Programmer
• Tools/GUI Programmer
16
17. Praca – Wymagania
• C/C++
• Inne języki: Java, Objective-C,
Flash, HTML, CSS, JavaScript
• Języki skryptowe: Lua, Python
• Programowanie obiektowe
• GUI: C#/.NET, MFC,
wxWidgets, Qt, WinAPI
• DirectX, OpenGL
• Unity, Unreal Engine
• Optymalizacja,
programowanie wielowątkowe
• Programowanie sieciowe
• Systemy kontroli wersji:
Perforce, Git, SVN
• Znajomość platform: iOS,
Android, X360, PS3, Linux, ...
• Matematyka: algebra,
geometria
• Metodyki Agile
• Pasja do gier
• Język angielski
• Doświadczenie: lata w branży,
ukończone gry
17
Gry to z jednej strony rodzaj oprogramowania, tak jak inne programy komputerowe.
Z drugiej jednak to forma rozrywki, więc ich produkcja rządzi się prawami podobnymi do branż takich jak filmy, muzyka czy książki.
Na przykład: instytucja wydawcy, trailery i hype przed premierą.
Jednak niektóre gry np. online rozwijane są w modelu bliższym zwykłemu oprogramowaniu – wydawanie małych poprawek, kontakt z klientami.
Obrazek: gra Assassin’s Creed 2.
Gra składa się z kodu i zasobów.
Kod piszą programiści.
Zasoby (inaczej assety, content) tworzą artyści – graficy, muzycy itd. Składają się na nie: modele 3D, tekstury, animacje, efekty dźwiękowe, muzyka, teksty dialogów i wiele innych.
W innego rodzaju oprogramowaniu (np. na stronach WWW) też występuje grafika lub przynajmniej design UI, ale to w grach zasoby stanowią bardzo dużą część (większość?) potrzebnego nakładu pracy.
Silnik gry to tak naprawdę rozbudowana biblioteka (inaczej framework, middleware) wspierająca tworzenie gier.
Pojęcia „silnik” nie używa się powszechnie w innego rodzaju oprogramowaniu, czasami jednak występuje (np. w przeglądarkach internetowych).
Najpopularniejsze: Unity, Unreal Engine, CryENGINE.
Ich nowe licencje są bardzo przystępne – za niską cenę lub zupełnie za darmo można z ich użyciem tworzyć nawet komercyjne gry.
Zdjęcie: Elevated by Rgba & TBC – demoscene 4k intro.
Zdjęcie: gra Portal.
Sztuczna inteligencja.
Nie w sensie akademickim typu sieci neuronowe albo algorytm grający jak najlepiej,
tylko taka, która będzie „oszukiwać” i dobrze wyglądać – realistycznie.
Zdjęcie: postać z gry Black & White.
O ile niższe warstwy, jak silnik, muszą działać jak najwydajniej, więc pisane są w kodzie natywnym w C++, o tyle na wyższym poziomie stosowane są prostsze i wygodniejsze języki skryptowe.
Lua jest popularna, ponieważ jest prosta, działa szybko i dobrze nadaje się jako język skryptowy do osadzania w aplikacjach.
Unity posiada zintegrowane Mono, więc można tam programować w C#, JavaScript i Boo.
Zdjęcie: Unreal Engine Blueprint.
Zastosowanie narzędzi wpierających wizualną edycję, wymianę zasobów (czy nawet kodu skryptów) bez ponownego uruchamiania gry i WYSIWYG skraca czas iteracji, a to jest bardzo ważne.
Zdjęcie: edytor Unity.
Wszyscy informatycy lubią warstwy :)
Współczesna gra składa się z gry właściwej i silnika.
Silnik komunikuje się ze sprzętem graficznym poprzez interfejs – jedno z API graficznych – Direct3D lub OpenGL.
Dawniej:
Na początku była sama gra, komunikująca się bezpośrednio ze sprzętem.
Wraz z rozwojem systemów operacyjnych pojawił się sterownik graficzny.
Wraz ze wzrostem złożoności gier pojawił się wydzielony silnik.
Obecnie gry znacznie się rozwinęły, silniki także. Również API graficzne zostały rozbudowane, a przez to sterownik graficzny też musi wykonywać coraz więcej pracy.
W najbliższej przyszłości czeka nas edycja nowych API graficznych, które będą operowały na niższym poziomie – bliżej sprzętu. Ich programowanie będzie trudniejsze. Mniej logiki ukrytej będzie w sterownikach graficznych, a więcej obowiązków przejmie na siebie silnik gry.
Inaczej niż programy, które:
wykonują jakieś zadania i kończą się (aplikacje konsolowe, skrypty)
oczekują na zdarzenia od użytkownika (aplikacje okienkowe – GUI)
Gry działają w pętli, nieustannie wykonując kolejne „klatki”. W każdej klatce stan świata gry jest przeliczany (symulacja awansowana o krok czasu), po czym od nowa odrysowywana jest grafika na całym ekranie (nie tylko miejsca, które się zmieniły).
Wydajność gier mierzymy w FPS (Frames Per Second – klatki na sekundę).
Jednostka to tak naprawdę Hz.
To jest miara nieliniowa! 1 / czas klatki. Dlatego nie można mówić „wzrost o X FPS”.
Jednak nadaje się do wyrażania płynności, bo człowiek widzi płynną animację od ok. 30 FPS (a 60 FPS to wbrew pozorom bardzo widoczna różnica).