Exemplo n.º 1
0
 public void Clear()
 {
     Transform = ccl.Transform.Identity();
     TexByte = null;
     TexFloat = null;
     TexWidth = 0;
     TexHeight = 0;
     Name = "";
     UseAlpha = false;
     Amount = 0.0f;
 }
Exemplo n.º 2
0
        private static void InternalMaterialBitmapFromEvaluator(ShaderBody shader, RenderTexture renderTexture,
                                                                RenderMaterial.StandardChildSlots textureType, Rhino.Geometry.Transform rhinotfm, uint rId, TextureEvaluator actualEvaluator,
                                                                TextureProjectionMode projectionMode, TextureEnvironmentMappingMode envProjectionMode, bool repeat)
        {
            int pheight;
            int pwidth;

            try
            {
                int u, v, w;
                renderTexture.PixelSize(out u, out v, out w);
                pheight = u;
                pwidth  = v;
            }
            catch (Exception)
            {
                pheight = 1024;
                pwidth  = 1024;
            }

            if (pheight == 0 || pwidth == 0)
            {
                pheight = 1024;
                pwidth  = 1024;
            }

            Transform t = new Transform(
                rhinotfm.ToFloatArray(true)
                );

            var isFloat  = renderTexture.IsHdrCapable();
            var isLinear = renderTexture.IsLinear();

            if (isFloat)
            {
                var img = RetrieveFloatsImg(rId, pwidth, pheight, actualEvaluator, false, false, isLinear);
                img.ApplyGamma(shader.Gamma);
                switch (textureType)
                {
                case RenderMaterial.StandardChildSlots.Diffuse:
                    shader.DiffuseTexture.IsLinear = isLinear;
                    shader.DiffuseTexture.TexFloat = img.Data;
                    shader.DiffuseTexture.TexByte  = null;
                    break;

                case RenderMaterial.StandardChildSlots.Bump:
                    shader.BumpTexture.IsLinear = isLinear;
                    shader.BumpTexture.TexFloat = img.Data;
                    shader.BumpTexture.TexByte  = null;
                    break;

                case RenderMaterial.StandardChildSlots.Transparency:
                    shader.TransparencyTexture.IsLinear = isLinear;
                    shader.TransparencyTexture.TexFloat = img.Data;
                    shader.TransparencyTexture.TexByte  = null;
                    break;

                case RenderMaterial.StandardChildSlots.Environment:
                    shader.EnvironmentTexture.IsLinear = isLinear;
                    shader.EnvironmentTexture.TexFloat = img.Data;
                    shader.EnvironmentTexture.TexByte  = null;
                    break;
                }
            }
            else
            {
                var img = RetrieveBytesImg(rId, pwidth, pheight, actualEvaluator, false, false, isLinear);
                img.ApplyGamma(shader.Gamma);
                switch (textureType)
                {
                case RenderMaterial.StandardChildSlots.Diffuse:
                    shader.DiffuseTexture.IsLinear = isLinear;
                    shader.DiffuseTexture.TexFloat = null;
                    shader.DiffuseTexture.TexByte  = img.Data;
                    break;

                case RenderMaterial.StandardChildSlots.Bump:
                    shader.BumpTexture.IsLinear = isLinear;
                    shader.BumpTexture.TexFloat = null;
                    shader.BumpTexture.TexByte  = img.Data;
                    break;

                case RenderMaterial.StandardChildSlots.Transparency:
                    shader.TransparencyTexture.IsLinear = isLinear;
                    shader.TransparencyTexture.TexFloat = null;
                    shader.TransparencyTexture.TexByte  = img.Data;
                    break;

                case RenderMaterial.StandardChildSlots.Environment:
                    shader.EnvironmentTexture.IsLinear = isLinear;
                    shader.EnvironmentTexture.TexFloat = null;
                    shader.EnvironmentTexture.TexByte  = img.Data;
                    break;
                }
            }
            switch (textureType)
            {
            case RenderMaterial.StandardChildSlots.Diffuse:
                shader.DiffuseTexture.TexWidth          = pwidth;
                shader.DiffuseTexture.TexHeight         = pheight;
                shader.DiffuseTexture.ProjectionMode    = projectionMode;
                shader.DiffuseTexture.EnvProjectionMode = envProjectionMode;
                shader.DiffuseTexture.Transform         = t;
                shader.DiffuseTexture.Repeat            = repeat;
                shader.DiffuseTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                break;

            case RenderMaterial.StandardChildSlots.Bump:
                shader.BumpTexture.TexWidth          = pwidth;
                shader.BumpTexture.TexHeight         = pheight;
                shader.BumpTexture.ProjectionMode    = projectionMode;
                shader.BumpTexture.EnvProjectionMode = envProjectionMode;
                shader.BumpTexture.Transform         = t;
                shader.BumpTexture.Repeat            = repeat;
                shader.BumpTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                break;

            case RenderMaterial.StandardChildSlots.Transparency:
                shader.TransparencyTexture.TexWidth          = pwidth;
                shader.TransparencyTexture.TexHeight         = pheight;
                shader.TransparencyTexture.ProjectionMode    = projectionMode;
                shader.TransparencyTexture.EnvProjectionMode = envProjectionMode;
                shader.TransparencyTexture.Transform         = t;
                shader.TransparencyTexture.Repeat            = repeat;
                shader.TransparencyTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                break;

            case RenderMaterial.StandardChildSlots.Environment:
                shader.EnvironmentTexture.TexWidth  = pwidth;
                shader.EnvironmentTexture.TexHeight = pheight;
                // special texture, always set to Environment/Emap
                shader.EnvironmentTexture.ProjectionMode    = TextureProjectionMode.EnvironmentMap;
                shader.EnvironmentTexture.EnvProjectionMode = TextureEnvironmentMappingMode.EnvironmentMap;
                shader.EnvironmentTexture.Transform         = t;
                shader.EnvironmentTexture.Repeat            = repeat;
                shader.EnvironmentTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                break;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Get environment bitmap from texture evaluator
        /// </summary>
        /// <param name="rm"></param>
        /// <param name="teximg"></param>
        /// <param name="gamma"></param>
        /// <param name="floatAsByte"></param>
        /// <param name="planarProjection"></param>
        public static void EnvironmentBitmapFromEvaluator(RenderEnvironment rm, CyclesTextureImage teximg, float gamma, bool planarProjection)
        {
            RenderTexture renderTexture = null;

            if (rm != null)
            {
                renderTexture = rm.FindChild("texture") as RenderTexture;
            }

            if (renderTexture == null)
            {
                teximg.TexByte  = null;
                teximg.TexFloat = null;
                teximg.TexWidth = teximg.TexHeight = 0;
                teximg.Name     = "";
                return;
            }

            var rhinotfm  = renderTexture.LocalMappingTransform;
            var guid      = renderTexture.TypeId;
            var nm        = renderTexture.TypeName;
            var rot       = renderTexture.GetRotation();
            var rep       = renderTexture.GetRepeat();
            var tra       = renderTexture.GetOffset();
            var rId       = renderTexture.RenderHashExclude(TextureRenderHashFlags.ExcludeLocalMapping, "azimuth;altitude;multiplier;rdk-texture-repeat;rdk-texture-offset;rdk-texture-rotation;rdk-texture-adjust-multiplier");
            var azimob    = renderTexture.GetParameter("azimuth");
            var altob     = renderTexture.GetParameter("altitude");
            var multob    = renderTexture.GetParameter("multiplier");
            var multadjob = renderTexture.GetParameter("rdk-texture-adjust-multiplier");
            var mult      = 1.0f;
            var multadj   = 1.0f;

            if (multob != null)
            {
                mult = (float)Convert.ToDouble(multob);
            }
            if (multadjob != null)
            {
                multadj = (float)Convert.ToDouble(multadjob);
            }
            if (azimob != null && altob != null)
            {
                var azi  = Convert.ToDouble(azimob);
                var alti = Convert.ToDouble(altob);
                rhinotfm.M20 = alti;
                rhinotfm.M21 = alti;
                rhinotfm.M22 = azi;
            }
            else
            {
                rhinotfm.M00 = tra.X;
                rhinotfm.M01 = tra.Y;
                rhinotfm.M02 = tra.Z;

                rhinotfm.M10 = rep.X;
                rhinotfm.M11 = rep.Y;
                rhinotfm.M12 = rep.Z;

                rhinotfm.M20 = Rhino.RhinoMath.ToRadians(rot.X);
                rhinotfm.M21 = Rhino.RhinoMath.ToRadians(rot.Y);
                rhinotfm.M22 = Rhino.RhinoMath.ToRadians(rot.Z);
            }

            Transform t = new Transform(
                rhinotfm.ToFloatArray(true)
                );

            var restore = !multadj.FuzzyEquals(1.0f);

            if (restore)
            {
                renderTexture.BeginChange(RenderContent.ChangeContexts.Ignore);
                renderTexture.SetParameter("rdk-texture-adjust-multiplier", 1.0);
            }

            using (var textureEvaluator =
                       renderTexture.CreateEvaluator(
                           RenderTexture.TextureEvaluatorFlags.DisableLocalMapping |
                           RenderTexture.TextureEvaluatorFlags.DisableProjectionChange |
                           RenderTexture.TextureEvaluatorFlags.DisableFiltering
                           ))
            {
                if (textureEvaluator == null)
                {
                    teximg.TexByte  = null;
                    teximg.TexFloat = null;
                    teximg.TexWidth = teximg.TexHeight = 0;
                    teximg.Name     = "";
                    return;
                }
                try
                {
                    int u, v, w;
                    renderTexture.PixelSize(out u, out v, out w);
                    teximg.TexWidth  = u;
                    teximg.TexHeight = v;
                }
                catch (Exception)
                {
                    teximg.TexHeight = teximg.TexWidth = 1024;
                }

                if (teximg.TexHeight == 0 || teximg.TexWidth == 0)
                {
                    teximg.TexHeight = teximg.TexWidth = 1024;
                }

                var isFloat = renderTexture.IsHdrCapable();

                var isLinear = teximg.IsLinear = renderTexture.IsLinear();

                if (isFloat)
                {
                    var img = RetrieveFloatsImg(rId, teximg.TexWidth, teximg.TexHeight, textureEvaluator, true, planarProjection, isLinear);
                    img.ApplyGamma(gamma);
                    teximg.TexFloat = img.Data;
                    teximg.TexByte  = null;
                }
                else
                {
                    var img = RetrieveBytesImg(rId, teximg.TexWidth, teximg.TexHeight, textureEvaluator, true, planarProjection, isLinear);
                    img.ApplyGamma(gamma);
                    teximg.TexByte  = img.Data;
                    teximg.TexFloat = null;
                }
                teximg.Name = rId.ToString(CultureInfo.InvariantCulture);
            }
            if (restore)
            {
                renderTexture.SetParameter("rdk-texture-adjust-multiplier", (double)multadj);
                renderTexture.EndChange();
            }
            teximg.Transform = t;
            teximg.Strength  = mult * multadj;
        }
Exemplo n.º 4
0
        internal override void ParseXml(XmlReader xmlNode)
        {
            Utilities.Instance.get_float4(ins.Vector, xmlNode.GetAttribute("vector"));

            var mat = xmlNode.GetAttribute("matrix");
            var t = new Transform();

            if (Utilities.Instance.get_transform(t, mat)) Transform = t;
        }
Exemplo n.º 5
0
        /// <summary>
        /// Get environment bitmap from texture evaluator
        /// </summary>
        /// <param name="rm"></param>
        /// <param name="teximg"></param>
        /// <param name="gamma"></param>
        /// <param name="floatAsByte"></param>
        /// <param name="planarProjection"></param>
        public static void EnvironmentBitmapFromEvaluator(RenderEnvironment rm, CyclesTextureImage teximg, float gamma, bool floatAsByte, bool planarProjection)
        {
            RenderTexture renderTexture = null;

            if(rm!=null)
                renderTexture = rm.FindChild("texture") as RenderTexture;

            if (renderTexture == null)
            {
                teximg.TexByte = null;
                teximg.TexFloat = null;
                teximg.TexWidth = teximg.TexHeight = 0;
                teximg.Name = "";
                return;
            }

            var rId = renderTexture.RenderHashWithoutLocalMapping;

            var rhinotfm = renderTexture.LocalMappingTransform;

            using (var textureEvaluator = renderTexture.CreateEvaluator(RenderTexture.TextureEvaluatorFlags.DisableLocalMapping))
            {
                if (textureEvaluator == null)
                {
                    teximg.TexByte = null;
                    teximg.TexFloat = null;
                    teximg.TexWidth = teximg.TexHeight = 0;
                    teximg.Name = "";
                    return;
                }
                try
                {
                    int u, v, w;
                    renderTexture.PixelSize(out u, out v, out w);
                    teximg.TexWidth = u;
                    teximg.TexHeight = v;
                }
                catch (Exception)
                {
                    teximg.TexHeight = teximg.TexWidth = 1024;
                }

                if (teximg.TexHeight == 0 || teximg.TexWidth == 0)
                {
                    teximg.TexHeight = teximg.TexWidth = 1024;
                }

                Transform t = new Transform(
                    rhinotfm.ToFloatArray(true)
                    );

                var isFloat = renderTexture.IsHdrCapable();

                var isLinear = teximg.IsLinear = renderTexture.IsLinear();

                if (isFloat && !floatAsByte)
                {
                    var img = RetrieveFloatsImg(rId, teximg.TexWidth, teximg.TexHeight, textureEvaluator, true, planarProjection, isLinear);
                    img.ApplyGamma(gamma);
                    teximg.TexFloat = img.Data;
                    teximg.TexByte = null;
                }
                else
                {
                    var img = RetrieveBytesImg(rId, teximg.TexWidth, teximg.TexHeight, textureEvaluator, true, planarProjection, isLinear);
                    img.ApplyGamma(gamma);
                    teximg.TexByte = img.Data;
                    teximg.TexFloat = null;
                }
                teximg.Name = rId.ToString(CultureInfo.InvariantCulture);

                teximg.Transform = t;
            }
        }
Exemplo n.º 6
0
        private static void InternalMaterialBitmapFromEvaluator(CyclesShader shader, RenderTexture renderTexture,
			RenderMaterial.StandardChildSlots textureType, Rhino.Geometry.Transform rhinotfm, uint rId, TextureEvaluator actualEvaluator,
			TextureProjectionMode projectionMode, TextureEnvironmentMappingMode envProjectionMode)
        {
            int pheight;
            int pwidth;
            try
            {
                int u, v, w;
                renderTexture.PixelSize(out u, out v, out w);
                pheight = u;
                pwidth = v;
            }
            catch (Exception)
            {
                pheight = 1024;
                pwidth = 1024;
            }

            if (pheight == 0 || pwidth == 0)
            {
                pheight = 1024;
                pwidth = 1024;
            }

            Transform t = new Transform(
                rhinotfm.ToFloatArray(true)
                );

            var isFloat = renderTexture.IsHdrCapable();
            var isLinear = renderTexture.IsLinear();

            if (isFloat)
            {
                var img = RetrieveFloatsImg(rId, pwidth, pheight, actualEvaluator, false, false, isLinear);
                img.ApplyGamma(shader.Gamma);
                switch (textureType)
                {
                    case RenderMaterial.StandardChildSlots.Diffuse:
                        shader.DiffuseTexture.IsLinear = isLinear;
                        shader.DiffuseTexture.TexFloat = img.Data;
                        shader.DiffuseTexture.TexByte = null;
                        break;
                    case RenderMaterial.StandardChildSlots.Bump:
                        shader.BumpTexture.IsLinear = isLinear;
                        shader.BumpTexture.TexFloat = img.Data;
                        shader.BumpTexture.TexByte = null;
                        break;
                    case RenderMaterial.StandardChildSlots.Transparency:
                        shader.TransparencyTexture.IsLinear = isLinear;
                        shader.TransparencyTexture.TexFloat = img.Data;
                        shader.TransparencyTexture.TexByte = null;
                        break;
                    case RenderMaterial.StandardChildSlots.Environment:
                        shader.EnvironmentTexture.IsLinear = isLinear;
                        shader.EnvironmentTexture.TexFloat = img.Data;
                        shader.EnvironmentTexture.TexByte = null;
                        break;
                }
            }
            else
            {
                var img = RetrieveBytesImg(rId, pwidth, pheight, actualEvaluator, false, false, isLinear);
                img.ApplyGamma(shader.Gamma);
                switch (textureType)
                {
                    case RenderMaterial.StandardChildSlots.Diffuse:
                        shader.DiffuseTexture.IsLinear = isLinear;
                        shader.DiffuseTexture.TexFloat = null;
                        shader.DiffuseTexture.TexByte = img.Data;
                        break;
                    case RenderMaterial.StandardChildSlots.Bump:
                        shader.BumpTexture.IsLinear = isLinear;
                        shader.BumpTexture.TexFloat = null;
                        shader.BumpTexture.TexByte = img.Data;
                        break;
                    case RenderMaterial.StandardChildSlots.Transparency:
                        shader.TransparencyTexture.IsLinear = isLinear;
                        shader.TransparencyTexture.TexFloat = null;
                        shader.TransparencyTexture.TexByte = img.Data;
                        break;
                    case RenderMaterial.StandardChildSlots.Environment:
                        shader.EnvironmentTexture.IsLinear = isLinear;
                        shader.EnvironmentTexture.TexFloat = null;
                        shader.EnvironmentTexture.TexByte = img.Data;
                        break;
                }
            }
            switch (textureType)
            {
                case RenderMaterial.StandardChildSlots.Diffuse:
                    shader.DiffuseTexture.TexWidth = pwidth;
                    shader.DiffuseTexture.TexHeight = pheight;
                    shader.DiffuseTexture.ProjectionMode = projectionMode;
                    shader.DiffuseTexture.EnvProjectionMode = envProjectionMode;
                    shader.DiffuseTexture.Transform = t;
                    shader.DiffuseTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                    break;
                case RenderMaterial.StandardChildSlots.Bump:
                    shader.BumpTexture.TexWidth = pwidth;
                    shader.BumpTexture.TexHeight = pheight;
                    shader.BumpTexture.ProjectionMode = projectionMode;
                    shader.BumpTexture.EnvProjectionMode = envProjectionMode;
                    shader.BumpTexture.Transform = t;
                    shader.BumpTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                    break;
                case RenderMaterial.StandardChildSlots.Transparency:
                    shader.TransparencyTexture.TexWidth = pwidth;
                    shader.TransparencyTexture.TexHeight = pheight;
                    shader.TransparencyTexture.ProjectionMode = projectionMode;
                    shader.TransparencyTexture.EnvProjectionMode = envProjectionMode;
                    shader.TransparencyTexture.Transform = t;
                    shader.TransparencyTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                    break;
                case RenderMaterial.StandardChildSlots.Environment:
                    shader.EnvironmentTexture.TexWidth = pwidth;
                    shader.EnvironmentTexture.TexHeight = pheight;
                    // special texture, always set to Environment/Emap
                    shader.EnvironmentTexture.ProjectionMode = TextureProjectionMode.EnvironmentMap;
                    shader.EnvironmentTexture.EnvProjectionMode = TextureEnvironmentMappingMode.EnvironmentMap;
                    shader.EnvironmentTexture.Transform = t;
                    shader.EnvironmentTexture.Name = rId.ToString(CultureInfo.InvariantCulture);
                    break;
            }
        }