public override void OnGUI(Rect position, MaterialProperty prop, String label, MaterialEditor editor)
        {
            var guid    = HDUtilsEx.ConvertVector4ToGUID(prop.vectorValue);
            var profile = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid), DiffusionProfileSettingsEx.Type);

            EditorGUI.BeginChangeCheck();
            profile = EditorGUI.ObjectField(position, new GUIContent(label), profile, DiffusionProfileSettingsEx.Type, false);
            if (EditorGUI.EndChangeCheck())
            {
                Vector4 newGuid = Vector4.zero;
                float   hash    = 0;
                if (profile != null)
                {
                    var guid2 = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(profile));
                    newGuid = HDUtilsEx.ConvertGUIDToVector4(guid2);
                    hash    = HDShadowUtilsEx.Asfloat(DiffusionProfileSettingsEx.Hash(profile));
                }
                prop.vectorValue = newGuid;

                var hashField = MaterialEditor.GetMaterialProperty(new UnityEngine.Object[] { editor.target }, m_hashField);
                if (hashField != null)
                {
                    hashField.floatValue = hash;
                }
            }

            if (profile == null)
            {
                prop.vectorValue = Vector4.zero;
            }

            DiffusionProfileMaterialUIEx.DrawDiffusionProfileWarning(profile);
        }
