Skip to content

Commit

Permalink
Merge branch 'v0.2.2p2'
Browse files Browse the repository at this point in the history
  • Loading branch information
chengkehan committed May 17, 2017
2 parents 3956541 + 434fc3c commit 6390e74
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 55 deletions.
153 changes: 100 additions & 53 deletions Assets/GPUSkinning/Editor/GPUSkinningSamplerEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ public class GPUSkinningSamplerEditor : Editor

private Material gridMtrl = null;

private bool guiEnabled = false;

public override void OnInspectorGUI ()
{
GPUSkinningSampler sampler = target as GPUSkinningSampler;
Expand All @@ -86,56 +88,62 @@ public override void OnInspectorGUI ()

private void OnGUI_Sampler(GPUSkinningSampler sampler)
{
guiEnabled = !Application.isPlaying;

BeginBox();
{
EditorGUILayout.PropertyField(serializedObject.FindProperty("animName"), new GUIContent("Animation Name"));

GUI.enabled = false;
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("anim"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedMesh"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedMtrl"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedShader"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUI.enabled = guiEnabled;
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("texture"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
GUI.enabled = true;
EditorGUILayout.PropertyField(serializedObject.FindProperty("animName"), new GUIContent("Animation Name"));

EditorGUILayout.PropertyField(serializedObject.FindProperty("skinQuality"), new GUIContent("Quality"));
GUI.enabled = false;
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("anim"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedMesh"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedMtrl"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("savedShader"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
{
GUILayout.FlexibleSpace();
EditorGUILayout.PropertyField(serializedObject.FindProperty("texture"), new GUIContent());
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
GUI.enabled = true && guiEnabled;

EditorGUILayout.PropertyField(serializedObject.FindProperty("skinQuality"), new GUIContent("Quality"));

EditorGUILayout.PropertyField(serializedObject.FindProperty("shaderType"), new GUIContent("Shader Type"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("shaderType"), new GUIContent("Shader Type"));

EditorGUILayout.PropertyField(serializedObject.FindProperty("rootBoneTransform"), new GUIContent("Root Bone"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("rootBoneTransform"), new GUIContent("Root Bone"));

EditorGUILayout.PropertyField(serializedObject.FindProperty("createNewShader"), new GUIContent("New Shader"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("createNewShader"), new GUIContent("New Shader"));

OnGUI_AnimClips(sampler);
OnGUI_AnimClips(sampler);

OnGUI_LOD(sampler);
OnGUI_LOD(sampler);
}
GUI.enabled = true;

if (GUILayout.Button("Step1: Play Scene"))
{
Expand All @@ -147,10 +155,17 @@ private void OnGUI_Sampler(GPUSkinningSampler sampler)
{
if (GUILayout.Button("Step2: Start Sample"))
{
DestroyPreview();
LockInspector(true);
sampler.BeginSample();
sampler.StartSample();
if (!LodDistancesIsLegal(sampler))
{
GPUSkinningSampler.ShowDialog("Errors must be fixed before sampling.");
}
else
{
DestroyPreview();
LockInspector(true);
sampler.BeginSample();
sampler.StartSample();
}
}
}
}
Expand Down Expand Up @@ -219,7 +234,7 @@ private void OnGUI_AnimClips(GPUSkinningSampler sampler)

EditorGUILayout.PrefixLabel("Sample Clips");

GUI.enabled = sampler.IsAnimatorOrAnimation();
GUI.enabled = sampler.IsAnimatorOrAnimation() && guiEnabled;
int no = animClips_array_size_sp.intValue;
int no2 = wrapModes_array_size_sp.intValue;
int no3 = fpsList_array_size_sp.intValue;
Expand Down Expand Up @@ -262,7 +277,7 @@ private void OnGUI_AnimClips(GPUSkinningSampler sampler)
}
}
EditorGUILayout.EndHorizontal();
GUI.enabled = true;
GUI.enabled = true && guiEnabled;

EditorGUILayout.BeginHorizontal();
{
Expand Down Expand Up @@ -322,9 +337,9 @@ private void OnGUI_AnimClips(GPUSkinningSampler sampler)
}
if(j == 2)
{
GUI.enabled = sampler.IsAnimatorOrAnimation();
GUI.enabled = sampler.IsAnimatorOrAnimation() && guiEnabled;
EditorGUILayout.PropertyField(prop, new GUIContent());
GUI.enabled = true;
GUI.enabled = true && guiEnabled;
}
if(j == 3)
{
Expand All @@ -338,13 +353,13 @@ private void OnGUI_AnimClips(GPUSkinningSampler sampler)
{
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUI.enabled = prop2.enumValueIndex == 1;
GUI.enabled = prop2.enumValueIndex == 1 && guiEnabled;
prop5.boolValue = GUILayout.Toggle(prop5.boolValue, string.Empty);
if(!GUI.enabled)
{
prop5.boolValue = false;
}
GUI.enabled = true;
GUI.enabled = true && guiEnabled;
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
}
Expand Down Expand Up @@ -504,9 +519,9 @@ private void OnGUI_RootMotion()
if (isRootMotionFoldout)
{
EditorGUI.BeginChangeCheck();
GUI.enabled = anim.clips[previewClipIndex].rootMotionEnabled;
GUI.enabled = anim.clips[previewClipIndex].rootMotionEnabled && guiEnabled;
rootMotionEnabled = EditorGUILayout.Toggle("Apply Root Motion", rootMotionEnabled);
GUI.enabled = true;
GUI.enabled = true && guiEnabled;
if (EditorGUI.EndChangeCheck())
{
preview.Player.RootMotionEnabled = rootMotionEnabled;
Expand Down Expand Up @@ -720,13 +735,45 @@ private void OnGUI_LODMeshes(GPUSkinningSampler sampler)
}
EditorGUILayout.EndHorizontal();
}

OnGUI_LODDistancesChecking(sampler);
}
EditorGUILayout.EndVertical();

EditorGUILayout.Space();
EditorGUILayout.PropertyField(serializedObject.FindProperty("sphereRadius"));
}

private void OnGUI_LODDistancesChecking(GPUSkinningSampler sampler)
{
if(!LodDistancesIsLegal(sampler))
{
EditorGUILayout.HelpBox("Error: LOD distances must be sorted in ascending order.", MessageType.Error);
}
}

private bool LodDistancesIsLegal(GPUSkinningSampler sampler)
{
if(sampler.lodDistances == null)
{
return true;
}

float value = float.MinValue;
bool isLegal = true;
for (int i = 0; i < sampler.lodDistances.Length; ++i)
{
if (sampler.lodDistances[i] <= value)
{
isLegal = false;
break;
}
value = sampler.lodDistances[i];
}

return isLegal;
}

private void OnGUI_Joints()
{
EditorGUILayout.BeginHorizontal();
Expand Down
14 changes: 13 additions & 1 deletion Assets/GPUSkinning/Scripts/GPUSkinningPlayer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,19 @@ private void UpdateJoints(GPUSkinningFrame frame)
Transform jointTransform = Application.isPlaying ? joint.Transform : joint.transform;
if (jointTransform != null)
{
jointTransform.localPosition = (frame.matrices[joint.BoneIndex] * bones[joint.BoneIndex].BindposeInv).MultiplyPoint(Vector3.zero);
// TODO: Update Joint when Animation Blend

Matrix4x4 jointMatrix = frame.matrices[joint.BoneIndex] * bones[joint.BoneIndex].BindposeInv;
if(playingClip.rootMotionEnabled && rootMotionEnabled)
{
jointMatrix = frame.RootMotionInv(res.anim.rootBoneIndex) * jointMatrix;
}

jointTransform.localPosition = jointMatrix.MultiplyPoint(Vector3.zero);

Vector3 jointDir = jointMatrix.MultiplyVector(Vector3.right);
Quaternion jointRotation = Quaternion.FromToRotation(Vector3.right, jointDir);
jointTransform.localRotation = jointRotation;
}
else
{
Expand Down
2 changes: 1 addition & 1 deletion Assets/GPUSkinning/Scripts/GPUSkinningSampler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -861,7 +861,7 @@ private int GetBoneIndex(GPUSkinningBone bone)
return System.Array.IndexOf(gpuSkinningAnimation.bones, bone);
}

private void ShowDialog(string msg)
public static void ShowDialog(string msg)
{
EditorUtility.DisplayDialog("GPUSkinning", msg, "OK");
}
Expand Down

0 comments on commit 6390e74

Please sign in to comment.