コード例 #1
0
 internal AddClosureInputs(ShaderNode parentNode)
 {
     Closure1 = new ClosureSocket(parentNode, "Closure1");
     AddSocket(Closure1);
     Closure2 = new ClosureSocket(parentNode, "Closure2");
     AddSocket(Closure2);
 }
コード例 #2
0
ファイル: MixClosureNode.cs プロジェクト: mcneel/CCSycles
 internal MixClosureInputs(ShaderNode parentNode)
 {
     Fac = new FloatSocket(parentNode, "Fac");
     AddSocket(Fac);
     Closure1 = new ClosureSocket(parentNode, "Closure1");
     AddSocket(Closure1);
     Closure2 = new ClosureSocket(parentNode, "Closure2");
     AddSocket(Closure2);
 }
コード例 #3
0
ファイル: OutputNode.cs プロジェクト: mcneel/CCSycles
 internal OutputInputs(ShaderNode parentNode)
 {
     Surface = new ClosureSocket(parentNode, "Surface");
     AddSocket(Surface);
     Volume = new ClosureSocket(parentNode, "Volume");
     AddSocket(Volume);
     Displacement = new FloatSocket(parentNode, "Displacement");
     AddSocket(Displacement);
 }
コード例 #4
0
 public GammaOutputs(ShaderNode parentNode)
 {
     Color = new ClosureSocket(parentNode, "Color");
     AddSocket(Color);
 }
コード例 #5
0
 internal BackgroundOutputs(ShaderNode parentNode)
 {
     Background = new ClosureSocket(parentNode, "Background");
     AddSocket(Background);
 }
コード例 #6
0
 public SubsurfaceScatteringOutputs(ShaderNode parentNode)
 {
     BSSRDF = new ClosureSocket(parentNode, "BSSRDF");
     AddSocket(BSSRDF);
 }
コード例 #7
0
 public ScatterVolumeOutputs(ShaderNode parentNode)
 {
     Volume = new ClosureSocket(parentNode, "Volume");
     AddSocket(Volume);
 }
コード例 #8
0
 internal GlossyOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #9
0
 internal AddClosureOutputs(ShaderNode parentNode)
 {
     Closure = new ClosureSocket(parentNode, "Closure");
     AddSocket(Closure);
 }
コード例 #10
0
 public AbsorptionVolumeOutputs(ShaderNode parentNode)
 {
     Volume = new ClosureSocket(parentNode, "Volume");
     AddSocket(Volume);
 }
コード例 #11
0
ファイル: VelvetBsdfNode.cs プロジェクト: mcneel/CCSycles
 public VelvetBsdfOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #12
0
 public AnisotropicBsdfOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #13
