Descripció general #
The Witcher: A Bard’s Tale és un beat-’em-up / hack-and-slash cooperatiu. Els jugadors controlen en Geralt de Rívia i la Yennefer de Vengerberg mentre lluiten per rescatar la Ciri.
Sobre el projecte #
És un projecte universitari en grup construït amb un motor personalitzat en C++ i OpenGL. El disseny se centra en un combat responsiu, encontres cinemàtics amb caps i una presentació polida. El meu treball abasta programació de gràfics, eines de gameplay i creació de contingut.
Les meves contribucions individuals #
- Skinning en GPU (skinning en vertex shader)
- Sistema de subtítols (importació JSON + efecte màquina d’escriure)
- Presentació de caps (moviment cinemàtic de càmera)
- Enemic dummy per a proves de combat
- Efectes de shader de dissolució
- Models dels personatges principals i assets 3D
- Il·luminació d’escena
- Disseny de HUD i poliment de menús
Skinning amb shaders #
Per millorar el rendiment en temps d’execució, vam moure el skinning a la GPU (vertex skinning en el vertex shader). Cada vèrtex emmagatzema:
- un
ivec4d’índexs d’ossos (màxim 4 ossos per vèrtex), i - un
vec4de pesos d’ossos (un pes per índex d’os).
A la CPU pugem un array de matrius de transformació d’ossos (un mat4 per os). El vertex shader llegeix els índexs i pesos dels ossos, construeix una matriu de skinning a partir de les matrius d’ossos corresponents, i transforma la posició del vèrtex i la normal íntegrament a la GPU.
També vaig corregir un error on alguns models col·lapsaven cap a l’origen. La causa arrel era aplicar les transformacions d’ossos relatives a les posicions originals del vèrtex en lloc d’usar l’origen de la malla; la correcció va consistir a calcular les posicions amb skinning relatives a l’origen de la malla i aplicar correctament les transformacions d’ossos.
Sistema de subtítols #
El joc inclou seqüències narratives que requereixen subtítols. Vam utilitzar Subtitle Horse per crear els subtítols i els vam exportar a JSON per integrar-los fàcilment al nostre motor.
Vaig implementar un Gestor de Subtítols que:
- Carrega els temps i textos dels subtítols des d’arxius JSON
- Mostra línies temporitzades amb un efecte de màquina d’escriure
- Sincronitza els subtítols amb els temps de les cinemàtiques
Presentació del cap (càmera cinemàtica) #
Per a les introduccions dels caps vaig crear un sistema de càmera cinemàtica. La càmera segueix una corba de Bézier per centrar-se en el cap amb una revelació dramàtica, i després torna suaument al jugador abans de reprendre el gameplay.
Està implementat com un petit script que mostreja una cúbica de Bézier en temps normalitzat i interpola tant la posició com l’orientació.
Enemic dummy #
Vaig implementar un enemic dummy per a l’entrenament de combat. El dummy permet als jugadors practicar atacs i combos, i ajuda l’equip a depurar la temporització d’entrades, la detecció de cops i les transicions d’animació.
Shader de dissolució #
Vaig implementar un shader de dissolució per a transicions d’aparició/desaparició estilitzades. L’efecte usa una textura de soroll (o soroll procedural) i un paràmetre que controla una màscara de llindar, creant foses suaus i controlables amb detall a les vores.



Models 3D i assets #
Vaig produir personatges i assets del joc, i vaig aprendre el pipeline de producció artística: escultura, retopologia a Maya, pintura de textures a Substance i creació de bases low-poly per a producció.
Geralt de Rívia #
Yennefer de Vengerberg #
Enemic Ghoul #
Altres assets #
Vaig crear props d’entorn com arbustos, roques i minerals utilitzats en diferents escenes.





Disseny de HUD #
Vaig crear el layout del HUD i icones, vaig iterar sobre prototips d’UI, i vaig implementar icones polides i elements de feedback.



Poliment del menú principal #
Per al menú principal vaig afegir sistemes de partícules i un post-procés de bloom global per fer l’escena més dinàmica i atmosfèrica.


Ajustos d’il·luminació #
Vaig iterar sobre la il·luminació de l’escena per fer-la coincidir amb l’atmosfera de cada arena, equilibrant llums direccionals, contribució ambiental i elements precalculats on corresponia.






Enllaços i descàrregues #
- Demo / build: Jugar a GitHub Pages
- Codi font: Repositori de GitHub
- Web del joc: Lloc web del joc