private void DrawRenderPreview(Rect previewRect)
        {
            Quaternion rotation = Quaternion.Euler(previewRotationX, previewRotationY, 0);
            Matrix4x4  matrix   = Matrix4x4.identity;

            matrix.SetTRS(Vector3.zero, rotation, Vector3.one);
            Vector3 position  = -matrix.MultiplyPoint(previewMesh.bounds.center);
            Vector3 position2 = matrix.MultiplyPoint(importPivot - previewMesh.bounds.center);

            float dist = previewMesh.bounds.extents.magnitude * 2;

            preview.camera.transform.position = new Vector3(0, 0, -dist);
            preview.camera.transform.LookAt(Vector3.zero);
            preview.camera.clearFlags      = CameraClearFlags.Color;
            preview.camera.backgroundColor = Color.gray;
            preview.camera.fieldOfView     = 60;
            preview.camera.nearClipPlane   = .3f;
            preview.camera.farClipPlane    = 10000f;

            preview.BeginPreview(previewRect, GUIStyle.none);

            preview.DrawMesh(previewMesh, position, rotation, previewMaterial, 0);
            preview.DrawMesh(previewPivotMesh, position2, rotation, previewPivotMaterial, 0);

            preview.Render();
            preview.EndAndDrawPreview(previewRect);
        }
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (m_ReflectiveMaterial != null)
            {
                m_ReflectiveMaterial.SetFloat("_Exposure", previewExposure);
                m_ReflectiveMaterial.SetFloat("_MipLevel", mipLevelPreview);
            }

            if (m_PreviewUtility == null)
            {
                InitPreview();
            }

            // We init material just before using it as the inspector might have been enabled/awaked before during import.
            InitMaterialIfNeeded();

            UpdateCamera();

            m_ReflectiveMaterial.SetTexture("_Cubemap", target as Texture);

            m_PreviewUtility.BeginPreview(r, GUIStyle.none);
            m_PreviewUtility.DrawMesh(sphereMesh, Matrix4x4.identity, m_ReflectiveMaterial, 0);
            m_PreviewUtility.camera.Render();
            m_PreviewUtility.EndAndDrawPreview(r);

            if (Event.current.type != EventType.Repaint)
            {
                if (HandleMouse(r))
                {
                    Repaint();
                }
            }
        }
Exemple #3
0
        private void DrawScene()
        {
            var rect = new Rect(0, 0, this.position.size.x, this.position.size.y);

            this.renderer.camera.nearClipPlane      = 0.1f;
            this.renderer.camera.farClipPlane       = 10000.0f;
            this.renderer.camera.fieldOfView        = cameraFov;
            this.renderer.camera.transform.position = Quaternion.Euler(mouseAction.rotateEuler) * new Vector3(0, 0, -this.mouseAction.zoom);
            this.renderer.camera.transform.rotation = Quaternion.Euler(mouseAction.rotateEuler);
            this.renderer.camera.clearFlags         = CameraClearFlags.SolidColor;

            var mesh         = OctahedralHemiSphere.CreatePrimitive(modelScale, modelMeshes, modelRatio);
            var grid         = OctahedralGrid.CreatePrimitive(10.0f, 100, 10, Color.white * 0.125f, Color.white * 0.25f);
            var gridMaterial = new Material(Shader.Find("OctahedralImposter/Grid"));
            var material     = new Material(Shader.Find("OctahedralImposter/Wireframe"));

            renderer.DrawMesh(mesh, Vector3.zero, Quaternion.identity, material, 0);
            renderer.DrawMesh(grid, Vector3.zero, Quaternion.identity, gridMaterial, 0);

            this.renderer.BeginPreview(rect, GUIStyle.none);
            this.renderer.camera.Render();
            var tex = this.renderer.EndPreview();

            GameObject.DestroyImmediate(mesh);
            GameObject.DestroyImmediate(grid);

            GUI.DrawTexture(rect, tex);
        }
        private static void BuildScene(Rect r, GUIStyle background, Mesh[] meshes)
        {
            int meshCount = meshes.Length;

            UpdateInteraction(r);

            if (PREV_RENDER == null)
            {
                PREV_RENDER = new PreviewRenderUtility();
            }

            Bounds sceneBounds = new Bounds(meshes[0].bounds.center, Vector3.zero);

            sceneBounds.Expand(Vector3.one * 0.1f);
            for (int m = 0; m < meshCount; m++)
            {
                sceneBounds.Encapsulate(meshes[m].bounds);
            }
            Vector3 max    = sceneBounds.size;
            float   radius = Mathf.Max(max.x, Mathf.Max(max.y, max.z)) * 1.05f;

            INTERACTION_SCALE = radius * 0.001f;
            float dist = radius / (Mathf.Sin(camera.fieldOfView * Mathf.Deg2Rad)) * ZOOM;

            camera.transform.position = Vector2.zero;
            camera.transform.rotation = Quaternion.Euler(new Vector3(-DRAG.y, -DRAG.x, 0));
            camera.transform.position = camera.transform.forward * -dist;
            camera.nearClipPlane      = 0.1f;
            camera.farClipPlane       = 500;

#if UNITY_2017_1_OR_NEWER
            float baseColour = 0.4f;
            PREV_RENDER.ambientColor = new Color(baseColour, baseColour, baseColour);
#endif

            lights[0].intensity          = 0.65f;
            lights[0].transform.rotation = Quaternion.Euler(30f, -20f, 0f);

            PREV_RENDER.BeginPreview(r, background);

            if (PLANE != null && PLANE_MATERIAL != null)
            {
#if UNITY_2017_1_OR_NEWER
                Vector3 position = new Vector3(0, 0, Mathf.Max(0.2f, max.z)) - OFFSET;
                Vector3 scale    = max * 3000;
#else
                Vector3 position = new Vector3(-max.x * 2, -max.y * 2, Mathf.Max(0.5f, max.z * 1.5f)) - OFFSET;
                Vector3 scale    = max * 3;
#endif
                Matrix4x4 matrix = Matrix4x4.TRS(position, Quaternion.identity, scale);
                PREV_RENDER.DrawMesh(PLANE, matrix, PLANE_MATERIAL, 0);
            }
        }