0
        public bool GetShader(Shader sh, bool finalize)
        {
            blendit = new ccl.ShaderNodes.MixClosureNode($"blendit{Serial}");
            sh.AddNode(blendit);

            LinearWorkflow linearWorkflow = new LinearWorkflow();

            linearWorkflow.PostProcessGamma   = Gamma;
            linearWorkflow.PreProcessGamma    = Gamma;
            linearWorkflow.PostProcessGammaOn = Gamma != 1.0f;
            linearWorkflow.PreProcessColors   = linearWorkflow.PreProcessTextures = linearWorkflow.PostProcessGammaOn;

            RhinoCyclesCore.Converters.ShaderConverter sconv = new RhinoCyclesCore.Converters.ShaderConverter();
            CyclesShader    mat1sh      = null;
            CyclesShader    mat2sh      = null;
            ICyclesMaterial crm1        = null;
            ICyclesMaterial crm2        = null;
            ClosureSocket   crm1closure = null;
            ClosureSocket   crm2closure = null;

            if (Mat1Rm != null)
            {
                if (Mat1Rm is ICyclesMaterial)
                {
                    crm1       = Mat1Rm as ICyclesMaterial;
                    crm1.Gamma = Gamma;
                    crm1.GetShader(sh, false);
                    crm1closure = crm1.GetClosureSocket(sh);
                }
                else
                {
                    mat1sh       = sconv.CreateCyclesShader(Mat1Rm, linearWorkflow, Mat1Rm.RenderHashExclude(CrcRenderHashFlags.ExcludeLinearWorkflow, "", linearWorkflow), BitmapConverter, null);
                    mat1sh.Gamma = Gamma;
                    BitmapConverter.ReloadTextures(mat1sh);
                }
            }
            if (Mat2Rm != null)
            {
                if (Mat2Rm is ICyclesMaterial)
                {
                    crm2       = Mat2Rm as ICyclesMaterial;
                    crm2.Gamma = Gamma;
                    crm2.GetShader(sh, false);
                    crm2closure = crm2.GetClosureSocket(sh);
                }
                else
                {
                    mat2sh       = sconv.CreateCyclesShader(Mat2Rm, linearWorkflow, Mat2Rm.RenderHashExclude(CrcRenderHashFlags.ExcludeLinearWorkflow, "", linearWorkflow), BitmapConverter, null);
                    mat2sh.Gamma = Gamma;
                    BitmapConverter.ReloadTextures(mat2sh);
                }
            }

            RhinoCyclesCore.Shaders.RhinoFullNxt fnMat1 = null;
            ClosureSocket fnMat1Closure = null;

            if (mat1sh != null)
            {
                fnMat1        = new RhinoCyclesCore.Shaders.RhinoFullNxt(null, mat1sh, sh, false);
                fnMat1Closure = fnMat1.GetClosureSocket();
            }

            RhinoCyclesCore.Shaders.RhinoFullNxt fnMat2 = null;
            ClosureSocket fnMat2Closure = null;

            if (mat2sh != null)
            {
                fnMat2        = new RhinoCyclesCore.Shaders.RhinoFullNxt(null, mat2sh, sh, false);
                fnMat2Closure = fnMat2.GetClosureSocket();
            }

            ccl.ShaderNodes.TextureCoordinateNode texco = new ccl.ShaderNodes.TextureCoordinateNode($"texcos{Serial}");
            sh.AddNode(texco);

            ccl.ShaderNodes.DiffuseBsdfNode diffuse1Bsdf = new ccl.ShaderNodes.DiffuseBsdfNode();
            diffuse1Bsdf.ins.Color.Value = Mat1;
            ccl.ShaderNodes.DiffuseBsdfNode diffuse2Bsdf = new ccl.ShaderNodes.DiffuseBsdfNode();
            diffuse2Bsdf.ins.Color.Value = Mat2;
            sh.AddNode(diffuse1Bsdf);
            sh.AddNode(diffuse2Bsdf);

            blendit.ins.Fac.Value = Blend.Amount;

            ccl.ShaderNodes.ValueNode blendValue = new ccl.ShaderNodes.ValueNode("blendValue");
            sh.AddNode(blendValue);
            blendValue.Value = Blend.Amount;

            GraphForSlot(sh, blendValue.outs.Value, Blend.On, Blend.Amount, BlendTex, blendit.ins.Fac.ToList(), texco, true);

            var sock1 = fnMat1Closure ?? crm1closure ?? diffuse1Bsdf.outs.BSDF;

            sock1.Connect(blendit.ins.Closure1);
            var sock2 = fnMat2Closure ?? crm2closure ?? diffuse2Bsdf.outs.BSDF;

            sock2.Connect(blendit.ins.Closure2);

            blendit.outs.Closure.Connect(sh.Output.ins.Surface);

            if (finalize)
            {
                sh.FinalizeGraph();
            }
            return(true);
        }
コード例 #14
0
 internal RefractionBsdfOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #15
0
 internal TranslucentBsdfOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #16
0
 public BrightnessContrastOutputs(ShaderNode parentNode)
 {
     Color = new ClosureSocket(parentNode, "Color");
     AddSocket(Color);
 }
コード例 #17
0
ファイル: HueSaturationNode.cs プロジェクト: mcneel/CCSycles
 public HueSaturationOutputs(ShaderNode parentNode)
 {
     Color = new ClosureSocket(parentNode, "Color");
     AddSocket(Color);
 }
コード例 #18
0
 public HoldoutOutputs(ShaderNode parentNode)
 {
     Holdout = new ClosureSocket(parentNode, "Holdout");
     AddSocket(Holdout);
 }
