Fixing CR7🇵🇹 from PES 2014 → uploading him to https://t.co/xACIFVqooJ with the new features!🤖
Link here:
https://t.co/If5kxMMpc1
✅ Skeleton Alignment [Enhance Face Animation]
✅ Hair Animation input [Blender Addon]
✅ Mouthbag Fix [Emptiness from inside the mouth]
I will be updating all of my conversions massively until we get all of the faces. Next facepack to be released is eFootball v6.00 which I've never released⏰⌛️
#eFootballPES2021
🆕Unlock Appearance lua module UPDATE!
Download for FREE here: 👔
https://t.co/L96URpVEL7
• F9 button now has the option of instant switch between attires (suits, jerseys, shirts)
• F7 does the real face / editable hair face switch
#eFootballPES2021
🙇♂️"Hey, what do you think about playing football against those guys after work?"
🤷"Sounds great! but we didn't bring our uniforms..."
🙋♂️"So what?"
👔Unlock Appearances module update will let managers play with their suits.⚽️
In this future update, we will be able to select what manager attire we want. Of course that will apply to every model who has clothes in their ID folder (jersey.fmdl, shirt.fmdl, suit.fmdl), not only managers🤖
@bosuuin You need to have that face_edithair. fpk file for the player. I created one for Messi and Ronaldo and share it for free to people to show how it's done, but I don't have one for Bendtner
@tTin1744041 You could, yes, but at the moment, you would have to rename the .fmdl file kit as jersey, suit or shirt. I would work on that special kit after
@esteban_angle La diferencia es que tu lo estabas ocupando para PES 21, yo creo que a ellos sí se molestaron pero no les dolió tanto como Durandil q les estaba quitando la mina de oro de eFootball al modear ese juego
@Durandil67 I hope this is pure sarcasm, friend. Even if they threatened you, the only thing they can do is ban you, I've never seen a modder getting sued or in jail because of modding a game, it's something that has been happening for 20+ years
A tool is not needed, friend, only a blender script and you just run it by pressing ►. You can try it in your blender scene if you want.
• Back up your original face.fpk just in case
• It will work on the mesh named "mesh_id_face_0", so if your head is named differently, change it to mesh_id_face_0
• this will work only on converted eFootball faces that preserved their original uvmap (because I saw some conversions where people change the uvmap to PES21 uvmap)
• Run the script in object mode (no need to go to edit mode since the script already does it)
this is the script:
import bpy
import bmesh
from mathutils import Vector
# ================== CONFIGURACION ==================
NOMBRE_OBJETO = "mesh_id_face_0"
UV_CENTRO = (0.500, 0.388) # centro UV del agujero de la boca (visto en el panel UV Vertex)
VERTS_ESPERADOS = 54 # cantidad de vertices del borde (para verificar)
DESPLAZAMIENTO = (0.0, 0.05, 0.0) # extrusion en eje Y GLOBAL (+0.05)
# ===================================================
# 0) Seleccionar el objeto
obj = https://t.co/mpPdvshl0Y.objects.get(NOMBRE_OBJETO)
if obj is None:
raise Exception("No existe el objeto '%s'" % NOMBRE_OBJETO)
if bpy.context.object and bpy.context.object.mode != 'OBJECT':
bpy.ops.object.mode_set(mode='OBJECT')
https://t.co/XrhuqFMEGo_all(action='DESELECT')
https://t.co/Q3WUiyFkm2_set(True)
https://t.co/5BBDMYvylI = obj
# 1) Entrar a Edit Mode (modo seleccion de vertices)
bpy.ops.object.mode_set(mode='EDIT')
https://t.co/DLwlAcN1Fd_mode(type='VERT')
me = https://t.co/JIC9Yco7Rr
bm = bmesh.from_edit_mesh(me)
uv_layer = https://t.co/ZQS26ixvJs
if uv_layer is None:
raise Exception("El objeto no tiene mapa UV")
# Deseleccionar todo
for f in bm.faces:
https://t.co/OPRclUeKr4 = False
for e in bm.edges:
https://t.co/m75E2kIra1 = False
for v in bm.verts:
https://t.co/Ve4zznpxEJ = False
# 2) Encontrar el borde abierto de la boca
# Se agrupan los bordes abiertos (edges con una sola cara) en anillos conectados
# y se elige el anillo cuyo centro UV esta mas cerca de UV_CENTRO.
bordes = [e for e in bm.edges if https://t.co/zYJXiRu1T1_boundary]
visitados = set()
grupos = []
for e_ini in bordes:
if e_ini in visitados:
continue
pila = [e_ini]
visitados.add(e_ini)
edges_grupo = []
while pila:
e = pila.pop()
edges_grupo.append(e)
for v in e.verts:
for e2 in https://t.co/oisF1mRfPC_edges:
if https://t.co/9uMrSgtEyX_boundary and e2 not in visitados:
visitados.add(e2)
pila.append(e2)
verts_grupo = set()
for e in edges_grupo:
verts_grupo.update(e.verts)
grupos.append((edges_grupo, list(verts_grupo)))
if not grupos:
raise Exception("El objeto no tiene bordes abiertos")
def centro_uv(verts):
suma = Vector((0.0, 0.0))
n = 0
for v in verts:
for loop in https://t.co/oisF1mRfPC_loops:
suma += loop[uv_layer].uv
n += 1
return suma / n if n else Vector((99.0, 99.0))
print("\n--- Bordes abiertos encontrados ---")
mejor = None
mejor_dist = None
objetivo = Vector(UV_CENTRO)
for i, (eds, vts) in enumerate(grupos):
c = centro_uv(vts)
d = (c - objetivo).length
print(" Borde %d: %d vertices, centro UV (%.3f, %.3f), distancia %.4f" % (i, len(vts), c.x, c.y, d))
if mejor is None or d < mejor_dist:
mejor, mejor_dist = (eds, vts), d
edges_sel, verts_sel = mejor
print("Elegido: %d vertices" % len(verts_sel))
if len(verts_sel) != VERTS_ESPERADOS:
print("AVISO: se esperaban %d vertices. Revisa la lista de arriba." % VERTS_ESPERADOS)
for v in verts_sel:
https://t.co/Ve4zznpxEJ = True
for e in edges_sel:
https://t.co/m75E2kIra1 = True
https://t.co/sxnb8q0fFw_flush(True) # igual que Blender al seleccionar vertices a mano
# 3) Extrude Region + mover en Y global 0.05
geom = ([v for v in bm.verts if https://t.co/Ve4zznpxEJ] +
[e for e in bm.edges if https://t.co/m75E2kIra1] +
[f for f in bm.faces if https://t.co/OPRclUeKr4])
ret = bmesh.ops.extrude_face_region(bm, geom=geom)
nuevos_verts = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMVert)]
nuevos_edges = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMEdge)]
nuevas_caras = [g for g in ret["geom"] if isinstance(g, bmesh.types.BMFace)]
# convertir el desplazamiento global a coordenadas locales del objeto
desp_local = obj.matrix_world.inverted().to_3x3() @ Vector(DESPLAZAMIENTO)
bmesh.ops.translate(bm, vec=desp_local, verts=nuevos_verts)
# 4) Escalar a 0 (S 0) respecto al punto medio
centro = Vector((0.0, 0.0, 0.0))
for v in nuevos_verts:
centro += https://t.co/OwEDtjMqUN
centro /= len(nuevos_verts)
for v in nuevos_verts:
https://t.co/OwEDtjMqUN = centro.copy()
# dejar seleccionado solo lo nuevo (como queda en Blender tras extruir)
for f in bm.faces:
https://t.co/OPRclUeKr4 = False
for e in bm.edges:
https://t.co/m75E2kIra1 = False
for v in bm.verts:
https://t.co/Ve4zznpxEJ = False
for g in nuevos_verts + nuevos_edges + nuevas_caras:
https://t.co/sOhSHzSH5i = True
bmesh.update_edit_mesh(me)
# 5) Volver a Object Mode
bpy.ops.object.mode_set(mode='OBJECT')
print("Listo: %d vertices extruidos y escalados a 0." % len(nuevos_verts))
🛠️Lots of people have asked me about this over the years. Here's a simple solution to fix that "emptiness" coming from inside the mouth.
I made this fix for all the new faces I'll be releasing in my relaunched https://t.co/xACIFVqooJ website, facepack and individual faces coming soon ⌛️
eFootball v6.10 preview🧐
-------------------------------
This will be the first eFootball facepack to have the new 2 features missing:
😮→ Skeleton Alignment / Face Animation correctly
👩🦰 → Realistic Hair Animation made with my blender addon
-------------------------------
Also, these faces are going to be the first to be released in my relaunched website, https://t.co/xACIFVqooJ still in beta at the moment🤖
142 faces in facepack, 101 new players, 1 manager, 5 legends, 14 update models, 21 retextures
#eFootballPES2021
5 months have passed and maybe now I can insert eFootball real hair strands to PES 2021 with the help of AI... but I've never tried to this day, if someone has already tried, let me know about it, so I can help
I tried to recreate Lamine Yamal's eFootball Hair Strands for PES 2021, which is curly in comparison to the hair files exported from umodel. Hair not perfect, but more similar to eFootball's hair. Face will be coming in the next eFootball v5.40 Facepack soon!