Beispiel #1
0
 // Token: 0x060000DD RID: 221 RVA: 0x0000AE90 File Offset: 0x00009090
 public void SetFloat(string propName, float f)
 {
     try
     {
         PropKey propKey = (PropKey)Enum.Parse(typeof(PropKey), propName);
         for (int i = 0; i < this.type.fProps.Length; i++)
         {
             ShaderPropFloat shaderPropFloat = this.type.fProps[i];
             if (shaderPropFloat.key == propKey)
             {
                 this.editVals[i].Set(f);
                 return;
             }
         }
         LogUtil.Debug(new object[]
         {
             "propName mismatched:",
             propName
         });
     }
     catch (Exception ex)
     {
         LogUtil.Debug(new object[]
         {
             "unsupported propName found:",
             propName,
             ex
         });
     }
 }
Beispiel #2
0
 private ShaderType()
 {
     this.idx = -1;
     name     = string.Empty;
     dispName = string.Empty;
     texProps = new ShaderPropTex[0];
     colProps = new ShaderPropColor[0];
     fProps   = new ShaderPropFloat[0];
 }
Beispiel #3
0
        public static void Initialize()
        {
            if (!initialized)
            {
                // 設定値を利用するため、LazyInitとする
                RenderQueue = new ShaderPropFloat(PropKey._SetManualRenderQueue, EditRange.renderQueue,
                                                  new float[] { 0, 5000f, }, PRESET_PM, 3000, 2000, 3000);

                Shininess = new ShaderPropFloat(PropKey._Shininess, EditRange.shininess,
                                                settings.shininessRange(), PRESET_RATIO, 0, 0, 0.1f, 0.5f, 1, 5);
                OutlineWidth = new ShaderPropFloat(PropKey._OutlineWidth, EditRange.outlineWidth,
                                                   settings.outlineWidthRange(), null, 0.0001f, 0.0001f, 0.001f, 0.002f);
                RimPower = new ShaderPropFloat(PropKey._RimPower, EditRange.rimPower,
                                               settings.rimPowerRange(), PRESET_INV, 0f, 0f, 25f, 50f, 100f);
                RimShift = new ShaderPropFloat(PropKey._RimShift, EditRange.rimShift,
                                               settings.rimShiftRange(), PRESET_RATIO, 0f, 0f, 0.25f, 0.5f, 1f);
                HiRate = new ShaderPropFloat(PropKey._HiRate, EditRange.hiRate,
                                             settings.hiRateRange(), PRESET_RATIO, 0f, 0f, 0.5f, 1.0f);
                HiPow = new ShaderPropFloat(PropKey._HiPow, EditRange.hiPow,
                                            settings.hiPowRange(), PRESET_RATIO, 0.001f, 0.001f, 1f, 50f);
                FloatValue1 = new ShaderPropFloat(PropKey._FloatValue1, EditRange.floatVal1,
                                                  settings.hiPowRange(), null, 10f, 0f, 100f, 200f);
                FloatValue2 = new ShaderPropFloat(PropKey._FloatValue2, EditRange.floatVal2,
                                                  settings.hiPowRange(), PRESET_INV, 1f, -15, 0f, 1f, 15f);
                FloatValue3 = new ShaderPropFloat(PropKey._FloatValue3, EditRange.floatVal3,
                                                  settings.hiPowRange(), PRESET_RATIO, 1f, 0f, 0.5f, 1f);
                Parallax = new ShaderPropFloat(PropKey._Parallax, "F4",
                                               new float[] { 0.005f, 0.08f, 0.001f, 0.1f }, PRESET_RATIO, 0.02f, 0.02f);
                Cutoff = new ShaderPropFloat(PropKey._Cutoff, "F3",
                                             new float[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0f, 0f, 0.5f, 1f);
                EmissionLM     = new ShaderPropBool(PropKey._EmissionLM);
                UseMulticolTex = new ShaderPropBool(PropKey._UseMulticolTex);

                Strength = new ShaderPropFloat(PropKey._Strength, "F2",
                                               new float[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.2f, 0.2f);
                StencilComp = new ShaderPropFloat(PropKey._StencilComp, "F0",
                                                  new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 8f, 8f);
                Stencil = new ShaderPropFloat(PropKey._Stencil, "F0",
                                              new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 0f, 0f);
                StencilOp = new ShaderPropFloat(PropKey._StencilOp, "F0",
                                                new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 0f, 0f);
                StencilWriteMask = new ShaderPropFloat(PropKey._StencilWriteMask, "F0",
                                                       new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
                StencilReadMask = new ShaderPropFloat(PropKey._StencilReadMask, "F0",
                                                      new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
                ColorMask = new ShaderPropFloat(PropKey._ColorMask, "F0",
                                                new float[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
                EnvAlpha = new ShaderPropFloat(PropKey._EnvAlpha, "F1",
                                               new float[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0f, 0f);
                EnvAdd = new ShaderPropFloat(PropKey._EnvAdd, "F1",
                                             new float[] { 1f, 2f, 1f, 2f }, PRESET_RATIO, 1f, 1f);

                initialized = true;
            }
        }
 static void Init() {
     var texTypeEmpty = new ShaderPropTex[0];
     var texTypeR  = new ShaderPropTex[]{ShaderPropType.RenderTex,};
     var texType0  = new ShaderPropTex[]{ShaderPropType.MainTex,};
     var texType0a = new ShaderPropTex[]{ShaderPropType.MainTex_a,};
     var texType1  = new ShaderPropTex[]{ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, };//ShaderPropType.MultiColTex, };
     var texType1a = new ShaderPropTex[]{ShaderPropType.MainTex_a, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon,};// ShaderPropType.MultiColTex, };
     var texTypeH  = new ShaderPropTex[]{ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, ShaderPropType.HiTex,};// ShaderPropType.MultiColTex, };
     
     var colEmpty  = new ShaderPropColor[0];
     var colC      = new ShaderPropColor[]{ShaderPropType.Color, };
     var colCa     = new ShaderPropColor[]{ShaderPropType.ColorA, };
     var colL      = new ShaderPropColor[]{ShaderPropType.Color, ShaderPropType.ShadowColor, };
     var colLa     = new ShaderPropColor[]{ShaderPropType.ColorA,ShaderPropType.ShadowColor, };
     var colTL     = new ShaderPropColor[]{ShaderPropType.Color, ShaderPropType.ShadowColor, ShaderPropType.RimColor, };
     var colTLa    = new ShaderPropColor[]{ShaderPropType.ColorA, ShaderPropType.ShadowColor, ShaderPropType.RimColor, };
     var colTLO    = new ShaderPropColor[]{ShaderPropType.Color, ShaderPropType.ShadowColor, ShaderPropType.RimColor, ShaderPropType.OutlineColor,  };
     var colTLOa   = new ShaderPropColor[]{ShaderPropType.ColorA, ShaderPropType.ShadowColor, ShaderPropType.RimColor, ShaderPropType.OutlineColor,  };
     
     var propEmpty = new ShaderPropFloat[0];
     var propL     = new ShaderPropFloat[]{ShaderPropType.Shininess, };
     var propTL    = new ShaderPropFloat[]{ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, };
     var propTLO   = new ShaderPropFloat[]{ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, };
     var propTLH   = new ShaderPropFloat[]{ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow};
     var propTLHO  = new ShaderPropFloat[]{ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow};
     
     ShaderType.count = 0;
     shaders = new ShaderType[] {
         new ShaderType("CM3D2/Toony_Lighted", "トゥーン",                          texType1,  colTL,   propTL ),
         new ShaderType("CM3D2/Toony_Lighted_Trans", "トゥーン 透過",              texType1a, colTLa,  propTL, true ),
         new ShaderType("CM3D2/Toony_Lighted_Trans_NoZ", "トゥーン 透過 NoZ",      texType1a, colTLa,  propTL, true ),
         new ShaderType("CM3D2/Toony_Lighted_Outline","トゥーン 輪郭線",            texType1,  colTLO,  propTLO ),
         new ShaderType("CM3D2/Toony_Lighted_Outline_Trans","トゥーン 輪郭線 透過", texType1a, colTLOa, propTLO, true ),
         new ShaderType("CM3D2/Toony_Lighted_Hair","トゥーン 髪",                   texTypeH,  colTL,   propTLH ),
         new ShaderType("CM3D2/Toony_Lighted_Hair_Outline","トゥーン 髪 輪郭線",    texTypeH,  colTLO,  propTLHO ),
         new ShaderType("CM3D2/Lighted","非トゥーン",            texType0,  colL,     propL ),
         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 ShaderPropFloat[]{ShaderPropType.FloatValue1}),
         new ShaderType("CM3D2/Man","ご主人様",                  texTypeEmpty, colC, new ShaderPropFloat[]{ShaderPropType.FloatValue2, ShaderPropType.FloatValue3}),
         new ShaderType("CM3D2_Debug/Debug_CM3D2_Normal2Color","法線", texTypeEmpty, colC, propEmpty), // Emission
     };
     shaderMap = new Dictionary<string, ShaderType>(shaders.Length);
     foreach (var s in shaders) {
         shaderMap[s.name] = s;
     };
     shader2Map = new Dictionary<string, string>(shaders.Length);
     foreach (var s in shaders) {
         shader2Map[s.name] = s.name.Replace("/", "__");
     };
 }
        // Token: 0x060000E3 RID: 227 RVA: 0x0000B2C4 File Offset: 0x000094C4
        public static void Write(BinaryWriter writer, ACCMaterialEx mate)
        {
            writer.Write(FileConst.HEAD_MATE);
            writer.Write(1000);
            writer.Write(mate.name1);
            writer.Write(mate.name2);
            string name = mate.type.name;

            writer.Write(name);
            string mateName = ShaderType.GetMateName(name);

            writer.Write(mateName);
            foreach (ShaderPropTex shaderPropTex in mate.type.texProps)
            {
                if (shaderPropTex.key == PropKey._RenderTex)
                {
                    writer.Write("null");
                }
                else
                {
                    writer.Write("tex2d");
                    ACCTextureEx acctextureEx = mate.texDic[shaderPropTex.key];
                    writer.Write(acctextureEx.editname);
                    writer.Write(acctextureEx.txtpath);
                    ACCMaterialEx.OUT_UTIL.Write(writer, acctextureEx.texOffset);
                    ACCMaterialEx.OUT_UTIL.Write(writer, acctextureEx.texScale);
                }
            }
            for (int j = 0; j < mate.editColors.Length; j++)
            {
                ShaderPropColor shaderPropColor = mate.type.colProps[j];
                EditColor       editColor       = mate.editColors[j];
                writer.Write(shaderPropColor.type.ToString());
                writer.Write(shaderPropColor.keyName);
                ACCMaterialEx.OUT_UTIL.Write(writer, editColor.val);
            }
            for (int k = 0; k < mate.editVals.Length; k++)
            {
                ShaderPropFloat shaderPropFloat = mate.type.fProps[k];
                EditValue       editValue       = mate.editVals[k];
                writer.Write(shaderPropFloat.type.ToString());
                writer.Write(shaderPropFloat.keyName);
                writer.Write(editValue.val);
            }
        }
        // Token: 0x06000202 RID: 514 RVA: 0x00012558 File Offset: 0x00010758
        static ShaderType()
        {
            ShaderPropTex[] array  = new ShaderPropTex[0];
            ShaderPropTex[] array2 = new ShaderPropTex[]
            {
                ShaderPropType.RenderTex
            };
            ShaderPropTex[] array3 = new ShaderPropTex[]
            {
                ShaderPropType.MainTex
            };
            ShaderPropTex[] array4 = new ShaderPropTex[]
            {
                ShaderPropType.MainTexA
            };
            ShaderPropTex[] array5 = new ShaderPropTex[]
            {
                ShaderPropType.MainTex,
                ShaderPropType.ToonRamp,
                ShaderPropType.ShadowTex,
                ShaderPropType.ShadowRateToon
            };
            ShaderPropTex[] array6 = new ShaderPropTex[]
            {
                ShaderPropType.MainTex,
                ShaderPropType.ToonRamp,
                ShaderPropType.ShadowTex,
                ShaderPropType.ShadowRateToon,
                ShaderPropType.OutlineTex,
                ShaderPropType.OutlineToonRamp
            };
            ShaderPropTex[] array7 = new ShaderPropTex[]
            {
                ShaderPropType.MainTexA,
                ShaderPropType.ToonRamp,
                ShaderPropType.ShadowTex,
                ShaderPropType.ShadowRateToon
            };
            ShaderPropTex[] array8 = new ShaderPropTex[]
            {
                ShaderPropType.MainTex,
                ShaderPropType.ToonRamp,
                ShaderPropType.ShadowTex,
                ShaderPropType.ShadowRateToon,
                ShaderPropType.HiTex
            };
            ShaderPropTex[] array9 = new ShaderPropTex[]
            {
                ShaderPropType.MainTex,
                ShaderPropType.ToonRamp,
                ShaderPropType.ShadowTex,
                ShaderPropType.ShadowRateToon,
                ShaderPropType.HiTex,
                ShaderPropType.OutlineTex,
                ShaderPropType.OutlineToonRamp
            };
            ShaderPropTex[] array10 = new ShaderPropTex[]
            {
                ShaderPropType.MainTexA,
                ShaderPropType.OcclusionMap,
                ShaderPropType.MetallicGlossMap,
                ShaderPropType.BumpMap,
                ShaderPropType.ParallaxMap,
                ShaderPropType.EmissionMap,
                ShaderPropType.DetailMask,
                ShaderPropType.DetailAlbedoMap,
                ShaderPropType.DetailNormalMap,
                ShaderPropType.SpecGlossMap
            };
            ShaderPropColor[] array11 = new ShaderPropColor[0];
            ShaderPropColor[] array12 = new ShaderPropColor[]
            {
                ShaderPropType.Color
            };
            ShaderPropColor[] array13 = new ShaderPropColor[]
            {
                ShaderPropType.ColorA
            };
            ShaderPropColor[] array14 = new ShaderPropColor[]
            {
                ShaderPropType.Color,
                ShaderPropType.ShadowColor
            };
            ShaderPropColor[] array15 = new ShaderPropColor[]
            {
                ShaderPropType.ColorA,
                ShaderPropType.ShadowColor
            };
            ShaderPropColor[] array16 = new ShaderPropColor[]
            {
                ShaderPropType.Color,
                ShaderPropType.ShadowColor,
                ShaderPropType.RimColor
            };
            ShaderPropColor[] array17 = new ShaderPropColor[]
            {
                ShaderPropType.ColorA,
                ShaderPropType.ShadowColor,
                ShaderPropType.RimColor
            };
            ShaderPropColor[] array18 = new ShaderPropColor[]
            {
                ShaderPropType.Color,
                ShaderPropType.ShadowColor,
                ShaderPropType.RimColor,
                ShaderPropType.OutlineColor
            };
            ShaderPropColor[] array19 = new ShaderPropColor[]
            {
                ShaderPropType.ColorA,
                ShaderPropType.ShadowColor,
                ShaderPropType.RimColor,
                ShaderPropType.OutlineColor
            };
            ShaderPropFloat[] props  = new ShaderPropFloat[0];
            ShaderPropFloat[] props2 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess
            };
            ShaderPropFloat[] props3 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.Cutoff
            };
            ShaderPropFloat[] props4 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift
            };
            ShaderPropFloat[] props5 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift,
                ShaderPropType.ZTest,
                ShaderPropType.ZTest2,
                ShaderPropType.ZTest2Alpha
            };
            ShaderPropFloat[] props6 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift,
                ShaderPropType.Cutoff
            };
            ShaderPropFloat[] props7 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.OutlineWidth,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift
            };
            ShaderPropFloat[] props8 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift,
                ShaderPropType.HiRate,
                ShaderPropType.HiPow
            };
            ShaderPropFloat[] props9 = new ShaderPropFloat[]
            {
                ShaderPropType.Shininess,
                ShaderPropType.OutlineWidth,
                ShaderPropType.RimPower,
                ShaderPropType.RimShift,
                ShaderPropType.HiRate,
                ShaderPropType.HiPow
            };
            ShaderPropFloat[] props10 = new ShaderPropFloat[]
            {
                ShaderPropType.Cutoff,
                ShaderPropType.OcclusionStrength,
                ShaderPropType.Glossiness,
                ShaderPropType.GlossMapScale,
                ShaderPropType.SpecularHeighlights,
                ShaderPropType.GlossyReflections,
                ShaderPropType.BumpScale,
                ShaderPropType.DetailNormalMapScale
            };
            ShaderType.count = 0;
            List <ShaderType> list = new List <ShaderType>
            {
                new ShaderType("CM3D2/Toony_Lighted", "トゥーン", array5, array16, props4, false),
                new ShaderType("CM3D2/Toony_Lighted_Trans", "トゥーン 透過", array7, array17, props6, true),
                new ShaderType("CM3D2/Toony_Lighted_Trans_NoZ", "トゥーン 透過 NoZ", array7, array17, props4, true),
                new ShaderType("CM3D2/Toony_Lighted_Trans_NoZTest", "トゥーン 透過 NoZTest", array7, array17, props5, true),
                new ShaderType("CM3D2/Toony_Lighted_Outline", "トゥーン 輪郭線", array5, array18, props7, false),
                new ShaderType("CM3D2/Toony_Lighted_Outline_Trans", "トゥーン 輪郭線 透過", array7, array19, props7, true),
                new ShaderType("CM3D2/Toony_Lighted_Outline_Tex", "トゥーン 輪郭線 Tex", array6, array18, props7, false),
                new ShaderType("CM3D2/Toony_Lighted_Hair", "トゥーン 髪", array8, array16, props8, false),
                new ShaderType("CM3D2/Toony_Lighted_Hair_Outline", "トゥーン 髪 輪郭線", array8, array18, props9, false),
                new ShaderType("CM3D2/Toony_Lighted_Hair_Outline_Tex", "トゥーン 髪 輪郭線 Tex", array9, array18, props9, false),
                new ShaderType("CM3D2/Toony_Lighted_Cutout_AtC", "トゥーン Cutout", array7, array17, props6, true),
                new ShaderType("CM3D2/Lighted", "非トゥーン", array3, array14, props2, false),
                new ShaderType("CM3D2/Lighted_Cutout_AtC", "非トゥーン Cutout", array4, array15, props3, false),
                new ShaderType("CM3D2/Lighted_Trans", "透過", array4, array15, props2, true),
                new ShaderType("Unlit/Texture", "発光", array3, array11, props, false),
                new ShaderType("Unlit/Transparent", "発光 透過", array4, array11, props, true),
                new ShaderType("Diffuse", "リアル", array3, array12, props, false),
                new ShaderType("Transparent/Diffuse", "リアル 透過", array4, array13, props, true),
                new ShaderType("CM3D2/Mosaic", "モザイク", array2, array11, new ShaderPropFloat[]
                {
                    ShaderPropType.FloatValue1
                }, false),
                new ShaderType("CM3D2/Man", "ご主人様", array, array12, new ShaderPropFloat[]
                {
                    ShaderPropType.FloatValue2,
                    ShaderPropType.FloatValue3
                }, false),
                new ShaderType("CM3D2_Debug/Debug_CM3D2_Normal2Color", "法線", array, array12, props, false),
                new ShaderType("Standard", "Standard", array10, array12, props10, false)
            };
            IList <ShaderType> list2 = null;

            ShaderType.STANDARD = list[list.Count - 1];
            foreach (ShaderType shaderType in list)
            {
                Shader x = Shader.Find(shaderType.name);
                if (x == null)
                {
                    if (list2 == null)
                    {
                        list2 = new List <ShaderType>();
                    }
                    list2.Add(shaderType);
                }
            }
            if (!Settings.Instance.enableStandard)
            {
                list.Remove(ShaderType.STANDARD);
            }
            if (list2 != null)
            {
                foreach (ShaderType item in list2)
                {
                    list.Remove(item);
                }
            }
            ShaderType.shaders = list.ToArray();
            for (int i = 0; i < ShaderType.shaders.Length; i++)
            {
                ShaderType.shaders[i].idx = i;
            }
            int num = list.IndexOf(ShaderType.STANDARD);

            if (num != -1)
            {
                ShaderType.SHADER_TYPE_STANDARD  = num;
                ShaderType.SHADER_TYPE_CM3D2_MAX = ShaderType.SHADER_TYPE_STANDARD - 1;
            }
            ShaderType.shaderMap = new Dictionary <string, ShaderType>(ShaderType.shaders.Length + 2);
            foreach (ShaderType shaderType2 in ShaderType.shaders)
            {
                ShaderType.shaderMap[shaderType2.name] = shaderType2;
            }
            ShaderType.shaderMap["Legacy Shaders/Transparent/Diffuse"] = ShaderType.shaderMap["Transparent/Diffuse"];
            ShaderType.shaderMap["Legacy Shaders/Diffuse"]             = ShaderType.shaderMap["Diffuse"];
            ShaderType.shader2Map = new Dictionary <string, string>(ShaderType.shaders.Length + 1);
            foreach (ShaderType shaderType3 in ShaderType.shaders)
            {
                ShaderType.shader2Map[shaderType3.name] = shaderType3.name.Replace("/", "__");
            }
            ShaderType.shader2Map["CM3D2/Toony_Lighted_Hair_Outline_Tex"] = "CM3D2__Toony_Lighted_Hair_Outline";
        }
        public static void Initialize() {
            if (!initialized) {
                // 設定値を利用するため、LazyInitとする
                RenderQueue      = new ShaderPropFloat(PropKey._SetManualRenderQueue, EditRange.renderQueue,
                                                       new float[]{0, 5000f,}, null, 3000, 3000, 3100, 3200, 3300);

                Shininess        = new ShaderPropFloat(PropKey._Shininess, EditRange.shininess,
                                                       settings.shininessRange(), FLAG_RATIO, 0, 0, 0.1f, 0.5f, 1, 5);
                OutlineWidth     = new ShaderPropFloat(PropKey._OutlineWidth, EditRange.outlineWidth,
                                                       settings.outlineWidthRange(), null, 0.0001f, 0.0001f, 0.001f, 0.002f);
                RimPower         = new ShaderPropFloat(PropKey._RimPower, EditRange.rimPower,
                                                       settings.rimPowerRange(), FLAG_INV, 0f, 0f, 25f, 50f, 100f);
                RimShift         = new ShaderPropFloat(PropKey._RimShift, EditRange.rimShift,
                                                       settings.rimShiftRange(), FLAG_RATIO, 0f, 0f, 0.25f, 0.5f, 1f);
                HiRate           = new ShaderPropFloat(PropKey._HiRate, EditRange.hiRate, 
                                                       settings.hiRateRange(), FLAG_RATIO, 0f, 0f, 0.5f, 1.0f);
                HiPow            = new ShaderPropFloat(PropKey._HiPow, EditRange.hiPow,
                                                       settings.hiPowRange(), FLAG_RATIO,  0.001f, 0.001f, 1f, 50f);
                FloatValue1      = new ShaderPropFloat(PropKey._FloatValue1, EditRange.floatVal1,
                                                       settings.hiPowRange(), null,  10f, 0f, 100f, 200f);
                FloatValue2      = new ShaderPropFloat(PropKey._FloatValue2, EditRange.floatVal2,
                                                       settings.hiPowRange(), FLAG_INV,  1f, -15, 0f, 1f, 15f);
                FloatValue3      = new ShaderPropFloat(PropKey._FloatValue3, EditRange.floatVal3,
                                                       settings.hiPowRange(), FLAG_RATIO,  1f, 0f, 0.5f, 1f);
                Parallax         = new ShaderPropFloat(PropKey._Parallax, "F4",
                                                       new float[] {0.005f, 0.08f, 0.001f, 0.1f}, FLAG_RATIO, 0.02f, 0.02f);
                Cutoff           = new ShaderPropFloat(PropKey._Cutoff, "F3",
                                                       new float[] {0f, 1f, 0f, 1f}, FLAG_RATIO, 0.5f, 0.5f);
                EmissionLM       = new ShaderPropBool(PropKey._EmissionLM);
                UseMulticolTex   = new ShaderPropBool(PropKey._UseMulticolTex);

                Strength         = new ShaderPropFloat(PropKey._Strength, "F2",
                                                       new float[] {0f, 1f, 0f, 1f}, FLAG_RATIO, 0.2f, 0.2f);
                StencilComp      = new ShaderPropFloat(PropKey._StencilComp, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 8f, 8f);
                Stencil          = new ShaderPropFloat(PropKey._Stencil, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 0f, 0f);
                StencilOp        = new ShaderPropFloat(PropKey._StencilOp, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 0f, 0f);
                StencilWriteMask = new ShaderPropFloat(PropKey._StencilWriteMask, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 255f, 255f);
                StencilReadMask  = new ShaderPropFloat(PropKey._StencilReadMask, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 255f, 255f);
                ColorMask        = new ShaderPropFloat(PropKey._ColorMask, "F0",
                                                       new float[] {0f, 255f, 0f, 255f}, FLAG_RATIO, 255f, 255f);
                EnvAlpha         = new ShaderPropFloat(PropKey._EnvAlpha, "F1",
                                                       new float[] {0f, 1f, 0f, 1f}, FLAG_RATIO, 0f, 0f);
                EnvAdd           = new ShaderPropFloat(PropKey._EnvAdd, "F1",
                                                       new float[] {1f, 2f, 1f, 2f}, FLAG_RATIO, 1f, 1f);

                initialized = true;
            }
        }
