mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-18 16:53:15 -05:00
fix PreviewFaceRenderer for Unity-2017
This commit is contained in:
parent
84c34d2710
commit
1b32d4f377
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// カメラパラメーターを決める
|
||||
|
|
@ -249,19 +251,19 @@ namespace VRM
|
|||
/// <param name="camera"></param>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user