コード例 #1
0
        private bool CreateShaderPart(ShaderBody shb, RenderMaterial rm, float gamma)
        {
            var crm = rm as ICyclesMaterial;

            ShaderBody.CyclesMaterial mattype = ShaderBody.CyclesMaterial.No;
            if (crm == null)
            {
                // always simulate material, need to know now myself
                // what to read out from the simulated material to
                // populate my own material descriptions.
                var m = rm.SimulateMaterial(true);
                // figure out what type of material we are.
                //var probemat = GuessMaterialFromSmell(rm);
                var probemat = WhatMaterial(rm, m);

                rm.BeginChange(RenderContent.ChangeContexts.Ignore);
                var dcl          = m.DiffuseColor;
                var scl          = m.SpecularColor;
                var rcl          = m.ReflectionColor;
                var rfcl         = m.TransparentColor;
                var emcl         = m.EmissionColor;
                var polish       = (float)m.ReflectionGlossiness;
                var reflectivity = (float)m.Reflectivity;
                var metalic      = 0f;
                var shine        = (float)(m.Shine / Material.MaxShine);

                switch (probemat)
                {
                case ProbableMaterial.Plaster:
                    mattype = ShaderBody.CyclesMaterial.Diffuse;
                    break;

                case ProbableMaterial.Glass:
                case ProbableMaterial.Gem:
                    metalic = 0f;
                    mattype = ShaderBody.CyclesMaterial.Glass;
                    break;

                case ProbableMaterial.Metal:
                    metalic = 1.0f;
                    mattype = ShaderBody.CyclesMaterial.SimpleMetal;
                    break;

                case ProbableMaterial.Plastic:
                    //polish = reflectivity;
                    //shine = polish;
                    //reflectivity = 0f;
                    metalic = 0f;
                    mattype = ShaderBody.CyclesMaterial.SimplePlastic;
                    break;

                case ProbableMaterial.Paint:
                    mattype = ShaderBody.CyclesMaterial.Paint;
                    break;

                case ProbableMaterial.Custom:
                    mattype = ShaderBody.CyclesMaterial.No;
                    break;
                }

                var difftexAlpha = m.AlphaTransparency;

                var col    = RenderEngine.CreateFloat4(dcl.R, dcl.G, dcl.B, 255);
                var spec   = RenderEngine.CreateFloat4(scl.R, scl.G, scl.B, 255);
                var refl   = RenderEngine.CreateFloat4(rcl.R, rcl.G, rcl.B, 255);
                var transp = RenderEngine.CreateFloat4(rfcl.R, rfcl.G, rfcl.B, 255);
                var refr   = RenderEngine.CreateFloat4(rfcl.R, rfcl.G, rfcl.B, 255);
                var emis   = RenderEngine.CreateFloat4(emcl.R, emcl.G, emcl.B, 255);

                //shb.Type = CyclesShader.Shader.Diffuse,
                shb.CyclesMaterialType = mattype;

                shb.Shadeless = m.DisableLighting;

                shb.DiffuseColor        = col;
                shb.SpecularColor       = spec;
                shb.ReflectionColor     = refl;
                shb.ReflectionRoughness = (float)m.ReflectionGlossiness;                 // polish;
                shb.RefractionColor     = refr;
                shb.RefractionRoughness = (float)m.RefractionGlossiness;
                shb.TransparencyColor   = transp;
                shb.EmissionColor       = emis;


                shb.FresnelIOR   = (float)m.FresnelIndexOfRefraction;
                shb.IOR          = (float)m.IndexOfRefraction;
                shb.Roughness    = (float)m.ReflectionGlossiness;
                shb.Reflectivity = reflectivity;
                shb.Metalic      = metalic;
                shb.Transparency = (float)m.Transparency;
                shb.Shine        = shine;
                shb.Gloss        = (float)m.ReflectionGlossiness;

                shb.FresnelReflections = m.FresnelReflections;

                shb.Gamma = gamma;

                shb.Name = m.Name ?? "";

                shb.DiffuseTexture.Amount      = 0.0f;
                shb.BumpTexture.Amount         = 0.0f;
                shb.TransparencyTexture.Amount = 0.0f;
                shb.EnvironmentTexture.Amount  = 0.0f;

                if (rm.GetTextureOnFromUsage(RenderMaterial.StandardChildSlots.Diffuse))
                {
                    var difftex = rm.GetTextureFromUsage(RenderMaterial.StandardChildSlots.Diffuse);

                    BitmapConverter.MaterialBitmapFromEvaluator(ref shb, rm, difftex, RenderMaterial.StandardChildSlots.Diffuse);
                    if (shb.HasDiffuseTexture)
                    {
                        shb.DiffuseTexture.UseAlpha = difftexAlpha;
                        shb.DiffuseTexture.Amount   = (float)Math.Min(rm.GetTextureAmountFromUsage(RenderMaterial.StandardChildSlots.Diffuse) / 100.0f, 1.0f);
                    }
                }

                if (rm.GetTextureOnFromUsage(RenderMaterial.StandardChildSlots.Bump))
                {
                    var bumptex = rm.GetTextureFromUsage(RenderMaterial.StandardChildSlots.Bump);
                    BitmapConverter.MaterialBitmapFromEvaluator(ref shb, rm, bumptex, RenderMaterial.StandardChildSlots.Bump);
                    if (shb.HasBumpTexture)
                    {
                        shb.BumpTexture.Amount = (float)Math.Min(rm.GetTextureAmountFromUsage(RenderMaterial.StandardChildSlots.Bump) / 100.0f, 1.0f);
                    }
                }

                if (rm.GetTextureOnFromUsage(RenderMaterial.StandardChildSlots.Transparency))
                {
                    var transtex = rm.GetTextureFromUsage(RenderMaterial.StandardChildSlots.Transparency);
                    BitmapConverter.MaterialBitmapFromEvaluator(ref shb, rm, transtex,
                                                                RenderMaterial.StandardChildSlots.Transparency);
                    if (shb.HasTransparencyTexture)
                    {
                        shb.TransparencyTexture.Amount = (float)Math.Min(rm.GetTextureAmountFromUsage(RenderMaterial.StandardChildSlots.Transparency) / 100.0f, 1.0f);
                    }
                }

                if (rm.GetTextureOnFromUsage(RenderMaterial.StandardChildSlots.Environment))
                {
                    var envtex = rm.GetTextureFromUsage(RenderMaterial.StandardChildSlots.Environment);
                    BitmapConverter.MaterialBitmapFromEvaluator(ref shb, rm, envtex,
                                                                RenderMaterial.StandardChildSlots.Environment);
                    if (shb.HasEnvironmentTexture)
                    {
                        shb.EnvironmentTexture.Amount = (float)Math.Min(rm.GetTextureAmountFromUsage(RenderMaterial.StandardChildSlots.Environment) / 100.0f, 1.0f);
                    }
                }

                rm.EndChange();
            }
            else
            {
                crm.BakeParameters();
                shb.Crm = crm;
                shb.CyclesMaterialType = ShaderBody.CyclesMaterial.Xml;
                shb.Gamma = gamma;
                shb.Name  = rm.Name ?? "some cycles material";
            }
            return(true);
        }
