Permalänk
Medlem

Skapa grafiken i ett spel

Hej!
Hur fungerar egentligen grafiken i ett spel när man skapar den, man kan knappast göra 50 olika bilder/sek med en marginell skillnad så de rör sig.

Jag har själv kommit till den punkten då jag gör simpla spelmotorer utan grafik i C++ och därmed börjar jag undra hur man lägger till grafik, skriver man all kod själv, finns det annimeringsprogram osv.

Om man sedan ska lägga till enkel grafik till ett spel, vad ska man börja med? OpenGL/DirectX

Tacksam för svar

//JO

Permalänk
Medlem

Du kan enkelt börja med SDL för 2d grafik och sen ta steget att via SDL rendera OpenGL/Dx inom SDL.

Visa signatur

orka

Permalänk
Medlem
Skrivet av Bubben97:

Hej!
Hur fungerar egentligen grafiken i ett spel när man skapar den, man kan knappast göra 50 olika bilder/sek med en marginell skillnad så de rör sig.

Jag har själv kommit till den punkten då jag gör simpla spelmotorer utan grafik i C++ och därmed börjar jag undra hur man lägger till grafik, skriver man all kod själv, finns det annimeringsprogram osv.

Om man sedan ska lägga till enkel grafik till ett spel, vad ska man börja med? OpenGL/DirectX

Tacksam för svar

//JO

Många använder "skelett" när de animerar, där man animerar lederna.

Permalänk
Medlem
Skrivet av htux:

Många använder "skelett" när de animerar, där man animerar lederna.

Men i exempelvis FPS-spel som battlefield 3, där kan ju knappast någon rita alla scener, hur gör de för att få en fin vinkel vid alla scenarion?

Hur menar du med skelett, snälla förklara mer utförligt.

Permalänk
Medlem
Skrivet av miffo:

Du kan enkelt börja med SDL för 2d grafik och sen ta steget att via SDL rendera OpenGL/Dx inom SDL.

Aha läste på lite om detta, ska definitivt prova tack

Permalänk
Medlem
Skrivet av Bubben97:

Men i exempelvis FPS-spel som battlefield 3, där kan ju knappast någon rita alla scener, hur gör de för att få en fin vinkel vid alla scenarion?

Hur menar du med skelett, snälla förklara mer utförligt.

Då används 3d-modeller som realtidsrenderas i de vinklar och storlekar de behövs.
3D-modeller kan skapas i en mängd olika program såsom 3D-Studio Max, Maya, Blender osv.
http://en.wikipedia.org/wiki/3D_modeling

Permalänk
Medlem

Komplicerade mattematiska uträkningar, och en jäkla massa texturer, sedan kan grafik motorn dra, trycka ihop flytta och sätta alla texturer där dom behövs för att få scenen att se bra ut. enkelt förklarat..
Med skelett menar han i princip att en gubbe har en ram som texturerna ska följa med, säg att du har en funktion som är "Vänster ben fram" så flyttas själva ramen och texturerna flyttas om och modifieras för att följa ramen och se så bra ut som möjligt.
(En textur är en bild)
Detta stämmer inte till 100% då det är svårt att förklara det på ett enkelt sätt utan förlora viss information.

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Man gör inte 50 3D-modeller per sekund animation, man gör modeller med skelett och bestämmer ledernas vridning vid vissa tidpunkter så "tweenar" datorn emellan dem och mellan olika animationer. Tror det är bäst att köra på någon färdig motor typ unreal engine om man ska göra något så avancerat

Visa signatur

mobo Asus M4A88TD-M EVO/USB3 cpu 1100T kylare Noctua NH-D14
gpu RX 460 passive ram 16GB DDR3 1600MHz ssd Samsung 850 EVO 250GB
psu Corsair AX 850 skärmar 3 * 40" NEC P401

Permalänk

Om jag inte hade varit så slö så hade jag iaf försökta göra en grafikmotor

Visa signatur