Exemple #5
0
    public Texture DrawRenderPreview(Rect size, Mesh mesh, Material material)
    {
        if (previewRenderer == null)
        {
            previewRenderer = new PreviewRenderUtility();
            previewRenderer.cameraFieldOfView         = 15.0f;
            previewRenderer.ambientColor              = (Color.white * 0.6f);
            previewRenderer.camera.transform.position = (Vector3.forward * 5.0f) + (Vector3.up * 5.0f) + (Vector3.right * 5.0f);
            previewRenderer.camera.transform.LookAt(Vector3.zero, Vector3.up);
            previewRenderer.camera.nearClipPlane = 0.01f;
            previewRenderer.camera.farClipPlane  = 50.0f;

            previewRenderer.lights[0].enabled            = true;
            previewRenderer.lights[0].type               = LightType.Directional;
            previewRenderer.lights[0].color              = Color.white;
            previewRenderer.lights[0].intensity          = 1.5f;
            previewRenderer.lights[0].transform.rotation = Quaternion.Euler(30f, 0f, 0f);
            previewRenderer.lights[1].enabled            = true;
            previewRenderer.lights[1].intensity          = 0.5f;
        }

        // Create a duplicate material with NO_CURVE enabled for rendering the preview
        Material previewMaterial = Instantiate(material);

        previewMaterial.EnableKeyword("NO_CURVE");

        previewRenderer.BeginStaticPreview(size);
        previewRenderer.DrawMesh(mesh, Matrix4x4.identity, previewMaterial, 0);
        previewRenderer.Render();
        return(previewRenderer.EndStaticPreview());
    }
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (Event.current.type == EventType.Repaint)
            {
                previewRenderUtility.BeginPreview(r, background);

                for (int i = 0; i < targetMeshFilters?.Length && i < targetMeshRenderers?.Length; i++)
                {
                    previewRenderUtility.DrawMesh(targetMeshFilters[i].sharedMesh, targetMeshFilters[i].transform.position, targetMeshFilters[i].transform.rotation, targetMeshRenderers[i].sharedMaterial, 0);
                }

                previewRenderUtility.camera.Render();
                Texture render = previewRenderUtility.EndPreview();

                //Draw the model render
                GUI.DrawTexture(r, render, ScaleMode.ScaleToFit);

                //Draw the icon in the lower right corner
                if (targetIconTexture)
                {
                    float len = r.height / 2;
                    r = new Rect(r.xMax - len, r.yMax - len, len, len);
                    GUI.DrawTexture(r, targetIconTexture, ScaleMode.ScaleToFit);
                }
            }
        }
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            m_previewRenderUtility.BeginPreview(r, background);
            var target = m_target.Head;

            if (target != null)
            {
#if UNITY_2017_1_OR_NEWER
                SetPreviewCamera(
                    m_previewRenderUtility.camera,
                    target.position + new Vector3(0, 0.1f, 0),
                    target.forward
                    );
                foreach (var x in m_items)
                {
                    var mesh = x.Baked();
                    for (int i = 0; i < x.Materials.Length; ++i)
                    {
                        m_previewRenderUtility.DrawMesh(mesh, x.Transform.position, x.Transform.rotation,
                                                        x.Materials[i], i);
                    }
                }

                m_previewRenderUtility.Render();
#else
                SetPreviewCamera(
                    m_previewRenderUtility.m_Camera,
                    target.position + new Vector3(0, 0.1f, 0),
                    target.forward
                    );
                m_previewRenderUtility.m_Camera.Render();
#endif
            }
            m_previewRenderUtility.EndAndDrawPreview(r);
        }