コード例 #19
0
        public bool GetShader(Shader sh, bool finalize)
        {
            blendit = new ccl.ShaderNodes.MixClosureNode($"blendit{Serial}");
            sh.AddNode(blendit);

            RhinoCyclesCore.Converters.ShaderConverter sconv = new RhinoCyclesCore.Converters.ShaderConverter();
            CyclesShader    mat1sh      = null;
            CyclesShader    mat2sh      = null;
            ICyclesMaterial crm1        = null;
            ICyclesMaterial crm2        = null;
            ClosureSocket   crm1closure = null;
            ClosureSocket   crm2closure = null;

            if (Mat1Rm != null)
            {
                if (Mat1Rm is ICyclesMaterial)
                {
                    crm1       = Mat1Rm as ICyclesMaterial;
                    crm1.Gamma = Gamma;
                    crm1.GetShader(sh, false);
                    crm1closure = crm1.GetClosureSocket(sh);
                }
                else
                {
                    mat1sh       = sconv.CreateCyclesShader(Mat1Rm, Gamma);
                    mat1sh.Gamma = Gamma;
                    RhinoCyclesCore.Converters.BitmapConverter.ReloadTextures(mat1sh);
                }
            }
            if (Mat2Rm != null)
            {
                if (Mat2Rm is ICyclesMaterial)
                {
                    crm2       = Mat2Rm as ICyclesMaterial;
                    crm2.Gamma = Gamma;
                    crm2.GetShader(sh, false);
                    crm2closure = crm2.GetClosureSocket(sh);
                }
                else
                {
                    mat2sh       = sconv.CreateCyclesShader(Mat2Rm, Gamma);
                    mat2sh.Gamma = Gamma;
                    RhinoCyclesCore.Converters.BitmapConverter.ReloadTextures(mat2sh);
                }
            }

            RhinoCyclesCore.Shaders.RhinoFullNxt fnMat1 = null;
            ClosureSocket fnMat1Closure = null;

            if (mat1sh != null)
            {
                fnMat1        = new RhinoCyclesCore.Shaders.RhinoFullNxt(null, mat1sh, sh, false);
                fnMat1Closure = fnMat1.GetClosureSocket();
            }

            RhinoCyclesCore.Shaders.RhinoFullNxt fnMat2 = null;
            ClosureSocket fnMat2Closure = null;

            if (mat2sh != null)
            {
                fnMat2        = new RhinoCyclesCore.Shaders.RhinoFullNxt(null, mat2sh, sh, false);
                fnMat2Closure = fnMat2.GetClosureSocket();
            }

            ccl.ShaderNodes.TextureCoordinateNode texco = new ccl.ShaderNodes.TextureCoordinateNode($"texcos{Serial}");
            sh.AddNode(texco);

            ccl.ShaderNodes.DiffuseBsdfNode diffuse1Bsdf = new ccl.ShaderNodes.DiffuseBsdfNode();
            diffuse1Bsdf.ins.Color.Value = Mat1;
            ccl.ShaderNodes.DiffuseBsdfNode diffuse2Bsdf = new ccl.ShaderNodes.DiffuseBsdfNode();
            diffuse2Bsdf.ins.Color.Value = Mat2;
            sh.AddNode(diffuse1Bsdf);
            sh.AddNode(diffuse2Bsdf);

            blendit.ins.Fac.Value = Blend;

            GraphForSlot(sh, BlendTexOn, BlendTex, blendit.ins.Fac, texco, true);

            var sock1 = fnMat1Closure ?? crm1closure ?? diffuse1Bsdf.outs.BSDF;

            sock1.Connect(blendit.ins.Closure1);
            var sock2 = fnMat2Closure ?? crm2closure ?? diffuse2Bsdf.outs.BSDF;

            sock2.Connect(blendit.ins.Closure2);

            blendit.outs.Closure.Connect(sh.Output.ins.Surface);

            if (finalize)
            {
                sh.FinalizeGraph();
            }
            return(true);
        }
コード例 #20
0
ファイル: GlassBsdfNode.cs プロジェクト: mcneel/CCSycles
 public GlassOutputs(ShaderNode parentNode)
 {
     BSDF = new ClosureSocket(parentNode, "BSDF");
     AddSocket(BSDF);
 }
コード例 #21
0
 internal EmissionOutputs(ShaderNode parentNode)
 {
     Emission = new ClosureSocket(parentNode, "Emission");
     AddSocket(Emission);
 }