League'in Sınırlarını Aşan Modelleri Optimize Etme
Maya'da bir modelin joint ve vertex sayısını azaltırken skin weight'leri ve League of Legends export uyumluluğunu koru.
Bu rehber, skin weight'lerin çoğunu korurken Maya'da bir modelin joint ve vertex sayısını nasıl azaltacağını gösteriyor.
Yalnızca 3D model swap yapacaksan ve animasyon düzenlemeyeceksen doğrudan Mesh geometrisini azalt bölümüne geç.
1. Joint sayısını azalt
Bir veya daha fazla kaynak joint'teki skin weight'leri eşleşen hedef joint'lere taşımak için bu script'i kullan.
- Aşağıdaki bloğu Maya'nın Script Editor'üne kopyala.
source_jointsvetarget_jointsiçindeki örnek adları değiştir. Her kaynak joint, listede aynı sıradaki hedef joint ile eşleşmeli.- İskelete bind edilmiş mesh'i seç ve script'i çalıştır.
import maya.cmds as cmds
def transfer_weights_multi(source_joints, target_joints):
if len(source_joints) != len(target_joints):
cmds.error("Source and target joint lists must be the same length.")
# Get selected mesh
sel = cmds.ls(sl=True, type="transform")
if not sel:
cmds.error("Select the skinned mesh first.")
mesh = sel[0]
# Find skinCluster
skin_cluster = None
history = cmds.listHistory(mesh)
for node in history:
if cmds.nodeType(node) == "skinCluster":
skin_cluster = node
break
if not skin_cluster:
cmds.error("No skinCluster found on selected mesh.")
# Get all vertices once
verts = cmds.ls(mesh + ".vtx[*]", fl=True)
for source_joint, target_joint in zip(source_joints, target_joints):
# Ensure target joint is an influence
influences = cmds.skinCluster(skin_cluster, q=True, inf=True)
if target_joint not in influences:
cmds.skinCluster(skin_cluster, e=True, ai=target_joint, lw=False, wt=0)
for v in verts:
src_w = cmds.skinPercent(skin_cluster, v, q=True, t=source_joint)
if src_w > 0:
tgt_w = cmds.skinPercent(skin_cluster, v, q=True, t=target_joint)
cmds.skinPercent(
skin_cluster,
v,
tv=[
(target_joint, tgt_w + src_w),
(source_joint, 0)
]
)
print("Transferred weights from {} to {}".format(source_joint, target_joint))
print("All joint transfers complete.")
# ===== USAGE =====
# 1. Select the skinned mesh
# 2. Replace joint names below
source_joints = [
"_Bone_Hair045_L",
]
target_joints = [
"_Bone_Hair044_L",
]
transfer_weights_multi(source_joints, target_joints)Script bittikten sonra her kaynak joint'i hareket ettir. Artık mesh'i deforme etmemeli. Aktarılan weight'i artık hedef joint'in taşıdığını doğrulamak için onu da hareket ettir.
Bir joint birden fazla mesh'i etkileyebilir. O joint'i kaldırmadan önce etkilenen her mesh'i seçip script'i yeniden çalıştır.
Script weight'leri aktarır ama joint'leri silmez. Önce etkilenen her mesh'te işlemi tamamla. Ardından her kaynak joint'in altındaki joint'leri kontrol et ve yalnızca artık gerekmediğini doğruladığın joint'leri sil.
Sahnedeki toplam joint sayısını kontrol etmek için bu script'i çalıştır:
import maya.cmds as cmds
# Find all joint nodes in the entire scene
joints = cmds.ls(type='joint') or []
print(f"Total Joints in Scene: {len(joints)}")
Sayı hâlâ export sınırının üzerindeyse güvenli başka bir kaynak ve hedef joint çiftiyle aktarımı tekrarla.
2. Mesh'leri böl ve skin weight'leri kopyala
- Mesh'ini seç ve kopyalamak için
Ctrl+Dtuşlarına bas. - Kopyalanan grubu seç, ardından Lemon 3D shelf'teki Separate Mesh by Material aracını kullan.
- Gruptaki ayrılmış tüm mesh'leri seçip orijinal SKL'ye bind et. En hızlı sonuç için Bind Skin seçeneklerinden Closest Distance'ı seç.
- Önce orijinal mesh'i, sonra ayrılmış bir mesh'i seçip skin weight'leri kopyala. Bunu her materyal için tekrarla.
- Mesh grubunu daha küçük gruplara ayır. SKL'yi her gruba sürükleyip export et. Bu aşamada dahil etmek istemediğin materyalleri kaldırabilirsin.
- Yeni bir Maya sahnesi aç, ardından export ettiğin tüm SKL ve SKN dosyalarını sahneye geri sürükle.
3. Mesh geometrisini azalt
Karakter kıyafetlerinin içinde kalan geometriyle başla. League'in yukarıdan bakan kamerası bunları oyunda çoğu zaman göstermez.
- Mesh'i seç. Sonraki adımları kolaylaştırmak için diğer mesh'leri gizle.
F11tuşuna bas, ardından kaldırmak istediğin face'lere çift tıkla.- Sağ fare tuşunu basılı tut, yeni bir materyal atamak için aşağı sürükle ve menüden herhangi bir materyal seç.
- Hypershade'i açıp yeni materyalin adını doğrula.
- Skin grubuna dön, export et, ardından yeniden import et.
- Outliner'da yeni geometri veya materyal grubunu bul. İstemediğin geometriyi skin'den unbind et, ardından sil.
Alternatif olarak Maya'nın Reduce aracını kullanarak mesh kalitesini düşür, ardından azaltılmış mesh'i orijinal SKL'ye yeniden bind et.
Sahne joint sınırını aşıyorsa mesh'i bölmeden veya export etmeden önce joint sayısını azaltmayı bitir. Yoksa model export edilemez. Animasyonları değiştirmeyen basit bir 3D model swap için doğrudan 3. bölüme geçebilirsin.