Exemple #8
0
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (!SystemInfo.supportsCubemapArrayTextures || (m_Material != null && !m_Material.shader.isSupported))
            {
                if (Event.current.type == EventType.Repaint)
                {
                    EditorGUI.DropShadowLabel(new Rect(r.x, r.y, r.width, 40), "Cubemap array preview is not supported");
                }
                return;
            }

            CubemapArray t = (CubemapArray)target;

            m_Material.mainTexture = t;

            m_PreviewUtility.BeginPreview(r, background);
            const float previewDistance = 6.0f;

            m_PreviewDir = PreviewGUI.Drag2D(m_PreviewDir, r);

            m_PreviewUtility.camera.transform.position = -Vector3.forward * previewDistance;
            m_PreviewUtility.camera.transform.rotation = Quaternion.identity;
            Quaternion rot = Quaternion.Euler(m_PreviewDir.y, 0, 0) * Quaternion.Euler(0, m_PreviewDir.x, 0);

            m_PreviewUtility.DrawMesh(m_Mesh, Vector3.zero, rot, m_Material, 0);
            m_PreviewUtility.Render();
            Texture renderedTexture = m_PreviewUtility.EndPreview();

            GUI.DrawTexture(r, renderedTexture, ScaleMode.StretchToFill, false);

            EditorGUI.DropShadowLabel(new Rect(r.x, r.y + 10, r.width, 30),
                                      "Slice " + m_Slice + "\nMip " + m_Mip);
        }
    private void OnGUI()
    {
        if (m_PreviewRenderUtility == null)
        {
            m_PreviewRenderUtility = new PreviewRenderUtility();
            m_PreviewRenderUtility.camera.farClipPlane       = 500;
            m_PreviewRenderUtility.camera.clearFlags         = CameraClearFlags.SolidColor;
            m_PreviewRenderUtility.camera.transform.position = new Vector3(0, 0, -10);

            var go         = GameObject.CreatePrimitive(PrimitiveType.Cube);
            var meshFilter = go.GetComponentInChildren <MeshFilter>();
            m_PreviewMesh     = meshFilter.sharedMesh;
            m_PreviewMaterial = go.GetComponent <MeshRenderer>().sharedMaterial;

            DestroyImmediate(go);
        }
        var drawRect = new Rect(0, 0, 500, 500);

        m_PreviewRenderUtility.BeginPreview(drawRect, GUIStyle.none);
        m_PreviewRenderUtility.DrawMesh(m_PreviewMesh, Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(30, 45, 0), Vector3.one), m_PreviewMaterial, 0);
        m_PreviewRenderUtility.camera.Render();
        var texture = m_PreviewRenderUtility.EndPreview();

        GUI.Box(drawRect, texture);
    }
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (m_ReflectiveMaterial != null)
            {
                m_ReflectiveMaterial.SetFloat("_Exposure", previewExposure);
                m_ReflectiveMaterial.SetFloat("_MipLevel", mipLevelPreview);
            }

            if (m_PreviewUtility == null)
            {
                InitPreview();
            }

            UpdateCamera();

            m_PreviewUtility.BeginPreview(r, GUIStyle.none);
            m_PreviewUtility.DrawMesh(sphereMesh, Matrix4x4.identity, m_ReflectiveMaterial, 0);
            m_PreviewUtility.camera.Render();
            m_PreviewUtility.EndAndDrawPreview(r);

            if (Event.current.type != EventType.Repaint)
            {
                if (HandleMouse(r))
                {
                    Repaint();
                }
            }
        }
Exemple #11
0
        /// <summary>
        /// Setup and draw to a mini scene with a RenderTexture output
        /// </summary>
        private Texture RenderPreview(Rect r)
        {
            m_PreviewUtility.BeginPreview(r, null);

            m_PreviewUtility.camera.backgroundColor = Color.black;
            m_PreviewUtility.camera.clearFlags      = CameraClearFlags.Color;

            if (m_target.mesh != null)
            {
                // Adjust the mesh position to fit to the viewport
                // Reference: https://gist.github.com/radiatoryang/a2282d44ba71848e498bb2e03da98991
                var bounds    = m_target.mesh.bounds;
                var magnitude = bounds.extents.magnitude;
                var distance  = 10f * magnitude;

                m_PreviewUtility.camera.transform.position = new Vector3(0, 0, -distance);
                m_PreviewUtility.camera.transform.rotation = Quaternion.identity;

                m_PreviewUtility.camera.nearClipPlane = 0.1f;
                m_PreviewUtility.camera.farClipPlane  = distance + magnitude * 1.1f;

                var rot = Quaternion.Euler(m_PreviewEuler);
                var pos = rot * -bounds.center;

                m_PreviewUtility.DrawMesh(m_target.mesh, pos, rot, m_target.material, 0);
            }

            // Render the camera view and generate the render texture
            m_PreviewUtility.camera.Render();
            return(m_PreviewUtility.EndPreview());
        }
Exemple #12
0
    public override void ShowPreviewGUI(Rect r, GUIStyle background)
    {
        switch (previewType)
        {
        case PreviewType.Cube:
            meshFilter.mesh = meshes[0];
            break;

        case PreviewType.Sphere:
            meshFilter.mesh = meshes[1];
            break;

        case PreviewType.Capsule:
            meshFilter.mesh = meshes[2];
            break;
        }

        if (Event.current.type == EventType.Repaint)
        {
            previewRenderUtility.BeginPreview(r, background);

            previewRenderUtility.DrawMesh(meshFilter.sharedMesh, Matrix4x4.identity, meshRenderer.sharedMaterial, 0);
            previewRenderUtility.m_Camera.transform.position = cameraPosition;
            previewRenderUtility.m_Camera.Render();

            Texture renderedPreview = previewRenderUtility.EndPreview();
            GUI.DrawTexture(r, renderedPreview, ScaleMode.StretchToFill, false);
        }
    }
    public override void OnPreviewGUI(Rect r, GUIStyle background)
    {
        _drag = Drag2D(_drag, r);

        if (Event.current.type == EventType.Repaint)
        {
            if (_targetMeshRenderer == null)
            {
                EditorGUI.DropShadowLabel(r, "Mesh Renderer Required");
            }
            else
            {
                _previewRenderUtility.BeginPreview(r, background);

                _previewRenderUtility.DrawMesh(_targetMeshFilter.sharedMesh, Matrix4x4.identity, _targetMeshRenderer.sharedMaterial, 0);

                _previewRenderUtility.m_Camera.transform.position = Vector2.zero;
                _previewRenderUtility.m_Camera.transform.rotation = Quaternion.Euler(new Vector3(-_drag.y, -_drag.x, 0));
                _previewRenderUtility.m_Camera.transform.position = _previewRenderUtility.m_Camera.transform.forward * -6f;
                _previewRenderUtility.m_Camera.Render();

                Texture resultRender = _previewRenderUtility.EndPreview();
                GUI.DrawTexture(r, resultRender, ScaleMode.ScaleToFit, true);
            }
        }
    }
    // Render a mesh in preview with wireframe material.
    private void RenderMeshPreviewSkipCameraAndLightingWireframe(
        Mesh cMeshWire,
        Bounds cBounds,
        PreviewRenderUtility cPreviewUtility,
        Material cWireMaterial,
        MaterialPropertyBlock cCustomProperties,
        Vector2 vDirection,
        int nMeshSubset // -1 for whole mesh.
        )
    {
        if ((null == cMeshWire) || (null == cPreviewUtility))
        {
            return;
        }

        Quaternion cRot = Quaternion.Euler(vDirection.y, 0, 0) * Quaternion.Euler(0, vDirection.x, 0);
        Vector3    vPos = cRot * (-cBounds.center);

        bool bOldFog = RenderSettings.fog;

        Unsupported.SetRenderSettingsUseFogNoDirty(false);

        int submeshes = cMeshWire.subMeshCount;

        if (null != cWireMaterial)
        {
            cPreviewUtility.camera.clearFlags = CameraClearFlags.Nothing;
            GL.wireframe = true;

            if ((nMeshSubset < 0) || (nMeshSubset >= submeshes))
            {
                for (int i = 0; i < submeshes; ++i)
                {
                    cPreviewUtility.DrawMesh(cMeshWire, vPos, cRot, cWireMaterial, i, cCustomProperties);
                }
            }
            else
            {
                cPreviewUtility.DrawMesh(cMeshWire, vPos, cRot, cWireMaterial, nMeshSubset, cCustomProperties);
            }

            cPreviewUtility.Render();
            GL.wireframe = false;
        }

        Unsupported.SetRenderSettingsUseFogNoDirty(bOldFog);
    }
