public ACCMaterial(Material m, Renderer r = null) {
            this.material = m;
            this.renderer = r;
            name = m.name;
            type = ShaderType.Resolve(m.shader.name);
            if (type == ShaderType.UNKNOWN) throw new Exception("ShaderType has not found:" + m.shader.name);

            renderQueue.Set( m.renderQueue );

            rqEdit = renderQueue.ToString();
            
            InitType();
        }
        // 編集前と後でオブジェクトを分ける場合用(未使用)
        public ACCMaterial(ACCMaterial src) {
            this.original = src;
            this.renderer = src.renderer;
            this.material = src.material;
            this.name = src.name;
            //this.shader = src.shader;
            //this.type1 = src.type1;
            this.type = src.type;

            this.renderQueue = src.renderQueue;
            
            // TODO 配列の中身はディープコピーとする 
            this.editColors = src.editColors;
            this.editVals = src.editVals;
            
        }
        public ACCTexture(Texture tex, Material mate, ShaderPropTex texProp, ShaderType type) :this(texProp.key) {
            this.tex = tex;
            this.type = type;
            this.prop = texProp;

            this.editname = tex.name;
            if (tex is Texture2D) {
               texOffset = mate.GetTextureOffset(propName);
               texScale  = mate.GetTextureScale(propName);
            } else {
                LogUtil.DebugF("propName({0}): texture type:{1}", propName, tex.GetType());
            }
            
//            } else {
//                // シェーダ切り替えなどで、元々存在しないテクスチャの場合
//                LogUtil.DebugF("texture not found. propname={0}, material={1}", propName, mate.name);
//                // 空のテクスチャは作成しない
////                this.tex = new Texture2D(2, 2);
////                this.tex.name = string.Empty;
////                // テクスチャを追加セット
////                mate.SetTexture(propName, this.tex);
//            }
        }
        static ShaderType()
        {
            var texTypeEmpty = new ShaderPropTex[0];
            var texTypeR     = new [] { ShaderPropType.RenderTex, };
            var texType0     = new [] { ShaderPropType.MainTex, };
            var texType0a    = new [] { ShaderPropType.MainTexA, };
            var texType1     = new [] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, };                       //ShaderPropType.MultiColTex, };
            var texType1t    = new [] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, ShaderPropType.OutlineTex, ShaderPropType.OutlineToonRamp };
            var texType1a    = new [] { ShaderPropType.MainTexA, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, };                      // ShaderPropType.MultiColTex, };
            var texTypeH     = new [] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, ShaderPropType.HiTex, }; // ShaderPropType.MultiColTex, };
            var texTypeHt    = new [] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, ShaderPropType.HiTex, ShaderPropType.OutlineTex, ShaderPropType.OutlineToonRamp };
            var texTypeStd   = new [] { ShaderPropType.MainTexA, ShaderPropType.OcclusionMap,
                                        ShaderPropType.MetallicGlossMap, ShaderPropType.BumpMap, ShaderPropType.ParallaxMap, ShaderPropType.EmissionMap,
                                        ShaderPropType.DetailMask, ShaderPropType.DetailAlbedoMap, ShaderPropType.DetailNormalMap,
                                        ShaderPropType.SpecGlossMap };
            // var texTypeMir  = new []{ShaderPropType.MainTex, ShaderPropType.ReflectionTex};

            var colEmpty = new ShaderPropColor[0];
            var colC     = new [] { ShaderPropType.Color, };
            var colCa    = new [] { ShaderPropType.ColorA, };
            var colL     = new [] { ShaderPropType.Color, ShaderPropType.ShadowColor, };
            var colLa    = new [] { ShaderPropType.ColorA, ShaderPropType.ShadowColor, };
            var colTL    = new [] { ShaderPropType.Color, ShaderPropType.ShadowColor, ShaderPropType.RimColor, };
            var colTLa   = new [] { ShaderPropType.ColorA, ShaderPropType.ShadowColor, ShaderPropType.RimColor, };
            var colTLO   = new [] { ShaderPropType.Color, ShaderPropType.ShadowColor, ShaderPropType.RimColor, ShaderPropType.OutlineColor, };
            var colTLOa  = new [] { ShaderPropType.ColorA, ShaderPropType.ShadowColor, ShaderPropType.RimColor, ShaderPropType.OutlineColor, };

            var propEmpty = new ShaderPropFloat[0];
            var propL     = new [] { ShaderPropType.Shininess, };
            var propLC1   = new [] { ShaderPropType.Shininess, ShaderPropType.Cutoff };
            var propTL    = new [] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, };
            var propTLZ   = new [] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.ZTest, ShaderPropType.ZTest2, ShaderPropType.ZTest2Alpha };
            var propTLC1  = new [] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.Cutoff };
            var propTLO   = new [] { ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, };
            var propTLH   = new [] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow };
            var propTLHO  = new [] { ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow };
