Esempio n. 1
0
        public static void Init()
        {
            //-----------------------------------------------------------------------------
            // Water
            //-----------------------------------------------------------------------------

            ShaderData WaterShader = new ShaderData("WaterShader")
            {
                DXVertexShaderFile  = Globals.GetString("Core::CommonShaderPath") + "/water/waterV.hlsl",
                DXPixelShaderFile   = Globals.GetString("Core::CommonShaderPath") + "/water/waterP.hlsl",
                OGLVertexShaderFile = Globals.GetString("Core::CommonShaderPath") + "/water/gl/waterV.glsl",
                OGLPixelShaderFile  = Globals.GetString("Core::CommonShaderPath") + "/water/gl/waterP.glsl",
                SamplerNames        =
                {
                    [0] = "$bumpMap",     // noise
                    [1] = "$prepassTex",  // #prepass
                    [2] = "$reflectMap",  // $reflectbuff
                    [3] = "$refractBuff", // $backbuff
                    [4] = "$skyMap",      // $cubemap
                    [5] = "$foamMap",     // foam
                    [6] = "$depthGradMap" // depthMap ( color gradient )
                },

                PixVersion = 3.0f
            };

            WaterShader.registerSingleton();

            GFXSamplerStateData WaterSampler = new GFXSamplerStateData("WaterSampler")
            {
                TextureColorOp = GFXTextureOp.GFXTOPModulate,
                AddressModeU   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeV   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeW   = GFXTextureAddressMode.GFXAddressWrap,
                MagFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MinFilter      = GFXTextureFilterType.GFXTextureFilterAnisotropic,
                MipFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MaxAnisotropy  = 4
            };

            WaterSampler.registerSingleton();

            GFXStateBlockData WaterStateBlock = new GFXStateBlockData("WaterStateBlock")
            {
                SamplersDefined = true,
                SamplerStates   =
                {
                    [0] = WaterSampler,                          // noise
                    [1] = CommonMaterialData.SamplerClampPoint,  // #prepass
                    [2] = CommonMaterialData.SamplerClampLinear, // $reflectbuff
                    [3] = CommonMaterialData.SamplerClampPoint,  // $backbuff
                    [4] = CommonMaterialData.SamplerWrapLinear,  // $cubemap
                    [5] = CommonMaterialData.SamplerWrapLinear,  // foam
                    [6] = CommonMaterialData.SamplerClampLinear  // depthMap ( color gradient )
                },
                CullDefined = true,
                CullMode    = GFXCullMode.GFXCullCCW
            };

            WaterStateBlock.registerSingleton();

            GFXStateBlockData UnderWaterStateBlock = new GFXStateBlockData("UnderWaterStateBlock", WaterStateBlock)
            {
                CullMode = GFXCullMode.GFXCullCCW
            };

            UnderWaterStateBlock.registerSingleton();

            CustomMaterial WaterMat = new CustomMaterial("WaterMat")
            {
                Shader         = "WaterShader",
                StateBlock     = WaterStateBlock,
                Version        = 3.0f,
                UseAnisotropic = { [0] = true }
            };

            WaterMat.setFieldValue("sampler[prepassTex]", "#prepass");
            WaterMat.setFieldValue("sampler[reflectMap]", "$reflectbuff");
            WaterMat.setFieldValue("sampler[refractBuff]", "$backbuff");
            // These samplers are set in code not here.
            // This is to allow different WaterObject instances
            // to use this same material but override these textures
            // per instance.
            //sampler["bumpMap"] = "";
            //sampler["skyMap"] = "";
            //sampler["foamMap"] = "";
            //sampler["depthGradMap"] = "";
            WaterMat.registerSingleton();

            //-----------------------------------------------------------------------------
            // Underwater
            //-----------------------------------------------------------------------------

            new ShaderData("UnderWaterShader", WaterShader)
            {
                Defines = "UNDERWATER"
            }.registerSingleton();

            CustomMaterial UnderwaterMat = new CustomMaterial("UnderwaterMat")
            {
                // These samplers are set in code not here.
                // This is to allow different WaterObject instances
                // to use this same material but override these textures
                // per instance.
                //sampler["bumpMap"] = "art/images/water/noise02";
                //sampler["foamMap"] = "art/images/water/foam";

                Shader        = "UnderWaterShader",
                StateBlock    = UnderWaterStateBlock,
                Specular      = { [0] = new ColorF(0.75f, 0.75f, 0.75f, 1.0f) },
                SpecularPower = { [0] = 48.0f },
                Version       = 3.0f
            };

            UnderwaterMat.setFieldValue("sampler[prepassTex]", "#prepass");
            UnderwaterMat.setFieldValue("sampler[refractBuff]", "$backbuff");
            UnderwaterMat.registerSingleton();

            //-----------------------------------------------------------------------------
            // Basic Water
            //-----------------------------------------------------------------------------

            ShaderData WaterBasicShader = new ShaderData("WaterBasicShader")
            {
                DXVertexShaderFile  = Globals.GetString("Core::CommonShaderPath") + "/water/waterBasicV.hlsl",
                DXPixelShaderFile   = Globals.GetString("Core::CommonShaderPath") + "/water/waterBasicP.hlsl",
                OGLVertexShaderFile = Globals.GetString("Core::CommonShaderPath") + "/water/gl/waterBasicV.glsl",
                OGLPixelShaderFile  = Globals.GetString("Core::CommonShaderPath") + "/water/gl/waterBasicP.glsl",
                SamplerNames        =
                {
                    [0] = "$bumpMap",
                    [2] = "$reflectMap",
                    [3] = "$refractBuff",
                    [4] = "$skyMap",
                    [5] = "$depthGradMap"
                },
                PixVersion = 2.0f
            };

            WaterBasicShader.registerSingleton();

            GFXStateBlockData WaterBasicStateBlock = new GFXStateBlockData("WaterBasicStateBlock")
            {
                SamplersDefined = true,
                SamplerStates   =
                {
                    [0] = WaterSampler,                          // noise
                    [2] = CommonMaterialData.SamplerClampLinear, // $reflectbuff
                    [3] = CommonMaterialData.SamplerClampPoint,  // $backbuff
                    [4] = CommonMaterialData.SamplerWrapLinear   // $cubemap
                },
                CullDefined = true,
                CullMode    = GFXCullMode.GFXCullCCW
            };

            WaterBasicStateBlock.registerSingleton();

            GFXStateBlockData UnderWaterBasicStateBlock = new GFXStateBlockData("UnderWaterBasicStateBlock",
                                                                                WaterBasicStateBlock)
            {
                CullMode = GFXCullMode.GFXCullCCW
            };

            UnderWaterBasicStateBlock.registerSingleton();

            CustomMaterial WaterBasicMat = new CustomMaterial("WaterBasicMat")
            {
                // These samplers are set in code not here.
                // This is to allow different WaterObject instances
                // to use this same material but override these textures
                // per instance.
                //sampler["bumpMap"] = "art/images/water/noise02";
                //sampler["skyMap"] = "$cubemap";

                //sampler["prepassTex"] = "#prepass";

                Cubemap    = "NewLevelSkyCubemap",
                Shader     = "WaterBasicShader",
                StateBlock = WaterBasicStateBlock,
                Version    = 2.0f
            };

            WaterBasicMat.setFieldValue("sampler[reflectMap]", "$reflectbuff");
            WaterBasicMat.setFieldValue("sampler[refractBuff]", "$backbuff");
            WaterBasicMat.registerSingleton();

            //-----------------------------------------------------------------------------
            // Basic UnderWater
            //-----------------------------------------------------------------------------

            new ShaderData("UnderWaterBasicShader", WaterBasicShader)
            {
                Defines = "UNDERWATER"
            }.registerSingleton();

            CustomMaterial UnderwaterBasicMat = new CustomMaterial("UnderwaterBasicMat")
            {
                // These samplers are set in code not here.
                // This is to allow different WaterObject instances
                // to use this same material but override these textures
                // per instance.
                //sampler["bumpMap"] = "art/images/water/noise02";
                //samplers["skyMap"] = "$cubemap";

                //sampler["prepassTex"] = "#prepass";

                Shader     = "UnderWaterBasicShader",
                StateBlock = UnderWaterBasicStateBlock,
                Version    = 2.0f
            };

            UnderwaterBasicMat.setFieldValue("sampler[refractBuff]", "$backbuff");
            UnderwaterBasicMat.registerSingleton();
        }
        public static void Init()
        {
            //-----------------------------------------------------------------------------
            // Anim flag settings - must match material.h
            // These cannot be enumed through script becuase it cannot
            // handle the "|" operation for combining them together
            // ie. Scroll | Wave does not work.
            //-----------------------------------------------------------------------------
            Globals.SetInt("scroll", 1);
            Globals.SetInt("rotate", 2);
            Globals.SetInt("wave", 4);
            Globals.SetInt("scale", 8);
            Globals.SetInt("sequence", 16);

            // Common stateblock definitions
            SamplerClampLinear = new GFXSamplerStateData("SamplerClampLinear")
            {
                TextureColorOp = GFXTextureOp.GFXTOPModulate,
                AddressModeU   = GFXTextureAddressMode.GFXAddressClamp,
                AddressModeV   = GFXTextureAddressMode.GFXAddressClamp,
                AddressModeW   = GFXTextureAddressMode.GFXAddressClamp,
                MagFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MinFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MipFilter      = GFXTextureFilterType.GFXTextureFilterLinear
            };
            SamplerClampLinear.registerSingleton();

            SamplerClampPoint = new GFXSamplerStateData("SamplerClampPoint")
            {
                TextureColorOp = GFXTextureOp.GFXTOPModulate,
                AddressModeU   = GFXTextureAddressMode.GFXAddressClamp,
                AddressModeV   = GFXTextureAddressMode.GFXAddressClamp,
                AddressModeW   = GFXTextureAddressMode.GFXAddressClamp,
                MagFilter      = GFXTextureFilterType.GFXTextureFilterPoint,
                MinFilter      = GFXTextureFilterType.GFXTextureFilterPoint,
                MipFilter      = GFXTextureFilterType.GFXTextureFilterPoint
            };
            SamplerClampPoint.registerSingleton();

            SamplerWrapLinear = new GFXSamplerStateData("SamplerWrapLinear")
            {
                TextureColorOp = GFXTextureOp.GFXTOPModulate,
                AddressModeU   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeV   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeW   = GFXTextureAddressMode.GFXAddressWrap,
                MagFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MinFilter      = GFXTextureFilterType.GFXTextureFilterLinear,
                MipFilter      = GFXTextureFilterType.GFXTextureFilterLinear
            };
            SamplerWrapLinear.registerSingleton();

            SamplerWrapPoint = new GFXSamplerStateData("SamplerWrapPoint")
            {
                TextureColorOp = GFXTextureOp.GFXTOPModulate,
                AddressModeU   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeV   = GFXTextureAddressMode.GFXAddressWrap,
                AddressModeW   = GFXTextureAddressMode.GFXAddressWrap,
                MagFilter      = GFXTextureFilterType.GFXTextureFilterPoint,
                MinFilter      = GFXTextureFilterType.GFXTextureFilterPoint,
                MipFilter      = GFXTextureFilterType.GFXTextureFilterPoint
            };
            SamplerWrapPoint.registerSingleton();
        }