Exemple #15
0
    private void DrawScene(Rect _rect)
    {
        if (Event.current.type == EventType.Repaint)
        {
            m_renderer.BeginPreview(_rect, GUIStyle.none);

            m_renderer.DrawMesh(m_context.PreviewMesh, m_meshTransform, m_meshRenderer.sharedMaterial, 0);

            m_renderer.camera.Render();

            NPipeGL.PostRenderBegin(m_renderer.camera.projectionMatrix, m_renderer.camera.worldToCameraMatrix, s_materialHandles);

            Transform t      = m_context.PreviewObject.transform;
            Bounds    box    = m_meshFilter.sharedMesh.bounds;
            Vector3   extent = box.extents;

            NPipeGL.DrawParallelepiped(
                t.position - new Vector3(extent.x, extent.y, extent.z),
                new Vector3(box.size.x, 0, 0),
                new Vector3(0, box.size.y, 0),
                new Vector3(0, 0, box.size.z),
                s_colorBox);

            NPVoxMeshData[] voxMeshData = m_context.MeshOutput.GetVoxMeshData();
            Vector3         voxSize     = m_context.MeshOutput.VoxelSize;
            Vector3         voxExtent   = voxSize * 0.5f;
            Color           cOutline    = new Color(0.3f, 0.3f, 0.3f);
            Color           cNormals    = new Color(0.4f, 0.4f, 0.4f);

            Vector3 v1 = new Vector3(voxSize.x, 0, 0);
            Vector3 v2 = new Vector3(0, voxSize.y, 0);
            Vector3 v3 = new Vector3(0, 0, voxSize.z);

            Vector3[] normals = m_context.PreviewMesh.normals;

            foreach (NPVoxMeshData vox in voxMeshData)
            {
                if (!vox.isHidden)
                {
                    if (m_previewGUIDrawOutlines)
                    {
                        Vector3 voxPosition = new Vector3(vox.voxelCenter.x, vox.voxelCenter.y, vox.voxelCenter.z);
                        NPipeGL.DrawParallelepiped(voxPosition - voxExtent, v1, v2, v3, cOutline);
                    }

                    if (m_previewGUIDrawNormals)
                    {
                        NPipeGL.DrawLine(vox.voxelCenter, vox.voxelCenter + normals[vox.vertexIndexOffsetBegin] * voxSize.x, cNormals);
                    }
                }
            }

            DrawSceneInternal(_rect);

            NPipeGL.PostRenderEnd();

            GUI.DrawTexture(_rect, m_renderer.EndPreview());
        }
    }
Exemple #16
0
 private void DrawDisplayObject(PreviewRenderUtility preview, Mesh mesh, Vector3 pos, Quaternion rot, Vector3 scale)
 {
     if (preview == null || mesh == null || scale == Vector3.zero)
     {
         return;
     }
     preview.DrawMesh(mesh, pos, scale, rot, material, 0, _propblock, null, false);
 }
