TBSK03 Teknik för avancerade Datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

Relevanta dokument
TBSK03 Teknik för avancerade Datorspel 49(68)

T BSK03 Teknik för avancerade Datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

TSBK 10 Teknik för avancerade datorspel Fö 10: Nätverk, Peter Johansson, ISY

Skinning and Animation

Innehåll. Referenssystem. Matriser. Rotationsmatrisen. Euler angle. Animering av ett objekts rotation

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TBSK 03 Teknik för avancerade datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

Information Coding / Computer Graphics, ISY, LiTH. Minnesaccess. Vitalt för prestanda! Minnestyper. Coalescing

Information Coding / Computer Graphics, ISY, LiTH. Compute shaders!! Framtiden för GPU computing eller sen efterapning av Direct Compute?

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Classes och Interfaces, Objects och References, Initialization

FRITHIOF HELLBERG TRÄFFAS SÄKRAST KL. 2 3.

Föreläsning 10. Pekare (Pointers)

Objektorienterad Programmering (TDDC77)

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Transformationer i 3D. Gustav Taxén

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Föreläsning 8: Aritmetik och stora heltal

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Grafiska pipelinens funktion

TDIU01 - Programmering i C++, grundkurs

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Parameteröverföring. Exempel. Exempel. Metodkropp

Beräkningsvetenskap föreläsning 2

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

3D: transformationer:

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Att använda pekare i. C-kod

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Variabler, värden och typer

Variabler, värden och typer

Programmering A. Johan Eliasson

tentaplugg.nu av studenter för studenter

SMD 134 Objektorienterad programmering

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Övning2. Variabler. Data typer

HF0010. Introduktionskurs i datateknik 1,5 hp

TDP002 - Imperativ programmering

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OOP Objekt-orienterad programmering

Styrteknik : Funktioner och funktionsblock

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

F4. programmeringsteknik och Matlab

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering Föreläsning 4

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Analys o Linjär algebra. Lektion 7.. p.1/65

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

. b. x + 2 y 3 z = 1 3 x y + 2 z = a x 5 y + 8 z = 1 lösning?

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Introduktion till programmering SMD180. Föreläsning 8: Listor

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Approximation av funktioner

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Klassdeklaration. Metoddeklaration. Parameteröverföring

Grafiska pipelinen. Edvin Fischer

Konsten att lösa icke-linjära ekvationssystem

Tentamen del 2 SF1511, , kl , Numeriska metoder och grundläggande programmering

Programmering B med Visual C

Modbus över Ethernet. WAGO Contact SA TSS STR

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Parallellism i NVIDIAs Fermi GPU

GPGPU - General-Purpose computing on Graphics Processing Units

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Grundläggande Datalogi

Ett minneselements egenskaper. F10: Minneselement. Latch. SR-latch. Innehåll:

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

FFM234, Klassisk fysik och vektorfält - Föreläsningsanteckningar

Introduktion C-programmering

Repetition C-programmering

Programmering för språkteknologer I, VT2012. Rum

Modbus. WAGO Contact SA TSS STR

Länkning av Prolog under C

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

MA2047 Algebra och diskret matematik

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Laboration 1: Linjär algebra

Föreläsning 1 Datastrukturer (DAT037)

Transkript:

TBSK03 Teknik för avancerade Datorspel Jens Ogniewski Information Coding Group Linköpings universitet

Representation av rotation Eulervinklar Y = Ryaw Rpitch Rroll X Intuitivt, fast svårt att göra Interpolation av rotation nontrivialt, problem med nonlinearbeteende Problem med gimbal lock kan förekomma 1/18

Representation av rotation Gimbal lock 2/18

Representation av rotation Ortogonal matris 3/18

Representation av rotation Ortogonal matris Enkelt att kombinera olika operationer med varann Information (t.ex. fram-vektor) kan läsas ut direkt från matrixen Interpolation? Det är möjligt att göra sucessiva rotationer, men hur hittar man rotationssteget? 3/18

