Exemple #1
0
        public static FDatasmithFacadeTexture ParseTexture(RhinoTextureInfo TextureInfo)
        {
            Texture RhinoTexture = TextureInfo.RhinoTexture;

            if (!TextureInfo.IsSupported())
            {
                return(null);
            }

            FDatasmithFacadeTexture TextureElement = new FDatasmithFacadeTexture(TextureInfo.Name);

            TextureElement.SetLabel(TextureInfo.Label);
            TextureElement.SetFile(TextureInfo.FilePath);
            TextureElement.SetTextureFilter(FDatasmithFacadeTexture.ETextureFilter.Default);
            TextureElement.SetRGBCurve(1);
            TextureElement.SetTextureAddressX(RhinoTexture.WrapU == TextureUvwWrapping.Clamp ? FDatasmithFacadeTexture.ETextureAddress.Clamp : FDatasmithFacadeTexture.ETextureAddress.Wrap);
            TextureElement.SetTextureAddressY(RhinoTexture.WrapV == TextureUvwWrapping.Clamp ? FDatasmithFacadeTexture.ETextureAddress.Clamp : FDatasmithFacadeTexture.ETextureAddress.Wrap);

            FDatasmithFacadeTexture.ETextureMode TextureMode = FDatasmithFacadeTexture.ETextureMode.Diffuse;
            if (RhinoTexture.TextureType == TextureType.Bump)
            {
                TextureMode = FDatasmithFacadeTexture.ETextureMode.Bump;
            }

            TextureElement.SetTextureMode(TextureMode);

            return(TextureElement);
        }
Exemple #2
0
        private static void AddTextureToMaterial(FDatasmithFacadeUEPbrMaterial DSMaterial, RhinoTextureInfo TextureInfo, Color DiffuseColor)
        {
            if (!TextureInfo.IsSupported())
            {
                return;
            }

            Texture RhinoTexture = TextureInfo.RhinoTexture;

            // Extract texture mapping info
            double BlendConstant, BlendA0, BlendA1, BlendA2, BlendA3;

            RhinoTexture.GetAlphaBlendValues(out BlendConstant, out BlendA0, out BlendA1, out BlendA2, out BlendA3);
            FDatasmithFacadeMaterialsUtils.FWeightedMaterialExpressionParameters WeightedExpressionParameters = new FDatasmithFacadeMaterialsUtils.FWeightedMaterialExpressionParameters((float)BlendConstant);
            FDatasmithFacadeMaterialsUtils.FUVEditParameters UVParameters = GetUVParameter(RhinoTexture);

            switch (RhinoTexture.TextureType)
            {
            case TextureType.Bitmap:
            {
                FDatasmithFacadeMaterialExpression TextureExpression = FDatasmithFacadeMaterialsUtils.CreateTextureExpression(DSMaterial, "Diffuse Map", TextureInfo.Name, UVParameters);

                WeightedExpressionParameters.SetColorsRGB(DiffuseColor.R, DiffuseColor.G, DiffuseColor.B, DiffuseColor.A);
                WeightedExpressionParameters.SetExpression(TextureExpression);
                FDatasmithFacadeMaterialExpression Expression = FDatasmithFacadeMaterialsUtils.CreateWeightedMaterialExpression(DSMaterial, "Diffuse Color", WeightedExpressionParameters);

                DSMaterial.GetBaseColor().SetExpression(Expression);
            }
            break;

            case TextureType.Bump:
            {
                FDatasmithFacadeMaterialExpression TextureExpression = FDatasmithFacadeMaterialsUtils.CreateTextureExpression(DSMaterial, "Bump Map", TextureInfo.Name, UVParameters);

                WeightedExpressionParameters.SetExpression(TextureExpression);
                WeightedExpressionParameters.SetTextureMode(FDatasmithFacadeTexture.ETextureMode.Bump);
                FDatasmithFacadeMaterialExpression Expression = FDatasmithFacadeMaterialsUtils.CreateWeightedMaterialExpression(DSMaterial, "Bump Height", WeightedExpressionParameters);

                DSMaterial.GetNormal().SetExpression(Expression);
            }
            break;

            case TextureType.Transparency:
            {
                FDatasmithFacadeMaterialExpression TextureExpression = FDatasmithFacadeMaterialsUtils.CreateTextureExpression(DSMaterial, "Opacity Map", TextureInfo.Name, UVParameters);

                Color BlendColor = Color.White;
                WeightedExpressionParameters.SetColorsRGB(BlendColor.R, BlendColor.G, BlendColor.B, BlendColor.A);
                WeightedExpressionParameters.SetExpression(TextureExpression);
                FDatasmithFacadeMaterialExpression Expression = FDatasmithFacadeMaterialsUtils.CreateWeightedMaterialExpression(DSMaterial, "White", WeightedExpressionParameters);

                DSMaterial.GetOpacity().SetExpression(Expression);
                if (Math.Abs(BlendConstant) > float.Epsilon)
                {
                    DSMaterial.SetBlendMode(/*EBlendMode::BLEND_Translucent*/ 2);
                }
            }
            break;
            }
        }