Exemple #17
0
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            _drag = Drag2D(_drag, r);

            if (UnityEngine.Event.current.type == UnityEngine.EventType.Repaint)
            {
                if (_targetMeshRenderer == null)
                {
                    EditorGUI.DropShadowLabel(r, "Mesh Renderer Required");
                }
                else
                {
                    EditorGUILayout.BeginHorizontal();
                    {
                        _previewRenderUtility.BeginPreview(r, background);

                        _previewRenderUtility.DrawMesh(_targetMeshFilter.sharedMesh, Matrix4x4.identity, _targetMeshRenderer.sharedMaterial, 0);

                        // _previewRenderUtility.m_Camera.transform.eulerAngles = new Vector3(0, 180, 0);
                        // _previewRenderUtility.m_Camera.transform.position = Vector2.zero;
                        _previewRenderUtility.camera.transform.rotation = Quaternion.Euler(new Vector3(-_drag.y, -_drag.x, 0));
                        _previewRenderUtility.camera.transform.position = _previewRenderUtility.camera.transform.forward * -20;
                        _previewRenderUtility.camera.Render();

                        Texture resultRender = _previewRenderUtility.EndPreview();
                        GUI.DrawTexture(r, resultRender, ScaleMode.StretchToFill, false);
                    }

                    {
                        _previewRenderUtility.BeginPreview(r, background);

                        _previewRenderUtility.DrawMesh(_targetMeshFilter.sharedMesh, Matrix4x4.identity, _targetMeshRenderer.sharedMaterial, 0);

                        // _previewRenderUtility.m_Camera.transform.eulerAngles = new Vector3(0, 180, 0);
                        // _previewRenderUtility.m_Camera.transform.position = Vector2.zero;
                        _previewRenderUtility.camera.transform.rotation = Quaternion.Euler(new Vector3(_drag.y, _drag.x, 0));
                        _previewRenderUtility.camera.transform.position = _previewRenderUtility.camera.transform.forward * -20;
                        _previewRenderUtility.camera.Render();

                        Texture resultRender = _previewRenderUtility.EndPreview();
                        GUI.DrawTexture(r, resultRender, ScaleMode.StretchToFill, false);
                    }
                    EditorGUILayout.EndHorizontal();
                }
            }
        }
    /// <summary>
    /// Create a Texture2D icon of a SVG image (editor only version).
    /// </summary>
    /// <param name="svg">String containing svg content.</param>
    /// <param name="renderUtil">PreviewRenderUtility to use for drawing</param>
    public static Texture2D GetIcon(string svg, PreviewRenderUtility renderUtil)
    {
        // Parse the SVG
        SVGParser.SceneInfo sceneInfo = SVGParser.ImportSVG(new System.IO.StringReader(svg));
        int width  = Mathf.CeilToInt(sceneInfo.SceneViewport.width);
        int height = Mathf.CeilToInt(sceneInfo.SceneViewport.height);

        if ((width > 64) || (height > 64))
        {
            Debug.LogWarning("SVG icon of unusual size!");
        }

        // Save the render state and get a temporary render texture
        RenderTexture activeTexture = RenderTexture.active;

        renderUtil.camera.targetTexture   = RenderTexture.GetTemporary(width, height, 8, RenderTextureFormat.ARGB32);
        renderUtil.camera.backgroundColor = Color.clear;

        // Generate the mesh
        Mesh iconMesh = new Mesh();

        VectorUtils.TessellationOptions tessellationOptions = new VectorUtils.TessellationOptions()
        {
            StepDistance         = 0.05f,
            MaxCordDeviation     = float.MaxValue,
            MaxTanAngleDeviation = Mathf.PI / 2.0f,
            SamplingStepSize     = 0.01f
        };
        List <VectorUtils.Geometry> iconGeometry = VectorUtils.TessellateScene(sceneInfo.Scene, tessellationOptions);

        VectorUtils.FillMesh(iconMesh, iconGeometry, 1f);

        // Activate the render texture and draw the mesh into it
        RenderTexture.active = renderUtil.camera.targetTexture;
        float   cameraSize     = renderUtil.camera.orthographicSize;
        Vector3 cameraPosition = renderUtil.camera.transform.position;

        renderUtil.camera.orthographicSize   = sceneInfo.SceneViewport.height / 2;
        renderUtil.camera.transform.position = new Vector3(sceneInfo.SceneViewport.center.x, sceneInfo.SceneViewport.center.y, -1);
        // HACK until FillMesh() flpYAxis is fixed
        renderUtil.camera.transform.Rotate(0, 0, 180f);
        renderUtil.DrawMesh(iconMesh, Matrix4x4.identity, renderMaterial, 0);
        renderUtil.camera.Render();
        renderUtil.camera.transform.Rotate(0, 0, 180f);
        renderUtil.camera.orthographicSize   = cameraSize;
        renderUtil.camera.transform.position = cameraPosition;
        Texture2D iconTexture = new Texture2D(width, height);

        iconTexture.ReadPixels(new Rect(0, 0, width, height), 0, 0);
        iconTexture.Apply();

        // Restore the render state and release the temporary render texture
        RenderTexture.active = activeTexture;
        RenderTexture.ReleaseTemporary(renderUtil.camera.targetTexture);

        return(iconTexture);
    }
Exemple #19
0
        public void Render([NotNull] PreviewRenderUtility preview)
        {
            // Input
            preview.DrawMesh(_heightmap, _inputTransform, _inputHeightmapMaterial, 0);
            preview.DrawMesh(_box, _inputTransform, _boxOutlineMaterial, 1);
            preview.DrawMesh(_box, _inputTransform * _inputHighlightTransform, _highlightFillMaterial, 0);
            preview.DrawMesh(_box, _inputTransform * _inputHighlightTransform, _highlightOutlineMaterial, 1);

            // Output
            preview.DrawMesh(_heightmap, _outputTransform, _outputHeightmapMaterial, 0);
            preview.DrawMesh(_box, _outputTransform, _boxOutlineMaterial, 1);
            preview.DrawMesh(_box, _outputTransform * _outputHighlightTransform, _highlightFillMaterial, 0);
            preview.DrawMesh(_box, _outputTransform * _outputHighlightTransform, _highlightOutlineMaterial, 1);

            // Connector
            preview.DrawMesh(_range, Matrix4x4.identity, _highlightFillMaterial, 1);
            preview.DrawMesh(_range, Matrix4x4.identity, _highlightOutlineMaterial, 0);
        }
