CSD1101 Computer Environment (6 credits)
Prerequisite(s): None
This module provides students with a solid understanding of the fundamental elements on which computers are based. Topics covered include number systems, representation of numbers in computation, basic electricity, electric circuits, digital systems, logic circuits, data representation, digital memory, computer architecture, and operating systems. This knowledge eliminates some of the “mysteries” about hardware and provides students with a well-rounded understanding of computers. The latter stages of the module focus on assembly programming, which enhances the student’s understanding of how the computer works at a fairly low-level.
CSD1121 High-level Programming 1 (6 credits)
Prerequisite(s): None
In presenting the C programming language, this module serves as a foundation for all high-level programming modules and projects. It provides the fundamentals in programming, including control-flows (such as statement grouping, decision making, case selection, procedure iteration, and termination test) and basic data types (such as arrays, structures, and pointers). Additionally, there is an intensive discussion of the lexical, syntax notation, and semantics of the C programming language.
CSD1130 Game Implementation Techniques (5 credits)
Prerequisite(s): CSD1121
Co-requisite(s): CSD1171
Game Implementation Techniques presents foundational data structures, algorithms, mathematical concepts and techniques used in the design and development of two-dimensional real-time interactive simulation and game software. Topics covered include event-driven programming, game engine design
and architecture, real-time rendering, user interaction, state-machines, basic animation techniques and collision detection.
CSD1171 High-level Programming 2 (6 credits)
Prerequisite(s): CSD1121
This course introduces the C++ language with particular emphasis on its object-oriented features. Topics include stylistic and usage differences between C and C++, namespaces, function and operator overloading, classes, inheritance, templates, and fundamental STL components.
CSD2101 Introduction to Computer Graphics (6 credits)
Prerequisite(s): CSD1171, CSD1241
This course presents fundamental mathematical elements, data structures, and algorithms required to implement interactive 2D and 3D graphics applications on programmable graphics hardware using modern graphics frameworks. Topics covered including the graphics pipe, programmable graphics hardware, affine transforms, projections, rasterization techniques, texturing pipeline, visibility techniques, frustum culling techniques, clipping algorithms, and applications of the perspective transform including 3D picking, planar shadows, and hyperbolic interpolation.
CSD2126 Modern C++ Design Patterns (6 credits)
Prerequisite(s): CSD1171
This module builds on the foundation created in the first
two high level programming modules (CSD1101/CSD1121/CSD1170). It presents advanced topics in the C/C++ programming language in greater detail. Such topics include advanced pointer manipulation, utilizing multi-dimensional arrays, complex declarations, and standard library functions. Advanced C++ topics include function and class templates, operator overloading, multiple inheritance, runtime type information, the Standard Library, and performance issues.
CSD2151 Introduction to Real-Time Rendering (6 credits)
Prerequisite(s): CSD2101
This course introduces algorithms for creating photo-realistic images in interactive simulations. Rendering techniques covered include texturing, illumination models, transparency, shading algorithms, mapping techniques (bump mapping, environment or reflection mapping, etc.), and shadows. Students will learn how to implement all algorithms by using vertex and pixel shaders.
CSD2161 Computer Networks (6 credits)
Prerequisite(s): CSD2126, CSD2182
This module introduces the hierarchical network communication in a distributed computing environment. Topics cover network technologies, architecture, protocols, and security. The curriculum gives specific emphasis to the TCP/IP stack and in making students familiar with writing portable socket-based software. t also discusses some of the unique challenges of networked games and strategies for addressing them.
CSD2171 Programming Massively Parallel Processors (6 credits)
Prerequisite(s): CSD2151
This course provides a foundation on programming individual stages of a GPU’s programmable pipeline using a shader language. The goal of the course is to motivate the concept that processing times of various CPU-based applications can be accelerated by offloading this work from the CPU to the large number of massively parallel processors on the GPU. The emphasis of the course is to program the compute, geometry, and tessellation stages of the programmable pipeline using a modern software API with a compatible shader language for a variety of real-time interactive applications.
CSD2182 Operating Systems (6 credits)
Prerequisite(s): CSD1101, CSD1171
Linux/Unix as implemented on modern PCs. After an overview of what an operating system is and does, we cover the following: organization and design (the kernel and various subsystems), process management (creation and management of processes and threads, including an introduction to multi-threaded programming), inter-process communication, process synchronization (locks, semaphores, and methods to avoid deadlocks), memory management (hardware and process views of memory layout and demand-paged virtual memory), file systems, and security and protection (viruses, worms, and Trojan horses).
CSD2183 Data Structures (6 credits)
Prerequisite(s): CSD2126
The objective of this module is mainly to introduce the classical Abstract Data Types (ADTs) in Computer Science. The ADTs provide the hierarchical views of data organization used in programming. Fundamental data structures and their associated algorithms as well as complexity notation are introduced. Simply Reading about data structures and algorithms and listening to a lecture is insufficient to master and implement these fundamental concepts. Every non-trivial program you write at DigiPen and in the real world will make heavy use of data structures and algorithms and this module enables you to reason about and apply them.
CSD3183 Artificial Intelligence for Games (6 credits)
Prerequisite(s): CSD2126
The objective of this module is to introduce data structures and algorithms related to the artificial intelligence applicable in real time interactive applications. It introduces students to a wide range of concepts and practical algorithms that are commonly used to solve game AI problems. Topics covered includes the game AI programmer mindset, AI architecture (state machines, rule-based systems, goal-based systems, trigger systems, smart terrain, scripting, message passing, and debugging AI), movement, pathfinding, emergent behaviour, agent awareness, agent cooperation, terrain analysis, planning, and learning/adaptation.
CSD3116 Low-level Programming (6 credits)
Prerequisite(s): CSD1101, CSD2126
This module introduces students to modern microprocessor architectures, using the Intel x86 series as case studies,
with the intent to showing the practical implications of such knowledge upon programming decisions. Topics include pipelining, superscalar/VLIW machines, register-renaming, out-of-order execution, multi-core architecture, caches, multicore-cache coherency, x86 instruction set architecture, application binary interfaces, Flynn’s taxonomy, Streaming SIMD extensions etc.
CSD3121 Developing Immersive Applications (6 credits)
Prerequisite(s): CSD1130, CSD2182
Virtual Reality (VR), Augmented Reality (AR), and other eXtended Reality (XR) or immersive applications in general, are increasingly becoming an important medium of interaction with the digital realm. This course provides a practice-based introduction to the concepts and techniques to develop and evaluate immersive applications. Topics covered include implementation techniques, in the context of immersive applications, for interaction, locomotion and creation of virtual environments. At the end of this module, the student will be proficient in explaining the core components of immersive applications, as well as develop and evaluate a basic 3D immersive application with appropriate interaction modalities.
CSD3126 User Interface and User Experience Design (6 credits)
Prerequisite(s): CSD2183
This module presents fundamental topics in the field of human-computer interface design. Topics covered in the module
will help students understand human capabilities, design principles, prototyping techniques and evaluation methods for human-computer interfaces, with special emphasis on natural user interfaces. The module guides the students towards an implementation of a novel user interaction.
CSD3131 Algorithm Analysis (6 credits)
Prerequisite(s): CSD2126, CSD2183, CSD2201
This module provides students with an introduction to the analysis of algorithms specifically proving their correctness and making a statement about their efficiency. Topics for discussion may include loop invariants, strong mathematical induction and recursion, asymptotic notation, recurrence relations and generating functions. Students examine examples of algorithm analysis from searching and sorting algorithms. Second part of the module concentrates on classification of algorithms and building a strong knowledge base of existing algorithms.
CSD3151 Spatial Data Structures (6 credits)
Prerequisite(s): CSD2151
This module deals with the efficient representation and processing of complex 3D scenes in order to avoid bottlenecks in the use of the CPU and the GPU. Specific topics include a variety of spatial data structures (binary space-partitioning trees, octrees, kd-trees, and grid data structures), several object-culling methods (occlusion, viewport, and portal), and finally the construction and uses of bounding volumes and their hierarchies for collision detection and related geometric operations.
CSD3156 Mobile and Cloud Computing (6 credits)
Prerequisite(s): CSD2182, CSD2183
By facilitating a large variety of transportable human-computer interactions, mobile devices have become an essential and integral part of human life. Cloud computing is a model for enabling on-demand access to a shared pool of configurable computing resources such as servers, storage, networks, and applications as services over the Internet. Many popular mobile applications such as Gmail, Netflix, Facebook and WhatsApp are implemented as cloud applications but accessed from mobile devices. This module provides a practical and application oriented introduction to implementing cloud computing services that bring the vast data processing and storage abilities of the cloud to mobile devices.
CSD3186 Machine Learning (6 credits)
Prerequisite(s): CSD3183
The objective of this module is to introduce basics concepts on Machine Learning that are useful for many industrial applications. It introduces students to a wide range of concepts and practical algorithms that are commonly used to pre-process data and extract useful patterns from large amount of data. The topics include early machine learning algorithms such as genetic algorithms, classifier systems, neural network, and various clustering algorithms. It also explores probabilistic algorithms, including Bayesian networks, hidden Markov models, and Monte Carlo methods.