Generació i manipulació de recursos
En el món del desenvolupament de videojocs, la generació i manipulació de recursos esdevé un pilar fonamental. Els recursos multimèdia, des d’imatges 2D fins a complexos models 3D, són els elements visuals i auditius que donen vida a les creacions. Cada joc, independentment del seu gènere o plataforma, es basa en una sèrie de recursos ben dissenyats i optimitzats per proporcionar una experiència immersiva als jugadors.
Dins d’aquesta àrea, les eines com Unreal Engine 5, Unity i Maya juguen un paper crucial. Unity i Unreal Engine 5, com a motors de videojocs, ofereixen un ventall d’opcions per importar, optimitzar i manipular recursos, mentre que Maya, com a programari de modelatge 3D, és una eina clau per a la creació de models tridimensionals de qualitat.
En el desenvolupament de videojocs, els recursos d’àudio són tan crucials com els visuals. Efectes sonors, bandes sonores i diàlegs no només complementen, sinó que potencien la narrativa i la jugabilitat. Gràcies als motors de videojocs, els sons poden ser espacialment posicionats i adaptats dinàmicament d’acord amb les interaccions del jugador.
A l’etapa de producció, programaris com Audacity s’utilitzen per editar i afinar els recursos sonors, mentre que solucions com Wwise i FMOD ofereixen plataformes avançades per a la implementació d’àudio interactiu en el joc, permetent una integració més fluida i adaptativa d’acord amb la dinàmica del joc. En aquest context, l’àudio es converteix en un element essencial per crear experiències profundament immersives.
Però no es tracta només de tenir eines avançades; és vital entendre les diferències en el modelatge per videojocs en comparació amb altres àmbits, i com les pràctiques recomanades en la generació de recursos poden influir en el rendiment i la qualitat del joc final. Conèixer i dominar aquests aspectes ens permetrà desenvolupar videojocs més eficients, atractius i immersius.
Diferències entre el modelatge per a videojocs i per altres àmbits
En l’àmbit dels videojocs, el modelatge ha de tenir en compte factors com la càrrega de la CPU i la GPU, la memòria disponible i la manera en què els models interactuen amb el motor del joc. En canvi, en la producció cinematogràfica o la visualització arquitectònica, la prioritat pot estar més enfocada en l’alta fidelitat i detall, ja que no s’han de gestionar en temps real.
Optimització per a rendiment en temps real
Els videojocs necessiten renderitzar escenes ràpidament i de forma constant, sovint a 30, 60 o fins i tot a més de 100 fotogrames per segon. Això requereix que els models estiguin optimitzats per a un rendiment màxim. Els artistes de videojocs hauran de ser conscients dels límits de polígons, la gestió eficient de textures i la manera en què els shaders afecten el rendiment.
En altres mitjans, especialment en l’àmbit de la producció cinematogràfica, els requisits pel modelatge 3D són significativament diferents. Les pel·lícules tenen la llibertat d’utilitzar renderitzacions que poden trigar hores per a un sol fotograma, donant prioritat a la fidelitat visual i als detalls precisos. Aquestes renderitzacions poden aprofitar algoritmes avançats d’il·luminació, reflexió i refracció que serien inviables en temps real per a un videojoc.
A més a més, amb l’aparició de la producció virtual, la línia entre la cinematografia i el modelatge en temps real està començant a esborrar-se. Un exemple prominent d’aquesta fusió és la sèrie The Mandalorian, produïda per Lucasfilm i emesa a Disney+. En lloc de confiar exclusivament en pantalles verdes o escenaris físics, The Mandalorian utilitza enormes pantalles LED que projecten paisatges i fons generats per ordinador. Aquests fons, creats amb el motor de jocs Unreal Engine, s’adaptaven dinàmicament a la càmera, proporcionant il·luminació i reflexions realistes en temps real.
Aquesta tècnica de producció virtual no només ofereix una representació visual més convincent, sinó que també permet als cineastes veure i interactuar amb els entorns digitals mentre filmen, oferint una flexibilitat sense precedents en la producció audiovisual. Això implica que, mentre la prioritat pot continuar sent la fidelitat visual, la necessitat d’optimització i eficiència en temps real està guanyant terreny també en la producció cinematogràfica.
Els videojocs són dissenyats per a una àmplia varietat de dispositius, que van des de potents consoles fins a telèfons mòbils i dispositius de realitat virtual. Aquesta diversitat implica que, sovint, es necessitin diferents versions de models adaptats específicament per a cada plataforma. Un joc destinat a PC podria exhibir models amb un gran nivell de detall i alta resolució, mentre que la seva contrapart en mòbil hauria d’optar per models més simplificats per assegurar un rendiment òptim.
Diversos factors clau influeixen en el rendiment gràfic d’un joc, incloent-hi:
- Context del Joc: determina la densitat ideal de triangles en un model.
- Visibilitat de l’objecte: la mida i proximitat d’un objecte en pantalla pot influir en la seva complexitat.
- Col·laboració: és vital que els artistes gràfics coordinin amb els productors per comprendre les necessitats tècniques.
- Total de Triangles: la quantitat total en pantalla sovint és més crítica que la d’un sol objecte.
- Tipus de Dispositiu (device type): un joc per a mòbils o realitat virtual pot necessitar menys triangles que un destinat a consoles d’última generació.
- Rendiment gràfic (graphic performance): factors com el llançament d’ombres o la gestió de transparències poden afectar dràsticament el rendiment.
La freqüència de refresc és un altre factor a considerar. Mentre un joc per a mòbil pot funcionar de manera òptima a 30 FPS, un de realitat virtual podria necessitar almenys 90 FPS. Això significa que en VR, cada element de la pantalla ha de ser renderitzat almenys tres vegades més ràpidament.
"Fortnite" en diferents plataformes
Fortnite és un clar exemple de com un joc pot ser adaptat per satisfer les necessitats tècniques de múltiples dispositius. El joc ha estat desenvolupat i optimitzat per a consoles de nova generació, PC, mòbils i fins i tot la Nintendo Switch.
- PC d’alta gamma: en aquesta plataforma, Fortnite pot exhibir gràfics d’alta qualitat amb resolucions que arriben fins a 4K. Els models dels personatges poden tenir un gran nivell de detall, amb textures riques i efectes de llum dinàmics. Es poden arribar a mostrar models amb centenars de milers de triangles.
- Consoles com PS5 o Xbox Series X: aquestes plataformes ofereixen una experiència similar a la d’un PC d’alta gamma. Les optimitzacions específiques poden variar, però en general, es busca un equilibri entre detall gràfic i fluïdesa de joc.
- Mòbils (iOS i Android): en aquestes plataformes, el joc s’ha hagut d’optimitzar dràsticament per assegurar un rendiment fluid. Això significa reduir la densitat de triangles dels models, simplificar textures i limitar certs efectes visuals. Tot i això, el joc manté la seva essència i jugabilitat.
- Nintendo Switch: aquesta consola, tot i ser més potent que la majoria dels mòbils, no pot competir amb les consoles de nova generació o PC d’alta gamma en termes de potència gràfica. Per tant, Fortnite ha estat optimitzat per funcionar de manera eficient, reduint detalls en models i textures en comparació amb altres plataformes.
Com es pot apreciar, la capacitat de Fortnite d’adaptar-se i equilibrar la qualitat gràfica amb el rendiment li permet oferir una experiència de joc consistent als jugadors a través de diverses plataformes, independentment del dispositiu.
Beneficis del modelatge específic per a videojocs
A diferència del modelatge per a cinema o animacions, que pot permetre’s un alt grau de detall i complexitat, el modelatge per a videojocs ha de tenir en compte les restriccions de rendiment dels dispositius on es jugarà el joc. A continuació, es presenten els principals beneficis d’aquest tipus de modelatge:
- Optimització per a una millor performance. Modelar específicament per a jocs garanteix que els models siguin els més eficients possibles, amb el mínim de polígons necessaris per representar l’objecte sense perdre qualitat visual. Aquesta optimització permet que els jocs corrin fluidament en una ampla gamma de dispositius, des de consoles d’última generació fins a mòbils. Per exemple, els jocs de la sèrie Assassin’s Creed d’Ubisoft utilitzen models detallats per als personatges principals, però també optimitzen aquests models perquè es puguin renderitzar eficientment en temps real. Per altra banda, els models emprats per renderitzar cinemàtiques acostumen a tenir un major nombre de polígons, ja que encara que això augmenta el temps de renderització, no té cap impacte pels jugadors.
- Flexibilitat en l’estil artístic. El modelatge per a jocs permet als desenvolupadors adaptar-se a una àmplia gamma d’estils visuals, des de realisme fotogràfic fins a estils més caricaturescos o estilitzats. Jocs com The Legend of Zelda: Breath of the Wild de Nintendo o Firewatch de Campo Santo són exemples de com es pot utilitzar l’estil artístic per crear mons visuals únics i immersius. En el següent vídeo podeu veure el tràiler de Firewatch:
- Integració amb sistemes de joc. Els models específics per a videojocs acostumen a estar optimitzats per treballar amb diferents sistemes integrats en els motors de joc. Això inclou la interacció amb la física i la capacitat de ser animats de forma fluida i realista. Alguns motors de joc, com Unreal Engine 5, permeten fer rigging i animar els models directament dins del mateix motor, augmentant així la flexibilitat i eficiència del procés de desenvolupament. En contextos com els jocs de tipus shooter, els models de personatges es complementen amb caixes de col·lisió, sovint denominades hit boxes. Aquestes caixes, que són representacions simplificades de la geometria del personatge, permeten al motor del joc determinar amb precisió si un projectil ha impactat contra el personatge o no.
- Escalabilitat. Els models per a jocs estan dissenyats per ser escalables, permetent adaptar-se a diferents nivells de detall per garantir un rendiment òptim en diferents dispositius. Aquesta adaptabilitat es gestiona a través dels Levels of Detail (LOD), que són versions del mateix model amb diferents graus de complexitat. Quan un objecte està més allunyat de la càmera o en un dispositiu amb menors capacitats gràfiques, es pot usar una versió de menor detall del model per estalviar recursos sense comprometre l’aspecte general del joc. Un exemple clar és Fortnite d’Epic Games, que es pot jugar tant en consoles d’última generació amb gràfics d’alta definició (mipmaps) com en dispositius mòbils amb configuracions gràfiques reduïdes.
Modelatge dels personatges d'"Overwatch"
A continuació podeu veure com s’extrapolen les dades proporcionades per Scott Goffman, Principal Tech Artist d’Overwatch, als beneficis enumerats:
- Optimització per a una millor performance. Aquest joc establia una directriu clara sobre el nombre màxim de triangles que es poden utilitzar en el LOD més alt d’un heroi: 30.000 triangles, més 15.000 addicionals per armes. Això subratlla la necessitat d’optimització, garantint que els personatges complexos no sobrecarreguin els recursos, especialment en consoles.
- Flexibilitat en l’estil artístic. A Overwatch cada personatge té la seva pròpia estètica i disseny. Aquesta flexibilitat es pot veure en la manera en què es tracten les textures. Cada heroi, armes i efectes, ha de ser inferior a 30 MB després de la compressió, garantint que cada personatge tingui un aspecte únic sense excedir-se en l’ús de la memòria.
- Integració amb sistemes de joc. Les textures d’Overwatch són creades en conjunts que després són combinats pels seus shaders. A més, alguns herois amb pell visible disposen d’una blood map, una característica utilitzada en aquest joc que permet simular l’efecte de sub-surface scattering, un detall que millora la realitat visual dels personatges.
- Escalabilitat. Cada heroi i arma té quatre LOD, reduint-se a la meitat de polígons amb cada nivell inferior de detall. Això permet que el joc s’adapti a diferents situacions, optimitzant el rendiment en funció de la distància del personatge respecte a la càmera. També es va mencionar que la resolució de les textures es redueix depenent de les necessitats, amb les textures de 2048×2048 per als herois i 1024×1024 per a les armes, amb addicionals com 256×256 per a detalls addicionals (per exemple, els ulls).
Finalment, en termes d’animació, el fet que els personatges d’Overwatch comencin amb un esquelet estandarditzat que després es personalitza, subratlla la importància de tenir un flux de treball coherent i eficient. El límit de 256 ossos, amb la majoria dels herois utilitzant entre 200-225, indica una gestió curosa de la complexitat per assegurar-se que les animacions són fluides i detallades sense sobrecarregar el sistema.
A continuació, podeu veure el tràiler del joc d’Overwatch:
Desafiaments i consideracions
Quan es tracta de disseny i optimització gràfica per a videojocs, hi ha diversos elements clau que cal considerar per assegurar-se que el joc no només sigui visualment atractiu, sinó també eficient i funcional en diverses plataformes:
- Límits de polígons. El desafiament aquí és trobar un equilibri perfecte. Mentre més polígons tingui un model, més detallat i realista pot semblar. No obstant això, un excés de polígons pot suposar una càrrega innecessària per al sistema, afectant el rendiment. És vital determinar la quantitat òptima de polígons per a cada objecte dins del joc, garantint visuals impressionants sense comprometre la fluïdesa del joc (vegeu la taula).
| Platform | Triangle Count |
|---|---|
| PSVR | 800k |
| PS4 | 3-5m |
| Oculus Go i dispositius mòbils | 100k |
| Oculus Quest 1 | 350k-500k |
| Oculus Quest 2 | 750k-1.0m |
- Compressió de textures i mipmaps. La qualitat de les textures és essencial per a la immersió dins d’un joc. No obstant això, les textures d’alta qualitat poden ocupar una gran quantitat de memòria. La compressió de textures permet reduir la seva mida sense sacrificar massa la qualitat visual. A més, l’ús de mipmaps, versions reduïdes d’una textura original, pot optimitzar el rendiment en mostrar versions de menor resolució de la textura quan l’objecte està més lluny de la càmera, millorant així l’eficiència sense comprometre l’estètica.
- Nivell de detall (LOD, Level Of Detail). A mesura que un objecte es desplaça més lluny de la càmera, alguns detalls poden no ser visibles o necessaris. El LOD implica crear diferents versions d’un model, cada una amb diferents nivells de detall. D’aquesta manera, es pot mostrar una versió de menor resolució d’un model quan està lluny, optimitzant el rendiment.
- Animacions. El moviment dona vida als jocs, però les animacions han de ser fluides i coherents. Cal assegurar que els models estiguin optimitzats i preparats per suportar una àmplia varietat d’animacions, sense causar problemes tècnics o pèrdues visuals.
Un altre aspecte crucial és la diferència en l’enfocament de l’animació de personatges en videojocs respecte a l’animació tradicional. En els videojocs, les animacions dels personatges han de ser més ràpides i dinàmiques; els jugadors esperen respostes immediates per percebre el joc com a responsiu.
- Consideracions de plataforma. Cada plataforma, sigui PC, consola, mòbil o VR, té les seves especificacions i limitacions tècniques. Cal adaptar i optimitzar els recursos gràfics per garantir que el joc funcioni correctament i ofereixi la millor experiència possible en cadascuna d’elles.
Compressió de textures
La compressió de textures, tot i ser un mètode eficaç per reduir la mida dels fitxers, pot presentar certes limitacions en termes de qualitat. Quan es tracta de compressió amb pèrdua, tot i que el pes de la textura disminueix significativament, aquesta pot presentar artefactes, especialment amb nivells alts de compressió.
Atès que la compressió amb pèrdua pot afectar la nitidesa i detall de les textures, no sempre és l’opció més adequada. Mentre que per a models 3D la compressió amb pèrdua pot ser suficient a causa de la seva eficiència i la mida més reduïda del fitxer, per a elements com les interfícies d’usuari a Unity, és més aconsellable utilitzar textures sense compressió. Aquests elements, estant en primer pla davant del jugador, han de ser nítids i clars, evitant qualsevol artefacte que pugui distraure o afectar negativament l’experiència de joc.
Encara que Unity no ofereixi una compressió sense pèrdua per se, permet tractar certes textures, com les de la interfície d’usuari, sense compressió, assegurant-se que mantinguin la màxima qualitat possible. Per fer això, a l’hora d’importar la textura, cal seleccionar l’opció de Texture Type com a UI perquè es tracti de manera adequada.
Quan se selecciona un format de compressió de textures, és crucial considerar diversos factors. A vegades, l’elecció de format pot estar condicionada per la plataforma objectiu i la funcionalitat específica que se li donarà a la textura.
Formats de textures recomanats
En el següent enllaç podeu trobar les recomanacions oficials de Unity per diferents plataformes: Texture formats in memory.
Compatibilitat dels formats de compressió
No tots els formats de compressió són compatibles amb totes les plataformes. Això significa que, mentre un format pot funcionar perfectament en una consola o PC, potser no és compatible o no és òptim per a mòbils o altres dispositius. Els desenvolupadors han de ser conscients d’aquestes limitacions i triar els formats de compressió adequats segons la plataforma objectiu.
Plataformes Principals:
- Windows, macOS, i Linux: suporten la majoria dels formats llistats, amb algunes excepcions en formats específics com ASTC o ETC2.
- Android: té suport limitat per a molts formats. No suporta formats com BC7, DXT5, o BC6H, però sí que suporta altres com RGBA 32 bits, RGB 24 bits i alguns formats ASTC i ETC.
- iOS i tvOS: suporten una àmplia varietat de formats, incloent-hi formats específics com PVRTC, ASTC, i ETC.
- WebGL (Navegadors d’escriptori): suporten una combinació mixta, amb suport per a formats com BC7 però sense suport per a formats mòbils com ASTC o ETC2.
- WebGL (Navegadors iOS i Android): principalment suporten formats com RGBA 32 bits, RGB 24 bits, i alguns formats específics mòbils com ASTC i ETC.
Formats de Textures Universals:
- RGBA 32 bits, RGB 24 bits, i R 8: aquests formats són suportats per totes les plataformes llistades, fent-los una opció segura per als desenvolupadors que volen maximitzar la compatibilitat.
Formats Específics de Mòbil:
- ASTC, ETC, i PVRTC: aquests són suportats majoritàriament en plataformes mòbils com iOS i Android. Alguns d’aquests formats, com ASTC, també tenen suport parcial en altres plataformes com WebGL en navegadors mòbils.
Formats de Compressió Avançats:
- BC7, DXT5, i BC6H: estan suportats en plataformes d’escriptori com Windows, macOS, i Linux, així com en WebGL en navegadors d’escriptori. No són suportats en plataformes mòbils com Android o iOS.
ASTC és el format de compressió recomanat per a jocs per Android, inclosos els jocs de realitat virtual per Meta Quest.
'Mipmaps'
Dins del món del desenvolupament de videojocs, l’optimització gràfica és un component clau per garantir una experiència suau i agradable per als jugadors. Una de les tècniques més comunes per aconseguir-la és l’ús de mipmaps.
Els mipmaps són versions reduïdes d’una textura original, dissenyades específicament per millorar el rendiment gràfic en escenes tridimensionals. Quan es visualitza una escena en 3D, no tots els objectes requereixen la mateixa resolució de textura; els objectes que estan més lluny de la càmera poden ser renderitzats amb textures de menor resolució sense que aquesta reducció en la qualitat sigui perceptible per al jugador. Aquí és on els mipmaps entren en joc, permetent al sistema escollir automàticament la resolució de textura més adequada segons la distància de l’objecte a la càmera. Aquesta adaptabilitat no només accelera el temps de renderitzat, sinó que també redueix els artefactes visuals que podrien aparèixer si es fes un mapatge incorrecte d’una textura d’alta resolució en una superfície distant.
Utilització de 'mipmaps' a Unity
Unity, com moltes altres plataformes de desenvolupament de jocs, incorpora suport per a mipmaps. Dins de Unity, un mipmap o nivell de mips és una representació d’una textura amb una resolució específica. Els mipmaps dins d’aquesta plataforma contenen versions que van disminuint progressivament en termes de resolució.
Unity fa ús dels mipmaps principalment per optimitzar el rendiment en escenes 3D. Quan un objecte està més a prop de la càmera, s’utilitza un mipmap d’alta resolució, i a mesura que l’objecte es desplaça més lluny de la vista, s’apliquen mipmaps de menor resolució.
Un avantatge afegit dels mipmaps a Unity és que poden accelerar les operacions de renderitzat i reduir artefactes visuals, ja que permeten al GPU treballar amb versions ja reduïdes d’una textura en lloc de fer múltiples operacions sobre la textura original de completa resolució. Tot i això, hi ha situacions, com ara textures d’interfícies d’usuari que no es redimensionen, on l’ús de mipmaps pot no ser beneficiós, ja que podrien augmentar innecessàriament la mida de la textura tant en disc com en memòria.
Dins de Unity, es pot optar per crear un mipmap manualment o permetre que Unity generi automàticament el mipmap. Aquesta generació automàtica requereix que la textura original tingui una resolució que sigui una potència de dos. A més, els desenvolupadors poden habilitar o deshabilitar mipmaps per a un recurs de textura en particular mitjançant la configuració de la importació de textures (vegeu la figura).
Nivell de detall (LOD) i impostors
Dins del món del desenvolupament de jocs, la tècnica dels nivells de detall o LOD (level of detail) es presenta com una estratègia clau per a la renderització 3D. L’objectiu és optimitzar el rendiment sense sacrificar la qualitat visual. Això es deu al fet que la necessitat de detall d’un objecte varia segons la seva proximitat a la càmera: un objecte distant no requereix tanta resolució com un de proper, i, per tant, utilitzar models d’alta resolució per a objectes llunyans pot ser ineficient i innecessari, ja que molts dels detalls resultarien imperceptibles per al jugador.
En resposta a aquest repte, la tècnica del LOD implica la creació de múltiples versions d’un model, cada una adaptada a un grau específic de detall. En funció de la distància de l’objecte respecte a la càmera, el motor de joc triarà automàticament la versió més adequada del model, garantint un equilibri entre rendiment i qualitat visual.
Quant a la generació d’aquests models, hi ha diverses opcions. Es poden dissenyar manualment en programes especialitzats com Maya o Blender i després importar-los al motor de joc. Alternativament, alguns motors, com Unreal Engine 5, ofereixen la capacitat de generar aquests LOD de manera automàtica. També existeixen connectors, com l’Ultimate LOD System per a Unity, que faciliten aquesta tasca. Si bé la generació automàtica pot ser més ràpida i eficient, la creació manual permet als artistes tenir un major control sobre la reducció de polígons, assegurant-se que el model resultant mantingui una fidelitat estètica amb l’original.
Exemple de nivell de detall a Unity
Cal tenir en compte que Unity dona suport per utilitzar aquesta tècnica, però a diferència d’altres motors com Unreal Engine, no proporciona eines per generar automàticament les malles amb un menor nivell de polígons (poligonatge).
Per utilitzar el LOD a Unity, es comença creant un conjunt LOD per a un objecte, on es pot especificar diferents models per a diferents rangs de distància. Unity proporciona una interfície visual on es pot veure i ajustar els llindars de canvi entre els diferents nivells de detall, permetent als desenvolupadors una gran flexibilitat i control. Tal com es mostra en el vídeo que teniu a continuació.
A més, Unity inclou funcions que faciliten la transició entre diferents nivells de LOD, garantint que els canvis siguin suaus i menys perceptibles per al jugador. Aquesta transició suau ajuda a evitar saltacions brusques o popping visuals quan es canvia de model.
Un avantatge afegit és que Unity permet no només basar el LOD en la distància, sinó també en altres factors com la resolució de la pantalla, garantint així que el rendiment sigui òptim en una àmplia varietat de dispositius i configuracions.
Nivells de detall de Unity
En el següent enllaç podeu trobar la documentació pels nivells de detall de Unity: Mesh LOD.
Una altra tècnica emprada per optimitzar el rendiment dels jocs és la implementació d’impostors per als objectes 3D més distants. Un impostor no és més que una representació bidimensional, una textura o pla 2D, que emula la presència d’un objecte tridimensional des de determinats punts de vista.
Impostors
En el següent enllaç podeu veure una explicació més detallada de què consisteix la tècnica dels impostors: Imposters.
Quan l’usuari es mou o la perspectiva de la càmera varia, els impostors s’actualitzen per oferir una representació ajustada a la nova vista, evitant així la necessitat de renderitzar objectes 3D detallats en temps real. Aquesta estratègia resulta particularment beneficiosa en escenes on hi ha objectes llunyans o quan no es necessita un detall precís. Si es combinen amb el sistema LOD, la combinació pot potenciar de manera significativa l’eficiència del rendiment.
Aquesta fusió de tècniques permet als motors de joc gestionar i representar escenes riques en detalls amb gran agilitat. En essència, aquesta aproximació porta la reducció del nivell de polígons (poligonatge) al seu límit, transformant objectes distants en simples plans bidimensionals.
Creació de recursos modulars
La creació de recursos modulars és una tècnica que facilita el disseny i desenvolupament de videojocs a través de la reutilització i combinació de diferents components. Aquesta estratègia consisteix a produir petites peces o mòduls que poden ser reutilitzats i disposats de maneres diferents per a crear nivells, escenaris, o fins i tot personatges. Aquesta modularitat agilitza el procés de desenvolupament, optimitza recursos, i ofereix una gran flexibilitat per adaptar-se a diferents estils artístics i necessitats de disseny.
Hi ha diversos jocs que fan ús d’aquesta tècnica per construir els seus nivells. Alguns exemples notables són:
- The Elder Scrolls V: Skyrim. Bethesda ha utilitzat la creació modular en molts dels seus jocs per construir vastos mons oberts. En Skyrim, per exemple, moltes de les masies, castells i ciutats fan servir recursos modulars que permeten als desenvolupadors crear una gran varietat d’estructures a partir d’un conjunt limitat de peces.
- Fallout 4. Un altre títol de Bethesda, on els jugadors poden notar l’ús de recursos modulars, especialment en els assentaments que poden construir. Els edificis són creats a partir de parets, sostres, i altres elements bàsics que es poden combinar de moltes maneres diferents.
- Doom (2016). Aquesta reimaginació del clàssic FPS fa ús de l’apropament modular en molts dels seus nivells. Els corredors, habitacions i àrees de combat són sovint construïts a partir d’un conjunt de mòduls que poden ser reorganitzats i combinats de diverses maneres.
- Cities: Skylines. Tot i que és un joc de simulació d’edificació de ciutats, la seva llibreria d’edificis, carreteres i infraestructures funciona d’una manera modular. Els jugadors poden utilitzar una varietat de peces per construir i personalitzar la seva pròpia ciutat.
Aquesta estratègia no només optimitza el temps i els recursos durant el desenvolupament, sinó que també ofereix als dissenyadors una major llibertat per experimentar i adaptar els nivells segons les necessitats del joc, sense haver de crear tot des de zero en cada ocasió.
Empreses de creació de recursos modulars
Més enllà del desenvolupament intern d’aquests recursos, existeixen empreses especialitzades en la creació de recursos modulars, com és el cas de Synty. Per tenir una visió més detallada del tipus de recursos que ofereixen aquestes empreses, podeu veure aquest vídeo:
Creació de recursos modulars 2D
Dins del món del desenvolupament de videojocs 2D, la creació de recursos modulars resulta fonamental per a la construcció ràpida i eficient d’entorns i escenaris. Aquests recursos modulars permeten als desenvolupadors construir nivells utilitzant conjunts preexistents de peces o components, com si es tractés d’un joc de construcció. Unity, com a motor líder en el desenvolupament de jocs, ofereix eines específiques per treballar amb aquests recursos en 2D.
'Sprite Editor'
L’Sprite Editor de Unity és una eina que permet als desenvolupadors i dissenyadors manipular gràfics 2D, coneguts com a sprites. Aquesta eina és útil per:
'Sprite Editor'
Podeu trobar la documentació oficial sobre Sprite Editor de Unity al següent enllaç: Sprite Editor.
- Retallar: podeu dividir una imatge amb múltiples personatges o objectes en sprites individuals per utilitzar-los de manera separada dins del joc.
- Ajust de polígons: modificar la forma predeterminada (quadrada o rectangular) de l’sprite per adaptar-se més acuradament a la imatge, optimitzant així les col·lisions i reduint els recursos innecessaris.
- Definir pivots: estableix un punt de rotació per a l’sprite, el que pot ser útil per a animacions o per determinar com es relaciona l’sprite amb el món del joc.
Podeu veure com utilitzar l’Sprite Editor de Unity, en els següents vídeos:
El codi utilitzat per controlar el personatge en els vídeos és el següent:
// PlayerController.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { [SerializeField] public float speed = 2.0f; // Velocitat de moviment del personatge [SerializeField] public float jumpForce = 4.0f; // Força del salt private bool isGrounded; // Variable per verificar si el personatge està en contacte amb el terra private void Update() { // Moviment horitzontal float Axis = Input.GetAxis("Horizontal"); // Obtenir l'entrada del teclat (A/D o fletxes esquerra/dreta) float move = Axis * speed * Time.deltaTime; // Calcular el desplaçament horitzontal // Reorientar el personatge segons la direcció del moviment if (Axis > 0f) { transform.localScale = new Vector3(1, 1, 1); // Mirar cap a la dreta } else if (Axis < 0f) { transform.localScale = new Vector3(-1, 1, 1); // Mirar cap a l'esquerra } transform.Translate(move, 0, 0); // Moure el personatge // Salt if (Input.GetButtonDown("Jump") && isGrounded) // Comprovar si s'ha premut el botó de salt i està en terra { GetComponent<Rigidbody2D>().AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse); // Aplicar una força de salt } } // Detectar col·lisió amb el terra private void OnCollisionEnter2D(Collision2D collision) { Debug.Log("OnCollisionEnter2D"); // Missatge de registre per a col·lisió if (collision.collider.CompareTag("Ground")) // Comprovar si el personatge està tocant el terra { isGrounded = true; // Establir que el personatge està en terra } } // Detectar quan deixa de tocar el terra private void OnCollisionExit2D(Collision2D collision) { Debug.Log("OnCollisionExit2D"); // Missatge de registre per a sortida de col·lisió if (collision.collider.CompareTag("Ground")) // Comprovar si el personatge ha deixat de tocar el terra { isGrounded = false; // Establir que el personatge no està en terra } } }
Per accedir a l’Sprite Editor cal importar una imatge al projecte (per exemple, arrossegant-la a l’àrea d’assets). Un cop importada, en fer clic a sobre, s’obrirà l’inspector amb les seves dades: Texture Type, Sprite Mode, Wrap Mode, etc., i el botó Sprite Editor, que en prémer-lo obrirà l’editor de sprites, tal com es mostra a la figura.
Inspector d'imatges de Unity
Entre les característiques més rellevants de l’inspector de cara a editar els sprites es troben:
- Texture Type: aquesta opció defineix com Unity ha de tractar la imatge importada. En treballar amb gràfics 2D per a videojocs, s’ha de triar Sprite com a tipus de textura.
- Sprite Mode: determina com es gestionen els sprites dins de la imatge. Si la imatge conté múltiples sprites, s’ha d’utilitzar Multiple. Si només hi ha un sprite, s’utilitza Single.
- Pixels Per Unit: aquesta opció defineix quantes unitats del joc (en Unity) equivalen a un píxel de la imatge. Per exemple, si s’estableixen Pixels Per Unit a 100, això vol dir que una imatge de 100×100 píxels ocuparà “1 unitat x 1 unitat” en l’escenari de Unity. De la mateixa manera, si la imatge ha d’ocupar un espai de 32×32 píxels, s’haurà d’assignar un valor de 32 a Pixels per Units.
- Mesh Type: aquesta opció determina la malla que s’usarà per a l’sprite. Full Rect crea una malla que cobreix tot el rectangle de l’sprite, mentre que Tight intenta ajustar la malla més a prop dels contorns reals de l’sprite, que pot ser útil per a col·lisions més precises.
- Extrude Edges: aquesta opció defineix quan s’estenen els vèrtexs fora dels límits de l’sprite. Això pot prevenir problemes visuals quan es renderitzen sprites.
- Generate Physics Shape: quan està activada, Unity generarà automàticament una forma de col·lisió basada en l’sprite. Això és útil per a col·lisions més precises sense haver de crear manualment un collider.
- Sprite Editor (botó): en prémer aquest botó, s’obre l’editor de sprites, una eina que permet retallar i ajustar com es mostren i es comporten els sprites dins Unity.
Pel que fa a la secció Advanced de l’inspector, es troben diferents opcions rellevants per al tractament de textures. L’opció sRGB determina si una imatge utilitza l’espai de color sRGB, mentre que Alpha Source i Alpha is Transparency gestionen l’ús del canal alfa per a la transparència. Read/Write permet que la textura sigui accessible via scripts, per altra banda, Generate Mipmaps optimitza el rendiment creant versions de la textura a diverses resolucions. Finalment, Wrap Mode i Filter Mode controlen com es presenta i ajusta la textura en diferents contextos i dimensions.
Després de dividir una imatge en diversos sprites, es pot generar una animació seleccionant aquests sprites des de la secció de projecte i arrossegant-los directament a l’escena. En fer-ho, automàticament s’afegirà un objecte a l’escena que inclou els components Sprite Renderer i Animator. A més, es mostrarà un diàleg per permetre’t desar aquesta nova animació. Una vegada guardada, l’objecte reproduirà l’animació de sprites en bucle.
'Tilemap'
Un Tilemap és una tècnica emprada en el desenvolupament de videojocs, predominantment en jocs 2D. Consisteix en l’ús d’un conjunt d’imatges quadrades o rectangulars, denominades tiles (‘mosaics’ o ‘tessel·les’), per construir l’escenari o l’entorn del joc. Aquests tiles s’alineen dins d’una graella, i la seva capacitat de ser reutilitzats dins d’un mateix escenari o entre diferents nivells permet crear ambients rics sense sobrecarregar innecessàriament la memòria ni els recursos gràfics.
Un Tileset és essencialment una col·lecció o paleta de tiles. Així, un dissenyador pot tenir un Tileset específic per a boscos, un altre per a deserts i un altre per a ciutats, facilitant la creació d’escenaris variats dins del mateix joc.
Mentre els tiles es classifiquen en Tilesets, els sprites es reuneixen en Spritesheets.
És important diferenciar entre tiles i sprites. Tot i que un tile pot contenir un sprite en termes d’imatge, la seva funció és diferent. Els sprites són elements gràfics que es poden moure pel joc, com ara personatges o enemics, mentre que els tiles, en general, són parts estàtiques que conformen el fons o l’entorn del joc.
Gràcies als Tilemaps, els dissenyadors poden elaborar escenaris amb rapidesa, aprofitant la reutilització de tiles per garantir eficiència i coherència estilística al llarg de tot el joc.
Tilemap de Unity
El Tilemap de Unity és una eina específica per a la creació d’escenaris 2D utilitzant mosaics o tiles. Ideat per a estils de jocs com RPG clàssics, jocs de plataformes i altres que depenen de gràfics en forma de mosaics.
Les característiques clau del Tile Editor de Unity són les següents:
- Optimització: la naturalesa del sistema permet que un tile es reutilitzi múltiples vegades, optimitzant la memòria i limitant la necessitat de gràfics addicionals.
- Eficiència: ofereix una construcció d’escenaris intuïtiva. Amb un Tileset adequat, els desenvolupadors poden construir nivells complexos amb agilitat.
- Interacció: incorpora funcions per establir zones de col·lisió dins dels tiles, garantint interaccions lògiques dins del joc, com evitar que un personatge travessi una paret.
- Dinamisme: permet l’addicció de tiles animats o amb efectes visuals, com ara aigua fluint o flames oscil·lants, enriquint l’ambientació del joc.
Per treballar amb el Tile Editor, s’ha d’iniciar amb la importació o creació d’un Tileset. Aquests es poden importar com imatges individuals o dins d’un Spritesheet. Unity ofereix eines, com el Tile Palette, per a una fàcil selecció i disposició de tiles en el seu sistema de graella (vegeu la figura).
Tilemaps a Unity
Podeu trobar la documentació oficial sobre el Tilemap de Unity al següent enllaç: Tilemap.
Per crear una sensació de profunditat, és comú emprar diversos nivells de Tilemaps. Aquests nivells se superposen de tal manera que uns es renderitzen per davant dels altres. Així, els elements més propers a la càmera es desplacen a una velocitat més alta, mentre que els situats més llunyanament es mouen més lentament. Aquesta diferència en la velocitat de desplaçament, coneguda com a paral·laxi, intensifica la percepció de profunditat en l’escenari del joc.
Per a una guia detallada sobre com utilitzar Tilemaps a Unity, consulteu el següent vídeo:
En els següents vídeos podeu veure com crear dissenyar un nivell utilitzant l’editor de tiles de Unity:
Creació de recursos modulars 3D
Mentre que la modularitat ha estat una constant en el desenvolupament de videojocs, la seva aplicació en el món del 3D ha aportat noves possibilitats i desafiaments. Alguns dels punts més rellevants són:
- Detall i variabilitat: els recursos modulars 3D han de ser detallats, però també han de ser flexibles. Això significa que mentre una peça ha de ser visualment atractiva, també ha de ser dissenyada de manera que pugui encaixar amb altres peces sense problemes de cohesió.
- Il·luminació i ombres: quan es treballa amb mòduls 3D, la il·luminació pot ser un desafiament, especialment si les peces modulars són utilitzades en diferents escenaris amb diferents condicions d’il·luminació. La gestió d’ombres i reflectàncies pot requerir una atenció especial.
- Aplicacions en AR i VR: la Realitat Augmentada (AR) i la Realitat Virtual (VR) són camps que es beneficien enormement de la creació de recursos modulars. Els entorns virtuals poden ser construïts ràpidament amb conjunts modulars, permetent experiències immersives en un temps de desenvolupament més curt.
- Interactivitat i Funcionalitat: mentre que els recursos 2D solen ser més estàtics, els mòduls 3D poden requerir components interactius. Per exemple, una porta en un videojoc no només ha de veure’s bé, sinó que també ha de poder-se obrir o tancar.
- Empreses Especialitzades: a més de Synty, altres empreses com Quixel amb la seva llibreria Megascans, ofereixen recursos modulars 3D d’alta qualitat. Aquests recursos poden ser utilitzats no només en videojocs, sinó també en simulacions, produccions cinematogràfiques i aplicacions d’arquitectura.
- Tendències i innovacions: amb l’avanç de la tecnologia i les eines de modelatge, estem veient més innovacions en la creació de recursos modulars. Per exemple, l’ús d’intel·ligència artificial per generar automàticament conjunts modulars basats en paràmetres definits pels dissenyadors.
Els recursos modulars 3D ofereixen flexibilitat i eficiència en el desenvolupament, però també poden portar a una acumulació de triangles ocults o innecessaris en l’escenari. Aquests triangles, tot i ser invisibles per al jugador, poden afectar negativament el rendiment durant la renderització. Una solució a aquest problema és utilitzar motors de jocs com l’Unreal Engine, que permet fusionar malles modulars en una sola. Aquesta malla combinada pot ser després optimitzada en eines de modelatge 3D per eliminar triangles superflus, assegurant un rendiment millorat al reintegrar-la al motor de joc.
A continuació, podeu veure alguns exemples pràctics de com utilitzar els recursos modulars 3D:
- Escala i rotació: imagina que tens una peça modular d’un pilar en un temple. Aquest pilar pot ser redimensionat per convertir-se en un obelisc monumental o en una petita columna decorativa. A més, pot ser rotat per mostrar diferents detalls en cada escenari. Aquesta adaptabilitat significa que pots tenir diversos aspectes fent servir un únic recurs.
- Creació de recursos compostos: prenent l’exemple de roques, pots utilitzar tres o quatre models de roca diferents, però combinant-los en diferents formacions o posicions pots crear coves, muntanyes, pendent, o simplement una acumulació de roques.
- Varietat vegetal: amb un conjunt limitat de models de plantes, pots crear un bosc sencer. Un mateix arbre pot ser emprat múltiples vegades, però amb diferents rotacions, escales, o inclinacions per fer la sensació d’un bosc dens i variat.
- Reutilització creativa: suposa que tens un recurs d’una gran estàtua. Aquesta estàtua pot estar al centre d’una plaça en un escenari, però en un altre, pot estar semienterrada, mostrant només la seva part superior, suggerint una ciutat antiga que ha estat reclamada per la natura.
- Ocultació estratègica: els elements modulars poden ser utilitzats no només completament, sinó que parts d’ells poden ser ocultes darrere d’altres elements com parets o columnes. Per exemple, si tens un model d’una casa en ruïnes, pots usar-la diverses vegades en una escena, però ocultant diferents parts d’aquesta darrere d’altres edificis o vegetació, creant així la il·lusió de diverses estructures diferents.
Recursos sobre la creació d'assets modulars
A continuació, podeu trobar una llista de recursos sobre la creació i ús d’assets modulars molt interessants:
- Tutorials creació dungeon modular amb Maya 2014 (vídeos 1-5): Dungeon Modular.
- Exemples d’assets modulars:
- Fallout 4’s Modular Level Design. Vegeu el següent vídeo:
Creació de recursos d'àudio
La creació de recursos d’àudio per a videojocs és un element fonamental en la immersió i l’experiència del jugador. Cada so, des del pas lleuger d’un personatge fins a l’explosiva banda sonora d’una batalla, ha de ser curosament dissenyat i integrat per realçar l’experiència de joc.
Audacity és una eina de codi obert i gratuïta utilitzada principalment per a la gravació i edició d’àudio. És ideal per a la creació de sons i efectes sonors individuals, així com per l’edició de pistes musicals. Amb una interfície intuïtiva, permet als dissenyadors d’àudio retallar, manipular i optimitzar els seus recursos sonors amb facilitat. A la figura podeu veure una captura de la interfície gràfica d’Audacity.
En canvi, quan es requereix un major control sobre la creació, mescla i reproducció dels sons, es fan servir altres eines especialitzades com Wwise i FMod. Aquestes eines estan dissenyades per treballar amb motors de jocs, com Unreal Engine i Unity, permetent als dissenyadors d’àudio controlar amb precisió com i quan els sons es reprodueixen. Aquestes eines permeten, per exemple, que un so es modifiqui dinàmicament en resposta a les accions del jugador o escali segons la distància i orientació respecte al personatge jugador.
La diferència entre so 2D i 3D (sovint anomenat spatialized) radica en com es perceben en l’espai del joc. Els sons 2D són estàtics i no varien amb el moviment del jugador. En contrast, el so 3D o spatialized canvia segons la ubicació del jugador dins del món del joc. Aquesta diferència és encara més crítica en jocs VR, on la percepció espacial del so és clau per a una immersió completa.
Un altre tipus de so característic en jocs retro són els que emulen als dels jocs de 8/16 bits, fent referència a l’estil sonor retro que imita les limitacions tècniques dels videojocs antics. Aquests sons, tot i ser simplificats, tenen un encant nostàlgic i són sovint utilitzats en jocs indie o amb estètiques retro.
Creació de sons retro
En el següent enllaç podeu trobar un generador de sons de 8 bits en línia: JSFXR.
Cal fer una distinció entre sons del joc i música. Mentre que els sons del joc (com ara efectes sonors) són breus i responen a accions específiques dins del joc, la música és una composició més llarga que estableix l’ambient i la tonalitat emocional de la partida. La integració i l’equilibri correctes entre ambdós són essencials per a una experiència sonora harmoniosa.
Des del prisma de la programació d’un joc, la gestió de l’àudio presenta desafiaments diferents. Mentre que per a la música es requereix assegurar transicions suaus entre pistes, els efectes sonors han de ser capaços de reproduir-se gairebé simultàniament en gran volum, com ara en escenaris de combat amb múltiples trets.
Importació i adaptació de recursos
La importació d’elements com ara models 3D, textures i sons, a motors de joc com Unity o Unreal Engine és una fase clau en el desenvolupament de videojocs. Generalment, aquests elements es creen amb eines de modelatge 3D com Maya, Blender o 3ds Max. És important assenyalar que algunes d’aquestes eines, com ara Maya, tenen funcions d’integració directa amb Unity i Unreal Engine, la qual cosa agilitza el procés d’exportació de models. A la inversa, Unreal Engine ofereix plugins que faciliten la sincronització amb eines com Blender.
Quan es tracta d’importar aquests elements al motor de joc, el procés sol ser tan senzill com arrossegar i deixar anar els fitxers dins de l’entorn de treball del motor. No obstant això, diversos factors necessiten ser considerats, com la compatibilitat del format de fitxer i la correcta importació de textures, materials i animacions. Un cop importats, els motors de joc ofereixen diverses eines per adaptar aquests elements.
Per exemple, Unreal Engine permet funcions avançades com la fusió de malles i la configuració del so mitjançant Metasound. Altres motors com Unity poden necessitar plugins o assets de tercers per aconseguir funcionalitats similars, però també permeten treballar directament amb fitxers creats en Adobe Photoshop o Blender, afavorint un flux de treball eficient.
Cas d'estudi: Flux de treball Maya-Unity
Dins del desenvolupament de videojocs, el format FBX és molt utilitzat. Creat per Autodesk, aquest tipus de fitxer de model 3D és compatible amb aplicacions de modelatge com Maya, 3ds Max i Blender. Els fitxers FBX poden incloure malles, materials, textures, esquelets i dades d’animació.
Flux de treball d'artistes amb Maya i unity
Per a una explicació detallada de tot el procés artístic (més enllà de la importació), podeu consultar el següent vídeo:
Quan es fa servir Maya, hi ha dues opcions per exportar aquests fitxers: directament o mitjançant la seva integració amb Unity. La segona opció podria facilitar el procés, ja que fa alguns ajustos automàticament, com ara el canvi d’escala.
Abans d’exportar un model per a Unity cal tenir en compte les següents recomanacions:
- Utilitzar models amb el mínim nombre de triangles possible.
- Generalment, exportar amb les cantonades suavitzades (Smooth Edges).
- Revisar els mapes UV (UV mapping) per evitar superposicions.
- Agrupar les malles de manera lògica per facilitar la seva manipulació dins de Unity.
Passos per Exportar:
- Anar a File→Send to Unity→Selection.
- Triar la carpeta on es troba el projecte de Unity (dins de la carpeta Assets).
- Clicar en el botó Export Selection.
Podeu veure com exportar un model de Maya a Unity en el següent vídeo:
Si heu seleccionat un projecte vàlid de Unity, el nou model apareixerà directament dins del projecte. En cas contrari, haureu de fer una importació manual arrossegant el fitxer FBX generat fins a la secció Assets de l’editor.
Cal tenir en compte que l’escala a Unity i Maya és diferent, en Unity les unitats són metres mentre que en Maya són metres. És a dir, 1 unitat a Unity són 100 unitats en Maya. Aquest factor ja es té en compte en fer servir l’opció Sent to Unity, però si s’exporten els models com FBX i després són importats a Unity caldrà ajustar l’escala en l’exportació o la importació.
Un altre aspecte a recordar és que el model de shaders utilitzat per Unity no és igual que a Maya, per tant, en fer l’exportació és habitual que els materials no es visualitzin de la mateixa manera. Per aquest motiu, tot i que els materials de Maya també són exportats a Unity caldrà ajustar-los dins del motor de jocs.
Adaptació de materials i textures
Adaptar materials i textures en el desenvolupament de videojocs és un procés que requereix un balanç entre estètica, rendiment i coherència visual. Aquí teniu alguns aspectes clau a considerar:
- Estètica del Joc. Els materials i les textures han de coincidir amb el to i l’estil general del joc. Una estètica més realista requerirà textures de més alta qualitat i materials més complexos, mentre que un estil més estilitzat o cartoony podria ser més tolerant amb textures més simples.
- Rendiment. Les textures d’alta resolució poden millorar la qualitat visual, però també poden afectar el rendiment. És crucial optimitzar les textures per assegurar que el joc funcioni suaument en la plataforma objectiu.
- Coherència visual. És important que els materials i les textures siguin coherents en tots els elements del joc per mantenir una experiència visual unificada.
- Il·luminació i ombra. La manera com els materials interactuen amb la llum pot tenir un gran impacte en com es perceben. Cal ajustar les propietats com reflexió, transparència i oclusió ambiental per aconseguir l’efecte desitjat.
- Mapes detallats. A més de les textures de color base, altres mapes com normal, specular i occlusion maps poden afegir un gran nivell de detall i realisme als materials.
- Adaptabilitat. És possible que s’hagi d’utilitzar diferents conjunts de materials i textures segons la plataforma on s’executarà el joc, per adaptar-se a diferents nivells de rendiment.
En l’aspecte tècnic, és vital considerar les dimensions de les textures per a una optimització eficaç del rendiment. Elegir les dimensions correctes, pot resultar en càrregues més ràpides i una millor eficiència en termes de memòria i processament gràfic. Aquesta consideració és particularment important per als dispositius amb recursos limitats, com ara consoles més antigues o telèfons intel·ligents (smartphones).
Les textures que tenen dimensions que són potències de 2 (com ara 256×256, 512×512, 1024×1024, etc.) són generalment més eficients en termes de memòria i processament gràfic. Això es deu a la manera com les GPU gestionen la memòria, i utilitzar textures que compleixin amb aquest criteri pot resultar en carregues més ràpides i un rendiment més eficient.
Una altra tècnica emprada habitualment, sobretot en el desenvolupament de jocs per a mòbils, són els atles de textures. Aquesta tècnica que permet empaquetar múltiples textures en una única imatge més gran. Això no només ajuda a optimitzar el rendiment, sinó que també permet una gestió més eficient dels recursos gràfics. Els atles són especialment útils quan es tenen molts objectes petits amb textures diferents, ja que redueixen el nombre de crides al GPU, accelerant així el temps de càrrega i millorant el rendiment global.
El concepte dels atles de textures és similar al dels Spritesheets.
En el següent vídeo podeu veure com crear i utilitzar atles de textures a Unity:
Canals de renderització
Unity ofereix diversos canals (pipelines) de renderització (rendering) per ajustar-se a diferents necessitats i especificacions de projecte. A continuació, es descriuen els trets principals:
- Built-in (estàndard): aquest canal és el sistema de renderització predeterminat de Unity. És un canal genèric que ofereix una àmplia varietat de funcions i és fàcil d’utilitzar. És ideal per a projectes petits i mitjans, i és compatible amb totes les plataformes suportades per Unity. Quan es crea un nou projecte sense especificar el canal de render s’utilitza aquest.
- Universal Render Pipeline (URP): URP és un canal de renderització lleuger i altament personalitzable dissenyat per a projectes que volen mantenir un rendiment elevat en dispositius amb menys potència, com ara mòbils o maquinari més antic.
- High Definition Render Pipeline (HDRP): és un canal de renderització més pesat dissenyat per a projectes d’alta qualitat que necessiten gràfics detallats i realistes. És ideal per a projectes AAA o projectes d’alta fidelitat visual, però requereix maquinari més potent.
Cas d'estudi: com configurar l'Universal Render Pipeline (URP)
Per utilitzar l’Universal Render Pipeline (URP) a Unity, es pot crear un nou projecte a partir d’una plantilla URP o actualitzar un projecte existent:
- Crear un nou projecte URP a partir d’una plantilla: si es comença un nou projecte des de zero, aquesta és la millor opció. Unity instal·larà i configurarà automàticament l’URP.
- Instal·lar l’URP en un projecte Unity existent: si el projecte ja existeix i utilitza el Built-in Render Pipeline, es pot instal·lar l’URP i configurar el projecte per utilitzar-lo. S’haurà de configurar l’URP manualment i possiblement s’hauran de convertir o recrear parts del projecte (com ara shaders il·luminats o efectes de postprocessament) perquè siguin compatibles amb l’URP.
L’URP actualment no suporta efectes de postprocessament personalitzats.
Els projectes creats amb l’URP no són compatibles amb l’HDRP ni amb el Built-in Render Pipeline.
Utilitzar l'Universal Render Pipeline en un nou projecte
Per crear un nou projecte que utilitzi URP cal seguir els següents passos:
- Obrir el Unity Hub.
- A la pàgina d’inici, clicar a New per iniciar un nou projecte. Apareixerà una finestra emergent de plantilles.
- Seleccionar la plantilla de l’Universal Render Pipeline.
- Clicar a Create. Unity crearà un nou projecte amb l’URP instal·lat i configurat, incloent-hi alguns exemples que demostren les funcionalitats de l’URP.
En cas de voler instal·lar URP en un projecte ja existent, si està instal·lat el paquet Post Processing Version 2 al projecte, s’haurà d’eliminar abans d’instal·lar l’URP.
Instal·lar l'Universal Render Pipeline en un projecte existent
Per instal·lar URP en un projecte ja existent cal seguir els següents passos:
- Obrir el projecte de Unity.
- Anar a Window→ Package Manager.
- Seleccionar Unity Registry a la llista de paquets.
- Seleccionar Universal RP de la llista i clicar a Install.
Per utilitzar l’URP, primer s’ha de configurar creant un Asset de Scriptable Render Pipeline i ajustant les nostres configuracions gràfiques.
Crear l’Asset de l’Universal Render Pipeline:
- A l’Editor de Unity, cal anar a la finestra del Projecte.
- Fer clic dret i seleccionar Create→Rendering→URP Asset.
Establir l’URP com a canal de render actiu:
- Localitzr l’Asset de Render Pipeline que es vol utilitzar al projecte.
- Anar a Edit→Project Settings→Graphics.
- Al camp Scriptable Render Pipeline Settings, seleccionar l’Asset de l’URP.
Actualitzar els shaders:
Si el projecte fa servir el shader estàndard preconstruït o shaders personalitzats de Unity fets per al Built-in Render Pipeline, s’hauran de convertir perquè siguin compatibles amb l’URP. Per als shaders convencionals es pot fer servir l’opció Window→Rendering→Render Pipeline Converter (vegeu la figura , encara que en alguns casos caldrà utilitzar shaders adaptats per URP.
Instal·lar URP
Podeu consultar la documentació sobre la instal·lació d’URP en el següent enllaç: Install URP into an existing project.
Perquè es mostri l’opció Render Pipeline Converter, cal tenir instal·lat el paquet Universal RP.
En el següent vídeo podeu veure com configurar un projecte nou o ja existent:
Cas d'estudi: com configurar el High Definition Render Pipeline (HDRP)
A l’hora d’utilitzar HDRP (High Definition Render Pipeline) hi ha dues opcions, crear un projecte nou a partir de la plantilla HDRP o convertir un projecte ja existent. En el cas d’aquest canal de render Unity compta amb assistent per facilitar la conversió. Aquesta eina es troba a la interfície de Unity i pot ser oberta anant a Window→Rendering i seleccionant HDRP Wizard. Un cop obert l’assistent, es mostrarà una finestra similar a la de la figura.
Perquè es mostri l’opció HDRP Wizard, cal tenir instal·lat el paquet High Definition RP.
Les funcionalitats clau de l’Asistent HDRP són les següents:
- Paquets: mostra la versió actual del HDRP i ofereix un botó per actualitzar-la si és necessari.
- Configuració del Camí per Defecte: permet establir el directori en què l’assistent carregarà o crearà recursos.
- Comprovació de la Configuració: l’assistent realitza diverses proves per assegurar-se que la configuració del vostre projecte és compatible amb HDRP. Si es troba un problema, ofereix una opció per corregir-lo automàticament.
- Pestanyes per a Diversos Casos d’Ús: ofereix diferents pestanyes per a la configuració estàndard d’HDRP, suport per a realitat virtual (HDRP + VR) i suport per a traçat de raigs (HDRP + DXR).
L’assistent compta amb les següents opcions de configuració i de qualitat generals:
- Global: les configuracions afecten tot el projecte.
- Current Quality: les configuracions afecten només l’asset HDRP que es troba en la configuració de qualitat actual.
Pel que fa a les opcions específiques es poden resumir en les següents categories:
- HDRP: configuracions bàsiques com l’espai de color, la qualitat de l’ombra, etc.
- HDRP + VR: configuracions per habilitar el suport per a realitat virtual. Aquesta opció només està suportada en sistemes Windows.
- HDRP + DXR: configuracions per habilitar el suport per a traçat de raigs. Aquesta opció també només està suportada en sistemes Windows i requereix maquinari (hardware) compatible amb DXR.
Cada opció de configuració ofereix una descripció detallada i un botó de correcció (“Fix”) que intenta resoldre automàticament qualsevol problema de configuració.
Efectes de postprocessament
Els efectes de postprocessament (postprocessing) són tècniques de processament d’imatges que s’apliquen a la imatge final renderitzada amb l’objectiu de millorar la seva qualitat visual o crear una atmosfera específica. Aquests efectes poden variar des de simples ajustaments de color fins a complexos càlculs que simulen fenòmens òptics com la profunditat de camp o la difracció de la llum. A continuació, detallarem alguns dels efectes de postprocessament més comuns en el desenvolupament de videojocs:
- Correcció de color. És un dels efectes més bàsics i sovint utilitzats. Serveix per ajustar la gamma, el contrast, la saturació i altres propietats de color de la imatge final. Això pot ajudar a definir l’estil visual del joc, millorar la llegibilitat i destacar elements importants.
- Profunditat de camp. Simula l’efecte òptic que fa que els objectes en primer pla apareguin nítids mentre que els que estan més allunyats es veuen borrosos. Això es fa servir sovint per dirigir l’atenció del jugador cap a elements o zones específiques.
- Motion Blur. Aquest efecte simula la sensació borrosa que es produeix quan un objecte es mou ràpidament. És útil en escenes d’acció ràpida per fer la sensació de velocitat i moviment.
- Bloom. Aquest efecte simula la difusió de la llum quan s’enfronta amb una superfície brillant. Pot ajudar a crear atmosferes màgiques o sobrenaturals, i també a donar un toc realista a les superfícies lluminoses.
- HDR (High Dynamic Range). HDR permet un major rang de valors de lluminositat en la imatge, des dels negres més profunds fins als blancs més brillants. Aquesta tècnica es fa servir per imitar de manera més fidel la forma en què l’ull humà percep la llum en condicions de gran variabilitat.
- Antialiasing. L’antialiasing es fa servir per suavitzar les vores dentades que apareixen quan els models 3D són renderitzats en una resolució limitada. Això fa que les imatges siguin més nítides i agradables a la vista.
Altres efectes visuals habituals són la boira/fum i els efectes d’aigua, encara que depenent del motor de jocs, aquests efectes poden no ser inclosos com efectes de postprocessament:
- Boira i fum. Aquests efectes poden afegir una gran immersió en escenes exteriors o interiors, ja que simula les partícules suspeses a l’aire. També poden ser utilitzats per fer una sensació de misteri o perillositat. Alguns motors implementen aquests efectes com opcions addicionals (Unity i Unreal Engine), encara que també poden usar-se sistemes de partícules i transparències.
- Efectes d’aigua. Inclouen la reflexió i refracció de la llum, així com l’ona i el moviment de l’aigua. Són comuns en jocs que presenten entorns aquàtics o condicions meteorològiques variables. Poden simular-se fent servir efectes de postprocessament que distorsionen la càmera, encara que en jocs estilitzats s’acostuma a utilitzar shaders per fer que l’aigua sembli dibuixada.
La combinació d’aquests efectes permet crear una àmplia varietat d’experiències visuals. No obstant això, és fonamental tenir en compte l’impacte que aquests poden tenir sobre el rendiment del joc, especialment en plataformes amb restriccions de maquinari.
Cas pràctic: Implementació d'un efecte de postprocessament a Unity
Els passos per afegir un efecte de postprocessament en Unity són els següents:
- 1. En la secció d’assets, es crea un nou Volume Profile (mitjançant Create→Volume Profile), que es farà servir en els propers passos.
- 2. Seguidament, cal crear un volum a l’escena des de GameObject→Volume→Global, tal com es mostra a la figura.
- 3. S’arrossega el Volume Profile a la propietat Volume del volum creat i es configura en mode Global. Els efectes es poden afegir des del mateix component Volume o directament a través del Volume Profile.
- 4. Un cop afegit l’efecte, és important activar-lo; cosa que sovint es realitza incrementant la seva intensitat. A la figura podeu veure una captura del component Volume.
En els següents vídeos podeu veure com crear efectes de postprocessament per jocs 2D i 3D amb diferents paquets:
Cas d'estudi: efecte de boira a Unity
Crear un ambient immersiu i creïble en un joc no és només qüestió de detalls visuals i mecàniques de joc ben dissenyades, sinó també de com es manipulen els elements ambientals com la llum, l’ombra i, en aquest cas, la boira. La boira pot afegir una profunditat i una atmosfera úniques a la teva escena, i Unity ofereix diverses maneres d’introduir aquest element en els teus projectes:
- Boira bàsica: configurada a l’apartat d’il·luminació, tal com es pot apreciar a la figura.
- Boira global: forma part dels efectes d’imatge del paquet Standard Assets Effects que cal instal·lar manualment (Global Fog).
- Boira volumètrica: s’afegeix com un volum de cel i boira a l’editor, podeu veure com crear-la en el següent enllaç: Creating Volumetric Fog.
En el següent vídeo podeu veure com crear boira utilitzant la configuració de Unity i efectes de partícules:
Rendiment dels efectes de postprocessament
L’ús d’efectes de postprocessament pot tenir un impacte significatiu en el rendiment d’un joc, especialment en sistemes amb limitacions de maquinari (hardware) com els dispositius mòbils. Cada efecte addicional que s’afegeix requereix temps de càlcul addicional per part de la CPU o GPU, cosa que pot reduir la taxa de fotogrames (FPS) i, per tant, degradar l’experiència de joc. A continuació es detallen alguns dels aspectes clau a tenir en compte:
- Utilització de la CPU i GPU. Cada efecte de postprocessament requereix una certa quantitat de càlculs, i aquests poden ser intensius en termes de CPU o GPU. Per exemple, efectes com la profunditat de camp o el Motion Blur poden ser particularment pesats per a la GPU.
- Memòria gràfica (VRAM). Els efectes de postprocessament sovint requereixen l’ús de buffers addicionals per emmagatzemar dades d’imatge intermèdies, cosa que pot consumir una quantitat considerable de VRAM.
- Latència. L’ús intensiu d’efectes de postprocessament pot augmentar el temps que triga una imatge a ser processada i mostrada, afegint latència a la interacció del jugador, cosa que és especialment problemàtic en jocs que requereixen una resposta ràpida.
- Opcions d’ajustament. Molts jocs ofereixen opcions per habilitar o deshabilitar determinats efectes de postprocessament o ajustar la seva qualitat. Això permet als usuaris optar per una millor qualitat visual o un rendiment més alt segons les seves necessitats o preferències.
Efectes de postprocessament en dispositius mòbils
L’impacte dels efectes de postprocessament en dispositius mòbils pot ser significatiu i presenta diversos desafiaments. A diferència dels PC o consoles, els dispositius mòbils solen tenir un poder de processament i memòria gràfica limitats. Aquestes restriccions poden resultar en una disminució de la taxa de fotogrames, augment del consum d’energia i potencial sobreescalfament del dispositiu. A més, la memòria limitada exigeix una gestió eficient dels recursos gràfics, incloent-hi textures i buffers de quadres.
Per afrontar aquests reptes, és crucial que els desenvolupadors siguin selectius en la utilització d’efectes de postprocessament, optimitzant-los per a cada plataforma específica. És vital considerar l’escala de resolució, ja que els dispositius mòbils presenten una àmplia gamma de resolucions de pantalla, necessitant que els efectes de postprocessament s’ajustin adequadament.
El 'post-processing stack' de Unity
Unity ofereix una àmplia gamma d’efectes de postprocessament i efectes de pantalla completa que milloren significativament l’aparença d’una aplicació amb poc temps de configuració. Aquests efectes simulen les propietats de càmeres i pel·lícules físiques i permeten crear visuals estilitzats.
'Postproceesing stack' a Unity
Podeu trobar la documentació oficial sobre el postprocessament a Unity en el següent enllaç: Introduction to post-processing.
Atès que Unity suporta diferents canals de render, cal saber quins efectes suporta cadascun d’aquests. Per exemple, el Built-in Render Pipeline no inclou una solució de postprocessament per defecte. Cal descarregar el paquet Post-Processing Version 2 per utilitzar aquests efectes amb aquest canal. D’altra banda, la Universal Render Pipeline (URP) i la High Definition Render Pipeline (HDRP) inclouen les seves pròpies solucions de postprocessament (vegeu la taula).
Es important destacar que la versió 1 del post-processing stack de Unity ara està obsoleta i no s’hauria d’utilitzar.
| Nom de l’Efecte | Descripció | Disponible en URP? | Disponible en HDRP? |
|---|---|---|---|
| Oclusió ambiental | Enfosqueix les àrees de la teva escena que no estan exposades a la il·luminació ambiental. | Sí | Sí |
| Antialiasing | Suavitza l’aparença de les vores en la teva escena. | Sí | Sí |
| Exposició Automàtica | Ajusta dinàmicament l’exposició d’una imatge per igualar el seu to mitjà. | No | Sí |
| Resplendor | Fa que les àrees brillants de la teva imatge siguin resplendents. | Sí | Sí |
| Distorsió de l’objectiu | Simula la distorsió causada per la forma d’una lent d’una càmera del món real. | Sí | Sí |
| Desenfocament de moviment | Desenfoca la imatge en la direcció del moviment de la càmera. | Sí | Sí |
| Reflexió en l’espai de pantalla | Crea reflexions subtils que simulen superfícies o bassals mullats. | No | Sí |
| Equilibri de blancs | Preserva les àrees blanques de la teva imatge i equilibra altres tons al voltant de les àrees blanques. | Sí | Sí |
Cas d'estudi: 'Motion Blur' en Unity
L’efecte de Motion Blur en Unity simula l’efecte de desenfocament que es produeix quan una càmera del món real capta objectes que es mouen més ràpidament que el temps d’exposició de la càmera. Aquest efecte és especialment útil per a escenes amb moviment ràpid, ja que afegeix un toc de realisme i fluïdesa visual. Unity ofereix diverses opcions per configurar aquest efecte, incloent-hi diferents propietats i paràmetres que permeten controlar la intensitat, la qualitat i altres aspectes del Motion Blur.
En el següent vídeo podeu veure la diferència entre una escena amb Motion blur i sense:
Segons el canal de render utilitzat, les opcions suportades per aquest efecte de postprocessament seran diferents, però algunes de les seves característiques són comunes:
- Rendiment: l’ús d’un recompte de mostres més baix millorarà el rendiment.
- Limitacions: no suporta AR/VR.
Requisits per utilitzar 'Motion blur'
Independentment del canal de render cal tenir en compte els següents requisits:
- Motion Vectors Activats: és imprescindible tenir els vectors de moviment activats perquè l’efecte de Motion Blur funcioni correctament.
- Textura de Profunditat Activada: també cal tenir activada les Depth textures.
- Shader Model 3: l’efecte requereix que la tarjeta gràfica suporti el Shader Model 3.
Requisits per HDRP:
- Buffers de Velocitat de HDRP: perquè l’efecte tingui impacte, cal habilitar els vectors de moviment al vostre projecte Unity. Consulteu la documentació de Vectors de Moviment per obtenir més informació.
Com millorar el rendiment a URP:
- Qualitat: una configuració de qualitat més baixa donarà un rendiment més alt, però pot mostrar més artefactes visuals.
- Mode: canviar la propietat de Mode de Camera and Objects a Camera Only millorarà el rendiment.
- Clamp: reduir el valor de Clamp disminuirà la velocitat màxima que Unity té en compte, millorant així el rendiment.
Motion Vectors
Podeu trobar la informació sobre Motion Vectors i com activar-los en el següent enllaç: Motion vectors.
Depth textures
Podeu trobar la informació sobre les depth textures al següent enllaç: Output a depth texture from a camera.
A la taula, teniu una comparació entre HDRP i URP.
| HDRP | URP | |
|---|---|---|
| Shutter Angle | Sí | No |
| Sample Count | Sí, amb control total | No |
| Performance Options | Diverses | Limitades |
| Motion Vectors | Requerit | Opcional |
| Quality | Configurable | Configurable |
| Intensity | Sí | Sí |
| Camera Motion Blur | Sí, amb diverses opcions | Limitat a moviments de càmera |
| Clamping Options | Múltiples opcions | Opció de ‘Clamp’ única |
| API Access | Complet | No especificat |
Les característiques més destacables segons el canal de render són:
- HDRP: ofereix un conjunt de característiques més complet i flexible, incloent-hi múltiples opcions per a la reducció de l’impacte en el rendiment.
- URP: principalment suporta el desenfocament dels moviments de la càmera i ofereix menys flexibilitat en la configuració i les opcions de rendiment.