Exemple #20
0
 private Texture RenderPreview(Rect r, GUIStyle background)
 {
     previewRenderUtility.BeginPreview(r, background);
     previewRenderUtility.DrawMesh(targetMeshFilter.sharedMesh,
                                   previewRendererObject.transform.localToWorldMatrix,
                                   targetMeshRenderer.sharedMaterial, 0);
     previewRenderUtility.camera.Render();
     return(previewRenderUtility.EndPreview());
 }
        public override void OnInteractivePreviewGUI(Rect r, GUIStyle background)
        {
            preview.BeginPreview(r, background);
            preview.DrawMesh(generator.targetMesh, Matrix4x4.identity, previewMaterial, 0);
            preview.camera.transform.SetPositionAndRotation(Vector3.forward * -5, Quaternion.identity);
            preview.Render();
            Texture texture = preview.EndPreview();

            GUI.DrawTexture(r, texture, ScaleMode.StretchToFill, true);
        }
Exemple #22
0
 public override void DrawPreview(Rect rect)
 {
     //process preview controls
     ProcessPreviewInput(rect);
     //update display flags
     UpdateDisplayFlags();
     if (_update_mesh)
     {
         //update mesh
         UpdateMesh();
         //clear update mesh flag
         _update_mesh = false;
     }
     if (_render_mesh)
     {
         UpdateDisplay();
         //update preview render texture
         _previewutility.BeginPreview(rect, GUI.skin.GetStyle("DarkGrey"));
         //draw axi stuff
         _display.DrawDisplayObjects(_previewutility);
         //draw mesh
         if (_mesh.triangles.Length > 0 && mesh_mat != null)
         {
             _previewutility.DrawMesh(_mesh, Vector3.zero, Quaternion.identity, mesh_mat, 0);
         }
         //draw vertices
         DrawVertex();
         //render preview scene
         _previewutility.Render();
         _render = _previewutility.EndPreview();
         //clear render mesh flag
         _render_mesh = false;
     }
     //return if nothing to draw
     if (_render == null)
     {
         return;
     }
     //draw preview render texture
     GUI.DrawTexture(rect, _render);
     rect = VxlGUI.GetPaddedRect(rect, VxlGUI.MED_PAD);
     _display.DrawGUI(new Rect(rect.x, rect.y, 0.5f * rect.width, 0.5f * rect.height));
 }
Exemple #23
0
        internal static void RenderMeshPreviewSkipCameraAndLighting(Mesh mesh, PreviewRenderUtility previewUtility, Material[] materials)
        {
            if (mesh == null || previewUtility == null)
            {
                return;
            }

            Bounds bounds    = mesh.bounds;
            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;

            Quaternion quaternion = Quaternion.identity;
            Vector3    pos        = -bounds.center;
            bool       fog        = RenderSettings.fog;

            Unsupported.SetRenderSettingsUseFogNoDirty(false);
            int subMeshCount = mesh.subMeshCount;
            int meshSubset   = materials.Length;

            if (materials != null && materials.Length > 0)
            {
                previewUtility.m_Camera.clearFlags = CameraClearFlags.Nothing;
                if (meshSubset < 0 || meshSubset >= subMeshCount)
                {
                    for (int i = 0; i < subMeshCount; i++)
                    {
                        previewUtility.DrawMesh(mesh, pos, quaternion, materials[i], i);
                    }
                }
                else
                {
                    previewUtility.DrawMesh(mesh, pos, quaternion, materials[0], -1);
                }
                previewUtility.m_Camera.Render();
            }
            Unsupported.SetRenderSettingsUseFogNoDirty(fog);
        }
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (!ShaderUtil.hardwareSupportsRectRenderTexture || !SystemInfo.supports3DTextures)
            {
                if (Event.current.type == EventType.Repaint)
                {
                    EditorGUI.DropShadowLabel(new Rect(r.x, r.y, r.width, 40), "3D texture preview not supported");
                }
                return;
            }

            m_PreviewDir = Drag2D(m_PreviewDir, r);

            Event e = Event.current;

            if (e.type == EventType.ScrollWheel)
            {
                zoom = Mathf.Clamp(zoom + e.delta.y * 0.1f, 0.05f, 5f);
                m_PreviewUtility.camera.nearClipPlane = Mathf.Lerp(0.05f, 2, Mathf.InverseLerp(0.05f, 3f, zoom));
                e.Use();
                Repaint();
            }

            if (e.type != EventType.Repaint)
            {
                return;
            }

            InitPreview();

            material3D.mainTexture = target as Texture3D;

            m_PreviewUtility.BeginPreview(r, background);
            bool oldFog = RenderSettings.fog;

            Unsupported.SetRenderSettingsUseFogNoDirty(false);

            var cameraTransform = m_PreviewUtility.camera.transform;

            cameraTransform.position = -Vector3.forward * zoom;

            cameraTransform.rotation = Quaternion.identity;
            Quaternion rot = Quaternion.Euler(m_PreviewDir.y, 0, 0) * Quaternion.Euler(0, m_PreviewDir.x, 0);

            m_PreviewUtility.DrawMesh(Mesh, Vector3.zero, rot, material3D, 0);
            m_PreviewUtility.Render();

            Unsupported.SetRenderSettingsUseFogNoDirty(oldFog);
            m_PreviewUtility.EndAndDrawPreview(r);
            if (continuousRepaint)
            {
                Repaint();
            }
        }