MSI PRO Z690-A DDR4 - i9 12900K - Kingston Fury 32GB 3600 Mhz CL16 - Corsair RM850X - Noctua NH-U12A Chromax - Fractal Design Define 7 Compact - RTX 3090 TUF - Odyssey G50A -

Permalänk
Medlem

Grunderna är väl först och främst en fysikmotor samt 3d-modeller av objekt

Om du undrar hur tex. man gör animationer för hur en snubbe ska springa i tex. BF3 så fäster man sensorer på en riktig skådespelare som spelar in rörelserna. Dessa spelas sedan upp på en 3d-modell av en soldat i spelet.

Visa signatur

Hackintosh?
Mac OSX Tweaks/Hacks?

--> Besök nya [B]groths.org[/B]

Permalänk
Medlem
Skrivet av iXam:

Då används 3d-modeller som realtidsrenderas i de vinklar och storlekar de behövs.
3D-modeller kan skapas i en mängd olika program såsom 3D-Studio Max, Maya, Blender osv.
http://en.wikipedia.org/wiki/3D_modeling

Aha, tack

Permalänk
Medlem
Skrivet av Cindori:

Grunderna är väl först och främst en fysikmotor samt 3d-modeller av objekt

Om du undrar hur tex. man gör animationer för hur en snubbe ska springa i tex. BF3 så fäster man sensorer på en riktig skådespelare som spelar in rörelserna. Dessa spelas sedan upp på en 3d-modell av en soldat i spelet.

Oj, det visste jag inte tack!

Permalänk
Medlem
Skrivet av Andre_H:

Man gör inte 50 3D-modeller per sekund animation, man gör modeller med skelett och bestämmer ledernas vridning vid vissa tidpunkter så "tweenar" datorn emellan dem och mellan olika animationer. Tror det är bäst att köra på någon färdig motor typ unreal engine om man ska göra något så avancerat

Värt ett försök tack

Permalänk
Medlem

Dock innan man ger sig in på 3D så kan det vara bra att ha ett antal mattekursen i bagaget, gärna från högskolan

Förr i tiden ritade man alla rörelser för exempelvis en gubbe i ett 2D-spel (tidskrävande, jobbigt, och ofta få hackiga rörelser). Tidiga 3D-spel hade också vissa fasta 3D-modeller som det bläddrades bland (hackiga rörelser). Även idag använder man 2D-bilder i 3D-spel där rörelser är ritade för hand, dock brukar dessa vara förenklingar och användas på långt håll där man inte ser så stor skillnad.

Så, 2D-modeller brukar ritas för hand, och som sagts ett par gånger så modelleras 3D-modeller i 3D-program, eftersom modellen är tredimensionell och kan synas från alla håll så behövs endast denna modell (med vissa undantag). För att modellen ska få material så "lägger" man på bilder (texturer) för varje triangel (som modellen är uppbyggd av) i 3D-programmet. För att modellen skall röra sig så binder man delar av den till ben (skelett), om ett ben rör sig så rör sig delen på modellen som är ansluten till denna. Man anger också villkor för rörelser i skelettet som man kan röra sig mellan i själva spelet. Exempelvis ett armveck skulle kunna röra sig ca 180 grader (halvt varv) på en normal person, annars skulle man kunna böja armen bakåt (ajaj), det man sedan gör i spelmotorn är att gå upp & ner i detta intervall så att armen rör sig jämnt & fint, modellen hänger med benen som rör sig, materialet hänger med modellen, och vipps vi har en animerad nisse...

Hm, detta var inte så tydligt som jag trodde det skulle bli, men men.

Permalänk
Medlem
Skrivet av Cindori:

Grunderna är väl först och främst en fysikmotor samt 3d-modeller av objekt

Om du undrar hur tex. man gör animationer för hur en snubbe ska springa i tex. BF3 så fäster man sensorer på en riktig skådespelare som spelar in rörelserna. Dessa spelas sedan upp på en 3d-modell av en soldat i spelet.

