From 88a39d20864a9a511d481a041bfa458ec1ab52c6 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 24 Jul 2018 20:36:42 +0900 Subject: [PATCH] Added _MainTex_ST UI --- .../BlendShape/Editor/BlendShapeClipEditor.cs | 49 ++++++++++++++++--- Scripts/BlendShape/MeshPreviewItem.cs | 29 ++++++++--- Scripts/BlendShape/PreviewSceneManager.cs | 4 +- 3 files changed, 65 insertions(+), 17 deletions(-) diff --git a/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs b/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs index 2c0f1578e..701f0553c 100644 --- a/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs +++ b/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs @@ -52,11 +52,12 @@ namespace VRM m_ValuesList = new ReorderableList(serializedObject, m_ValuesProp); m_ValuesList.elementHeight = BlendShapeBindingHeight; m_ValuesList.drawElementCallback = - (rect, index, isActive, isFocused) => { + (rect, index, isActive, isFocused) => + { var element = m_ValuesProp.GetArrayElementAtIndex(index); rect.height -= 4; rect.y += 2; - if(DrawBlendShapeBinding(rect, element, PreviewSceneManager)) + if (DrawBlendShapeBinding(rect, element, PreviewSceneManager)) { m_changed = true; } @@ -66,11 +67,12 @@ namespace VRM m_MaterialValuesList = new ReorderableList(serializedObject, m_MaterialValuesProp); m_MaterialValuesList.elementHeight = MaterialValueBindingHeight; m_MaterialValuesList.drawElementCallback = - (rect, index, isActive, isFocused) => { + (rect, index, isActive, isFocused) => + { var element = m_MaterialValuesProp.GetArrayElementAtIndex(index); rect.height -= 4; rect.y += 2; - if(DrawMaterialValueBinding(rect, element, PreviewSceneManager)) + if (DrawMaterialValueBinding(rect, element, PreviewSceneManager)) { m_changed = true; } @@ -89,8 +91,9 @@ namespace VRM m_changed = false; EditorGUILayout.Space(); - var previewSlider= EditorGUILayout.Slider("Preview Weight", m_previewSlider, 0, 1.0f); - if (previewSlider != m_previewSlider) { + var previewSlider = EditorGUILayout.Slider("Preview Weight", m_previewSlider, 0, 1.0f); + if (previewSlider != m_previewSlider) + { m_previewSlider = previewSlider; m_changed = true; } @@ -110,7 +113,7 @@ namespace VRM serializedObject.ApplyModifiedProperties(); - if (m_changed && PreviewSceneManager!=null) + if (m_changed && PreviewSceneManager != null) { PreviewSceneManager.Bake(m_target.Values, m_target.MaterialValues, m_previewSlider); } @@ -180,6 +183,8 @@ namespace VRM { y += height; rect = new Rect(position.x, y, position.width, height); + + // プロパティ名のポップアップ int propIndex; if (StringPopup(rect, property.FindPropertyRelative("ValueName"), materialItem.PropNames, out propIndex)) { @@ -188,6 +193,7 @@ namespace VRM if (propIndex >= 0) { + // 有効なプロパティ名が選択された var propItem = materialItem.PropMap[materialItem.PropNames[propIndex]]; { switch (propItem.PropertyType) @@ -205,6 +211,20 @@ namespace VRM } } break; + + case ShaderUtil.ShaderPropertyType.TexEnv: + { + property.FindPropertyRelative("BaseValue").vector4Value = propItem.DefaultValues; + + // max + y += height; + rect = new Rect(position.x, y, position.width, height); + if (OffsetProp(rect, property.FindPropertyRelative("TargetValue"))) + { + changed = true; + } + } + break; } } } @@ -285,5 +305,20 @@ namespace VRM return false; } } + + static bool OffsetProp(Rect rect, SerializedProperty prop) + { + var oldValue = prop.vector4Value; + var newValue = EditorGUI.Vector4Field(rect, prop.displayName, oldValue); + if (newValue != oldValue) + { + prop.vector4Value = newValue; + return true; + } + else + { + return false; + } + } } } diff --git a/Scripts/BlendShape/MeshPreviewItem.cs b/Scripts/BlendShape/MeshPreviewItem.cs index 8af87a874..ffcce8fd0 100644 --- a/Scripts/BlendShape/MeshPreviewItem.cs +++ b/Scripts/BlendShape/MeshPreviewItem.cs @@ -45,15 +45,28 @@ namespace VRM for (int i = 0; i < ShaderUtil.GetPropertyCount(material.shader); ++i) { var propType = ShaderUtil.GetPropertyType(material.shader, i); - if (propType == ShaderUtil.ShaderPropertyType.Color) + var name = ShaderUtil.GetPropertyName(material.shader, i); + + switch (propType) { - var name = ShaderUtil.GetPropertyName(material.shader, i); - item.PropMap.Add(name, new PropItem - { - PropertyType = propType, - DefaultValues = material.GetColor(name), - }); - propNames.Add(name); + case ShaderUtil.ShaderPropertyType.Color: + item.PropMap.Add(name, new PropItem + { + PropertyType = propType, + DefaultValues = material.GetColor(name), + }); + propNames.Add(name); + break; + + case ShaderUtil.ShaderPropertyType.TexEnv: + name += "_ST"; + item.PropMap.Add(name, new PropItem + { + PropertyType = propType, + DefaultValues = material.GetVector(name), + }); + propNames.Add(name); + break; } } item.PropNames = propNames.ToArray(); diff --git a/Scripts/BlendShape/PreviewSceneManager.cs b/Scripts/BlendShape/PreviewSceneManager.cs index 6ad3e1942..849e1b8a6 100644 --- a/Scripts/BlendShape/PreviewSceneManager.cs +++ b/Scripts/BlendShape/PreviewSceneManager.cs @@ -42,7 +42,7 @@ namespace VRM GameObject.DestroyImmediate(x.gameObject); } - Debug.Log("new prefab. instanciate"); + //Debug.Log("new prefab. instanciate"); // no previous instance detected, so now let's make a fresh one // very important: this loads the PreviewInstance prefab and temporarily instantiates it into PreviewInstance var go = GameObject.Instantiate(prefab, @@ -95,7 +95,7 @@ namespace VRM dst = new Material(src); map.Add(src, dst); - Debug.LogFormat("add material {0}", src.name); + //Debug.LogFormat("add material {0}", src.name); materialNames.Add(src.name); m_materialMap.Add(src.name, MaterialItem.Create(dst)); }