//            var propStd   = new [] {
//                ShaderPropType.Cutoff, ShaderPropType.Glossiness, ShaderPropType.GlossMapScale, ShaderPropType.SmoothnessTexChannel, ShaderPropType.Metallic, ShaderPropType.BumpScale,
//                ShaderPropType.Parallax, ShaderPropType.OcclusionStrength, ShaderPropType.DetailNormalMapScale,
//                ShaderPropType.UVSec, ShaderPropType.Mode, ShaderPropType.SrcBlend, ShaderPropType.DstBlend, ShaderPropType.ZWrite,
//            };
            var propStd = new [] {
                ShaderPropType.Cutoff, ShaderPropType.OcclusionStrength,
                ShaderPropType.Glossiness, ShaderPropType.GlossMapScale,
                ShaderPropType.SpecularHeighlights, ShaderPropType.GlossyReflections,
                ShaderPropType.BumpScale, ShaderPropType.DetailNormalMapScale,
            };

            count = 0;
            var shaderList = new List <ShaderType> {
                new ShaderType("CM3D2/Toony_Lighted", "トゥーン", texType1, colTL, propTL),
                new ShaderType("CM3D2/Toony_Lighted_Trans", "トゥーン 透過", texType1a, colTLa, propTLC1, true),
                new ShaderType("CM3D2/Toony_Lighted_Trans_NoZ", "トゥーン 透過 NoZ", texType1a, colTLa, propTL, true),
#if COM3D2
                new ShaderType("CM3D2/Toony_Lighted_Trans_NoZTest", "トゥーン 透過 NoZTest", texType1a, colTLa, propTLZ, true),
#endif
                new ShaderType("CM3D2/Toony_Lighted_Outline", "トゥーン 輪郭線", texType1, colTLO, propTLO),
                new ShaderType("CM3D2/Toony_Lighted_Outline_Trans", "トゥーン 輪郭線 透過", texType1a, colTLOa, propTLO, true),
#if COM3D2
                new ShaderType("CM3D2/Toony_Lighted_Outline_Tex", "トゥーン 輪郭線 Tex", texType1t, colTLO, propTLO),
#endif
                new ShaderType("CM3D2/Toony_Lighted_Hair", "トゥーン 髪", texTypeH, colTL, propTLH),
                new ShaderType("CM3D2/Toony_Lighted_Hair_Outline", "トゥーン 髪 輪郭線", texTypeH, colTLO, propTLHO),
#if COM3D2
                new ShaderType("CM3D2/Toony_Lighted_Hair_Outline_Tex", "トゥーン 髪 輪郭線 Tex", texTypeHt, colTLO, propTLHO),
                new ShaderType("CM3D2/Toony_Lighted_Cutout_AtC", "トゥーン Cutout", texType1a, colTLa, propTLC1, true),
#endif
                new ShaderType("CM3D2/Lighted", "非トゥーン", texType0, colL, propL),
#if COM3D2
                new ShaderType("CM3D2/Lighted_Cutout_AtC", "非トゥーン Cutout", texType0a, colLa, propLC1),
#endif
                new ShaderType("CM3D2/Lighted_Trans", "透過", texType0a, colLa, propL, true),
                new ShaderType("Unlit/Texture", "発光", texType0, colEmpty, propEmpty),
                new ShaderType("Unlit/Transparent", "発光 透過", texType0a, colEmpty, propEmpty, true),
                new ShaderType("Diffuse", "リアル", texType0, colC, propEmpty),
                new ShaderType("Transparent/Diffuse", "リアル 透過", texType0a, colCa, propEmpty, true),
                new ShaderType("CM3D2/Mosaic", "モザイク", texTypeR, colEmpty, new[] { ShaderPropType.FloatValue1 }),
                new ShaderType("CM3D2/Man", "ご主人様", texTypeEmpty, colC, new[] { ShaderPropType.FloatValue2, ShaderPropType.FloatValue3 }),
                new ShaderType("CM3D2_Debug/Debug_CM3D2_Normal2Color", "法線", texTypeEmpty, colC, propEmpty), // Emission
                new ShaderType("Standard", "Standard", texTypeStd, colC, propStd),
            };
            IList <ShaderType> toRemoves = null;

            STANDARD = shaderList[shaderList.Count - 1];
            // ゲーム中で参照できるシェーダに限定
            foreach (var shaderType in shaderList)
            {
                var shader = Shader.Find(shaderType.name);
                if (shader == null)
                {
                    if (toRemoves == null)
                    {
                        toRemoves = new List <ShaderType>();
                    }
                    toRemoves.Add(shaderType);
                }
            }

            if (!Settings.Instance.enableStandard)
            {
                shaderList.Remove(STANDARD);
            }
            if (toRemoves != null)
            {
                foreach (var toRemove in toRemoves)
                {
                    shaderList.Remove(toRemove);
                }
            }

            shaders = shaderList.ToArray();
            for (var i = 0; i < shaders.Length; i++)
            {
                shaders[i].idx = i;
            }

            var idx = shaderList.IndexOf(STANDARD);

            if (idx != -1)
            {
                SHADER_TYPE_STANDARD  = idx;
                SHADER_TYPE_CM3D2_MAX = SHADER_TYPE_STANDARD - 1;
            }

            shaderMap = new Dictionary <string, ShaderType>(shaders.Length + 2);
            foreach (var s in shaders)
            {
                shaderMap[s.name] = s;
            }
            ;
            shaderMap["Legacy Shaders/Transparent/Diffuse"] = shaderMap["Transparent/Diffuse"];
            shaderMap["Legacy Shaders/Diffuse"]             = shaderMap["Diffuse"];

            shader2Map = new Dictionary <string, string>(shaders.Length + 1);
            foreach (var s in shaders)
            {
                shader2Map[s.name] = s.name.Replace("/", "__");
            }
            ;
            shader2Map["CM3D2/Toony_Lighted_Hair_Outline_Tex"] = "CM3D2__Toony_Lighted_Hair_Outline";
        }