Exemple #2
0
        //public override void OnNodeLayout( DrawInfo drawInfo )
        //{
        //	base.OnNodeLayout( drawInfo );

        //	m_propertyDrawPos = m_remainingBox;
        //	m_propertyDrawPos.width = drawInfo.InvertedZoom * Constants.FLOAT_DRAW_WIDTH_FIELD_SIZE * 2;
        //	m_propertyDrawPos.height = drawInfo.InvertedZoom * Constants.FLOAT_DRAW_HEIGHT_FIELD_SIZE;
        //}

        //public override void DrawGUIControls( DrawInfo drawInfo )
        //{
        //	base.DrawGUIControls( drawInfo );

        //	if( drawInfo.CurrentEventType != EventType.MouseDown )
        //		return;

        //	Rect hitBox = m_remainingBox;
        //	bool insideBox = hitBox.Contains( drawInfo.MousePosition );

        //	if( insideBox )
        //	{
        //		GUI.FocusControl( null );
        //		m_isEditingFields = true;
        //	}
        //	else if( m_isEditingFields && !insideBox )
        //	{
        //		GUI.FocusControl( null );
        //		m_isEditingFields = false;
        //	}
        //}

        //GUIStyle GetStyle( string styleName )
        //{
        //	GUIStyle s = GUI.skin.FindStyle( styleName ) ?? EditorGUIUtility.GetBuiltinSkin( EditorSkin.Inspector ).FindStyle( styleName );
        //	if( s == null )
        //	{
        //		Debug.LogError( "Missing built-in guistyle " + styleName );
        //		s = GUIStyle.none;
        //	}
        //	return s;
        //}

        //public override void Draw( DrawInfo drawInfo )
        //{
        //	base.Draw( drawInfo );

        //	if( !m_isVisible )
        //		return;

        //	var cache = EditorStyles.objectField.fontSize;
        //	EditorStyles.objectField.fontSize = (int)(9 * drawInfo.InvertedZoom);
        //	var style = GetStyle( "ObjectFieldButton" );
        //	var sw = style.stretchWidth;
        //	style.stretchWidth = false;
        //	//style.isHeightDependantOnWidth
        //	style.fixedWidth = (int)( 16 * drawInfo.InvertedZoom );
        //	style.fixedHeight = (int)( 16 * drawInfo.InvertedZoom );
        //	//if( m_isEditingFields && m_currentParameterType != PropertyType.Global )
        //	//{
        //	float labelWidth = EditorGUIUtility.labelWidth;
        //		EditorGUIUtility.labelWidth = 0;

        //		if( m_materialMode && m_currentParameterType != PropertyType.Constant )
        //		{
        //			EditorGUI.BeginChangeCheck();
        //			m_materialValue = EditorGUIObjectField( m_propertyDrawPos, m_materialValue, typeof( DiffusionProfileSettings ), true ) as DiffusionProfileSettings;
        //			if( EditorGUI.EndChangeCheck() )
        //			{
        //				PreviewIsDirty = true;
        //				m_requireMaterialUpdate = true;
        //				if( m_currentParameterType != PropertyType.Constant )
        //					BeginDelayedDirtyProperty();
        //			}
        //		}
        //		else
        //		{
        //			EditorGUI.BeginChangeCheck();
        //			m_defaultValue = EditorGUIObjectField( m_propertyDrawPos, m_defaultValue, typeof( DiffusionProfileSettings ), true ) as DiffusionProfileSettings;
        //			if( EditorGUI.EndChangeCheck() )
        //			{
        //				PreviewIsDirty = true;
        //				BeginDelayedDirtyProperty();
        //			}
        //		}
        //		EditorGUIUtility.labelWidth = labelWidth;

        //	style.fixedWidth = 0;
        //	style.fixedHeight = 0;
        //	style.stretchWidth = sw;
        //	EditorStyles.objectField.fontSize = cache;
        //	//}
        //	//else if( drawInfo.CurrentEventType == EventType.Repaint )
        //	//{
        //	//	bool guiEnabled = GUI.enabled;
        //	//	GUI.enabled = m_currentParameterType != PropertyType.Global;
        //	//	Rect fakeField = m_propertyDrawPos;
        //	//	if( GUI.enabled )
        //	//	{
        //	//		Rect fakeLabel = m_propertyDrawPos;
        //	//		fakeLabel.xMax = fakeField.xMin;
        //	//		EditorGUIUtility.AddCursorRect( fakeLabel, MouseCursor.SlideArrow );
        //	//		EditorGUIUtility.AddCursorRect( fakeField, MouseCursor.Text );
        //	//	}
        //	//	bool currMode = m_materialMode && m_currentParameterType != PropertyType.Constant;
        //	//	var value = currMode ? m_materialValue : m_defaultValue;

        //	//	//if( m_previousValue != value )
        //	//	//{
        //	//	//	m_previousValue = value;
        //	//	// string stuff
        //	//	//}

        //	//	//GUI.Label( fakeField, m_fieldText, UIUtils.MainSkin.textField );
        //	//	GUI.enabled = guiEnabled;
        //	//}
        //}


        public override string GenerateShaderForOutput(int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar)
        {
            base.GenerateShaderForOutput(outputId, ref dataCollector, ignoreLocalvar);

            if (m_currentParameterType != PropertyType.Constant)
            {
                return(PropertyData(dataCollector.PortCategory));
            }

            return(RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash)));
        }
        public override void UpdateMaterial(Material mat)
        {
            base.UpdateMaterial(mat);

            if (UIUtils.IsProperty(m_currentParameterType) && !InsideShaderFunction)
            {
                if (m_materialValue != null)
                {
                    Vector4 asset = HDUtils.ConvertGUIDToVector4(AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_materialValue)));
                    mat.SetVector(m_propertyName + "_asset", asset);
                    mat.SetFloat(m_propertyName, HDShadowUtilsEx.Asfloat(MaterialHash));
                }
            }
        }
        //public override void OnNodeLayout( DrawInfo drawInfo )
        //{
        //	base.OnNodeLayout( drawInfo );

        //	m_propertyDrawPos = m_remainingBox;
        //	m_propertyDrawPos.width = drawInfo.InvertedZoom * Constants.FLOAT_DRAW_WIDTH_FIELD_SIZE * 2;
        //	m_propertyDrawPos.height = drawInfo.InvertedZoom * Constants.FLOAT_DRAW_HEIGHT_FIELD_SIZE;
        //}

        //public override void DrawGUIControls( DrawInfo drawInfo )
        //{
        //	base.DrawGUIControls( drawInfo );

        //	if( drawInfo.CurrentEventType != EventType.MouseDown )
        //		return;

        //	Rect hitBox = m_remainingBox;
        //	bool insideBox = hitBox.Contains( drawInfo.MousePosition );

        //	if( insideBox )
        //	{
        //		GUI.FocusControl( null );
        //		m_isEditingFields = true;
        //	}
        //	else if( m_isEditingFields && !insideBox )
        //	{
        //		GUI.FocusControl( null );
        //		m_isEditingFields = false;
        //	}
        //}

        //GUIStyle GetStyle( string styleName )
        //{
        //	GUIStyle s = GUI.skin.FindStyle( styleName ) ?? EditorGUIUtility.GetBuiltinSkin( EditorSkin.Inspector ).FindStyle( styleName );
        //	if( s == null )
        //	{
        //		Debug.LogError( "Missing built-in guistyle " + styleName );
        //		s = GUIStyle.none;
        //	}
        //	return s;
        //}

        //public override void Draw( DrawInfo drawInfo )
        //{
        //	base.Draw( drawInfo );

        //	if( !m_isVisible )
        //		return;

        //	var cache = EditorStyles.objectField.fontSize;
        //	EditorStyles.objectField.fontSize = (int)(9 * drawInfo.InvertedZoom);
        //	var style = GetStyle( "ObjectFieldButton" );
        //	var sw = style.stretchWidth;
        //	style.stretchWidth = false;
        //	//style.isHeightDependantOnWidth
        //	style.fixedWidth = (int)( 16 * drawInfo.InvertedZoom );
        //	style.fixedHeight = (int)( 16 * drawInfo.InvertedZoom );
        //	//if( m_isEditingFields && m_currentParameterType != PropertyType.Global )
        //	//{
        //	float labelWidth = EditorGUIUtility.labelWidth;
        //		EditorGUIUtility.labelWidth = 0;

        //		if( m_materialMode && m_currentParameterType != PropertyType.Constant )
        //		{
        //			EditorGUI.BeginChangeCheck();
        //			m_materialValue = EditorGUIObjectField( m_propertyDrawPos, m_materialValue, typeof( DiffusionProfileSettings ), true ) as DiffusionProfileSettings;
        //			if( EditorGUI.EndChangeCheck() )
        //			{
        //				PreviewIsDirty = true;
        //				m_requireMaterialUpdate = true;
        //				if( m_currentParameterType != PropertyType.Constant )
        //					BeginDelayedDirtyProperty();
        //			}
        //		}
        //		else
        //		{
        //			EditorGUI.BeginChangeCheck();
        //			m_defaultValue = EditorGUIObjectField( m_propertyDrawPos, m_defaultValue, typeof( DiffusionProfileSettings ), true ) as DiffusionProfileSettings;
        //			if( EditorGUI.EndChangeCheck() )
        //			{
        //				PreviewIsDirty = true;
        //				BeginDelayedDirtyProperty();
        //			}
        //		}
        //		EditorGUIUtility.labelWidth = labelWidth;

        //	style.fixedWidth = 0;
        //	style.fixedHeight = 0;
        //	style.stretchWidth = sw;
        //	EditorStyles.objectField.fontSize = cache;
        //	//}
        //	//else if( drawInfo.CurrentEventType == EventType.Repaint )
        //	//{
        //	//	bool guiEnabled = GUI.enabled;
        //	//	GUI.enabled = m_currentParameterType != PropertyType.Global;
        //	//	Rect fakeField = m_propertyDrawPos;
        //	//	if( GUI.enabled )
        //	//	{
        //	//		Rect fakeLabel = m_propertyDrawPos;
        //	//		fakeLabel.xMax = fakeField.xMin;
        //	//		EditorGUIUtility.AddCursorRect( fakeLabel, MouseCursor.SlideArrow );
        //	//		EditorGUIUtility.AddCursorRect( fakeField, MouseCursor.Text );
        //	//	}
        //	//	bool currMode = m_materialMode && m_currentParameterType != PropertyType.Constant;
        //	//	var value = currMode ? m_materialValue : m_defaultValue;

        //	//	//if( m_previousValue != value )
        //	//	//{
        //	//	//	m_previousValue = value;
        //	//	// string stuff
        //	//	//}

        //	//	//GUI.Label( fakeField, m_fieldText, UIUtils.MainSkin.textField );
        //	//	GUI.enabled = guiEnabled;
        //	//}
        //}


        public override string GenerateShaderForOutput(int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar)
        {
            base.GenerateShaderForOutput(outputId, ref dataCollector, ignoreLocalvar);

            if (m_currentParameterType != PropertyType.Constant)
            {
                return(PropertyData(dataCollector.PortCategory));
            }

#if UNITY_2019_3_OR_NEWER
            return(RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash)));
