Ero sivun ”Portaali:Peliohjelmointi Linuxilla” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
 
(19 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
Tämän sivun tarkoitus on toimia lähtöpaikkana kaikille, jotka haluavat opetella peliohjelmointia Linux-ympäristössä. Monesti peliohjelmointiin liittyvät ohjeet ovat pelkkiä linkkilistauksia. Peliohjelmointi Linuxilla ilman tarkempaa tietoa on hankalaa. Tähän olisi tarkoitus luoda hyvä sivu, jossa kerrotaan mitä mitäkin ohjelma tekee ja mitä eri kirjastot tekevät. Tässä artikkelissa pyritään antamaan mahdollisimman yleispäteviä suosituksia, joiden pohjalta oman peli projektin ohjelmointi olisi helpompaa. Aloitetaan!
Tämä on päivitetty katsaus peliohjelmointiin Linux-ympäristössä, keskittyen yleispäteviin suosituksiin ja nykyaikaisiin työkaluihin, jotka tekevät projektin aloittamisesta sujuvampaa. ''[[Pelisuunnittelu]] on siirretty omaan artikkeliin.''


==Millainen on Linux peliohjelmoijan näkökulmasta?==
== Yleinen kehitysympäristö ja yhteensopivuus ==
Tiedon etsiminen voi aluksi tuntua vaikealta, mutta tämän sivun on tarkoitus olisi helpottaa sen löytämistä.
Linux on erinomainen ympäristö pelinkehitykseen sen avoimen luonteen ja kehittäjäystävällisten työkalujen ansiosta.


Mitä taitoja tarvitsen visuaalisen pelin luomiseksi?
{| class="wikitable"
|+
|-
! Osa-alue !! Päivitystarve !! Selitys
|-
| Grafiikkarajapinnat || Siirtyminen [[Vulkan]]iin || [[OpenGL]] on edelleen olemassa, mutta matalan tason ja tehokkaampi [[Vulkan]] on nykyaikaisen 3D-pelinkehityksen ensisijainen valinta Linuxilla.
|-
| Yhteensopivuus || [[Steam]] Playn ja [[Proton]] rooli || Protonin kehitys on muuttanut Linux-pelaamisen maisemaa. Tämä tarkoittaa, että kehittäminen Windowsille (esim. DirectX-rajapinnan avulla) ja ajaminen Linuxilla Protonin kautta on erittäin suosittu ja toimiva lähestymistapa.
|-
| Jakelut || [[Flatpak]] ja [[AppImage]] || Nämä universaalit pakettimuodot ovat standardoituneet, helpottaen kehittäjien riippuvuuksien hallintaa ja parantaen käyttäjien saatavuutta Linux-jakelusta riippumatta.
|}


Erilaisia ohjelmia mitä voidaan tarvita pelinteossa.
=== Grafiikkarajapinnat ===
* Suunnittelu
Perinteisen [[OpenGL]]:n rinnalle on noussut [[Vulkan]]. Vulkan on matalan tason rajapinta, joka tarjoaa huomattavasti paremman suorituskyvyn nykyaikaisissa 3D-peleissä. Jos tähtäät korkeaan suorituskykyyn, Vulkanin käyttö tai moottorin, joka sitä tukee (kuten Godot tai Unreal Engine), on suositeltavaa.
** [https://battletech.rpg.hu/dynmech/gamename.php Hahmon nimi ja sukupuu generaattori]
** [http://twinery.org/ Twine] Muokkain, jolla voi luoda interaktiivisia ja epälineaarisia tarinoita.
** [https://www.yworks.com/products/yed/download#download yEd] on tehokas työpöytäsovellus, jonka avulla voidaan luoda nopeasti ja tehokkaasti laadukkaita kaavioita.
** [https://github.com/YarnSpinnerTool/YarnEditor Yarn Editor] Työkalu vuorovaikutteisen vuoropuhelun kirjoittamiseen peleissä
* Ohjelmointikielen opettelu tai valmis peliohjelmoitiympäristö: [[Unreal Engine]], [[Unity3D|Unity]]
* [[Portaali:Ohjelmistokehitys|Ohjelmointiympäristö]]: [[NetBeans]], [[Code::Blocks]], [[Eclipse]], [[jMonkeyEngine]], [[Godot]]
* [[Kuvankäsittely]]ohjelmia, mm. [[GIMP]], [[AwesomeBump]],  [[Material Maker]]
* Pikselinkäsittelyohjelmia, mm. [[Aseprite]]
* [[Musiikinteko Linuxilla|Ääni]]: [[Audacity]]
* [[CAD-ohjelmat#Mallinnus|Mallinnus]]ohjelmia. mm. [[Blender]], [[MakeHuman]], [[Tinkercad]]
* [[Lokalisointi]]: [[Poedit]]


==Pelisuunnittelu==
=== Alustojen välinen kehitys (Cross-Platform) ===
Kuinka pelin voi suunnitella? Piirtääkö ja hahmottelee peli-idean paperille vai käyttääkö siihen suunniteltuja ohjelmia. On pelin tekijästä kiinni, mitä ohjelmia tai tapoja haluaa käyttää.
Nykyään kehitys keskittyy usein monialustaisuuteen. [[Steam]] Playn ja [[Proton]]in ([[Wine]]-pohjainen yhteensopivuuskerros) ansiosta Windowsille (esim. DirectX-rajapinnoille) koodatut pelit toimivat usein erinomaisesti suoraan Linuxilla. Tämä helpottaa kehittäjän työtä, sillä yksi koodikanta voi kattaa molemmat käyttöjärjestelmät.


Pelimoottorit tarjoavat valtavat edut pelikehittäjille. Tärkein niiden tarjoama toiminto on tietokonepelissä käytettävien ydintoiminto kirjasto. Nämä kirjastot sisältävät reaaliaikaisen 2D- tai 3D-renderointimoottorin grafiikalle, fysiikkamoottorin törmäystunnistuksella, hahmoanimaatiojärjestelmän, kohtauskaaviot, äänen, tekoälyn, ketjutuksen, verkon, syötteen, lokalisoinnin tuen, virheenkorjaustyökalut, integroinnin eri kielten kanssa ja suorituskyvyn seuranta- ja optimointityökalut.
=== Jakelu ===
Pelien ja työkalujen jakeluun suositellaan [[Flatpak]]- ja [[AppImage]]-pakettimuotoja. Ne sisältävät kaikki tarvittavat riippuvuudet ja toimivat luotettavasti lähes kaikissa Linux-jakeluissa.


Pelimoottoreilla on ratkaiseva rooli tietokonepelien nopeassa luomisessa ja kehittämisessä. Koska ne tarjoavat kokoelman visuaalisia kehittämistyökaluja ja ne esitellään usein integroidussa kehitysympäristössä ja näin ne nopeuttavat huomattavasti pelien kehitystä. Pelimoottoreita kutsutaan ''pelien väliohjelmiksi'', koska ne tarjoavat joustavan ja uudelleenkäytettävän ohjelmistoalustan.
== Ohjelmointikielen valinta ==
Valinta riippuu projektin koosta, suorituskykyvaatimuksista ja siitä, käytätkö valmista moottoria.
=== Rust kieli ===
* [[Rust]] on noussut vakavasti otettavaksi kieleksi. Se tarjoaa suorituskyvyn, joka on lähellä [[C++]]:aa, mutta sen omistajuus- ja lainakonseptit takaavat muistiturvallisuuden ilman roskienkeräystä, mikä on ratkaiseva etu suorituskykykriittisessä peliohjelmoinnissa.


Pelimoottoreita ei välttämättä kuitenkaan käytetä pelien luomiseen. Vaan niitä käytetään monissa erilaisissa projekteissa, kuten koulutusohjelmistoissa, interaktiivisessa taiteessa ja tieteellisessä visualisoinnissa.
=== .NET (Core) korvaa Monon ===
* [[Microsoft]]in .NET-kehitysympäristö on nyt avoimen lähdekoodin alustariippumaton toteutus. Tämä on vähentänyt [[Mono]]on aiemmin liittyneitä patenttiriski- ja luotettavuushuolia, tehden C#:stä ([[Unity3d|Unity]]n pääkielenä) turvallisen valinnan Linux-kehityksessä.


Saadaksemme käsityksen käytettävissä olevien ohjelmistojen laadusta olemme koonneet luetteloa Linux-pelimoottoreista.
=== C++-kirjastot ===
* [[C++]]-ohjelmoinnissa suositellaan moderneja C++-standardeja (esim. C++17/20). Lisäksi [[Vulkan]]-rajapinta on keskeinen tehokkaan 3D-grafiikan luomisessa, usein hyödyntäen apukirjastoja tai moottorin abstraktioita (kuten [[Unity3d|Unity]] tai [[Unreal Engine|Unreal]]).


==Ohjelmointikielen valinta==
===Python ja Lua===
[[Python]] ja [[Lua]] ovat korkeamman tason skriptauskieliä, joita voidaan käyttää peliohjelmoinnissa mm. lisäominaisuuksien tuottamiseen. Niillä voidaan tuottaa myös koko peli niin haluttaessa. Skriptauskielen syntaksi on ohjelmakohtainen ja ohjelman toiminnot ovat ennalta määritellyt. Python ja Lua ovat tulkattavia kieliä. Aiheeseen liittyvänä esimerkkinä World of Warcraft käyttää lisäosissaan Luaa skriptauskielenä. Luaa voi käyttää esimerkiksi peleissä, joissa tarvitaan automatisointia. Esimerkiksi [[Löve]]-pelimoottori, jota ohjelmoidaan Lua-skripti kieltä käyttäen.


===Java===
{| class="wikitable sortable"
[[Kuva:simple-Java-engine.png|300px|thumb||Kolmiulotteinen Javalla ja LWJGL2-kirjastolla toteutettu yksinkertainen esimerkki pelimoottori.]]
|+
[[Java]] on suosittu alustariippumaton ohjelmointikieli, joka käy myös pelinkehitykseen. Javaa voi opiskella helposti esimerkiksi Helsingin Yliopiston MOOC-verkkokurssilla [http://mooc.fi] tai Youtubesta löytyvillä opetusvideoilla.
|-
! Kieli !! Pääkäyttö !! Hyödyt Linuxissa !! Huomioitavaa
|-
| [[C++]] || Korkean suorituskyvyn järjestelmätason koodi, omat moottorit. || Ydinympäristön kieli, nopea pääsy Vulkan/SDL-kirjastoihin. || Monimutkainen, vaatii manuaalisen muistinhallinnan.
|-
| [[Rust]] || Turvallinen ja nopea järjestelmätason koodi. || Erinomainen suorituskyky ja sisäänrakennettu muistiturvallisuus (ei roskienkeräystä). || Suhteellisen uusi, mutta kasvava ekosysteemi (esim. Bevy-moottori).
|-
| [[C#]] || Unity-kehitys (moottorin sisällä). || Käytetään laajasti Unityssä. .NET-ympäristö on nyt avoin lähdekoodi ja luotettava Linuxilla. || Vaatii usein virtuaalikoneen (JIT-kääntäjä).
|-
| [[Python]] || Skriptaus, prototyypit, 2D-pelit (pygame). || Helppo oppia, erinomainen prototyyppien luomiseen ja yksinkertaisiin peleihin. || Hitaampi suorituskyky kuin käännetyissä kielissä.
|-
| [[Lua]] || Skriptaus, kevyt 2D-kehitys ([[Löve]]). || Nopea tulkattava kieli; ihanteellinen pelien lisäosille ja automaatioon. || Käyttö pääosin moottoreiden sisällä.
|}


===C++===
== Pelimoottorit ja kehitystyökalut ==
[[C++]], [[SDL]]:n ja [[OpenGL]]:n opiskelusta löytyy Youtubesta todella hyviä opetusvideoita. Videoita voi hakea hakusanalla <tt>C++, SDL and openGL</tt> tai käydä <tt>thecplusplusguy</tt> nimisen henkilön kanavalla.
Valmis pelimoottori on yleensä paras tapa aloittaa. Ne hoitavat renderöinnin, fysiikan ja syötteiden käsittelyn puolestasi.
=== Avoimen lähdekoodin moottorit (Suositus Linuxiin) ===
'''1. [[Godot Engine]]'''
* Käyttö: Monipuolinen 2D ja 3D.
* Miksi Linuxissa?: Natiivi Linux-editori, kevyt, nopea kehityssykli, ja sen sisäänrakennettu GDScript-kieli on helppo oppia. Godot tukee Vulkan-renderöintiä.
'''2. [[SDL]] / [[SFML]]'''
* Käyttö: Matalan tason 2D-kehityskirjastot (eivät moottoreita).
* Miksi Linuxissa?: Ovat C/C++-pohjaisia ja toimivat perustyökaluina ikkunointiin ja syötteisiin, kun halutaan rakentaa oma kustomoitu kehys.
'''3. [[Löve]] 2D'''
* Käyttö: Kevyet 2D-pelit.
* Miksi Linuxissa?: Käyttää Lua-skriptikieltä, mikä mahdollistaa erittäin nopean prototyypin ja pelin luomisen ilman raskasta ympäristöä.


===Pascal===
=== Kaupalliset ja ammattitasoiset moottorit ===
Tarjolla perinteinen tekstieditori ja komentorivipohjainen [[FreePascal]] tai graafiseen käyttöympäristöön pohjautuva [[Lazarus]]. 3D-pelimoottoreiksi löytyy mm. [[nxPascal]] ja [[Castle Game Engine]].
* [[Unity3D|Unity]]: Vahva kaupallinen tuki. Linux-editori on saatavilla ja sitä käytetään laajasti C#-pohjaisiin projekteihin.
* [[Unreal Engine]]: AAA-tason 3D-kehitykseen. Korkea suorituskyky ja graafinen laatu. Lähdekoodi on saatavilla, ja natiivi kääntäminen Linuxille on tuettua.


===Mono===
{| class="wikitable sortable"
[[Mono]] on avoimen lähdekoodin toteutus Microsoftin kehittämästä .NET-arkkitehtuurista. Sitä käytetään nykyään enemmän suljetun lähdekoodin peleissä. Esimerkiksi Unity Technologiesin kehittämä monialustainen pelimoottori [[Unity 3D]] käyttää Monoa monissa Linux-pelien toteutuksissaan. [[Richard Stallman]] ja [[Free Software Foundation]] ovat useita kertoja varoitelleet Monon käytön olevan vaarallista Microsoftin hakemien patenttien vuoksi. Free Software Foundation suosittelee ettei vapaata ohjelmistoa rakenneta Monon tai C#:n varaan. Huomattuja ongelmia  Monolla ja Unity 3D:llä tehdyissä peleissä on myös miten muistia käsitellään (memory limit 3.5gb).  
|+ Nykyaikaiset pelimoottorit ja kehykset
|-
! Moottori / Kehys !! Avoin lähdekoodi !! Pääkäyttö !! Kielet !! Miksi Linuxissa?
|-
| [[Godot Engine]] || {{kyllä}} || 2D/3D (kevyt) || GDScript, C#, C++ || Paras avoimen lähdekoodin vaihtoehto. Natiivi Linux-editori ja kevyt luonne tekevät siitä erinomaisen valinnan indie- ja harrasteprojekteihin. Se on kehittynyt merkittävästi ja tukee modernia renderöintiä (Vulkan).
|-
| [[Unity3D|Unity]] || {{ei}} || 2D/3D (monialusta) ||C# || Yhä vahva kaupallinen standardi. Linux-editorin tuki on parantunut, ja se on usein kehittäjien valinta monialustaiseen kehitykseen C#-kielellä.
|-
| [[Unreal Engine]] || {{ehkä|ei (lähdekoodi)}} || AAA-tason 3D || C++ || AAA-tason 3D-kehitys. Tarjoaa korkean suorituskyvyn ja graafisen laadun. Kehittäjät voivat kääntää moottorin lähdekoodistaan Linuxille, ja sen virallinen Linux-tuki on erittäin hyvä.
|-
| [[SDL]] / [[SFML]] || {{kyllä}} || 2D-kirjastot || C, C++ || Pysyvät perustyökaluina. Nämä ovat kirjastoja, joita käytetään suoraan C/C++:ssa luomaan ikkunointi, käsittelemään syötteitä ja alustamaan matalan tason grafiikkaa (esim. OpenGL/Vulkan). Ne ovat edelleen suosittuja kevyissä ja kustomoiduissa projekteissa.
|}


==Mikä on 2D-peli?==
'''Muut olennaiset työkalut'''
2D-peli on kuvattu kaksiulotteisena kuvana pikseleita kuvasta muuttamalla. Kaksiulotteiset pelit on kuvattu edestä tai ylhäältä. Esimerkkejä kaksiulotteisista peleistä ovat mm. [[Mari0]], joka kuvaa edestä päin kuvattua kaksiulotteista laatoista koostuvaa peliä tai [[The Mana World]], jonka kuvakulma on kuvattu ylhäältä. Isometriset pelit kuuluvat myös kaksiulotteisiin peleihin. Ne on kuvattu yläviistosta. Isometrinen peli on esimerkiksi [[Unknown Horizons]]. Poikkeuksia tästä on myös esimerkiksi [http://store.steampowered.com/app/224760/FEZ/ FEZ], jossa liikutaan kaksiulotteisilla tasoilla ja ympäristöä voi kääntää kolmiulotteisesti. Pelit koostuvat pääosin laatoista, joita voi olla erikokoisia ja muotoisia.
* Fysiikkamoottorit: [[Bullet|Bullet Physics]] on suosituin ja yleisin avoimen lähdekoodin 3D-fysiikkakirjasto. Laajasti käytössä sen luotettavuuden ja monialustatuen vuoksi. [[PhysX]] Nvidian kehittämä, nyt osittain avoimen lähdekoodin moottori. Ja se on yleisesti käytössä kaupallisissa moottoreissa, kuten Unreal Enginessä tarjoten sille korkeaa suorituskykyä fysiikkalaskentaan.
[[Kuva:Unknown-Horizons.png|250px|thumb|Right|Esimerkki isometrisestä pelistä - Unknown Horizons]]
* Sisällön luominen: [[Blender]] on de facto standardi 3D-mallinnukseen ja animaatioon Linuxilla. [[Aseprite]] on säilyttänyt asemansa parhaana työkaluna ammattitasoiseen pikseligrafiikkaan.
[[Kuva:Mari0portal.png|300px|thumb|Left|Esimerkki kaksiulotteisesta pelistä nimeltä Mari0. Peli on toteutettu [[Lua]]-skripti kieltä osaavalla Löve 2D-pelimoottorilla.]]
 
 
===Kaksiulotteisia pelinkehitystyökaluja===
* [[Solar2D]] on avoimen lähdekoodin [[Lua]]-pohjainen 2D-pelimoottori.
* [[Godot Engine]] on 2D- ja 3D-pelimoottori.
* [[Mokoi Gaming Alchera]] [http://sourceforge.net/projects/mokoi/] on graafinen kaksiulotteisten pelien kehitystyökalu, joka sisältää [[SDL|SDL:n]] päälle toteutetut grafiikka-, ääni ja verkkokirjastot.
* [[GameEditor]] on graafinen 2D-pelikehitystyökalu.
* [[o.h.r.RPG.c.e]] on NES/SNES-tyylinen 2D-pelikehitystyökalu ja roolipelimoottori.
 
===Kaksiulotteisia pelimoottoreita===
 
* [[Löve]] on 2D-pelimoottori, jota ohjelmoidaan tulkattavan [[Lua]]-kielen avulla. Peli voidaan ohjelmoida pelkkää tekstimuokkainta käyttäen. Ohjelmakoodi suoritetaan komentoriviä käyttäen. Ohjelman koodi on helppolukuista ja sen oppii nopeasti. Löve-pelimoottorilla voi myös tehdä 3D-pelejä, tekniikkaa kutsutaan raycastingiksi [http://www.youtube.com/watch?v=rXwtO4uSosc]. Lövella ohjelmoituja pelejä ovat mm. [[Mari0]] ja [http://store.steampowered.com/app/323850 Move or Die].
* [[Fife]] on isometrinen 2D-pelimoottori, jota ohjelmoidaan tulkattavan Python-kielen avulla. Fife:llä ohjelmoituja pelejä ovat mm. [[Unknown Horizons]].
* [[Flare]] on isometrinen roolipelimoottori, josta ainakin on julkaistu peli nimeltä [https://flarerpg.org/index.php/mods/flare-empyrean/ The Empyrean Campaign].
 
===Karttamuokkaimia===
* [[Tiled]] on 2D-karttamuokkain, jolla voi luoda ortogonaalisia, isometrisiä ja kuusikulmaisia laatoista koostuvia 2D-karttoja peleihin.
 
===Grafiikka===
* [[Aseprite]] on avoimen lähdekoodin 2D-pikseligrafiikkaohjelma, jolla voit luoda animoituja spritejä ja pikseligrafiikkaa.
* [[Pixelator]] on pieni ja älykäs ohjelmisto, joka muuntaa kuvat pikselitaide spriteiksi tai pikselikansikuviksi.
 
==Mikä on 3D-peli?==
[[Kuva:Tremulous - human base goons.jpg|250px|thumb|Esimerkki kolmiulotteisesta Tremulous pelistä.]]
3D-pelit kuvataan kolmiulotteisena.
 
===Kolmiulotteisia pelinkehitystyökaluja===
* [[Syntensity]] on avoimen lähdekoodin 3D-peli ja pelinkehitystyökalu.  
* [[Platinum Arts Sandbox Game Maker]] on avoimen lähdekoodin kaksi- ja kolmiulotteisten pelien suunnittelu- ja hiekkalaatikko-ohjelma.
 
====Mallinnus====
* [[MakeHuman]] on erittäin helppokäyttöinen 3D-hahmomallinnusohjelma.
* [[Neobarok]] on 3D-mallinnus- ja veistosovellus.
* [[Blender]] on monipuolinen 3D-mallinnusohjelma, josta löytyy myös animointimahdollisuus.
* [[ngPlant]] on 3D-mallinnusohjelma, jolla voi mallintaa esimerkiksi kasveja ja puita.
* [[Arbaro]] on Javalla ohjelmoitu avoimen lähdekoodin kasvien ja puiden 3D-mallinnusohjelmisto.
* [[Dust3D]] on eläinhahmojen 3D-mallinnusohjelma.
* [https://www.bforartists.de/ Bforartists] 3D-mallinnusohjelma.
Lisää mallinnusohjelmia löydät CAD-ohjelmia esittelevästä [[CAD-ohjelmat|artikkelista]] ja [[:Luokka:3D-mallinnusohjelmat|3D-mallinnusohjelmat luokasta]].
 
====Grafiikka ja tekstuurit====
* [[GIMP]] on yleisimmin Linuxissa käytetty yleisin kuvankäsittelyohjelma.
* [[AwesomeBump]] on tekstuurikartoitus muokkain.
* [[Material Maker]] on avoimen lähdekoodin prosessuaalinen tekstuuri luontityökalu, joka perustuu [[Godot]]-moottoriin.
Lisää ohjelmia löydät kuvankäsittely [[:Luokka:Kuvankäsittelyohjelmat|luokasta]].
 
===Kolmiulotteisia pelimoottoreita===
* [[Crystal Space]]
* [[Irrlicht Engine]]  on joustava 3D-grafiikkamoottori ja kirjasto, joka antaa kehittäjien tuottaa sovelluksia hyödyntäen laitteistokiihdytettyä 3D-grafiikkaa OpenGL:n avulla.
* [[jMonkeyEngine]] on Javalla ja OpenGL:llä toteutettu avoimen lähdekoodin 3D-pelimoottori ja muokkain.
* [[Lightfeather 3D]]
* [[OGRE]] on joustava 3D-grafiikkamoottori ja muokkain, joka antaa kehittäjien tuottaa sovelluksia hyödyntäen laitteistokiihdytettyä 3D-grafiikkaa OpenGL:n avulla.
* [[Panda3D]] on 3D-grafiikkamoottori, jota ohjelmoidaan C++ ja Python-kielen avulla.
* [[Godot Engine]] on 2D- ja 3D-pelimoottori.
* [[Banshee 3D]] on 3D-pelimoottori ja muokkain. Ohjelma on vielä kehityksen alla.
 
====Ja kaupallisia ohjelmistoja====
* [[Axis Game Factory]] on Axis Game Factory LLC:n ammattitason luomis- ja karttamuokkain Unity 3D:lle.
* [[CryEngine]] on saksalaisen Crytekin julkaisema suljetun lähdekoodin pelimoottori, joka on saatavana esimerkiksi [[Valve]]n [[Steam]] [http://store.steampowered.com/app/220980/] -jakelualustasta edulliseen kuukausihintaan.
* [[Unity3D]] on Unity Technologin kehittämä osittain avoimen lähdekoodin ammattitason pelimoottori ja muokkain.
* [[Unreal Engine]] on osittain avoimen lähdekoodin ammattitason pelimoottori ja muokkain
 
==Fysiikkamoottorit ja kirjastot==
* [[Spring]] on 3D-fysiikkamoottori.
* [[Open Dynamics Engine]] on avoimen lähdekoodin fysiikkakirjasto.
* [[Chipmunk Physics]] [http://chipmunk-physics.net/] on fysiikkamoottori ja kirjasto, jota käytetään 2D-peleissä.
* [[Bullet]] on fysiikkamoottori ja kirjasto, jota käytetään 3D-peleissä.
* [[Newton Game Dynamics]] [http://newtondynamics.com/forum/newton.php] on fysiikkamoottori.
* [[Assimp]] eli Open asset import library
* [[SwinGame]] on pääasissa .Net-ohjelmistoille, Delphille ja FreePascalille kehitetty 2D-pelien tekemiseen tarkoitettu ohjelmakirjasto.
* [http://sol.gfxile.net/soloud/index.html SoLoud] on helppokäyttöinen, ilmainen ja siirrettävä C/C++-äänimoottori ja kirjasto peleille.
 
===Java pelikirjastot===
* [https://www.lwjgl.org/ LWJGL] 3 on kevyt [[Java]] pelikirjasto, joka tukee [[OpenGL]], [[OpenCL]] ja [[OpenAL]] kirjastoja.
* [http://legacy.lwjgl.org/ LWJGL] 2 on kevyt [[Java]] pelikirjasto, joka tukee [[OpenGL]], [[OpenCL]] ja [[OpenAL]] kirjastoja.
* [http://slick.ninjacave.com/slick-util/ Slick-Util] on pieni jar-muotoinen kirjasto, jolla voi ladata erilaisia ​​kuva-, ääni- ja fonttimuotoiluja LWJGL-kirjaston käyttöön.
 
==Python moduulit==
* [[pyGame]] on avoimen lähdekoodin [[Python]]-ohjelmointikieleen tehty peliohjelmointimoduuli. Se sisältää [[SDL|SDL:n]] päälle toteutetut grafiikka- ja äänikirjastot.
 
==Suomenkielistä kirjallisuutta==
* Tony Manninen: Pelisuunnittelijan käsikirja – ideasta eteenpäin, ''Kustannus Oy Rajalla (ISBN 978-952-5271-68-3)''
* Ville Vuorela: Pelintekijän käsikirja, ''BTJ-Kustannus 2007 (ISBN 978-951-692-661-5)''
 
==Englanninkielistä kirjallisuutta==
* Flint Dille and John Zuur Platten: The Ultimate Guide to Video Game Writing and Design ''(ISBN 1-58065-066-X)''
* Arnie Katz and Laurie Yates: Inside Electronic Game Design ''(ISBN 1-55958-669-9)''
* Adam Lake: Game Programming Gems 8
* Patrick O'Luanaigh: Game Design Complete ''(ISBN 1-933097-00-0)''
* [http://www.pixelprospector.com/indie-resources/#inspiration-and-game-development PixelProspector’s Indie Resources] A nifty collection of resources for Indie Game Developers
* Marc Saltzman: Game Design Secrets of the Sages ''(ISBN 1-56686-904-8)''
* Jesse Schell: The Art of Game Design: A book of lenses


== Katso myös ==
== Katso myös ==
* [[:Luokka:Peli-kehitysvaihe|Pelit kehitysvaiheessa -luokka]]
* [[Pelisuunnittelu]]
* [[:Luokka:Pelikehitys|Pelikehitys-luokka]]
* [[2D-peliohjelmoinnin aloitusopas Linuxille]]
* [[:Luokka:Pelimoottorit|Pelimoottorit-luokka]]
* [[3D-peliohjelmoinnin aloitusopas Linuxille]]
* [[CAD-ohjelmat#Mallinnus|Mallinnus]]
* [[Joukkorahoitus]]
 
==Aiheesta muualla==
* [http://pelitieto.net/ Pelitieto.net] - Pelien peruskurssi
* [http://www.cs.helsinki.fi/u/paakki/semis08.html Avoin ohjelmistokehitys] - seminaari (hyviä pdf-tiedostoja aiheesta)
* [http://sourceforge.net sourceforge.net] joka on maailman suurin  avoimen lähdekoodin ohjelmistokehittäjien yhteisö.
* [http://www.pixelprospector.com/indie-resources/#inspiration-and-game-development Indie Game Development Guide]
 
==Sivu on työn alla==
 
Tätä sivua pyritään laajentamaan ajan kanssa. Tällä hetkellä työtä tekee lähinnä lahtis, joten apu on tarpeen. Sivusto saattaa näyttää aluksi listalta, mutta yritetään laajentaa tekstejä. Lopussa näkyvä Peliohjelmointiin liittyvät artikkelit on oivallinen listaus, jonka avulla pääset kätevästi tutustumaan wikin tarjoamaan tietoon.


{{Pelinteko}}
{{Pelinteko}}

Nykyinen versio 22. marraskuuta 2025 kello 15.34

Tämä on päivitetty katsaus peliohjelmointiin Linux-ympäristössä, keskittyen yleispäteviin suosituksiin ja nykyaikaisiin työkaluihin, jotka tekevät projektin aloittamisesta sujuvampaa. Pelisuunnittelu on siirretty omaan artikkeliin.

Yleinen kehitysympäristö ja yhteensopivuus

[muokkaa]

Linux on erinomainen ympäristö pelinkehitykseen sen avoimen luonteen ja kehittäjäystävällisten työkalujen ansiosta.

Osa-alue Päivitystarve Selitys
Grafiikkarajapinnat Siirtyminen Vulkaniin OpenGL on edelleen olemassa, mutta matalan tason ja tehokkaampi Vulkan on nykyaikaisen 3D-pelinkehityksen ensisijainen valinta Linuxilla.
Yhteensopivuus Steam Playn ja Proton rooli Protonin kehitys on muuttanut Linux-pelaamisen maisemaa. Tämä tarkoittaa, että kehittäminen Windowsille (esim. DirectX-rajapinnan avulla) ja ajaminen Linuxilla Protonin kautta on erittäin suosittu ja toimiva lähestymistapa.
Jakelut Flatpak ja AppImage Nämä universaalit pakettimuodot ovat standardoituneet, helpottaen kehittäjien riippuvuuksien hallintaa ja parantaen käyttäjien saatavuutta Linux-jakelusta riippumatta.

Grafiikkarajapinnat

[muokkaa]

Perinteisen OpenGL:n rinnalle on noussut Vulkan. Vulkan on matalan tason rajapinta, joka tarjoaa huomattavasti paremman suorituskyvyn nykyaikaisissa 3D-peleissä. Jos tähtäät korkeaan suorituskykyyn, Vulkanin käyttö tai moottorin, joka sitä tukee (kuten Godot tai Unreal Engine), on suositeltavaa.

Alustojen välinen kehitys (Cross-Platform)

[muokkaa]

Nykyään kehitys keskittyy usein monialustaisuuteen. Steam Playn ja Protonin (Wine-pohjainen yhteensopivuuskerros) ansiosta Windowsille (esim. DirectX-rajapinnoille) koodatut pelit toimivat usein erinomaisesti suoraan Linuxilla. Tämä helpottaa kehittäjän työtä, sillä yksi koodikanta voi kattaa molemmat käyttöjärjestelmät.

Jakelu

[muokkaa]

Pelien ja työkalujen jakeluun suositellaan Flatpak- ja AppImage-pakettimuotoja. Ne sisältävät kaikki tarvittavat riippuvuudet ja toimivat luotettavasti lähes kaikissa Linux-jakeluissa.

Ohjelmointikielen valinta

[muokkaa]

Valinta riippuu projektin koosta, suorituskykyvaatimuksista ja siitä, käytätkö valmista moottoria.

Rust kieli

[muokkaa]
  • Rust on noussut vakavasti otettavaksi kieleksi. Se tarjoaa suorituskyvyn, joka on lähellä C++:aa, mutta sen omistajuus- ja lainakonseptit takaavat muistiturvallisuuden ilman roskienkeräystä, mikä on ratkaiseva etu suorituskykykriittisessä peliohjelmoinnissa.

.NET (Core) korvaa Monon

[muokkaa]
  • Microsoftin .NET-kehitysympäristö on nyt avoimen lähdekoodin alustariippumaton toteutus. Tämä on vähentänyt Monoon aiemmin liittyneitä patenttiriski- ja luotettavuushuolia, tehden C#:stä (Unityn pääkielenä) turvallisen valinnan Linux-kehityksessä.

C++-kirjastot

[muokkaa]
  • C++-ohjelmoinnissa suositellaan moderneja C++-standardeja (esim. C++17/20). Lisäksi Vulkan-rajapinta on keskeinen tehokkaan 3D-grafiikan luomisessa, usein hyödyntäen apukirjastoja tai moottorin abstraktioita (kuten Unity tai Unreal).


Kieli Pääkäyttö Hyödyt Linuxissa Huomioitavaa
C++ Korkean suorituskyvyn järjestelmätason koodi, omat moottorit. Ydinympäristön kieli, nopea pääsy Vulkan/SDL-kirjastoihin. Monimutkainen, vaatii manuaalisen muistinhallinnan.
Rust Turvallinen ja nopea järjestelmätason koodi. Erinomainen suorituskyky ja sisäänrakennettu muistiturvallisuus (ei roskienkeräystä). Suhteellisen uusi, mutta kasvava ekosysteemi (esim. Bevy-moottori).
C# Unity-kehitys (moottorin sisällä). Käytetään laajasti Unityssä. .NET-ympäristö on nyt avoin lähdekoodi ja luotettava Linuxilla. Vaatii usein virtuaalikoneen (JIT-kääntäjä).
Python Skriptaus, prototyypit, 2D-pelit (pygame). Helppo oppia, erinomainen prototyyppien luomiseen ja yksinkertaisiin peleihin. Hitaampi suorituskyky kuin käännetyissä kielissä.
Lua Skriptaus, kevyt 2D-kehitys (Löve). Nopea tulkattava kieli; ihanteellinen pelien lisäosille ja automaatioon. Käyttö pääosin moottoreiden sisällä.

Pelimoottorit ja kehitystyökalut

[muokkaa]

Valmis pelimoottori on yleensä paras tapa aloittaa. Ne hoitavat renderöinnin, fysiikan ja syötteiden käsittelyn puolestasi.

Avoimen lähdekoodin moottorit (Suositus Linuxiin)

[muokkaa]

1. Godot Engine

  • Käyttö: Monipuolinen 2D ja 3D.
  • Miksi Linuxissa?: Natiivi Linux-editori, kevyt, nopea kehityssykli, ja sen sisäänrakennettu GDScript-kieli on helppo oppia. Godot tukee Vulkan-renderöintiä.

2. SDL / SFML

  • Käyttö: Matalan tason 2D-kehityskirjastot (eivät moottoreita).
  • Miksi Linuxissa?: Ovat C/C++-pohjaisia ja toimivat perustyökaluina ikkunointiin ja syötteisiin, kun halutaan rakentaa oma kustomoitu kehys.

3. Löve 2D

  • Käyttö: Kevyet 2D-pelit.
  • Miksi Linuxissa?: Käyttää Lua-skriptikieltä, mikä mahdollistaa erittäin nopean prototyypin ja pelin luomisen ilman raskasta ympäristöä.

Kaupalliset ja ammattitasoiset moottorit

[muokkaa]
  • Unity: Vahva kaupallinen tuki. Linux-editori on saatavilla ja sitä käytetään laajasti C#-pohjaisiin projekteihin.
  • Unreal Engine: AAA-tason 3D-kehitykseen. Korkea suorituskyky ja graafinen laatu. Lähdekoodi on saatavilla, ja natiivi kääntäminen Linuxille on tuettua.
Nykyaikaiset pelimoottorit ja kehykset
Moottori / Kehys Avoin lähdekoodi Pääkäyttö Kielet Miksi Linuxissa?
Godot Engine kyllä 2D/3D (kevyt) GDScript, C#, C++ Paras avoimen lähdekoodin vaihtoehto. Natiivi Linux-editori ja kevyt luonne tekevät siitä erinomaisen valinnan indie- ja harrasteprojekteihin. Se on kehittynyt merkittävästi ja tukee modernia renderöintiä (Vulkan).
Unity ei 2D/3D (monialusta) C# Yhä vahva kaupallinen standardi. Linux-editorin tuki on parantunut, ja se on usein kehittäjien valinta monialustaiseen kehitykseen C#-kielellä.
Unreal Engine ei (lähdekoodi) AAA-tason 3D C++ AAA-tason 3D-kehitys. Tarjoaa korkean suorituskyvyn ja graafisen laadun. Kehittäjät voivat kääntää moottorin lähdekoodistaan Linuxille, ja sen virallinen Linux-tuki on erittäin hyvä.
SDL / SFML kyllä 2D-kirjastot C, C++ Pysyvät perustyökaluina. Nämä ovat kirjastoja, joita käytetään suoraan C/C++:ssa luomaan ikkunointi, käsittelemään syötteitä ja alustamaan matalan tason grafiikkaa (esim. OpenGL/Vulkan). Ne ovat edelleen suosittuja kevyissä ja kustomoiduissa projekteissa.

Muut olennaiset työkalut

  • Fysiikkamoottorit: Bullet Physics on suosituin ja yleisin avoimen lähdekoodin 3D-fysiikkakirjasto. Laajasti käytössä sen luotettavuuden ja monialustatuen vuoksi. PhysX Nvidian kehittämä, nyt osittain avoimen lähdekoodin moottori. Ja se on yleisesti käytössä kaupallisissa moottoreissa, kuten Unreal Enginessä tarjoten sille korkeaa suorituskykyä fysiikkalaskentaan.
  • Sisällön luominen: Blender on de facto standardi 3D-mallinnukseen ja animaatioon Linuxilla. Aseprite on säilyttänyt asemansa parhaana työkaluna ammattitasoiseen pikseligrafiikkaan.

Katso myös

[muokkaa]
v  k  m
Peliohjelmointiin liittyvät artikkelit
 Yleiset  Peliohjelmointi Linuxilla | Pelisuunnittelu | 2D-peliohjelmoinnin aloitusopas Linuxille | Musiikki ja äänet | Kuvankäsittely | Mallinnus | Lokalisointi
 2D 
 Pelimoottorit  Solar2D | Defold | Fife | LÖVE | GameMaker
  -Karttamuokkaimet  Tiled | OGMO Editor
 3D 
 Avoimet  Banshee 3D | Castle Game Engine | DarkPlaces | Defold | Godot Engine | Grit engine | Irrlicht Engine | id Tech (Quake) | ioquake3 | jMonkeyEngine | Lightfeather 3D | The Mirror | OGRE | O3DE | Panda3D | Range Engine | Serious | UPBGE | QFusion
 Suljetut  Axis Game Factory | CryEngine | Source | Unity3D | Unreal Engine
 Keskeytyneet  Crystal Space
  kuvankäsittely tekstuurikartoitus mallinnus 
 Kuvankäsittely  Gimp
  -Pikseligrafiikka  Aseprite | Pixelator
 Mallinnus  Blender | UPBGE | Bforartists | MakeHuman | Neobarok | ngPlant | ArbaroDust3D
  -Tekstuurikartoitus  AwesomeBump | Material Maker | Ptex
  -Tekstuurien luonti  ArmorLab
  -Pintakuviomaalaus  ArmorPaint
 Maastogeneraattorit  TerraForge3D
 Ohjelmointikielet 
  -Käännettävät  C | C++
  -Tulkattavat  Java | Python | Lua
  Ohjelmointimoduulit  pygame
  -Kirjastot  Assimp | OpenGL | Vulkan | SDL