예제 #5
0
 // Token: 0x060000D4 RID: 212 RVA: 0x0000A779 File Offset: 0x00008979
 protected ACCMaterial(ShaderType type)
 {
     this.type = type;
     this.InitType();
 }
예제 #6
0
        // Token: 0x060000DA RID: 218 RVA: 0x0000AAE8 File Offset: 0x00008CE8
        public void Update(ShaderType sdrType)
        {
            if (this.type == sdrType)
            {
                return;
            }
            ShaderPropColor[] colProps = sdrType.colProps;
            EditColor[]       array    = new EditColor[colProps.Length];
            ColorPicker[]     array2   = new ColorPicker[colProps.Length];
            int itemHeight             = UIParams.Instance.itemHeight;

            for (int i = 0; i < colProps.Length; i++)
            {
                ShaderPropColor shaderPropColor = colProps[i];
                if (i < this.editColors.Length)
                {
                    if (this.editColors[i].type == shaderPropColor.colorType)
                    {
                        array[i] = this.editColors[i];
                    }
                    else
                    {
                        array[i] = new EditColor(this.editColors[i].val, shaderPropColor.colorType, shaderPropColor.composition);
                    }
                    array2[i] = this.pickers[i];
                }
                else
                {
                    Color val;
                    if (this.material != null)
                    {
                        val = this.material.GetColor(shaderPropColor.propId);
                    }
                    else
                    {
                        val = ((this.Original != null) ? this.Original.GetColor(i) : shaderPropColor.defaultVal);
                    }
                    array[i]  = new EditColor(val, shaderPropColor.colorType, shaderPropColor.composition);
                    array2[i] = new ColorPicker(ACCMaterial.presetMgr)
                    {
                        ColorTex = new Texture2D(itemHeight, itemHeight, TextureFormat.RGB24, false)
                    };
                    array2[i].SetTexColor(ref array[i].val);
                }
            }
            this.editColors = array;
            this.pickers    = array2;
            ShaderPropFloat[] fProps = sdrType.fProps;
            EditValue[]       array3 = new EditValue[fProps.Length];
            for (int j = 0; j < fProps.Length; j++)
            {
                float val2 = (this.material != null) ? this.material.GetFloat(fProps[j].propId) : fProps[j].defaultVal;
                array3[j] = new EditValue(val2, fProps[j].range);
            }
            this.editVals = array3;
            foreach (ShaderPropTex shaderPropTex in sdrType.texProps)
            {
                if (this.material != null && !this.material.HasProperty(shaderPropTex.keyName))
                {
                    this.material.SetTexture(shaderPropTex.propId, new Texture());
                }
            }
            this.type = sdrType;
        }