Representation av rotation Rotationsmatrix och vinkel Interpolation mellan axlarna? 4/18

Representation av rotation 3-komponent vektor Längd = rotationsvinkel Enkelt att göra linear interpolation Nästan som Kvaternioner 5/18

Kvaternioner Flerdimensionell generalisering av komplexa tal i² = j² = k² = ijk = -1 Flesta operationer funker som vanligt, fast ingen kommunitativitet på multiplikation qp pq Definition: Kvaternion q = w + xi + yj + zk, med w,x,y,z reella tal Alternativ: q = (w,n) med n tredimensionell vektor w kallas skalar del, n vektor del (alt. imaginativ del) Om w=0: ren imaginativ 6/18

Kvaternioner Multiplikation med imaginärdelen 1 i j k 1 1 i j k i i -1 -k j j j k -1 -i k k -j i -1 7/18

Kvaternioner Multiplikation av två kvanterjoner: (w1 + x1i + y1j + z1k)(w2 + x2i + y2j + z2k) = w1w2 x1x2 y1y2 z1z2 + (w1x2 + x1w2 + y1z2 z1y2)i + (w1y2 x1z2 + y1w2 + z1x2)j + (w1z2 + x1y2 y1x2 + z1w2)k 8/18

Kvaternioner Konjugat q*: q=(w,n), q*=(w,-n) = (w - xi - yj - zk) Magnitude: q ² = qq* = q*q = w² + n ² = w² + x² + y² + z² Kvadratrot från magnitude = norm Enhetskaternjon: kvaternion med norm=1 Erhålles genom att dela kvaternion med norm Eller: q = (cos(v/2),sin(v/2)n) Inverse: 9/18

Kvaternioner Exponentialfunktioner: Vi definerar för q = (w, tn): qt = (cos(tv/2),sin(tv/2)n) exp(q) = ew(cos(t), sin(t)n) <=> q = R exp((0,n)t), med n = 1 log(q) = (log(r), nt) <=> qt = exp(t log(q)) 10/18

Kvaternioner q = (cos(v/2),sin(v/2)n): q reprensenterat som rotation med vinkel v om axal n Vektor r: Skapa Kvaternion p = (0,r) Kan nu roteras meddels: p' = q p q* Kan enkelt kombinera rotationer 11/18

Kvaternioner Som matris: Kvaternioner kan konverteras till matris genom: alt.: 12/18

Kvaternioner Men hur kommer vi från rotationsrepresentation till matris? Tredimensionell matris: Matrisspår: T=a+e+m+1 13/18

Kvaternioner Men hur kommer vi från rotationsrepresentation till matris? Om T w= 0: = Men: problem om T är nästan noll (t.ex. rotationer om 1800) 14/18

Kvaternioner Möjlig lösning: w = sqrt( max( 0, 1 + a + e + m) ) / 2 x = sqrt( max( 0, 1 + a - e - m) ) / 2 y = sqrt( max( 0, 1 - a + e - m) ) / 2 z = sqrt( max( 0, 1 - a - e + m) ) / 2 x = copysign( x, h - f ) y = copysign( y, c - g ) z = copysign( z, d - b ) med copysign(a, b) = a sign(a) sign(b) 15/18

Slerp Interpolation med Kvaternioner Spherical linear interpolation q = (q2q1-1)t q1 = q1(q1-1q2)t = q2(q2-1q1)1-t = (q1q2-1)1-t q2 slerp(t, q1, q2) = (q2 q1-1)t q1 Interpolera med konstant hastighet 16/18

Squad Problem: Vid interpolation mellan flera kvaternioner med slerp blir det diskontinuitet i hastigheten när vi byter från ett kvaternionpar till nästa Samma problem om interpolation mellan punktpar 17/18

