From 1b32d4f3777b2688bbf9e5dbe9d76911657a8a69 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Sun, 8 Apr 2018 03:15:07 +0900 Subject: [PATCH] fix PreviewFaceRenderer for Unity-2017 --- .../BlendShape/Editor/BlendShapeClipEditor.cs | 14 ++++---- .../BlendShape/Editor/PreviewFaceRenderer.cs | 35 ++++++++++++++----- Scripts/BlendShape/PreviewSceneManager.cs | 18 +++++----- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs b/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs index ab08ab460..16f0e0d94 100644 --- a/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs +++ b/Scripts/BlendShape/Editor/BlendShapeClipEditor.cs @@ -106,7 +106,7 @@ namespace VRM public override void OnInspectorGUI() { - m_prefab = (GameObject)EditorGUILayout.ObjectField("prefab", m_prefab, typeof(GameObject), false); + Prefab = (GameObject)EditorGUILayout.ObjectField("prefab", Prefab, typeof(GameObject), false); serializedObject.Update(); @@ -147,16 +147,18 @@ namespace VRM if (m_renderer != null && m_scene != null) { - var image = m_renderer.Render(r, background, m_scene); - if (image != null) + var texture = m_renderer.Render(r, background, m_scene); + if (texture != null) { // draw the RenderTexture in the ObjectPreview pane - GUI.DrawTexture(r, image, ScaleMode.StretchToFill, false); + GUI.DrawTexture(r, texture, ScaleMode.StretchToFill, false); } } + } - EditorGUI.DropShadowLabel(new Rect(r.x, r.y, r.width, 40f), - BlendShapeKey.CreateFrom((BlendShapeClip)target).ToString()); + public override string GetInfoString() + { + return BlendShapeKey.CreateFrom((BlendShapeClip)target).ToString(); } } } diff --git a/Scripts/BlendShape/Editor/PreviewFaceRenderer.cs b/Scripts/BlendShape/Editor/PreviewFaceRenderer.cs index 3f43d4e45..0f2b6326e 100644 --- a/Scripts/BlendShape/Editor/PreviewFaceRenderer.cs +++ b/Scripts/BlendShape/Editor/PreviewFaceRenderer.cs @@ -33,16 +33,36 @@ namespace VRM public PreviewFaceRenderer() { m_previewUtility = new PreviewRenderUtility(); + + m_previewUtility.lights[0].intensity = 1.4f; + m_previewUtility.lights[0].transform.rotation = Quaternion.Euler(40f, 190f, 0); + m_previewUtility.lights[1].intensity = 1.4f; + + m_previewUtility.ambientColor = new Color(.1f, .1f, .1f, 0); + } + + class FogScope : IDisposable + { + bool fog; + + public FogScope() + { + bool fog = RenderSettings.fog; // ... let's remember the current fog setting... + // we are technically rendering everything in the scene, so scene fog might affect it... + Unsupported.SetRenderSettingsUseFogNoDirty(false); // ... and then temporarily turn it off + } + + public void Dispose() + { + Unsupported.SetRenderSettingsUseFogNoDirty(fog); + } } public Texture Render(Rect r, GUIStyle background, PreviewSceneManager scene) { if (scene == null) return null; - // we are technically rendering everything in the scene, so scene fog might affect it... - bool fog = RenderSettings.fog; // ... let's remember the current fog setting... - Unsupported.SetRenderSettingsUseFogNoDirty(false); // ... and then temporarily turn it off - try + using (var fog = new FogScope()) { m_previewUtility.BeginPreview(r, background); // set up the PreviewRenderUtility's mini internal scene @@ -65,13 +85,10 @@ namespace VRM // VERY IMPORTANT: this manually tells the camera to render and produce the render texture PreviewCamera.Render(); + //m_previewUtility.Render(false, false); // reset the scene's fog from before - return m_previewUtility.EndPreview(); // grab the RenderTexture resulting from DoRenderPreview() > RenderMeshPreview() > PreviewRenderUtility.m_Camera.Render() - } - finally - { - Unsupported.SetRenderSettingsUseFogNoDirty(fog); + return m_previewUtility.EndPreview(); } } diff --git a/Scripts/BlendShape/PreviewSceneManager.cs b/Scripts/BlendShape/PreviewSceneManager.cs index 194b02eab..0f3bc5065 100644 --- a/Scripts/BlendShape/PreviewSceneManager.cs +++ b/Scripts/BlendShape/PreviewSceneManager.cs @@ -72,12 +72,14 @@ namespace VRM var flags = BindingFlags.Static | BindingFlags.NonPublic; var propInfo = typeof(Camera).GetProperty("PreviewCullingLayer", flags); - PreviewLayer = (int)propInfo.GetValue(null, new object[0]); + //PreviewLayer = (int)propInfo.GetValue(null, new object[0]); + /* foreach (var x in transform.Traverse()) { x.gameObject.layer = PreviewLayer; } + */ m_meshes = transform.Traverse() .Select(x => MeshPreviewItem.Create(x, transform)) @@ -231,17 +233,17 @@ namespace VRM foreach (var x in m_meshes) { x.Bake(); - m_bounds.Expand(x.Mesh.bounds.min); - m_bounds.Expand(x.Mesh.bounds.max); + m_bounds.Expand(x.Mesh.bounds.size); } } + /* int PreviewLayer { get; set; } - + */ /// /// カメラパラメーターを決める @@ -249,19 +251,19 @@ namespace VRM /// public void SetupCamera(Camera camera) { - float magnitude = m_bounds.extents.magnitude; - float distance = 4f * magnitude; + float magnitude = m_bounds.extents.magnitude * 0.5f; + float distance = magnitude; camera.fieldOfView = 27f; camera.backgroundColor = Color.gray; camera.clearFlags = CameraClearFlags.Color; // this used to be "-Vector3.forward * num" but I hardcoded my camera position instead - camera.transform.position = new Vector3(0f, 1.4f, 1.5f); + camera.transform.position = new Vector3(0f, 1.4f, distance); camera.transform.rotation = Quaternion.Euler(0, 180f, 0); camera.nearClipPlane = 0.3f; camera.farClipPlane = distance + magnitude * 1.1f; //previewLayer のみ表示する - camera.cullingMask = 1 << PreviewLayer; + //camera.cullingMask = 1 << PreviewLayer; } } }