예제 #7
0
        // Token: 0x060000D9 RID: 217 RVA: 0x0000AA30 File Offset: 0x00008C30
        public void ChangeShader(string shaderName, int shaderIdx = -1)
        {
            Shader shader = Shader.Find(shaderName);

            if (shader == null)
            {
                LogUtil.Debug(new object[]
                {
                    "Shader not found. load resource :",
                    shaderName
                });
                shader = Resources.Load <Shader>("Shaders/" + shaderName);
                if (shader == null)
                {
                    return;
                }
            }
            int num = this.material.renderQueue;

            this.material.shader      = shader;
            this.material.renderQueue = num;
            ShaderType shaderType = (shaderIdx != -1) ? ShaderType.Resolve(shaderIdx) : ShaderType.Resolve(shaderName);

            if (shaderType == ShaderType.UNKNOWN)
            {
                return;
            }
            this.Update(shaderType);
            LogUtil.Debug(new object[]
            {
                "selected shader updated: ",
                shaderName
            });
        }
예제 #8
0
 private ACCMaterialEx(ShaderType type) : base(type)
 {
 }
 private ACCMaterialEx(ShaderType type) : base(type) { }
//        public ACCTexture(Material mate, string propName, MaterialType type) :this(propName) {
//            this.type = type;
//            this.tex = mate.GetTexture(propName);
//
//            if (tex != null) {
//                this.editname = tex.name;
//                if (tex is Texture2D) {
//                   texOffset = mate.GetTextureOffset(propName);
//                   texScale  = mate.GetTextureScale(propName);
//                } else {
//                    LogUtil.DebugF("propName({0}): texture type:{1}", propName, tex.GetType());
//                }
//            } else {
//                // シェーダ切り替えなどで、元々存在しないテクスチャの場合
//                LogUtil.DebugF("texture not found. propname={0}, material={1}", propName, mate.name);
//                // 空のテクスチャは作成しない
////                this.tex = new Texture2D(2, 2);
////                this.tex.name = string.Empty;
////                // テクスチャを追加セット
////                mate.SetTexture(propName, this.tex);
//            }
//        }

        public ACCTexture(ACCTexture src) {
            this.original  = src;
            this.propName  = src.propName;
            this.type      = src.type;
            this.prop      = src.prop;
            this.propKey   = src.propKey;

            this.editname  = src.editname;
            this.filepath  = src.filepath;
            this.texOffset = src.texOffset;
            this.texScale  = src.texScale;

            this.toonType  = src.toonType;
        }
 public static ACCTexture Create(Material mate, ShaderPropTex texProp, ShaderType type) {
     var tex = mate.GetTexture(texProp.propId);
     
     return tex == null ? null : new ACCTexture(tex, mate, texProp, type);
 }
        public CCMaterial(Material m, ShaderType type) {
            name = m.name;
            shader = m.shader.name;
            
            foreach (var colProp in type.colProps) {
                var ccc = new CCColor(m.GetColor(colProp.propId));
                switch(colProp.key) {
                    case PropKey._Color:
                        color = ccc;
                        break;
                    case PropKey._ShadowColor:
                        shadowColor = ccc;
                        break;
                    case PropKey._RimColor:
                        rimColor = ccc;
                        break;
                    case PropKey._OutlineColor:
                        outlineColor = ccc;
                        break;
//        _SpecColor,
//        _ReflectColor,
//        _Emission,                        
                }                        
            }

            foreach (var prop in type.fProps) {
                var fVal = m.GetFloat(prop.propId);
                switch(prop.key) {
                    case PropKey._Shininess:
                        shininess = fVal;
                        break;
                    case PropKey._OutlineWidth:
                        outlineWidth = fVal;
                        break;
                    case PropKey._RimPower:
                        rimPower = fVal;
                        break;
                    case PropKey._RimShift:
                        rimShift = fVal;
                        break;
                    case PropKey._HiRate:
                        hiRate = fVal;
                        break;
                    case PropKey._HiPow:
                        hiPow = fVal;
                        break;
                    case PropKey._FloatValue1:
                        floatVal1 = fVal;
                        break;
                    case PropKey._FloatValue2:
                        floatVal2 = fVal;
                        break;
                    case PropKey._FloatValue3:
                        floatVal3 = fVal;
                        break;
                }                        
            }
        }        
        // Token: 0x060001BA RID: 442 RVA: 0x000107BC File Offset: 0x0000E9BC
        public CCMaterial(Material m, ShaderType type)
        {
            this.name   = m.name;
            this.shader = m.shader.name;
            foreach (ShaderPropColor shaderPropColor in type.colProps)
            {
                CCColor cccolor = new CCColor(m.GetColor(shaderPropColor.propId));
                switch (shaderPropColor.key)
                {
                case PropKey._Color:
                    this.color = cccolor;
                    break;

                case PropKey._ShadowColor:
                    this.shadowColor = cccolor;
                    break;

                case PropKey._RimColor:
                    this.rimColor = cccolor;
                    break;

                case PropKey._OutlineColor:
                    this.outlineColor = cccolor;
                    break;
                }
            }
            foreach (ShaderPropFloat shaderPropFloat in type.fProps)
            {
                float @float = m.GetFloat(shaderPropFloat.propId);
                switch (shaderPropFloat.key)
                {
                case PropKey._Shininess:
                    this.shininess = new float?(@float);
                    break;

                case PropKey._OutlineWidth:
                    this.outlineWidth = new float?(@float);
                    break;

                case PropKey._RimPower:
                    this.rimPower = new float?(@float);
                    break;

                case PropKey._RimShift:
                    this.rimShift = new float?(@float);
                    break;

                case PropKey._HiRate:
                    this.hiRate = new float?(@float);
                    break;

                case PropKey._HiPow:
                    this.hiPow = new float?(@float);
                    break;

                case PropKey._FloatValue1:
                    this.floatVal1 = new float?(@float);
                    break;

                case PropKey._FloatValue2:
                    this.floatVal2 = new float?(@float);
                    break;

                case PropKey._FloatValue3:
                    this.floatVal3 = new float?(@float);
                    break;

                case PropKey._Cutoff:
                    this.cutoff = new float?(@float);
                    break;

                case PropKey._Cutout:
                    this.cutout = new float?(@float);
                    break;

                case PropKey._ZTest:
                    this.ztest = new float?(@float);
                    break;

                case PropKey._ZTest2:
                    this.ztest2 = new float?(@float);
                    break;

                case PropKey._ZTest2Alpha:
                    this.ztest2Alpha = new float?(@float);
                    break;
                }
            }
        }
