Ves al contingut
The Witcher: A bard's tale

The Witcher: A bard's tale

·780 paraules·4 min

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.


Jugar

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 ivec4 d’índexs d’ossos (màxim 4 ossos per vèrtex), i
  • un vec4 de 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.

Animació de vertex skinning mostrant la deformació de la malla del personatge
Vertex skinning en GPU en acció
Animació mostrant el model col·lapsant a l'origen abans de la correcció del skinning
Demostració de l’error: model col·lapsant a l’origen abans de la correcció

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
Visualització de subtítols amb efecte de màquina d'escriure durant una cinemàtica
Subtítols amb efecte de màquina d’escriure
Fotograma final de cinemàtica amb subtítols
Fotograma final de cinemàtica amb subtítols

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ó.

Moviment de càmera cinemàtica centrant-se en el cap durant la intro
Introducció cinemàtica del cap usant un camí de càmera Bézier

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ó.

Enemic dummy usat per provar el sistema de combat i combos
Enemic dummy per a proves de combat

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
#

Art conceptual 3D de Geralt de Rívia
Art conceptual de Geralt
Procés de retopologia del model de Geralt
Procés de retopologia de Geralt

Yennefer de Vengerberg
#

Art conceptual i retopologia de la Yennefer
Concepte i retopologia de la Yennefer
Yennefer renderitzada al motor
Yennefer al motor

Enemic Ghoul
#

Escultura conceptual del Ghoul a ZBrush
Escultura conceptual del Ghoul
Quadre comparatiu de mida del Ghoul
Comparació de mida del 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
#