Vill man bara ha något lite snabbt och testa med, så går det att köpa färdiga 3d modeller
Exempelvis härifrån http://www.daz3d.com/

Permalänk
Medlem

Om du vill pröva jobba med 3D grafik bör du läsa linjär algebra, det är vad 3D är uppbyggd på och det finns inga genvägar, hela iden är bara i princip linjär algebra. Allt du gör, transformerar (flyttar), roterar och skalar objekten i världen görs med matriser (matrix).

2D - grafik:

Två dimentioner: x och y

3D - grafik

Tre dimentioner: x, y ,z

3D världen är byggt av polygoner (trianglar), ju mer trianglar, desto snyggare men också dyrare. En polygon består av 3 vertex (en punkt som beskriver ett hörn i en specifik geometrisk form. En punkt är en koordinat i 3D miljön, xyz) punkter som formar en triangel (tre hörn).
Skillnaden från 2D är att 3D har ett djup. I directx, som är ett left handed coordinate system har sitt djup i z led, höjd i y led och vänster/höger i x led.

Ett objekt i en 3D scen kallas för mesh. En mesh består av flera vertexpunkter, normaler och textur koordinater. Dessa 3 kombinerat skapar en virtuell objekt i en 3D värld som exempelvis en pansarvagn i battlefield 3.

När man ritar ut en mesh i 3D scenen(renderar), så har man alla vertex punkter lagrade i en så kallad vertex buffer. Dessa vertex punkter skickas från CPU till grafikkortet. Man skickar också eventuellt med Normaler och textur koordinater (ifall man vill lägga på en textur eller skapa ljus eller andra effekter. Att skicka bara med vertex punkter, kan man skapa de virtuella 3D objekten, fast utan någon som helst effekt. Bara en simpel modell).
Man kan programmera hur grafikkortet ska hantera dessa vertexpunkter,normaler och textur koordinater. Språket man programmerar i kallas för HLSL (DirectX). OpenGL använder GLSL.

För att rendera stora miljöer med mycket objekt, krävs det att man optimerar renderingen. Tänk dig själv att rendra miljoners polygoner varje tick.
I 3D måste man också optimera 3D miljön, genom att klippa bort (culling) det som inte behöver renderas. Vi behöver bara rendera det vi ser och det finns en del tekniker för detta, vissa enklare än andra svårare.

Om du vill lära mer hur själva renderings processen fungerar. Sök på "Rendering Pipeline".

3D är mycket komplicerat. Jag uppmanar dig att lära linjär algebra först och sen köp en 3D bok och lär dig 3D pipelinen och de olika begreppen. Förstå sig på hur 3D världen fungerar. 3D lär man sig INTE på en dag. Det är mycket matte och mycket tänk. Speciellt om du vill programmera det i diretcX och det är skillnad på att programmera i dx9,dx10 och dx11.

Visa signatur

OS: Win7 x64, GPU: Geforce Gigabyte GTX580 SOC
CPU: Intel i5 2500k (4.5gHz), MB: Asus P8P65 PRO Rev(3.1),
PSU: XFX 750w (modular), RAM: 2x Crosair Vengence 1600mz 4024mb
Cooling: CoolIT ECO A.L.C CPU COOLER
Chassi: Raven rv03

Permalänk
Medlem

Ett skelett består egentligen av en Array med matriser. Matriserna animeras i ett modelleringsprogram, tex 3dsmax. En grafiker "binder" olika vertexer av en mesh till olika matriser i skelettet och ger dom ett float-tal mellan 0.0 och 1.0, detta tal kallas "vertex weight" och det talar om för motorn hur mycket en vertex ska påverkas av skelett-matrisens transformation.

När modellen är riggad och klar, och skelettet och dess animation är exporterat, då behöver bara vertex-shadern multiplicera in vertexerna i rätt matris innan rendering, och det var kort och gott hur det funkar

Skickades från m.sweclockers.com