예제 #14
0
        private static ACCMaterialEx Load(BinaryReader reader)
        {
            var version     = reader.ReadInt32();
            var name1       = reader.ReadString();
            var name2       = reader.ReadString();
            var shaderName1 = reader.ReadString();
            var shaderType  = ShaderType.Resolve(shaderName1);

            var created = new ACCMaterialEx(shaderType)
            {
                name1 = name1,
                name2 = name2
            };

            //created.shader = created.type;
            //created.type1 = ShaderMapper.resolve(shaderName1);
            //created.shader = created.type1.shader;

            var shaderName2 = reader.ReadString();

            while (true)
            {
                var type = reader.ReadString();
                if (type == "end")
                {
                    break;
                }

                var propName = reader.ReadString();
                switch (type)
                {
                case "tex":
                    var sub = reader.ReadString();
                    switch (sub)
                    {
                    case "tex2d":

                        var tex = new ACCTextureEx(propName);
                        tex.editname                = reader.ReadString();
                        tex.txtpath                 = reader.ReadString();
                        tex.texOffset.x             = reader.ReadSingle();
                        tex.texOffset.y             = reader.ReadSingle();
                        tex.texScale.x              = reader.ReadSingle();
                        tex.texScale.y              = reader.ReadSingle();
                        created.texDic[tex.propKey] = tex;
                        break;

                    case "null":
                        break;

                    case "texRT":
                        reader.ReadString();
                        reader.ReadString();
                        break;
                    }
                    break;

                case "col":
                case "vec":
                    var c = new Color(reader.ReadSingle(), reader.ReadSingle(),
                                      reader.ReadSingle(), reader.ReadSingle());
                    created.SetColor(propName, c);
                    break;

                case "f":
                    var f = reader.ReadSingle();
                    created.SetFloat(propName, f);
                    break;
                }
            }
            return(created);
        }
        public static ACCTexture Create(Material mate, ShaderPropTex texProp, ShaderType type)
        {
            var tex = mate.GetTexture(texProp.propId);

            return(tex == null ? null : new ACCTexture(tex, mate, texProp, type));
        }
        public void Update(ShaderType sdrType) {
            if (this.type == sdrType) return;
            // TODO 変更前のマテリアルから設定値をロード


            // 同一長の場合でも更新(Alphaの有無が異なるケースがある)            
            var colProps = sdrType.colProps;
            var createdColors = new EditColor[colProps.Length];
            for (int i=0; i<colProps.Length; i++) {
                var colProp = colProps[i];
                if (i < this.editColors.Length && editColors[i].val.HasValue) {
                    // カラータイプが異なる場合は、インスタンスを作り直して色をコピー
                    if (editColors[i].type == colProp.colorType) {
                        createdColors[i] = editColors[i];
                    } else {
                        createdColors[i] = new EditColor(editColors[i].val, colProp.colorType); 
                    }
                } else {
                    var ec = new EditColor(null, colProp.colorType);
                    if (material != null) {
                        ec.Set( material.GetColor(colProps[i].propId) );
                    } else {
                        ec.Set( (original != null)? original.GetColor(i): colProps[i].defaultVal );
                    }
                    createdColors[i] = ec;
                }
            }
            editColors = createdColors;
            
            
            var props = sdrType.fProps;
            var createdVals = new EditValue[props.Length];
            for (int i=0; i<props.Length; i++) {
                float val;
                if (material != null) {
                    val = material.GetFloat(props[i].propId);
                } else {
                    val = props[i].defaultVal;//(original != null)? original.GetColor(i): Color.white;
                }
                createdVals[i] = new EditValue(val, props[i].range);
            }
            this.editVals = createdVals;

            // テクスチャ情報の初期化
            foreach (var texProp in sdrType.texProps) {
                // セットしてないテクスチャは空テクスチャをセット
                if (!material.HasProperty(texProp.keyName)) {
                    material.SetTexture(texProp.propId, new Texture());
                }
            }

            type = sdrType;
        }