#else
            return("asfloat(" + DefaultHash.ToString() + ")");
#endif
        }
        public override string GetPropertyValue()
        {
            Vector4 asset = Vector4.zero;

            if (m_defaultValue != null)
            {
                asset = HDUtilsEx.ConvertGUIDToVector4(AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_defaultValue)));
            }
            string assetVec = RoundTrip.ToRoundTrip(asset.x) + ", " + RoundTrip.ToRoundTrip(asset.y) + ", " + RoundTrip.ToRoundTrip(asset.z) + ", " + RoundTrip.ToRoundTrip(asset.w);
            string lineOne  = string.Empty;
            string lineTwo  = string.Empty;

            if (m_defaultInspector)
            {
                lineOne = PropertyAttributes + "[HideInInspector]_DiffusionProfileAsset(\"" + m_propertyInspectorName + "\", Vector) = ( " + assetVec + " )";
                lineTwo = "\n[HideInInspector]_DiffusionProfileHash(\"" + m_propertyInspectorName + "\", Float) = " + RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash));
            }
            else
            {
#if UNITY_2020_2_OR_NEWER
                lineOne = "\n[DiffusionProfile]" + m_propertyName + "(\"" + m_propertyInspectorName + "\", Float) = " + RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash));
                lineTwo = PropertyAttributes + "[HideInInspector]" + m_propertyName + "_Asset(\"" + m_propertyInspectorName + "\", Vector) = ( " + assetVec + " )";
