public static void RenderMeshPreview(RoseMapObjectData mapObj, PreviewRenderUtility previewUtility, Vector2 direction) { if (mapObj == null || previewUtility == null) { return; } Bounds bounds = new Bounds(); Matrix4x4[] mats = new Matrix4x4[mapObj.subObjects.Count]; for (var i = 0; i < mapObj.subObjects.Count; ++i) { var subObj = mapObj.subObjects[i]; Matrix4x4 mat = new Matrix4x4(); mat.SetTRS(subObj.position, subObj.rotation, subObj.scale); if (i != 0) mat = mats[subObj.parent - 1] * mat; Utils.EncapsulateTransformedBounds(ref bounds, mat, subObj.mesh.bounds, i == 0); mats[i] = mat; } float magnitude = bounds.extents.magnitude; float num = 4f * magnitude; previewUtility.m_Camera.transform.position = -Vector3.forward * num; previewUtility.m_Camera.transform.rotation = Quaternion.identity; previewUtility.m_Camera.nearClipPlane = num - magnitude * 1.1f; previewUtility.m_Camera.farClipPlane = num + magnitude * 1.1f; previewUtility.m_Light[0].intensity = 1.4f; previewUtility.m_Light[0].transform.rotation = Quaternion.Euler(40f, 40f, 0f); previewUtility.m_Light[1].intensity = 1.4f; Color ambient = new Color(0.1f, 0.1f, 0.1f, 0f); RenderMeshPreviewSkipCameraAndLighting(mapObj, mats, bounds, previewUtility, null, direction); }
private static void RenderMeshPreviewSkipCameraAndLighting(RoseMapObjectData mapObj, Matrix4x4[] mats, Bounds bounds, PreviewRenderUtility previewUtility, MaterialPropertyBlock customProperties, Vector2 direction) { bool fog = RenderSettings.fog; Unsupported.SetRenderSettingsUseFogNoDirty(false); Quaternion quaternion = Quaternion.Euler(direction.y, 0f, 0f) * Quaternion.Euler(0f, direction.x, 0f); Vector3 pos = quaternion * -bounds.center; Matrix4x4 rootTRS = new Matrix4x4(); rootTRS.SetTRS(pos, quaternion, Vector3.one); for (var i = 0; i < mapObj.subObjects.Count; ++i) { var subObj = mapObj.subObjects[i]; previewUtility.DrawMesh(subObj.mesh, rootTRS * mats[i], subObj.material, 0); } previewUtility.m_Camera.Render(); Unsupported.SetRenderSettingsUseFogNoDirty(fog); }
public static void RenderMeshPreview(RoseMapObjectData mapObj, PreviewRenderUtility previewUtility, Vector2 direction) { if (mapObj == null || previewUtility == null) { return; } Bounds bounds = new Bounds(); Matrix4x4[] mats = new Matrix4x4[mapObj.subObjects.Count]; for (var i = 0; i < mapObj.subObjects.Count; ++i) { var subObj = mapObj.subObjects[i]; Matrix4x4 mat = new Matrix4x4(); mat.SetTRS(subObj.position, subObj.rotation, subObj.scale); if (i != 0) { mat = mats[subObj.parent - 1] * mat; } Utils.EncapsulateTransformedBounds(ref bounds, mat, subObj.mesh.bounds, i == 0); mats[i] = mat; } float magnitude = bounds.extents.magnitude; float num = 4f * magnitude; previewUtility.m_Camera.transform.position = -Vector3.forward * num; previewUtility.m_Camera.transform.rotation = Quaternion.identity; previewUtility.m_Camera.nearClipPlane = num - magnitude * 1.1f; previewUtility.m_Camera.farClipPlane = num + magnitude * 1.1f; previewUtility.m_Light[0].intensity = 1.4f; previewUtility.m_Light[0].transform.rotation = Quaternion.Euler(40f, 40f, 0f); previewUtility.m_Light[1].intensity = 1.4f; Color ambient = new Color(0.1f, 0.1f, 0.1f, 0f); RenderMeshPreviewSkipCameraAndLighting(mapObj, mats, bounds, previewUtility, null, direction); }