Пример #1
0
    private void RemoveRedundantOverrides()
    {
        List <NPVoxCoord> overridesToRemove = new List <NPVoxCoord>();

        NPVoxNormalProcessor_UserOverride processor = ( NPVoxNormalProcessor_UserOverride )m_context.ViewedProcessor;
        NPVoxNormalProcessor previous = m_context.MeshOutput.NormalProcessors.GetPreviousInList(processor);

        foreach (NPVoxMeshData vox in m_context.MeshOutput.GetVoxMeshData())
        {
            if (!vox.isHidden)
            {
                Vector3 normal = Vector3.zero;
                if (previous != null)
                {
                    normal = previous.GetOutput()[vox.vertexIndexOffsetBegin];
                }

                if (processor.m_overrideNormalsRT.ContainsKey(vox.voxCoord) && processor.m_overrideNormalsRT[vox.voxCoord] == normal)
                {
                    overridesToRemove.Add(vox.voxCoord);
                }
            }
        }

        foreach (NPVoxCoord i in overridesToRemove)
        {
            processor.m_overrideNormalsRT.Remove(i);
        }
    }
Пример #2
0
    private void InitMeshNormals()
    {
        NPVoxMeshData[]      voxMeshData       = m_context.MeshOutput.GetVoxMeshData();
        NPVoxNormalProcessor previousProcessor = m_context.MeshOutput.NormalProcessors.GetPreviousInList(m_context.ViewedProcessor);

        Vector3[] normals = null;

        if (previousProcessor == null || !previousProcessor.IsOutputValid())
        {
            normals = new Vector3[m_context.PreviewMesh.normals.Length];
            for (int i = 0; i < normals.Length; i++)
            {
                normals[i] = Vector3.zero;
            }

            if (previousProcessor != null)
            {
                m_context.MeshOutput.NormalProcessors.Run(m_context.MeshOutput.GetVoxModel(), voxMeshData, normals, normals, previousProcessor);
            }
        }
        else
        {
            normals = previousProcessor.GetOutputCopy();
        }

        m_context.ViewedProcessor.InitOutputBuffer(normals.Length);
        m_context.ViewedProcessor.Process(m_context.MeshOutput.GetVoxModel(), voxMeshData, normals, normals);
        Vector3[] meshNormals = m_context.PreviewMesh.normals;
        for (int i = 0; i < meshNormals.Length; i++)
        {
            meshNormals[i] = normals[i];
        }
        m_context.PreviewMesh.normals = meshNormals;
    }
Пример #3
0
    public void DestroyProcessor(NPVoxNormalProcessor processor)
    {
        m_processorList.Remove(processor);

        processor.Passes.Clear();

        ScriptableObject.DestroyImmediate(processor, true);
        UnityEditor.EditorUtility.SetDirty(this);
    }
Пример #4
0
    public void MoveProcessorUp(NPVoxNormalProcessor processor)
    {
        int index = m_processorList.FindIndex(item => item == processor);

        if (index > 0)
        {
            m_processorList.Remove(processor);
            m_processorList.Insert(index - 1, processor);
            UnityEditor.EditorUtility.SetDirty(this);
        }
    }
Пример #5
0
    public void MoveProcessorDown(NPVoxNormalProcessor processor)
    {
        int index = m_processorList.FindIndex(item => item == processor);

        if (index >= 0 && index < m_processorList.Count - 1)
        {
            m_processorList.Remove(processor);
            m_processorList.Insert(index + 1, processor);
            UnityEditor.EditorUtility.SetDirty(this);
        }
    }
    public NPVoxNormalProcessor AddProcessor(Type processorType)
    {
        NPVoxNormalProcessor newProcessor = ScriptableObject.CreateInstance(processorType) as NPVoxNormalProcessor;

        if (!newProcessor)
        {
            Debug.LogError("NPVoxNormalProcessorList: Type parameter '" + processorType.ToString() + "' is not a subclass of NPVoxNormalProcessor!");
            return(null);
        }

        m_processorList.Add(newProcessor);
        newProcessor.hideFlags = HideFlags.HideInHierarchy;

        return(newProcessor);
    }
    public NPVoxNormalProcessor GetPreviousInList(NPVoxNormalProcessor _processor)
    {
        NPVoxNormalProcessor previous = null;

        foreach (NPVoxNormalProcessor processor in m_processorList)
        {
            if (processor == _processor)
            {
                return(previous);
            }

            previous = processor;
        }
        return(previous);
    }