예제 #17
0
        public CCMaterial(Material m, ShaderType type)
        {
            name   = m.name;
            shader = m.shader.name;

            foreach (var colProp in type.colProps)
            {
                var ccc = new CCColor(m.GetColor(colProp.propId));
                switch (colProp.key)
                {
                case PropKey._Color:
                    color = ccc;
                    break;

                case PropKey._ShadowColor:
                    shadowColor = ccc;
                    break;

                case PropKey._RimColor:
                    rimColor = ccc;
                    break;

                case PropKey._OutlineColor:
                    outlineColor = ccc;
                    break;
//        _SpecColor,
//        _ReflectColor,
//        _Emission,
                }
            }

            foreach (var prop in type.fProps)
            {
                var fVal = m.GetFloat(prop.propId);
                switch (prop.key)
                {
                case PropKey._Shininess:
                    shininess = fVal;
                    break;

                case PropKey._OutlineWidth:
                    outlineWidth = fVal;
                    break;

                case PropKey._RimPower:
                    rimPower = fVal;
                    break;

                case PropKey._RimShift:
                    rimShift = fVal;
                    break;

                case PropKey._HiRate:
                    hiRate = fVal;
                    break;

                case PropKey._HiPow:
                    hiPow = fVal;
                    break;

                case PropKey._Cutoff:
                    cutoff = fVal;
                    break;

                case PropKey._Cutout:
                    cutout = fVal;
                    break;

                case PropKey._FloatValue1:
                    floatVal1 = fVal;
                    break;

                case PropKey._FloatValue2:
                    floatVal2 = fVal;
                    break;

                case PropKey._FloatValue3:
                    floatVal3 = fVal;
                    break;

                case PropKey._ZTest:
                    ztest = fVal;
                    break;

                case PropKey._ZTest2:
                    ztest2 = fVal;
                    break;

                case PropKey._ZTest2Alpha:
                    ztest2Alpha = fVal;
                    break;
                }
            }
        }
 protected ACCMaterial(ShaderType type) {
     this.type = type;
     InitType();
 }
        public static List<ACCTexture> Load(Material mate, ShaderType type) {
            
            if (type == null) {
                type = ShaderType.Resolve(mate.shader.name);
            }

            var ret = new List<ACCTexture>(type.texProps.Length);
            foreach (var texProp in type.texProps) {
                var tex = ACCTexture.Create(mate, texProp, type);
                if (tex != null) ret.Add(tex);
            }
            return ret;
        }
        public ACCTexturesView(Material m, int matNo) {
            this.material = m;
            //this.matType = ShaderMapper.resolve(m.shader.name);

            // this.original = Load(m, matType);
            this.type = ShaderType.Resolve(m.shader.name);
            this.original = Load(m, type);
            this.edited = new List<ACCTexture>(original.Count);
            foreach ( ACCTexture tex in original ) {
                edited.Add(new ACCTexture(tex));
            }

            this.matNo = matNo;
        }