Exemple #25
0
 public void Render(Rect rect, Mesh mesh, Material mat = null)
 {
     if (e.type == EventType.Repaint)
     {
         previewUtility.BeginPreview(rect, GUIStyle.none);
         {
             previewUtility.DrawMesh(mesh, Vector3.zero, Quaternion.identity, mat, 0);
             previewUtility.Render(true, true);
         }
         previewUtility.EndAndDrawPreview(rect);
     }
 }
Exemple #26
0
        public override void OnPreviewGUI(Rect r, GUIStyle background)
        {
            if (Event.current.type == EventType.Repaint)
            {
                _previewRenderUtility.BeginPreview(r, background);



                LevelTiles[] levelTiles = (target as Pattern).gameObject.GetComponentsInChildren <LevelTiles> ();
                for (int i = 0; i < levelTiles.Length; i++)
                {
                    Transform    prefab      = levelTiles[i].levelTilePrefab;
                    MeshFilter[] meshFilters = prefab.GetComponentsInChildren <MeshFilter> ();
                    for (int j = 0; j < meshFilters.Length; j++)
                    {
                        Vector3    scale  = Vector3.Scale(meshFilters [j].transform.lossyScale, levelTiles[i].transform.localScale);
                        Vector3    pos    = levelTiles[i].transform.position + (meshFilters [j].transform.position - meshFilters[j].transform.root.position);
                        Quaternion rot    = Quaternion.Euler(levelTiles[i].transform.rotation.eulerAngles + meshFilters [j].transform.rotation.eulerAngles);
                        Matrix4x4  matrix = Matrix4x4.TRS(pos, rot, scale);

                        Material mat = meshFilters [j].transform.GetComponent <MeshRenderer> ().sharedMaterial;

                        int subMeshCount = meshFilters [j].sharedMesh.subMeshCount;
                        //Debug.Log (subMeshCount);

                        _previewRenderUtility.DrawMesh(meshFilters [j].sharedMesh, matrix, mat, 0);
                    }

                    /**Transform[] childTransforms = prefab.GetComponentsInChildren<Transform> ();
                     * for (int j = 0; j < childTransforms.Length; j++) {
                     *      if (childTransforms [j].GetComponent<MeshFilter> () != null) {
                     *              MeshFilter myMeshFilter = childTransforms [j].GetComponent<MeshFilter> ();
                     *              Vector3 scale = Vector3.Scale(myMeshFilter.transform.lossyScale,levelTiles[i].transform.localScale);
                     *              Vector3 pos = levelTiles[i].transform.position + (myMeshFilter.transform.position - myMeshFilter.transform.root.position);
                     *              Quaternion rot = Quaternion.Euler(levelTiles[i].transform.rotation.eulerAngles + myMeshFilter.transform.rotation.eulerAngles);
                     *              Matrix4x4 matrix = Matrix4x4.TRS (pos, rot, scale);
                     *
                     *              Material mat = myMeshFilter.transform.GetComponent<MeshRenderer> ().sharedMaterial;
                     *
                     *              _previewRenderUtility.DrawMesh (myMeshFilter.sharedMesh, matrix, mat, 0);
                     *      }
                     * }**/
                }



                _previewRenderUtility.camera.Render();

                Texture resultRender = _previewRenderUtility.EndPreview();

                GUI.DrawTexture(r, resultRender, ScaleMode.StretchToFill, false);
            }
        }