Пример #8
0
    public virtual void SetContext(NPVoxNormalProcessorPreviewContext _context)
    {
        if (m_context != null)
        {
            m_context.Invalidate();
        }

        m_context = _context;
        NPVoxNormalProcessor processor = m_context.ViewedProcessor;
        NPVoxAttributeNormalProcessorListItem listItemAttribute = NPipeReflectionUtil.GetAttribute <NPVoxAttributeNormalProcessorListItem>(processor);

        m_title = listItemAttribute.EditorName;

        InitScene();
    }
    public void Set(NPVoxMeshOutput _meshOutput, NPVoxNormalProcessor _processor)
    {
        MeshOutput      = _meshOutput;
        ViewedProcessor = _processor;
        PreviewObject   = MeshOutput.Instatiate();

        VoxToUnity = new NPVoxToUnity(MeshOutput.GetVoxModel(), MeshOutput.VoxelSize);

        MeshFilter mf = PreviewObject.GetComponent <MeshFilter>();

        PreviewMesh   = Mesh.Instantiate <Mesh>(mf.sharedMesh);
        mf.sharedMesh = PreviewMesh;

        PreviewObject.hideFlags = HideFlags.HideAndDontSave;
        PreviewObject.SetActive(false);
        IsValid = true;
    }
    public NPVoxNormalProcessor GetNextInList(NPVoxNormalProcessor _processor)
    {
        NPVoxNormalProcessor previous = null;

        foreach (NPVoxNormalProcessor processor in m_processorList)
        {
            if (previous != null)
            {
                return(processor);
            }

            if (processor == _processor)
            {
                previous = processor;
            }
        }

        return(null);
    }
    public void MoveProcessorBack(NPVoxNormalProcessor processor)
    {
        int index = m_processorList.FindIndex(item => item == processor);

        if (index > 0)
        {
            m_processorList.Remove(processor);
            m_processorList.Insert(index - 1, processor);
            UnityEditor.EditorUtility.SetDirty(this);
        }

        bool bInform = false;

        foreach (NPVoxNormalProcessor p in m_processorList)
        {
            if (bInform || p == processor)
            {
                bInform = true;
                p.OnListChanged(this);
            }
        }
    }
    public void MoveProcessorForward(NPVoxNormalProcessor processor)
    {
        int index = m_processorList.FindIndex(item => item == processor);

        if (index >= 0 && index < m_processorList.Count - 1)
        {
            m_processorList.Remove(processor);
            m_processorList.Insert(index + 1, processor);
            UnityEditor.EditorUtility.SetDirty(this);
        }

        NPVoxNormalProcessor previous = GetPreviousInList(processor);
        bool bInform = false;

        foreach (NPVoxNormalProcessor p in m_processorList)
        {
            if (bInform || previous == null || p == previous)
            {
                bInform = true;
                p.OnListChanged(this);
            }
        }
    }
    public void DestroyProcessor(NPVoxNormalProcessor processor)
    {
        NPVoxNormalProcessor next = GetNextInList(processor);

        m_processorList.Remove(processor);

        processor.Passes.Clear();

        if (next != null)
        {
            bool bInform = false;
            foreach (NPVoxNormalProcessor p in m_processorList)
            {
                if (bInform || p == next)
                {
                    bInform = true;
                    p.OnListChanged(this);
                }
            }
        }

        ScriptableObject.DestroyImmediate(processor, true);
        UnityEditor.EditorUtility.SetDirty(this);
    }