예제 #21
0
        public void Update(ShaderType sdrType)
        {
            if (type == sdrType)
            {
                return;
            }
            // TODO 変更前のマテリアルから設定値をロード


            // 同一長の場合でも更新(Alphaの有無が異なるケースがある)
            var colProps       = sdrType.colProps;
            var createdColors  = new EditColor[colProps.Length];
            var createdPickers = new ColorPicker[colProps.Length];
            var size           = UIParams.Instance.itemHeight;

            for (var i = 0; i < colProps.Length; i++)
            {
                var colProp = colProps[i];
                if (i < editColors.Length)
                {
                    // カラータイプが異なる場合は、インスタンスを作り直して色をコピー
                    if (editColors[i].type == colProp.colorType)
                    {
                        createdColors[i] = editColors[i];
                    }
                    else
                    {
                        createdColors[i] = new EditColor(editColors[i].val, colProp.colorType, colProp.composition);
                    }
                    createdPickers[i] = pickers[i];
                }
                else
                {
                    Color color;
                    if (material != null)
                    {
                        color = material.GetColor(colProp.propId);
                    }
                    else
                    {
                        color = (Original != null)? Original.GetColor(i): colProp.defaultVal;
                    }
                    createdColors[i]  = new EditColor(color, colProp.colorType, colProp.composition);
                    createdPickers[i] = new ColorPicker(presetMgr)
                    {
                        ColorTex = new Texture2D(size, size, TextureFormat.RGB24, false)
                    };
                    createdPickers[i].SetTexColor(ref createdColors[i].val);
                }
            }
            editColors = createdColors;
            pickers    = createdPickers;

            var props       = sdrType.fProps;
            var createdVals = new EditValue[props.Length];

            for (var i = 0; i < props.Length; i++)
            {
                var val = (material != null)? material.GetFloat(props[i].propId) : props[i].defaultVal;
                createdVals[i] = new EditValue(val, props[i].range);
            }
            editVals = createdVals;

            // テクスチャ情報の初期化
            foreach (var texProp in sdrType.texProps)
            {
                // セットしてないテクスチャは空テクスチャをセット
                if (material != null && !material.HasProperty(texProp.keyName))
                {
                    material.SetTexture(texProp.propId, new Texture());
                }
            }

            type = sdrType;
        }