From 3462513e27e3d2ec8ff79cb956213fb5a012f03a Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 2 Nov 2019 22:53:54 +1100 Subject: [PATCH] Fixed UV anim clips assignment to use geometry's ShaderID for the lookup. --- CodeWalker.Core/GameFiles/Resources/Drawable.cs | 2 ++ Rendering/Renderable.cs | 5 +++-- Rendering/Renderer.cs | 3 +-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 98f9b15..47de0f7 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -1291,6 +1291,7 @@ namespace CodeWalker.GameFiles public ushort[] BoneIds { get; set; } public VertexData VertexData { get; set; } public ShaderFX Shader { get; set; } + public ushort ShaderID { get; set; } private ResourceSystemStructBlock BoneIdsBlock = null;//for saving only @@ -2371,6 +2372,7 @@ namespace CodeWalker.GameFiles var geom = model.Geometries.data_items[i]; ushort sid = (i < model.ShaderMapping.Length) ? model.ShaderMapping[i] : (ushort)0; geom.Shader = (sid < shaders.Length) ? shaders[sid] : null; + geom.ShaderID = sid; } } } diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 81c4f4d..4ad78da 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -405,8 +405,6 @@ namespace CodeWalker.Rendering if (bones == null) { return; } - //TODO: fragments! see eg. p_oil_pjack_03_s - for (int i = 0; i < anim.BoneIds.data_items.Length; i++) { var boneiditem = anim.BoneIds.data_items[i]; @@ -453,6 +451,9 @@ namespace CodeWalker.Rendering if (bmodel == null) { continue; } + if (((bmodel.SkeletonBinding >> 8) & 0xFF) > 0) //skin mesh? //TODO: see eg. p_oil_pjack_03_s + { continue; } + //update model's transform from animated bone var pos = bone.AnimTranslation; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 761eb51..0346a80 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2795,7 +2795,6 @@ namespace CodeWalker.Rendering MetaHash ahash = arche.Hash; if (ycd.ClipMap.TryGetValue(ahash, out rndbl.ClipMapEntry)) rndbl.HasAnims = true; - uint cmeindex = 1; foreach (var model in rndbl.HDModels) { if (model == null) continue; @@ -2804,9 +2803,9 @@ namespace CodeWalker.Rendering if (geom == null) continue; if (geom.globalAnimUVEnable) { + uint cmeindex = geom.DrawableGeom.ShaderID + 1u; MetaHash cmehash = ahash + cmeindex; //this goes to at least uv5! (from uv0) - see hw1_09.ycd if (ycd.ClipMap.TryGetValue(cmehash, out geom.ClipMapEntryUV)) rndbl.HasAnims = true; - cmeindex++; } } }