Пример #14
0
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        NPVoxMeshOutput          target        = property.serializedObject.targetObject as NPVoxMeshOutput;
        NPVoxNormalProcessorList processorList = target.NormalProcessors;

        EditorGUI.BeginProperty(position, label, property);
        // Customize gui style
        Color previousBGColor = GUI.backgroundColor;
        Color previousFGColor = GUI.contentColor;

        GUI.backgroundColor = s_colorBackgroundGUIPrimary;
        GUI.backgroundColor = s_colorBackgroundGUIPrimary;
        // GUI.contentColor = s_colorForegroundGUI; // Doesn't seem to work

        // Header + Expand / Collapse Button
        GUILayout.BeginHorizontal();
        GUILayout.Label("Normal Processors (" + processorList.GetProcessors().Count + ")", GUILayout.Width(s_widthHeaderLabel));

        if (!m_expanded)
        {
            if (GUILayout.Button("Expand", GUILayout.Width(s_widthExpandButton)))
            {
                m_expanded = true;
            }
        }
        else
        {
            if (GUILayout.Button("Collapse", GUILayout.Width(s_widthExpandButton)))
            {
                m_expanded = false;
            }
        }

        GUILayout.EndHorizontal();

        if (!m_expanded)
        {
            GUILayout.Space(12.0f);
        }

        // List management
        if (m_expanded)
        {
            Dictionary <string, System.Type> processorClasses = new Dictionary <string, System.Type>();
            processorClasses.Add("<None>", null);
            List <System.Type> allTypes = new List <System.Type>(NPipeReflectionUtil.GetAllTypesWithAttribute(typeof(NPVoxAttributeNormalProcessorListItem)));
            allTypes = allTypes.OrderBy(x => (( NPVoxAttributeNormalProcessorListItem )x.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0]).ListPriority).ToList();
            foreach (System.Type factoryType in allTypes)
            {
                NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )factoryType.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0];

                if (attr.ClassType.BaseType != typeof(NPVoxNormalProcessor))
                {
                    continue;
                }

                processorClasses.Add(attr.EditorName, factoryType);
            }

            string[] processorKeys = processorClasses.Keys.ToArray();

            GUILayout.BeginHorizontal();
            GUILayout.Space(s_widthTab);
            m_indexPopupAddProcessor = EditorGUILayout.Popup(m_indexPopupAddProcessor, processorKeys);
            bool optionAdded = GUILayout.Button("Add");
            GUILayout.EndHorizontal();

            if (optionAdded)
            {
                System.Type processorClass = processorClasses[processorKeys[m_indexPopupAddProcessor]];
                if (processorClass != null)
                {
                    if (UnityEditor.AssetDatabase.GetAssetPath(processorList).Length == 0)
                    {
                        target.IncludeSubAssets(UnityEditor.AssetDatabase.GetAssetPath(target));
                    }
                    processorList.AddProcessor(processorClass)
                    .AddToAsset(UnityEditor.AssetDatabase.GetAssetPath(target));
                }
            }

            NPVoxNormalProcessor itemToMoveBack    = null;
            NPVoxNormalProcessor itemToMoveForward = null;

            foreach (NPVoxNormalProcessor processor in processorList.GetProcessors())
            {
                NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )processor.GetType().GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0];

                GUILayout.Space(s_verticalSpacePerItem);

                GUILayout.BeginHorizontal();
                GUILayout.Space(s_widthTab);
                GUILayout.Label(attr.EditorName, GUILayout.MinWidth(s_widthMinItemName));

                GUILayout.Space(20.0f);

                GUI.backgroundColor = s_colorBackgroundGUISecondary;

                if (GUILayout.Button("View / Edit"))
                {
                    NPVoxNormalProcessorPreview preview = NPVoxNormalProcessorPreview.ShowWindow(processor.GetType());
                    preview.SetContext(processor.GeneratePreviewContext(target));
                }

                GUILayout.Space(20.0f);

                if (GUILayout.Button("^", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    itemToMoveBack = processor;
                }

                if (GUILayout.Button("v", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    itemToMoveForward = processor;
                }

                if (GUILayout.Button("X", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true)))
                {
                    processorList.DestroyProcessor(processor);
                    break;
                }

                GUI.backgroundColor = s_colorBackgroundGUIPrimary;

                GUILayout.EndHorizontal();

                processor.OnGUI();
                GUILayout.Space(10.0f);
            }

            if (itemToMoveBack)
            {
                processorList.MoveProcessorBack(itemToMoveBack);
                itemToMoveBack = null;
            }

            if (itemToMoveForward)
            {
                processorList.MoveProcessorForward(itemToMoveForward);
                itemToMoveForward = null;
            }

            GUILayout.Space(s_verticalSpaceEnd);
        }

        // Restore previous gui style
        GUI.backgroundColor = previousBGColor;
        GUI.contentColor    = previousFGColor;

        EditorGUI.EndProperty();
    }
    public void Run(NPVoxModel model, NPVoxMeshData[] tempdata, Vector3[] inNormals, Vector3[] outNormals, NPVoxNormalProcessor end)
    {
        inNormals.CopyTo(outNormals, 0);

        foreach (NPVoxNormalProcessor processor in m_processorList)
        {
            processor.InitOutputBuffer(inNormals.Length);
            processor.Process(model, tempdata, outNormals, outNormals);
            if (processor == end)
            {
                break;
            }
        }
    }