コード例 #2
0
 private void Mre_StatusTextUpdated(object sender, RenderEngine.StatusTextEventArgs e)
 {
     _progress = e.Progress;
 }
コード例 #3
0
        void CyclesStatusTextUpdated(object sender, RenderEngine.StatusTextEventArgs e)
        {
            _samples = e.Samples;

            _status = _samples < 0 ? "Updating Engine" : "";
        }
コード例 #4
0
 private void CyclesSamplesChanged(object sender, RenderEngine.SamplesChangedEventArgs e)
 {
     ChangeSamples(e.Count);
 }
コード例 #5
0
        /// <summary>
        /// create a ccl.Scene
        /// </summary>
        /// <param name="client">Client to create scene for</param>
        /// <param name="render_device">Render device to use</param>
        /// <param name="cycles_engine">Engine instance to create for</param>
        /// <returns></returns>
        protected static Scene CreateScene(Client client, Device render_device,
                                           RenderEngine cycles_engine)
        {
            #region set up scene parameters
            var scene_params = new SceneParameters(client, ShadingSystem.SVM, BvhType.Static, false, render_device.IsCpu, false);
            #endregion

            #region create scene
            var scene = new Scene(client, scene_params, render_device)
            {
                #region integrator settings
                Integrator =
                {
                    MaxBounce               = RcCore.It.EngineSettings.MaxBounce,
                    TransparentMaxBounce    = RcCore.It.EngineSettings.TransparentMaxBounce,
                    MaxDiffuseBounce        = RcCore.It.EngineSettings.MaxDiffuseBounce,
                    MaxGlossyBounce         = RcCore.It.EngineSettings.MaxGlossyBounce,
                    MaxTransmissionBounce   = RcCore.It.EngineSettings.MaxTransmissionBounce,
                    MaxVolumeBounce         = RcCore.It.EngineSettings.MaxVolumeBounce,
                    NoCaustics              = RcCore.It.EngineSettings.NoCaustics,
                    DiffuseSamples          = RcCore.It.EngineSettings.DiffuseSamples,
                    GlossySamples           = RcCore.It.EngineSettings.GlossySamples,
                    TransmissionSamples     = RcCore.It.EngineSettings.TransmissionSamples,
                    AoSamples               = RcCore.It.EngineSettings.AoSamples,
                    MeshLightSamples        = RcCore.It.EngineSettings.MeshLightSamples,
                    SubsurfaceSamples       = RcCore.It.EngineSettings.SubsurfaceSamples,
                    VolumeSamples           = RcCore.It.EngineSettings.VolumeSamples,
                    AaSamples               = RcCore.It.EngineSettings.AaSamples,
                    FilterGlossy            = RcCore.It.EngineSettings.FilterGlossy,
                    IntegratorMethod        = RcCore.It.EngineSettings.IntegratorMethod,
                    SampleAllLightsDirect   = RcCore.It.EngineSettings.SampleAllLights,
                    SampleAllLightsIndirect = RcCore.It.EngineSettings.SampleAllLightsIndirect,
                    SampleClampDirect       = RcCore.It.EngineSettings.SampleClampDirect,
                    SampleClampIndirect     = RcCore.It.EngineSettings.SampleClampIndirect,
                    LightSamplingThreshold  = RcCore.It.EngineSettings.LightSamplingThreshold,
                    SamplingPattern         = SamplingPattern.CMJ,
                    Seed      = RcCore.It.EngineSettings.Seed,
                    NoShadows = RcCore.It.EngineSettings.NoShadows,
                }

                #endregion
            };

            scene.Film.SetFilter(FilterType.Gaussian, 1.5f);
            scene.Film.Exposure = 1.0f;
            scene.Film.Update();

            #endregion

            #region background shader

            // we add here a simple background shader. This will be repopulated with
            // other nodes whenever background changes are detected.
            var background_shader = new Shader(client, Shader.ShaderType.World)
            {
                Name = "Rhino Background"
            };

            var bgnode = new BackgroundNode("orig bg");
            bgnode.ins.Color.Value    = new float4(0.7f);
            bgnode.ins.Strength.Value = 1.0f;

            background_shader.AddNode(bgnode);
            bgnode.outs.Background.Connect(background_shader.Output.ins.Surface);
            background_shader.FinalizeGraph();

            scene.AddShader(background_shader);

            scene.Background.Shader     = background_shader;
            scene.Background.AoDistance = 0.0f;
            scene.Background.AoFactor   = 0.0f;
            scene.Background.Visibility = PathRay.AllVisibility;

            #endregion

            return(scene);
        }