Squad Lösning (liknar Bézier el. Hermite splines): Definerar: squad(t,a,p,q,b) = slerp(2t(1-t), slerp(t,a,b), slerp(t,p,q)) för att få kontinuitet vid interpolation: qi = aiexp(-(log(ai+1ai-1) + log(ai-1ai-1))/4) och interpolera med squad(t, ai, qi, qi+1, ai+1) 18/18

Länkar Wikipedia: http://en.wikipedia.org/wiki/quaternions_and_spatial_rotation Slerp paper: http://portal.acm.org/citation.cfm?doid=325334.325242 Bok om matematik inom datorgrafik: http://books.google.com/books? id=bfcleqrusm8c&lpg=pa86&ots=fpupf6p_hw&dq=quat ernions%20in%20computer %20graphics&pg=PA88#v=onepage&q=quaternions%20in %20computer%20graphics&f=false 18/18

OpenCL Jens Ogniewski Information Coding Group Linköpings universitet

OpenCL - Introduktion Språk för programmering av parallela datorer Programmerare bestämmer explicit vilka delar som körs parallelt Oberoende av arkitektur, hårdvaruimplementation transparent (fast båda med undantag) Baserad på C99 (med ändringar) Först föreslaget av Apple 1/13

OpenCL - Introduktion 2/13

OpenCL - Introduktion 3/13

OpenCL Plattform model En host, en el. flera compute device (t.ex. grafikkort) Varje compute device består av en el. flera compute units (t.ex. shader) Varje compute unit består av en el. flera processing elements 4/13

OpenCL Exekveringsmodell Hur fungerar det? Funktion för att kontrollera hur många och vilka compute units som är lediga Funktion för att kontrollera hur många processing elements en särskild compute unit har Alla work items i en workgroup har samma kod och körs parallellt: Funktioner finns för att få work item-id och workgroup-id => kan användas för att få en offset på input och output data Får inte bero på varandra Fast barrier funktion finns: ingen compute unit fortsätter innan alla andra har kommit dit Ingen sykronisering (t.ex. av variabler) annars! 6/13

OpenCL Exekveringsmodell 7/13

OpenCL Minnesmodell Private memory: Bara en särskild work item har tillgång (t.ex. register) Local memory: Bara en särskild work group har tillgång Oftast använt för variabler som inte får plats i private memory Global memory Constant memory 8/13

OpenCL Minnesmodell Kan specificera var en variabel skulle vara Minne kan specificeras som read-only, write-only el. readwrite Stött objekt: buffer (som array i c, bara endimensionell möjlig), image (2D el. 3D) Tänk på: ingen automatisk synkronisering! Dock: efter barrier är allt minne inom en work group garanterat synkroniserat Restsynkronisering måste man ta hand om själv! Funktioner finns som väntar tills en händelse skett (e.ex. output skrivits) 9/13

OpenCL Språk Baserat på C99, fast: Inga funktionspekare! Inga pekare till pekare i funktionsanrop! Ingen rekursion! Inga arrays med dynamisk längd! Inga bitfields! Dessutom optional: Skriver till pekare som är mindre än 32 bitar Skriver till 3D images Double och half types Atomic funktioner 10/13

OpenCL Språk Primitive datatypes: Bool, char, short, int, long, float, size_t, void Integrerade funktioner: math.h, läser / skriver till en image, konverteringsfunktioner (inkl. saturation och rounding) 11/13

OpenCL Kompabilitet med OpenGL Kommunikation medels API-funktioner OpenGL- och OpenCl-funktioner kan dela data t.ex. OpenCL objekt från OpenGL objekt Blir inte koperat! Applikation kan blanda OpenCL- och OpenGL-funktioner, delar resurser mellan dem 12/13

OpenCL Exempelarkitektur Nvidia GeForce GTX 280 / 285: 30 computing units med 8 processing elements vardera 16.384 register ( private memory ) per processing element 64 kbyte constant memory 16 kbyte shared memory 16 kb local memory Stöd för 64 bit words och double types Stöd för atomic functions 13/13

Thank you very much! www.icg.isy.liu.se