Exemple #27
0
        public void Draw(Rect r, GUIStyle background, int tileIndex)
        {
            previewRenderUtility.BeginPreview(r, background);

            DrawPrefab(brush.tiles[tileIndex].prefabs[0].prefab, Vector3.zero, brush.tiles[tileIndex].rotation);

            for (int i = 0; i < brush.tiles[tileIndex].rule.Length; i++)
            {
                int gridIndex = i > 3 ? i + 1 : i;
                int x         = gridIndex % 3;
                int y         = gridIndex / 3;

                Matrix4x4 trs  = Matrix4x4.TRS(new Vector3((x - 1) * brush.size, 0, (y - 1) * brush.size), Quaternion.identity, Vector3.one * brush.size);
                Mesh      mesh = null;

                switch (brush.tiles[tileIndex].rule[i])
                {
                case Brush.NeighborState.Empty:
                    mesh = emptyMesh;
                    break;

                case Brush.NeighborState.Filled:
                    mesh = fillMesh;
                    break;

                case Brush.NeighborState.Undefined:
                    mesh = undefMesh;
                    break;
                }

                previewRenderUtility.DrawMesh(mesh, trs, mat, 0);
            }

            previewRenderUtility.camera.transform.position = Vector3.zero;
            previewRenderUtility.camera.transform.rotation = Quaternion.Euler(new Vector3(-drag.y, -drag.x, 0));
            previewRenderUtility.camera.transform.position = previewRenderUtility.camera.transform.forward * -cameraDistance;
            previewRenderUtility.camera.Render();

            previewRenderUtility.EndAndDrawPreview(r);
        }
        private void AddPreviewMeshFromHeightmap(Terrain terrain, IOnInspectorGUI editContext)
        {
            if (!brushPreview3d.IsValid())
            {
                return;
            }

            int previewSize = 256;

            Texture2D heightmap = brushPreview3d.meshPreviewTexture;
            Mesh      mesh      = brushPreview3d.mesh;
            Material  material  = brushPreview3d.material;

            Bounds bounds = mesh.bounds;

            /* center view:
             * m_PreviewUtility.camera.clearFlags = CameraClearFlags.Color;
             *
             * float halfSize = bounds.extents.magnitude;
             * float distance = 2.0f * halfSize;
             *
             * m_PreviewUtility.camera.transform.position = -Vector3.forward * distance;
             * m_PreviewUtility.camera.transform.rotation = Quaternion.identity;
             * m_PreviewUtility.camera.nearClipPlane = distance - halfSize * 1.1f;
             * m_PreviewUtility.camera.farClipPlane = distance + halfSize * 1.1f;
             *
             * m_PreviewUtility.lights[0].intensity = 1.4f;
             * m_PreviewUtility.lights[0].transform.rotation = Quaternion.Euler(40f, 60f, 0);
             * m_PreviewUtility.lights[1].intensity = 1.4f;
             *
             * //m_PreviewUtility.camera.transform.position += Vector3.up * distance;
             * //m_PreviewUtility.camera.transform.LookAt(bounds.center);
             */

            Rect previewRect = new Rect(0, 0, previewSize, previewSize);

            this.m_PreviewUtility.BeginStaticPreview(previewRect);

            float      angle      = m_BrushRotation;
            Quaternion quaternion = Quaternion.Euler(0f, angle, 0f);
            Vector3    pos        = quaternion * -bounds.center;

            m_PreviewUtility.DrawMesh(mesh, pos, quaternion, material, 0);

            m_PreviewUtility.camera.Render();

            Texture previewImage = this.m_PreviewUtility.EndStaticPreview();

            // draw image as label
            GUILayout.Label(previewImage);
        }
    private void DrawMeshPreview(Rect r, GUIStyle background)
    {
        if (targetMesh == null)
        {
            EditorGUI.DropShadowLabel(r, "Mesh Required");
        }
        else
        {
            // applying camera movement
            meshPreviewUtility.m_Camera.transform.RotateAround(Vector3.zero, Vector3.up, drag.x);
            meshPreviewUtility.m_Camera.transform.RotateAround(Vector3.zero, meshPreviewUtility.m_Camera.transform.right, drag.y);
            meshPreviewUtility.m_Camera.transform.position +=
                meshPreviewUtility.m_Camera.transform.forward * -zoom * meshMaxSize * ZOOM_SPEED +
                meshPreviewUtility.m_Camera.transform.right * -pan.x * meshMaxSize * PAN_SPEED +
                meshPreviewUtility.m_Camera.transform.up * -pan.y * meshMaxSize * PAN_SPEED;

            meshPreviewUtility.BeginPreview(r, background);

            // setting up the lights
            meshPreviewUtility.m_Light[0].intensity          = 1.4f;
            meshPreviewUtility.m_Light[0].transform.rotation = Quaternion.Euler(60f, 0f, 60f);
            meshPreviewUtility.m_Light[0].type    = LightType.Directional;
            meshPreviewUtility.m_Light[0].shadows = LightShadows.Hard;
            InternalEditorUtility.SetCustomLighting(meshPreviewUtility.m_Light, new Color(0.1f, 0.1f, 0.1f, 0f));

            // drawing the inspected mesh
            for (int i = 0; i < targetMesh.subMeshCount; i++)
            {
                Material mat;
                if (targetMeshRenderer.sharedMaterials.Length <= i)
                {
                    mat = defaultMaterial;
                }
                else
                {
                    mat = targetMeshRenderer.sharedMaterials[i];
                    if (mat == null)
                    {
                        mat = defaultMaterial;
                    }
                }

                meshPreviewUtility.DrawMesh(targetMesh, Matrix4x4.identity, mat, i);
            }

            meshPreviewUtility.m_Camera.Render();
            InternalEditorUtility.RemoveCustomLighting();
            meshPreviewUtility.EndAndDrawPreview(r);
        }
    }
        public void DrawMesh(Material overrideMaterial = null, bool sphere = false)
        {
            if (backgroundTexture == null)
            {
                UpdatePreviewBackgroundColor();
            }

            // Make sure all objects are set up properly
            if (previewIsSetUp == false)
            {
                SetupPreview();
            }


            UpdateRenderPath();

            //SetCustomLight(on: true);

            Mesh drawMesh = sphere ? sphereMesh : mesh;

            float      A        = sphere ? rotMeshSphere.y : rotMeshSmooth.y;
            float      B        = sphere ? rotMeshSphere.x : rotMeshSmooth.x;
            Quaternion rotA     = Quaternion.Euler(0f, A, 0f);
            Quaternion rotB     = Quaternion.Euler(B, 0f, 0f);
            Quaternion finalRot = rotA * rotB;

            camPivot.rotation = finalRot;
            float   meshExtents = drawMesh.bounds.extents.magnitude;
            Vector3 pos         = new Vector3(-drawMesh.bounds.center.x, -drawMesh.bounds.center.y, -drawMesh.bounds.center.z);

            cam.transform.localPosition = new Vector3(0f, 0f, -3f * meshExtents);

            int smCount = drawMesh.subMeshCount;

            Material mat = (overrideMaterial == null) ? InternalMaterial : overrideMaterial;

            for (int i = 0; i < smCount; i++)
            {
                previewRenderUtility.DrawMesh(drawMesh, Quaternion.identity * pos, Quaternion.identity, mat, i);
            }
            cam.farClipPlane  = 3f * meshExtents * 2f;
            cam.nearClipPlane = 0.1f;
            cam.fieldOfView   = sphere ? fovSphere : smoothFOV;
            cam.Render();
            if (sphere) // Reset if needed. // TODO: What?
            {
                cam.fieldOfView = smoothFOV;
            }
        }