Beispiel #8
0
        static void Init()
        {
            var texTypeEmpty = new ShaderPropTex[0];
            var texTypeR     = new ShaderPropTex[] { ShaderPropType.RenderTex, };
            var texType0     = new ShaderPropTex[] { ShaderPropType.MainTex, };
            var texType0a    = new ShaderPropTex[] { ShaderPropType.MainTex_a, };
            var texType1     = new ShaderPropTex[] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, };                       //ShaderPropType.MultiColTex, };
            var texType1a    = new ShaderPropTex[] { ShaderPropType.MainTex_a, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, };                     // ShaderPropType.MultiColTex, };
            var texTypeH     = new ShaderPropTex[] { ShaderPropType.MainTex, ShaderPropType.ToonRamp, ShaderPropType.ShadowTex, ShaderPropType.ShadowRateToon, ShaderPropType.HiTex, }; // ShaderPropType.MultiColTex, };

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

            var propEmpty = new ShaderPropFloat[0];
            var propL     = new ShaderPropFloat[] { ShaderPropType.Shininess, };
            var propTL    = new ShaderPropFloat[] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, };
            var propTLC   = new ShaderPropFloat[] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.Cutoff, };
            var propTLO   = new ShaderPropFloat[] { ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, };
            var propTLH   = new ShaderPropFloat[] { ShaderPropType.Shininess, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow };
            var propTLHO  = new ShaderPropFloat[] { ShaderPropType.Shininess, ShaderPropType.OutlineWidth, ShaderPropType.RimPower, ShaderPropType.RimShift, ShaderPropType.HiRate, ShaderPropType.HiPow };

            ShaderType.count = 0;
            shaders          = new ShaderType[] {
                new ShaderType("CM3D2/Toony_Lighted", "トゥーン", texType1, colTL, propTL),
                new ShaderType("CM3D2/Toony_Lighted_Trans",   "トゥーン 透過", texType1a, colTLa, propTLC, true),
                new ShaderType("CM3D2/Toony_Lighted_Trans_NoZ",   "トゥーン 透過 NoZ", texType1a, colTLa, propTL, true),
                new ShaderType("CM3D2/Toony_Lighted_Outline", "トゥーン 輪郭線", texType1, colTLO, propTLO),
                new ShaderType("CM3D2/Toony_Lighted_Outline_Trans", "トゥーン 輪郭線 透過", texType1a, colTLOa, propTLO, true),
                new ShaderType("CM3D2/Toony_Lighted_Hair", "トゥーン 髪", texTypeH, colTL, propTLH),
                new ShaderType("CM3D2/Toony_Lighted_Hair_Outline", "トゥーン 髪 輪郭線", texTypeH, colTLO, propTLHO),
                new ShaderType("CM3D2/Lighted", "非トゥーン", texType0, colL, propL),
                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 ShaderPropFloat[] { ShaderPropType.FloatValue1 }),
                new ShaderType("CM3D2/Man", "ご主人様", texTypeEmpty, colC, new ShaderPropFloat[] { ShaderPropType.FloatValue2, ShaderPropType.FloatValue3 }),
                new ShaderType("CM3D2_Debug/Debug_CM3D2_Normal2Color", "法線", texTypeEmpty, colC, propEmpty), // Emission
            };
            shaderMap = new Dictionary <string, ShaderType>(shaders.Length);
            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);
            foreach (var s in shaders)
            {
                shader2Map[s.name] = s.name.Replace("/", "__");
            }
            ;
        }
 internal ShaderType(string name, string dispName, ShaderPropTex[] texProps,
                   ShaderPropColor[] colProps, ShaderPropFloat[] props, bool isTrans = false) {
     this.name = name;
     this.dispName = dispName;
     this.texProps = texProps;
     this.colProps = colProps;
     this.fProps    = props;
     this.isTrans  = isTrans;
     
     if (colProps != null) {
         foreach (var colProp in colProps) {
             if (colProp == ShaderPropType.ShadowColor) {
                 hasShadow = true;
                 break;
             }
         }
     }
     this.idx = count++;
 }
 private ShaderType() {
     this.idx = -1;
     name = string.Empty;
     dispName = string.Empty;
     texProps = new ShaderPropTex[0];
     colProps = new ShaderPropColor[0];
     fProps = new ShaderPropFloat[0];
 }
        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";
        }
        public static void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            // 設定値を利用するため、LazyInitとする
            RenderQueue = new ShaderPropFloat(PropKey._SetManualRenderQueue, EditRange.renderQueue,
                                              new[] { 0, 5000f, }, PRESET_PM, 3000, 2000, 3000);

            Shininess = new ShaderPropFloat(PropKey._Shininess, EditRange.shininess,
                                            settings.shininessRange(), PRESET_RATIO, 0, 0, 0.1f, 0.5f, 1, 5);
            OutlineWidth = new ShaderPropFloat(PropKey._OutlineWidth, EditRange.outlineWidth,
                                               settings.outlineWidthRange(), null, 0.0001f, 0.0001f, 0.001f, 0.002f);
            RimPower = new ShaderPropFloat(PropKey._RimPower, EditRange.rimPower,
                                           settings.rimPowerRange(), PRESET_INV, 0f, 0f, 25f, 50f, 100f);
            RimShift = new ShaderPropFloat(PropKey._RimShift, EditRange.rimShift,
                                           settings.rimShiftRange(), PRESET_RATIO, 0f, 0f, 0.25f, 0.5f, 1f);
            HiRate = new ShaderPropFloat(PropKey._HiRate, EditRange.hiRate,
                                         settings.hiRateRange(), PRESET_RATIO, 0f, 0f, 0.5f, 1.0f);
            HiPow = new ShaderPropFloat(PropKey._HiPow, EditRange.hiPow,
                                        settings.hiPowRange(), PRESET_RATIO, 0.001f, 0.001f, 1f, 50f);
            FloatValue1 = new ShaderPropFloat(PropKey._FloatValue1, EditRange.floatVal1,
                                              settings.hiPowRange(), null, 10f, 0f, 100f, 200f);
            FloatValue2 = new ShaderPropFloat(PropKey._FloatValue2, EditRange.floatVal2,
                                              settings.hiPowRange(), PRESET_INV, 1f, -15, 0f, 1f, 15f);
            FloatValue3 = new ShaderPropFloat(PropKey._FloatValue3, EditRange.floatVal3,
                                              settings.hiPowRange(), PRESET_RATIO, 1f, 0f, 0.5f, 1f);
            Parallax = new ShaderPropFloat(PropKey._Parallax, "F3",
                                           new[] { 0.005f, 0.08f, 0.001f, 0.1f }, PRESET_RATIO, 0.02f, 0.02f);
            Cutoff = new ShaderPropFloat(PropKey._Cutoff, "F3",
                                         new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.5f, 0f, 0.5f, 1f);
            Cutout = new ShaderPropFloat(PropKey._Cutout, "F3",
                                         new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.5f, 0f, 0.5f, 1f);
            EmissionLM     = new ShaderPropBool(PropKey._EmissionLM);
            UseMulticolTex = new ShaderPropBool(PropKey._UseMulticolTex);
            ZTest          = new ShaderPropEnum(PropKey._ZTest, typeof(CompareFunction), 4, 0, 8);
            ZTest2         = new ShaderPropBool(PropKey._ZTest2);
            ZTest2Alpha    = new ShaderPropFloat(PropKey._ZTest2Alpha, "F3",
                                                 new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.8f, 0f, 0.8f, 1f);

            Strength = new ShaderPropFloat(PropKey._Strength, "F2",
                                           new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.2f, 0.2f);
            StencilComp = new ShaderPropFloat(PropKey._StencilComp, "F0",
                                              new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 8f, 8f);
            Stencil = new ShaderPropFloat(PropKey._Stencil, "F0",
                                          new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 0f, 0f);
            StencilOp = new ShaderPropFloat(PropKey._StencilOp, "F0",
                                            new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 0f, 0f);
            StencilWriteMask = new ShaderPropFloat(PropKey._StencilWriteMask, "F0",
                                                   new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
            StencilReadMask = new ShaderPropFloat(PropKey._StencilReadMask, "F0",
                                                  new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
            ColorMask = new ShaderPropFloat(PropKey._ColorMask, "F0",
                                            new[] { 0f, 255f, 0f, 255f }, PRESET_RATIO, 255f, 255f);
            EnvAlpha = new ShaderPropFloat(PropKey._EnvAlpha, "F1",
                                           new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0f, 0f);
            EnvAdd = new ShaderPropFloat(PropKey._EnvAdd, "F1",
                                         new[] { 1f, 2f, 1f, 2f }, PRESET_RATIO, 1f, 1f);

            Glossiness = new ShaderPropFloat(PropKey._Glossiness, "F3",
                                             new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0.5f, 0f, 0.5f, 1f);
            GlossMapScale = new ShaderPropFloat(PropKey._GlossMapScale, "F3",
                                                new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 1f, 0f, 0.5f, 1f);
            SmoothnessTexChannel = new ShaderPropEnum(PropKey._SmoothnessTextureChannel,
                                                      new[] { "Metallic Alpha", "Albedo Alpha" }, 0, 0, 1);
            EmissionScaleUI = new ShaderPropFloat(PropKey._EmissionScaleUI, "F3",
                                                  new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0f, 0f, 0.5f, 1f);
            Metallic = new ShaderPropFloat(PropKey._Metallic, "F3",
                                           new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 0f, 0f, 0.5f, 1f);
            BumpScale = new ShaderPropFloat(PropKey._BumpScale, "F3",
                                            new[] { 0.1f, 10f, 0.01f, 100f }, PRESET_RATIO, 1f, 0.1f, 1f, 10f);
            OcclusionStrength = new ShaderPropFloat(PropKey._OcclusionStrength, "F3",
                                                    new[] { 0f, 1f, 0f, 1f }, PRESET_RATIO, 1f, 0f, 0.5f, 1f);
            DetailNormalMapScale = new ShaderPropFloat(PropKey._DetailNormalMapScale, "F3",
                                                       new[] { 0.1f, 10f, 0.01f, 100f }, PRESET_RATIO, 1f, 0.1f, 1f, 10f);
            Mode = new ShaderPropFloat(PropKey._Mode, "F0",
                                       new[] { 0f, 4f, 0f, 4f }, PRESET_EMPTY, 0f, 4f);
            ZWrite = new ShaderPropFloat(PropKey._ZWrite, "F0",
                                         new[] { 0f, 1f, 0f, 1f }, PRESET_EMPTY, 0f, 1f);
            // UV Set for secondary textures
            UVSec               = new ShaderPropEnum(PropKey._UVSec, new[] { "UV0", "UV1" }, 0, 0, 1);
            SrcBlend            = new ShaderPropEnum(PropKey._SrcBlend, typeof(BlendMode), 0, 0, 1);
            DstBlend            = new ShaderPropEnum(PropKey._DstBlend, typeof(BlendMode), 1, 0, 1);
            SpecularHeighlights = new ShaderPropBool(PropKey._SpecularHighlights);
            GlossyReflections   = new ShaderPropBool(PropKey._GlossyReflections);

            _initialized = true;
        }