MMoodduullee HHaannddbbooookk - QUBP.Hanna/CSC3049/resources/CSC3049 Module Handbook...MMoodduullee...
Transcript of MMoodduullee HHaannddbbooookk - QUBP.Hanna/CSC3049/resources/CSC3049 Module Handbook...MMoodduullee...
MMoodduullee HHaannddbbooookk DDrr.. PPhhiilliipp HHaannnnaa
CCoonntteennttss
PPaaggee 11:: CCoovveerr
PPaaggee 22:: IInnttrroodduuccttiioonn // LLeeaarrnniinngg oouuttccoommeess
PPaaggee 33:: OOvveerrvviieeww ooff AAsssseessssmmeenntt
PPaaggee 44:: MMoodduullee wweeeekkllyy ccoonntteenntt bbrreeaakkddoowwnn
PPaaggee 55:: LLeeaarrnniinngg oonn tthhiiss mmoodduullee
PPaaggee 66:: PPrroojjeecctt iinnttrroodduuccttiioonn
PPaaggee 77:: PPrroojjeecctt mmeennuu
PPaaggee 88:: SSeelleeccttiinngg aa pprroojjeecctt
PPaaggee 99:: DDeevveellooppmmeenntt eennvviirroonnmmeenntt
PPaaggee 1100:: PPrroojjeecctt aassssuurraanncceess
PPaaggee 1111:: PPrroojjeecctt ppllaann
PPaaggee 1122:: RReeccoommmmeennddeedd rreeaaddiinngg II
PPaaggee 1133:: RReeccoommmmeennddeedd rreeaaddiinngg IIII
PPaaggee 1144:: UUsseeffuull IInnffoorrmmaattiioonn
IInnttrroodduuccttiioonn aanndd MMoodduullee OOvveerrvviieeww
Welcome to CSC3049 Aspects of Game Engine Development. In a nutshell, this module
explores a number of different software components commonly found within 3D game
engines. The module will also provide you with an opportunity to develop one or more game
engine components. This will not only improve your programming skills, but importantly also
provide you with a means of enriching your software portfolio and demonstrating your
development skills.
I do hope you will enjoy the module and find it both interesting and informative. Certainly I
have found that the types of programming required to develop a game engine encompasses
one of the most technically interesting and exciting forms of application development.
This document is structured as follows:
• Overview of the learning outcomes and assessment associated with this module.
• Module contents and weekly lecture schedule
• Project details, timeline and assessment pro-forma
• Recommended reading and useful links/information
LLeeaarrnniinngg OOuuttccoommeess
The core learning outcomes for this module are as follows:
1. Demonstrate knowledge and understanding of:
Aspects needed to construct a game engine, including: architecture, update and
render pipelines, scene graph formation, collision detection and contact resolution,
and component integration.
Core components commonly found within games, including: real-time physics,
terrain modelling, animation, and graphical effects.
2. Ability to apply and synthesis knowledge and understanding in order to create one or
more game engine components.
Can I sum up the above into a more meaningful
chunk of digestible information? In essence,
following the module, you should have a good
understanding of the different components which
go together to make a game engine and you should
have demonstrated this understanding by
developing some of your own game engine
components.
AAsssseessssmmeenntt
This module does not have a final unseen written examination. Instead, assessment is
100% project based
During the first semester you will learn about different game engine components,
building up your knowledge and understanding of how a game engine operates. At the
end of the first semester you will decide which game engine component(s) most interest
you and put forward a project proposal involving the selected components. During the
second semester you will undertake your project, developing a game engine harness that
permits you to realise your chosen game engine component(s). At the end of the second
semester you will submit your project, which will be assessed and will provide your mark
for this module. As the module is 1.5 weighted this will be an important piece of work.
Why did I opt for a project? Mostly because I do not like unseen written examinations
(which tend to, in part, measure ‘examination technique’ and simply do not provide a
test which is in anyway reflective of what ‘real’ programmers do in the ‘real’ world).
Projects also tend to result in better learning, providing you with an opportunity to
further build up your programming skills. Finally, and very importantly, the project will
provide you with an opportunity to enrich your programming portfolio, offering a very
real demonstration of your programming prowess.
More precise details on the project’s assessment can be found within the CSC3049
Project Document
Important: The module has been scheduled to make sure you have a minimum of one
semester in which to tackle the project. However, you don’t have to wait until the start of
the second semester before commencing your project. You can start the project as soon
as you’ve got a solid idea for what it is that you wish to develop.
MMoodduullee CCoonntteenntt
The topics to be explored are as set out in the following weekly plan:
Warning: Depending on time and focus constraints the order might be a bit different, or
certain items skipped. Additionally, the module delivery might extend into Week 12.
• Introduction and Game Engine Overview Week
1
• Collision Detection: including mathematical background, bounding volumes, closest point and primitive/ray intersection, bounding volume hierarchies, spatial partitioning.
Weeks 2 – 4:
• Rigid Body Dynamics: including laws of motion, simulation and modelling aspects, handling rotation and orientation, contact generation including resting contacts and friction, stability and optimisation.
Weeks 5 – 7:
• Synthesis break Week
8
• Rendering and Animation: e.g. render pipelines, deferred rendering, graphical LOD , controllers and animation.
Week 9
• Graphics Effects: e.g. shadows, water, terrain, decals, bill boarding, instancing, relief mapping.
Week 10
• Other Game Engine Components: e.g. audio, networking, hand-held devices.
Week 11
This module will cover a lot of ground (the amount of
‘notes’ you will have at the end of the module may be
large in comparison to other Level 3 module).
However, there is a danger in exploring too much
material. In particular, as the amount of material
increases then it becomes more difficult for you to
find the time to be able to adequately explore the
material. From an educational point of view it is
utterly pointless of me to throw large quantities of
information if you will be unable to find the time
needed to explore and learn.
So why have I included a lot of material? And how can
you use the material to help you learn?
I included a lot of material as I felt it was important to explore module material to an
extent where you could potentially build your own implementation. However, that said,
the topics explored within the module hold considerably more depth and complexity
beyond that which we will cover.
In terms of how you can use the material to help you learn, I do not expect you to explore
every single topic covered within the module to the same level of depth. Topics which are
of particular interest or of direct use to your planned project should be thoroughly
explored. Topics which are not of particular interest should be explored to the extent
where you are happy you understand the basic principles behind the topic.
PPrroojjeecctt
Without any doubt whatsoever, the project is the most important aspect of this module,
providing an opportunity for you to build up and demonstrate your programming skills and
accounting for 100% of the assessment on this module. As the module has a weighting of 1.5
this also entails that the project will have a significant contribution towards your overall
degree classification. Finally, given the importance of developing a portfolio of work, the
project will also provide a means of demonstrating your programming competency to
potential placement providers and employers.
As mentioned, the project will involve the creation of one or more game engine components.
In keeping with the learning philosophy adopted within CSC2007, I want to provide you with
the freedom to select your own project. More precisely, I would love for you to select a
project that you feel is going to be fun, interesting and useful to your future plans. This will
help provide you with the motivational bedrock on which to survive the many frustrating
debugging sessions which doubtless await you!
Whilst I do wish to give you as much freedom as possible, the project will obviously need to
be constrained within the broad confines of game engine architecture. In particular, all
projects will need to build some form of game object model, with game objects held within
some form of scene graph and graphically rendered on screen.
The following page provides a menu
of recommended, albeit suggestively,
project components. This is then
followed by information on how you
might wish to combine menu options
to arrive at your chosen project.
SSeelleeccttiinngg aa pprroojjeecctt
The above menu of options can be combined in
different ways. For example, as a main course you
might decide to write a 3D physics component
combined with a basic scene graph and renderer side
order. Alternatively, you might decide that your main
course will be to develop a renderer component
supporting a number of graphical effects, combined
with a very basic scene graph.
The above menu of options is not exhaustive. In particular, you can also propose your own
project exploring other aspects of a game engine. Do be aware that I will need to approve
any such project to ensure that it will provide you with an opportunity to demonstrate the
learning outcomes assessed within this module.
As with CSC2007, your initial project plan is not intended to be highly binding; rather it is
intended to provide you with a general development direction towards which you can move.
If during your project you wish to change emphasis or
include/remove features then this will not be a problem. The
assessment will be simply and wholly based on the software
you have develop at the end of the project and not on what
you planned to developed at the start of the project. In other
words, you will only be awarded marks for what you have
managed to develop and you will never be punished for not
developing something.
TTyyppeess ooff ddeevveellooppmmeenntt eennvviirroonnmmeenntt
You can select one of three possible development environments:
1. XNA
2. C++ using OpenGL
3. C++ using DirectX
XNA you will already have explored during Stage 2. You will
also explore OpenGL development within your Computer
Graphics module. DirectX, for many, offers an unexplored API.
You are free to select the development environment within which you wish to build your
project. Given the current strong emphasis on C++ coding within the games industry there
would be clear merit in opting for a C++ development - although depending on the type of
career you wish to explore this may not be an issue.
Please be aware that if you decide to select a development environment with which you are
not familiar, then, I will take this into account when assessing your project. For example,
given two functionally identical software components, one developed in C++ and DirectX
(assuming the student had no previous exposure to DirectX) and the other developed using
XNA, the XNA project would not receive the same mark as the C++/DirectX project as the
overall challenge between the two projects was different.
I do want to stress here that my aim is not to either reward or punish development using a
particular environment, but to provide a fair and consistent baseline where overall project
complexity is taken into consideration within the assessment. In this regard, it is your choice if
you want to allocate some of your project complexity to learning a new language, API, etc.
Aside: Whilst I will ensure that the assessment is fair and consistent across all projects, I
would recommend using C++ with either OpenGL or DirectX in terms of providing with you
with a well balanced set of programming skills. In terms of selecting OpenGL over DirectX, this
will depend on personal preference and future plans. Learning DirectX will provide you with
experience of a widely used API, but sticking with OpenGL may mean you can explore your
chosen project area in greater depth.
AAssssuurraanncceess
Within CSC2007 I encouraged students to make
use of existing code, stressing that there was no
need to reinvent the wheel and that reusing
existing solutions is an integral aspect of most
forms of software development (most certainly
including game development).
Important: This module adopts the opposite
view to CSC2007. I do not want you to make use
of existing code, and I do want you to reinvent
the wheel.
So why am I adopting two very different approaches across both CSC2007 and CSC3049? The
possibility of effects due to senility aside, there is a solid educational basis underpinning this
decision: the types of ‘wheel’ that need to be reinvented within this module are both
complex and difficult to develop. By developing such components from the ground up you
will:
Gain a much better insight into how the components operate as you will have to think
deeply and carefully about your solution and get ‘close to the code’.
Experience a difficult, but hopefully rewarding, development task that will result in you
becoming a more capable programmer.
In other words, the hassle and pain of developing components from the ground up will
ultimately result in a beneficial learning experience – and this really is the whole purpose of
this module, and indeed your entire degree.
No matter which component(s) you decide to develop, you will be able to find existing source
code that you may consult and explore in order to help you better understand a coded
solution and to inspire your own coded solution. The use of existing source code cannot
extend beyond this.
I know that the majority of students will follow the module requirements; however, it is
important I point out the dire consequences lest anyone be subject to temptation once the
going gets tough and a readymade solution is available with a quiet, but persistent, voice
saying ‘go on, no one will never know’... well, you might manage to sneak it past me, then
again you might not. Any detected plagiarism on this module will be automatically classified
as a major academic offense and as the module is 1.5 weighted, this means it would have a
major impact on your entire degree. It is simply not worth the risk.
PPrroojjeecctt ppllaann
During your CSC3045 Agile & Component Based Development module you will learn about
agile development techniques. An agile approach meshes well with this type of project (and
indeed most types of software development) and I will tentative assume that everyone will
adopt an agile approach towards tackling the project (thereby accounting for the types of
hand-in required following each sprint in the second semester).
SSeemmeesstteerr 11
SSeemmeesstteerr 22
Precise details of the project assessment can be found within the CSC3049 Project Document
Week 1 Week 2 Week 3 Week 4 Week 5 Week 6 Week 7 Week 8 Week 9 Week 10 Week 11 Week 12
Aims and aspirations document: This
document permits you to set-out your
initial aims and goals for the module,
i.e. what you find interesting, what
type of development appeals, etc. This
will be of use in helping me understand
what you want to get out of the
module.
Project proposal document: This document will set out
what you hope to accomplish within the project in terms of
the type and features of the game engine component(s)
you wish to develop. In accordance with an agile approach
you will also put together a collection of user stories
describing the system you plan to develop. As a reminder,
the project proposal is not a binding document –it simply
defines what you hope to accomplish.
Week 1 Week 2 Week 3 Week 4 Week 5 Week 6 Week 7 Week 8 Week 9 Week 10 Week 11 Week 12
Sprint 1
Report
Sprint 2
Report
Sprint 3
Report
Sprint 4
Report
Sprint 5
Report
Submission
and Demo
Each sprint progress report will consist of :
• Retrospective: providing a reflective account of work over the last
two weeks and reviewing your approach towards the project. You
might also decide to add/remove/change your user stories at this
point if you feel the project should take on a different direction.
• Sprint planning: providing details of the user stories you intend to
implement within the next sprint.
• Sprint review meeting: Demonstration of the code developed
during the completed sprint.
Start Week 12 – Project submission
Final project submission, comprising
game engine component(s) alongside
a suitable test harness enabling
component functionality to be
demonstrated.
Week 12 – Project Demonstration
Demonstration of the developed game
engine components.
RReeccoommmmeennddeedd RReeaaddiinngg
The module contains a lot of reading. Whilst you should explore all topics contained within
the module, you will likely wish to concentrate on certain areas of interest (obviously those
you intend to explore within your project!).
A total of four text books are recommended. I really do recommend that you consider
purchasing the books as they all provide an excellent reference source and explore topics
which are of real relevance to game development. In other words, all of the text books will
serve you well in the future.
Throughout the module you will also be provided with relevant research papers, book
extracts, etc. which you can accumulate to provide a complete set of lecture notes.
The recommended textbooks are:
Game Physics Engine Development
Hardcover: 552 pages
Publisher: Morgan Kaufmann (26 Sep 2010), 2nd Ed.
ISBN-10: 0123819768
ISBN-13: 978-0123819765
This book provides an excellent step-by-step development of a
game physics engine. It is very well structured and offers an
educational read. This module draws upon this textbook in
order to explore rigid body dynamics. If you intend to include
physics as part of your project, then you should definitely
purchase this book.
Game Engine Architecture Hardcover: 864 pages Publisher: A K Peters (May 2009) ISBN-10: 1568814135 ISBN-13: 978-1568814131 This book offers a high-level, comprehensive exploration of
game engine architecture. This module refers to the book in
terms of exploring high level architecture, game object models,
animation, etc.
RReeccoommmmeennddeedd RReeaaddiinngg
Real-Time Collision Detection
Hardcover: 593 pages
Publisher: Morgan Kaufmann; Har/Cdr edition (20 Jan
2005)
ISBN-10: 1558607323
ISBN-13: 978-1558607323
This book offers a broad and in-depth exploration of different
real-time collision detection techniques. Whilst it is the most
mathematically complex of the recommended textbooks, it
provides a really excellent text for exploring object bounds,
intersection detection methods, spatial decomposition, etc.
This module draws upon the book when exploring collision
detection, etc. If your project focussed on scene graphs,
intersection detection, etc. then you should definitely purchase
this book.
Artificial Intelligence for Games Hardcover: 896 pages Publisher: Morgan Kaufmann; Har/DVD edition (18 Sep 2009) , 2nd Ed. ISBN-10: 0123747317 ISBN-13: 978-0123747310 This book provides an extensive exploration of different AI
techniques used within games. Whilst we do not explicitly
explore AI within this module (instead relying upon the
introductory coverage provided in CSC2007) this textbook is
recommended to anyone wishing to explore game AI.
LLeeccttuurree//PPrroojjeecctt TTiimmeess::
Semester One Lectures:
Thursday Lecture 10:00 – 11:00 BCB/0G/025
Friday Lecture 14:00 – 16:00 BCB/0G/025
Semester Two Project Meetings:
Sprint Project Meetings TBC
KKeeyy UURRLLss::
Queen’s Online http://www.qol.qub.ac.uk
XNA App Hub http://create.msdn.com
DirectX http://www.microsoft.com/directx
DirectX MSDN http://msdn.microsoft.com/directx
OpenGL http://www.opengl.org/
Blender (Model editor) http://www.blender.org/
GIMP (Image editor) http://www.gimp.org/
Audacity (Sound editor) http://audacity.sourceforge.net/
CCoonnttaacctt IInnffoorrmmaattiioonn::
Lecturer
Philip Hanna
028 9097 4634/1779
Room OG 003, 14 Malone Road
MSN/Messenger: Search for [email protected]