#else
                lineOne = PropertyAttributes + "[ASEDiffusionProfile(" + m_propertyName + ")]" + m_propertyName + "_asset(\"" + m_propertyInspectorName + "\", Vector) = ( " + assetVec + " )";
                lineTwo = "\n[HideInInspector]" + m_propertyName + "(\"" + m_propertyInspectorName + "\", Float) = " + RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash));
#endif
            }

            return(lineOne + lineTwo);
        }
        public override string GetPropertyValue()
        {
            Vector4 asset = Vector4.zero;

            if (m_defaultValue != null)
            {
                asset = HDUtils.ConvertGUIDToVector4(AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_defaultValue)));
            }
            string assetVec = RoundTrip.ToRoundTrip(asset.x) + ", " + RoundTrip.ToRoundTrip(asset.y) + ", " + RoundTrip.ToRoundTrip(asset.z) + ", " + RoundTrip.ToRoundTrip(asset.w);
            string lineOne  = PropertyAttributes + "[ASEDiffusionProfile(" + m_propertyName + ")]" + m_propertyName + "_asset(\"" + m_propertyInspectorName + "\", Vector) = ( " + assetVec + " )";
            string lineTwo  = "\n[HideInInspector]" + m_propertyName + "(\"" + m_propertyInspectorName + "\", Float) = " + RoundTrip.ToRoundTrip(HDShadowUtilsEx.Asfloat(DefaultHash));

            return(lineOne + lineTwo);
        }