コード例 #6
0
        /// <summary>
        /// create a ccl.Scene
        /// </summary>
        /// <param name="client">Client to create scene for</param>
        /// <param name="render_device">Render device to use</param>
        /// <param name="cycles_engine">Engine instance to create for</param>
        /// <returns></returns>
        protected static Scene CreateScene(Client client, Device render_device,
			RenderEngine cycles_engine)
        {
            #region set up scene parameters
            var scene_params = new SceneParameters(client, ShadingSystem.SVM, BvhType.Dynamic, false, false, false);
            #endregion

            #region create scene
            var scene = new Scene(client, scene_params, render_device)
            {
                #region integrator settings
                Integrator =
                {
                    MaxBounce = cycles_engine.Settings.MaxBounce,
                    MinBounce = cycles_engine.Settings.MinBounce,
                    TransparentMinBounce = cycles_engine.Settings.TransparentMinBounce,
                    TransparentMaxBounce = cycles_engine.Settings.TransparentMaxBounce,
                    MaxDiffuseBounce = cycles_engine.Settings.MaxDiffuseBounce,
                    MaxGlossyBounce = cycles_engine.Settings.MaxGlossyBounce,
                    MaxTransmissionBounce = cycles_engine.Settings.MaxTransmissionBounce,
                    MaxVolumeBounce = cycles_engine.Settings.MaxVolumeBounce,
                    NoCaustics = cycles_engine.Settings.NoCaustics,
                    TransparentShadows = cycles_engine.Settings.TransparentShadows,
                    DiffuseSamples = cycles_engine.Settings.DiffuseSamples,
                    GlossySamples = cycles_engine.Settings.GlossySamples,
                    TransmissionSamples = cycles_engine.Settings.TransmissionSamples,
                    AoSamples = cycles_engine.Settings.AoSamples,
                    MeshLightSamples = cycles_engine.Settings.MeshLightSamples,
                    SubsurfaceSamples = cycles_engine.Settings.SubsurfaceSamples,
                    VolumeSamples = cycles_engine.Settings.VolumeSamples,
                    AaSamples = cycles_engine.Settings.AaSamples,
                    FilterGlossy = cycles_engine.Settings.FilterGlossy,
                    IntegratorMethod = cycles_engine.Settings.IntegratorMethod,
                    SampleAllLightsDirect = cycles_engine.Settings.SampleAllLights,
                    SampleAllLightsIndirect = cycles_engine.Settings.SampleAllLightsIndirect,
                    SampleClampDirect = cycles_engine.Settings.SampleClampDirect,
                    SampleClampIndirect = cycles_engine.Settings.SampleClampIndirect,
                    SamplingPattern = SamplingPattern.CMJ,
                    Seed = cycles_engine.Settings.Seed
                }
                #endregion
            };

            scene.Film.SetFilter(FilterType.Gaussian, 1.5f);
            scene.Film.Exposure = 1.0f;
            scene.Film.Update();

            #endregion

            #region background shader

            // we add here a simple background shader. This will be repopulated with
            // other nodes whenever background changes are detected.
            var background_shader = new Shader(client, Shader.ShaderType.World)
            {
                Name = "Rhino Background"
            };

            var bgnode = new BackgroundNode("orig bg");
            bgnode.ins.Color.Value = new float4(0.7f);
            bgnode.ins.Strength.Value = 1.0f;

            background_shader.AddNode(bgnode);
            bgnode.outs.Background.Connect(background_shader.Output.ins.Surface);
            background_shader.FinalizeGraph();

            scene.AddShader(background_shader);

            scene.Background.Shader = background_shader;
            scene.Background.AoDistance = 0.0f;
            scene.Background.AoFactor = 0.0f;
            scene.Background.Visibility = PathRay.AllVisibility;

            #endregion

            return scene;
        }