IT-Universitetet i København
  Tilbage Kursusoversigt
Kursusnavn (dansk):Andetårsprojekt: Softwareudvikling i større grupper 
Kursusnavn (engelsk):Second Year Project: Software Development in Large Teams 
Semester:Forår 2018 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Min. antal deltagere:
Forventet antal deltagere:
Maks. antal deltagere:145 
Formelle forudsætninger:* You are enrolled on the BSc study program in software development.

* You can construct object-oriented software using C#, corresponding to what is covered in the BSc courses Analysis, Design and Software Architecture.
* You can apply basic functional programming using F#, corresponding to what is covered in the first month of the BSc Second Year Project: Functional Programming
* You know the basic principles of design of scalable and deadlock free distributed systems, corresponding to what is covered in the BSc course Mobile and Distributed Systems
* You are aware of basic techniques for planning and conducting a software development project in a small team of 5-7 students, corresponding to what is covered in the first month of the BSc course System Development and Project Organisation 
Læringsmål:After this learning activity the student should be able to:

(1) Plan, structure, and execute large-scale software development projects.
(2) Implement a ray tracer in F#
(3) Integrate code written by other programmers into a larger code base
(4) Analyse and optimise code
(5) Conduct a constructive feedback process on fellow student's work.
(6) Adapt the theoretical underpinnings of various problem areas and incorporate these into software
(7) Disseminate your project in written form adhering to the best practices of academic writing 
Fagligt indhold:The goal of this course is to build a ray tracer. Ray tracers are programs that given a scene populated with objects render that scene by simulating how light flows from the light sources, bounce off of the objects, and finally hit the lens of a camera. Modern ray tracers can produce close to photo-realistic images and they are heavily used, for instance, by companies like Pixar when producing animated movies. The ray tracers the students create for this course will support the following features.

Implicit surfaces
Implicit surfaces are equations in three-dimensional space that describe a geometric shape (spheres, tori, cubes, cylinders, et.c.). Unlike the rastoration techniques used by graphics cards that translate and approximate shapes to triangular meshes, implicit surfaces precisely describe the shapes that they model.

Constructive solid geometry
It is common practice to create new shapes out of existing ones using primitives such as the union, intersection, and the difference of shapes. Examples include hemispheres or cylinders with beveled edges, but the possibilities are many.

We will cover techniques to create reflective materials and model how light bounces between them. This includes perfectly reflective materials (materials where the light bounces off at the exact same angle as it came in), as well as diffuse materials where light scatters on impact.

Affine transformations
The ray tracer must be able to scale, shear, displace, rotate, mirror and duplicate shapes.

A naive ray tracer that checks intersections of every ray and every object in a scene is extremely slow — as the resolution and the number of reflective materials increase, and the number of objects in a scene approaches the hundreds or even thousands, a scene can take several hours to render. In this course, students will be expected to parallelise their ray tracers and use acceleration techniques to cut down on rendering time.

Triangle meshes
Even though combinations of implicit shapes can be used to create complex and precise shapes, it is often desirable to use triangle meshes to model 3d-representations of e.g. animals. The ray tracers in this course will support shapes stored in PLY-files to render complex shapes modelled by triangle meshes.

We will allow shapes to be textured. Examples of this includes planes with checker patterns or a map of the earth wrapped around a sphere.

Sampling adds quasi-random heuristics to ray-tracers that significantly cuts down on the number of rays required to provide good results while at the same time avoiding the Moiré effects that often plague images produced by regular sampling.

We will cover techniques to simulate different types of cameras, including pinhole cameras and cameras with variable focal depth.

We will cover rudimentary techniques to create transparent surfaces, including refraction and reflection off of transparent objects 

Students take active part in a software development team working on a large project from the ground up. The project is by design too large to be created by two or three people in the time allotted and the students are required to efficiently split the work up amongst themselves, taking individual responsibility for a substantial part of the project by themselves, using the techniques taught in System Development and Project Organisation. 

Obligatoriske aktivititer:Der er ingen obligatoriske aktiviteter. Vær venlig KUN at ændre denne tekst når der er obligatoriske aktiviteter.
There are no mandatory activities. Please, change this text ONLY when there are mandatory activities. 
Eksamensform og -beskrivelse:D2G Aflevering med mundtlig eksamen der supplerer projekt. Delt ansvar for projekt., (7-scale, external exam)

D2G: Hand-in with following oral exam supplemented by the hand-in., (7-scale, external exam)
Duration of oral examination: The group will first give a joint 10 minute presentation of the project. Subsequently, each group member will be examined 20 minutes.

The students must in groups of six (or in rare cases seven) implement a ray tracer in F#.
A report (about 30 pages) must be handed in as well as source code and instructions on how to build and run the program on a Windows 10 machine per the teacher’s instructions.

- There is only one final grade for the course covering project hand-in, report and the oral project exam.  

Litteratur udover forskningsartikler:None 
Følgende personer underviser på kurset:
Navn Stilling Undervisertype Indsats (%)
Jesper Bengtson Lektor(ITU) Kursusansvarlig 50
Patrick Bahr Adjunkt(ITU) Underviser 50
Jonas Mortensen Hjælpelærer(ITU) Hjælpelærer 0
Paw Saabye Pedersen Undervisningsassistent(ITU) Hjælpelærer 0
Niels Frederik Ejlersen Hjælpelærer(ITU) Hjælpelærer 0
Simon Stampe Leiszner Hjælpelærer(ITU) Hjælpelærer 0