Sarjakuvavarjostimen tekninen toteutus Shader Graph -työkalulla
Nevala, Joel (2023)
Nevala, Joel
2023
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2023052915588
https://urn.fi/URN:NBN:fi:amk-2023052915588
Tiivistelmä
Insinöörityön tarkoituksena oli selvittää Unity-pelimoottorin Universal Render Pipeline -renderöintiputken tarjoaman Shader Graph -työkalun soveltuvuutta sarjakuvavarjostimen luomiseen. Työ tehtiin indiepeliyritykselle, joka halusi pilotoida tätä varjostinta pelissään. Työn tarkoituksena oli saada aikaan valmis sarjakuvavarjostin käytettäväksi pelissä.
Insinöörityössä kehitettiin sarjakuvavarjostin hyödyntämällä Shader Graph -työkalun tarjoamaa Custom Function -koodielementtiä. Se ohjelmoitiin HLSL-grafiikkaohjelmointikielellä. Työssä perehdyttiin myös valon vaikutukseen 3D-mallien pinnassa ja siihen, miten sitä muokkaamalla saadaan aikaan sarjakuvavarjostusefekti.
Työssä selvisi muun muassa, että Unity-pelimoottorin Shader Graph -työkalulla ei ole tietoa valon arvoista, minkä takia valoa ei pystytä laskemaan työkalussa. Valon arvot saadaan kuitenkin haettua Custom Function -koodielementissä. Koska lisäksi useamman valon laskemisessa tarvitaan for-silmukkaa, jota ei myöskään ole Shader Graph -työkalussa, päädyttiin toteuttamaan valojen laskenta kokonaan Custom Function -koodielementissä.
Työnantaja oli tyytyväinen varjostimeen, mutta sitä ei lopuksi käytetty sellaisenaan, sillä pelin graafisen ilmeen haluttiin olevan yksityiskohtaisempi. Lopputulos kuitenkin osoittaa, että sarjakuvavarjostus on mahdollista toteuttaa Unity-pelimoottorin Shader Graph -työkalulla, vaikka suurin osa laskennasta kirjoitettiin Custom Function -koodielementin sisällä.
Insinöörityössä kehitettiin sarjakuvavarjostin hyödyntämällä Shader Graph -työkalun tarjoamaa Custom Function -koodielementtiä. Se ohjelmoitiin HLSL-grafiikkaohjelmointikielellä. Työssä perehdyttiin myös valon vaikutukseen 3D-mallien pinnassa ja siihen, miten sitä muokkaamalla saadaan aikaan sarjakuvavarjostusefekti.
Työssä selvisi muun muassa, että Unity-pelimoottorin Shader Graph -työkalulla ei ole tietoa valon arvoista, minkä takia valoa ei pystytä laskemaan työkalussa. Valon arvot saadaan kuitenkin haettua Custom Function -koodielementissä. Koska lisäksi useamman valon laskemisessa tarvitaan for-silmukkaa, jota ei myöskään ole Shader Graph -työkalussa, päädyttiin toteuttamaan valojen laskenta kokonaan Custom Function -koodielementissä.
Työnantaja oli tyytyväinen varjostimeen, mutta sitä ei lopuksi käytetty sellaisenaan, sillä pelin graafisen ilmeen haluttiin olevan yksityiskohtaisempi. Lopputulos kuitenkin osoittaa, että sarjakuvavarjostus on mahdollista toteuttaa Unity-pelimoottorin Shader Graph -työkalulla, vaikka suurin osa laskennasta kirjoitettiin Custom Function -koodielementin sisällä.