Example #1
0
        internal static void Set(MyRenderVoxelMaterialData[] list, bool update = false)
        {
            if (!update)
                Array.Resize(ref Table, list.Length);

            for (int i = 0; i < list.Length; i++)
            {
                // copy data 
                int index = update ? list[i].Index : i;

                Table[index].Near.ColorMetalXZnY_Texture = X.TEXT_(list[i].ColorMetalXZnY);
                Table[index].Near.ColorMetalpY_Texture = X.TEXT_(list[i].ColorMetalY);
                Table[index].Near.NormalGlossXZnY_Texture = X.TEXT_(list[i].NormalGlossXZnY);
                Table[index].Near.NormalGlossY_Texture = X.TEXT_(list[i].NormalGlossY);
                Table[index].Near.ExtXZnY_Texture = X.TEXT_(list[i].ExtXZnY);
                Table[index].Near.ExtY_Texture = X.TEXT_(list[i].ExtY);

                Table[index].Far1.ColorMetalXZnY_Texture = X.TEXT_(list[i].ColorMetalXZnYFar1);
                Table[index].Far1.ColorMetalpY_Texture = X.TEXT_(list[i].ColorMetalYFar1);
                Table[index].Far1.NormalGlossXZnY_Texture = X.TEXT_(list[i].NormalGlossXZnYFar1);
                Table[index].Far1.NormalGlossY_Texture = X.TEXT_(list[i].NormalGlossYFar1);
                Table[index].Far1.ExtXZnY_Texture = X.TEXT_(list[i].ExtXZnYFar1);
                Table[index].Far1.ExtY_Texture = X.TEXT_(list[i].ExtYFar1);

                Table[index].Far2.ColorMetalXZnY_Texture = X.TEXT_(list[i].ColorMetalXZnYFar2);
                Table[index].Far2.ColorMetalpY_Texture = X.TEXT_(list[i].ColorMetalYFar2);
                Table[index].Far2.NormalGlossXZnY_Texture = X.TEXT_(list[i].NormalGlossXZnYFar2);
                Table[index].Far2.NormalGlossY_Texture = X.TEXT_(list[i].NormalGlossYFar2);
                Table[index].Far2.ExtXZnY_Texture = X.TEXT_(list[i].ExtXZnYFar2);
                Table[index].Far2.ExtY_Texture = X.TEXT_(list[i].ExtYFar2);

                Table[index].FoliageArray_Texture = list[i].ExtensionTextureArray1;
                Table[index].FoliageArray_NormalTexture = list[i].ExtensionTextureArray2;

                MyFileArrayTextureManager arrayManager = MyManagers.FileArrayTextures;
                if (list[i].FoliageColorTextureArray != null)
                    Table[index].FoliageColorTextureArray = arrayManager.CreateFromFiles("MyVoxelMaterial1.FoliageColorTextureArray", list[i].FoliageColorTextureArray, MyFileTextureEnum.COLOR_METAL);
                else
                    Table[index].FoliageColorTextureArray = null;
                
                if (list[i].FoliageNormalTextureArray != null)
                    Table[index].FoliageNormalTextureArray = arrayManager.CreateFromFiles("MyVoxelMaterial1.FoliageNormalTextureArray", list[i].FoliageNormalTextureArray, MyFileTextureEnum.NORMALMAP_GLOSS);
                else
                    Table[index].FoliageNormalTextureArray = null;
                
                Table[index].FoliageDensity = list[i].ExtensionDensity;
                Table[index].FoliageScale = list[i].ExtensionScale;
                Table[index].FoliageScaleVariation = list[i].ExtensionRandomRescaleMult;
                Table[index].FoliageType = list[i].ExtensionType;

                Table[index].DistanceAndScale = list[i].DistanceAndScale;
                Table[index].DistanceAndScaleFar = list[i].DistanceAndScaleFar;
                Table[index].DistanceAndScaleFar3 = list[i].DistanceAndScaleFar3;
                Table[index].Far3Color = list[i].Far3Color;
                Table[index].ExtensionDetailScale = list[i].ExtensionDetailScale;

                MaterialQueryResourcesTable.Add(index);
            }
        }
        //  Parameter 'useTwoTexturesPerMaterial' tells us if we use two textures per material. One texture for axis XZ and second for axis Y.
        //  Use it for rock/stone materials. Don't use it for gold/silver, because there you don't need to make difference between side and bottom materials.
        //  Using this we save texture memory, but pixel shader still used differenced textures (two samplers looking to same texture)
        public MyRenderVoxelMaterial(MyRenderVoxelMaterialData data)
        {
            //  SpecularPower must be > 0, because pow() makes NaN results if called with zero
            MyDebug.AssertRelease(data.SpecularPower > 0);

            m_diffuseXZ = data.DiffuseXZ;
            m_diffuseY = data.DiffuseY;
            m_normalXZ = data.NormalXZ;
            m_normalY = data.NormalY;
            SpecularIntensity = data.SpecularShininess;
            SpecularPower = data.SpecularPower;
            m_materialIndex = data.Index;
        }
        //  Parameter 'useTwoTexturesPerMaterial' tells us if we use two textures per material. One texture for axis XZ and second for axis Y.
        //  Use it for rock/stone materials. Don't use it for gold/silver, because there you don't need to make difference between side and bottom materials.
        //  Using this we save texture memory, but pixel shader still used differenced textures (two samplers looking to same texture)
        public MyRenderVoxelMaterial(MyRenderVoxelMaterialData data)
        {
            //  SpecularPower must be > 0, because pow() makes NaN results if called with zero
            MyDebug.AssertRelease(data.SpecularPower > 0);

            m_diffuseXZ = data.DiffuseXZ;
            m_diffuseY = data.DiffuseY;
            m_normalXZ = data.NormalXZ;
            m_normalY = data.NormalY;
            SpecularIntensity = data.SpecularShininess;
            SpecularPower = data.SpecularPower;
            m_materialIndex = data.Index;

            DistancesAndScale = data.DistanceAndScale;
            DistancesAndScaleFar = data.DistanceAndScaleFar;
            ExtensionDetailScale = data.ExtensionDetailScale;
            DistancesAndScaleFar3 = data.DistanceAndScaleFar3;
            Far3Color = data.Far3Color;
        }
Example #4
0
        internal static void Set(MyRenderVoxelMaterialData[] list)
        {

            Array.Resize(ref Table, list.Length);

            for (int i = 0; i < list.Length; i++)
            {
                // copy data :O

                Table[i].Near.ColorMetalXZnY_Texture  = MyStringId.GetOrCompute(list[i].ColorMetalXZnY);
                Table[i].Near.ColorMetalpY_Texture    = MyStringId.GetOrCompute(list[i].ColorMetalY);
                Table[i].Near.NormalGlossXZnY_Texture = MyStringId.GetOrCompute(list[i].NormalGlossXZnY);
                Table[i].Near.NormalGlosspY_Texture   = MyStringId.GetOrCompute(list[i].NormalGlossY);
                Table[i].Near.ExtXZnY_Texture         = MyStringId.GetOrCompute(list[i].ExtXZnY);
                Table[i].Near.ExtpY_Texture           = MyStringId.GetOrCompute(list[i].ExtY);
                Table[i].Near.TextureScale = list[i].Scale;

                Table[i].Far1.ColorMetalXZnY_Texture  = MyStringId.GetOrCompute(list[i].ColorMetalXZnYFar1);
                Table[i].Far1.ColorMetalpY_Texture    = MyStringId.GetOrCompute(list[i].ColorMetalYFar1);
                Table[i].Far1.NormalGlossXZnY_Texture = MyStringId.GetOrCompute(list[i].NormalGlossXZnYFar1);
                Table[i].Far1.NormalGlosspY_Texture   = MyStringId.GetOrCompute(list[i].NormalGlossYFar1);
                Table[i].Far1.ExtXZnY_Texture         = MyStringId.GetOrCompute(list[i].ExtXZnYFar1);
                Table[i].Far1.ExtpY_Texture           = MyStringId.GetOrCompute(list[i].ExtYFar1);
                Table[i].Far1.TextureScale            = list[i].ScaleFar1;

                Table[i].Far2.ColorMetalXZnY_Texture  = MyStringId.GetOrCompute(list[i].ColorMetalXZnYFar2);
                Table[i].Far2.ColorMetalpY_Texture    = MyStringId.GetOrCompute(list[i].ColorMetalYFar2);
                Table[i].Far2.NormalGlossXZnY_Texture = MyStringId.GetOrCompute(list[i].NormalGlossXZnYFar2);
                Table[i].Far2.NormalGlosspY_Texture   = MyStringId.GetOrCompute(list[i].NormalGlossYFar2);
                Table[i].Far2.ExtXZnY_Texture         = MyStringId.GetOrCompute(list[i].ExtXZnYFar2);
                Table[i].Far2.ExtpY_Texture           = MyStringId.GetOrCompute(list[i].ExtYFar2);
                Table[i].Far2.TextureScale = list[i].ScaleFar2;

                Table[i].FoliageArray_Texture = list[i].ExtensionTextureArray1;
                Table[i].FoliageDensity = list[i].ExtensionDensity;
                Table[i].FoliageScale = list[i].ExtensionScale;
                Table[i].FoliageScaleVariation = list[i].ExtensionRandomRescaleMult;

                MaterialQueryResourcesTable.Add(i);
            }
        }
        internal static void Add(ref MyRenderVoxelMaterialData materialData)
        {
            //  Check if not yet assigned
            MyDebug.AssertRelease(!m_materials.ContainsKey(materialData.Index));

            //  Create and add into array
            MyRenderVoxelMaterial voxelMaterial = new MyRenderVoxelMaterial(materialData);
            m_materials[materialData.Index] = voxelMaterial;
        }
 public virtual void CreateRenderData(out MyRenderVoxelMaterialData renderData)
 {
     renderData = new MyRenderVoxelMaterialData()
     {
         Index             = this.Index,
         DiffuseXZ         = this.DiffuseXZ,
         NormalXZ          = this.NormalXZ,
         DiffuseY          = this.DiffuseY,
         NormalY           = this.NormalY,
         SpecularPower     = this.SpecularPower,
         SpecularShininess = this.SpecularShininess
     };
 }
Example #7
0
        internal static void Set(MyRenderVoxelMaterialData[] list, bool update = false)
        {
            if (!update)
                Array.Resize(ref Table, list.Length);

            for (int i = 0; i < list.Length; i++)
            {
                // copy data 
                int index = update ? list[i].Index : i;

                Table[index].Resource.ColorMetalXZnY_Filepaths = CreateStringArray(list[i].ColorMetalXZnY,
                    list[i].ColorMetalXZnYFar1, list[i].ColorMetalXZnYFar2);
                Table[index].Resource.ColorMetalY_Filepaths = CreateStringArray(list[i].ColorMetalY,
                    list[i].ColorMetalYFar1, list[i].ColorMetalYFar2);
                Table[index].Resource.NormalGlossXZnY_Filepaths = CreateStringArray(list[i].NormalGlossXZnY,
                    list[i].NormalGlossXZnYFar1, list[i].NormalGlossXZnYFar2);
                Table[index].Resource.NormalGlossY_Filepaths = CreateStringArray(list[i].NormalGlossY, 
                    list[i].NormalGlossYFar1, list[i].NormalGlossYFar2);
                Table[index].Resource.ExtXZnY_Filepaths = CreateStringArray(list[i].ExtXZnY, 
                    list[i].ExtXZnYFar1, list[i].ExtXZnYFar2);
                Table[index].Resource.ExtY_Filepaths = CreateStringArray(list[i].ExtY, list[i].ExtYFar1, list[i].ExtYFar2);
                
                Table[index].FoliageArray_Texture = list[i].ExtensionTextureArray1;
                Table[index].FoliageArray_NormalTexture = list[i].ExtensionTextureArray2;

                MyFileArrayTextureManager arrayManager = MyManagers.FileArrayTextures;
                if (list[i].FoliageColorTextureArray != null)
                    Table[index].FoliageColorTextureArray = arrayManager.CreateFromFiles("MyVoxelMaterial1.FoliageColorTextureArray", list[i].FoliageColorTextureArray, MyFileTextureEnum.COLOR_METAL, MyGeneratedTexturePatterns.ColorMetal_BC7_SRgb, Format.BC7_UNorm_SRgb, true);
                else
                    Table[index].FoliageColorTextureArray = null;
                
                if (list[i].FoliageNormalTextureArray != null)
                    Table[index].FoliageNormalTextureArray = arrayManager.CreateFromFiles("MyVoxelMaterial1.FoliageNormalTextureArray", list[i].FoliageNormalTextureArray, MyFileTextureEnum.NORMALMAP_GLOSS, MyGeneratedTexturePatterns.NormalGloss_BC7, Format.BC7_UNorm, true);
                else
                    Table[index].FoliageNormalTextureArray = null;
                
                Table[index].FoliageDensity = list[i].ExtensionDensity;
                Table[index].FoliageScale = list[i].ExtensionScale;
                Table[index].FoliageScaleVariation = list[i].ExtensionRandomRescaleMult;
                Table[index].FoliageType = list[i].ExtensionType;

                Table[index].DistanceAndScale = list[i].DistanceAndScale;
                Table[index].DistanceAndScaleFar = list[i].DistanceAndScaleFar;
                Table[index].DistanceAndScaleFar3 = list[i].DistanceAndScaleFar3;
                Table[index].Far3Color = list[i].Far3Color;
                Table[index].ExtensionDetailScale = list[i].ExtensionDetailScale;

                MaterialQueryResourcesTable.Add(index);
            }
        }
Example #8
0
 internal static bool CheckIndices(MyRenderVoxelMaterialData[] list)
 {
     for (int i = 0; i < list.Length; i++)
     {
         if (list[i].Index != i)
         {
             return false;
         }
     }
     return true;
 }
        public static void CreateRenderVoxelMaterials(
            MyRenderVoxelMaterialData[] materials
            )
        {
            var message = MessagePool.Get<MyRenderMessageCreateRenderVoxelMaterials>(MyRenderMessageEnum.CreateRenderVoxelMaterials);

            message.Materials = materials;

            EnqueueMessage(message);
        }
        public override void CreateRenderData(out MyRenderVoxelMaterialData renderData)
        {
            base.CreateRenderData(out renderData);

            renderData.ColorMetalXZnY               = this.ColorMetalXZnY;
            renderData.ColorMetalY                  = this.ColorMetalY;
            renderData.NormalGlossXZnY              = this.NormalGlossXZnY;
            renderData.NormalGlossY                 = this.NormalGlossY;
            renderData.ExtXZnY = this.ExtXZnY;
            renderData.ExtY = this.ExtY;

            renderData.ColorMetalXZnYFar1   = this.ColorMetalXZnYFar1;
            renderData.ColorMetalYFar1      = this.ColorMetalYFar1;
            renderData.NormalGlossXZnYFar1  = this.NormalGlossXZnYFar1;
            renderData.NormalGlossYFar1     = this.NormalGlossYFar1;
            renderData.ExtXZnYFar1 = this.ExtXZnYFar1;
            renderData.ExtYFar1 = this.ExtYFar1;

            renderData.ColorMetalXZnYFar2 = this.ColorMetalXZnYFar2;
            renderData.ColorMetalYFar2 = this.ColorMetalYFar2;
            renderData.NormalGlossXZnYFar2 = this.NormalGlossXZnYFar2;
            renderData.NormalGlossYFar2 = this.NormalGlossYFar2;
            renderData.ExtXZnYFar2 = this.ExtXZnYFar2;
            renderData.ExtYFar2 = this.ExtYFar2;

            renderData.Scale           = this.Scale;
            renderData.ScaleFar1            = this.ScaleFar1;
            renderData.ScaleFar2 = this.ScaleFar2;

            renderData.ExtensionTextureArray1        = this.FoliageTextureArray1;
            renderData.ExtensionTextureArray2      = this.FoliageTextureArray2;
            renderData.ExtensionDensity             = this.FoliageDensity;
            renderData.ExtensionScale               = this.FoliageScale;
            renderData.ExtensionRandomRescaleMult   = this.FoliageRandomRescaleMult;
        }
        public override void CreateRenderData(out MyRenderVoxelMaterialData renderData)
        {
            base.CreateRenderData(out renderData);

            renderData.ColorMetalXZnY               = this.ColorMetalXZnY;
            FillString(ref renderData.ColorMetalY, ref this.ColorMetalY, ref ColorMetalXZnY);
            renderData.NormalGlossXZnY              = this.NormalGlossXZnY;
            FillString(ref renderData.NormalGlossY, ref this.NormalGlossY, ref NormalGlossXZnY);
            renderData.ExtXZnY = this.ExtXZnY;
            FillString(ref renderData.ExtY, ref this.ExtY, ref ExtXZnY);

            FillString(ref renderData.ColorMetalXZnYFar1, ref ColorMetalXZnYFar1, ref ColorMetalXZnY);
            FillString(ref renderData.ColorMetalYFar1, ref ColorMetalYFar1, ref renderData.ColorMetalXZnYFar1);
            FillString(ref renderData.NormalGlossXZnYFar1, ref this.NormalGlossXZnYFar1, ref NormalGlossXZnY);
            FillString(ref renderData.NormalGlossYFar1, ref NormalGlossYFar1, ref renderData.NormalGlossXZnYFar1);
            FillString(ref renderData.ExtXZnYFar1, ref this.ExtXZnYFar1, ref ExtXZnY);
            FillString(ref renderData.ExtYFar1, ref ExtYFar1, ref renderData.ExtXZnYFar1);

            FillString(ref renderData.ColorMetalXZnYFar2, ref ColorMetalXZnYFar2, ref renderData.ColorMetalXZnYFar1);
            FillString(ref renderData.ColorMetalYFar2, ref ColorMetalYFar2, ref renderData.ColorMetalXZnYFar2);
            FillString(ref renderData.NormalGlossXZnYFar2, ref this.NormalGlossXZnYFar2, ref renderData.NormalGlossXZnYFar1);
            FillString(ref renderData.NormalGlossYFar2, ref NormalGlossYFar2, ref renderData.NormalGlossXZnYFar2);
            FillString(ref renderData.ExtXZnYFar2, ref this.ExtXZnYFar2, ref renderData.ExtXZnYFar1);
            FillString(ref renderData.ExtYFar2, ref ExtYFar2, ref renderData.ExtXZnYFar2);

            renderData.DistanceAndScale = new Vector4(InitialScale, InitialDistance, ScaleMultiplier, DistanceMultiplier);
            renderData.DistanceAndScaleFar = new Vector4(Far1Scale, Far1Distance, Far2Scale, Far2Distance);
            renderData.DistanceAndScaleFar3 = new Vector2(Far3Scale, Far3Distance);
            renderData.Far3Color = Far3Color;
            renderData.ExtensionDetailScale = ExtensionDetailScale;

            renderData.ExtensionTextureArray1       = this.FoliageTextureArray1;
            renderData.ExtensionTextureArray2       = this.FoliageTextureArray2;
            renderData.FoliageColorTextureArray     = this.FoliageColorTextureArray;
            renderData.FoliageNormalTextureArray    = this.FoliageNormalTextureArray;
            renderData.ExtensionDensity             = this.FoliageDensity;
            renderData.ExtensionScale               = this.FoliageScale;
            renderData.ExtensionRandomRescaleMult   = this.FoliageRandomRescaleMult;
            renderData.ExtensionType                = this.FoliageType;
        }
        public override void CreateRenderData(out MyRenderVoxelMaterialData renderData)
        {
            base.CreateRenderData(out renderData);

            renderData.ColorMetalXZnY               = this.ColorMetalXZnY;
            FillString(ref renderData.ColorMetalY, ref this.ColorMetalY, ref ColorMetalXZnY);
            renderData.NormalGlossXZnY              = this.NormalGlossXZnY;
            FillString(ref renderData.NormalGlossY, ref this.NormalGlossY, ref NormalGlossXZnY);
            renderData.ExtXZnY = this.ExtXZnY;
            FillString(ref renderData.ExtY, ref this.ExtY, ref ExtXZnY);

            FillString(ref renderData.ColorMetalXZnYFar1, ref ColorMetalXZnYFar1, ref ColorMetalXZnY);
            FillString(ref renderData.ColorMetalYFar1, ref ColorMetalYFar1, ref renderData.ColorMetalXZnYFar1);
            FillString(ref renderData.NormalGlossXZnYFar1, ref this.NormalGlossXZnYFar1, ref NormalGlossXZnY);
            FillString(ref renderData.NormalGlossYFar1, ref NormalGlossYFar1, ref renderData.NormalGlossXZnYFar1);
            FillString(ref renderData.ExtXZnYFar1, ref this.ExtXZnYFar1, ref ExtXZnY);
            FillString(ref renderData.ExtYFar1, ref ExtYFar1, ref renderData.ExtXZnYFar1);

            FillString(ref renderData.ColorMetalXZnYFar2, ref ColorMetalXZnYFar2, ref renderData.ColorMetalXZnYFar1);
            FillString(ref renderData.ColorMetalYFar2, ref ColorMetalYFar2, ref renderData.ColorMetalXZnYFar2);
            FillString(ref renderData.NormalGlossXZnYFar2, ref this.NormalGlossXZnYFar2, ref renderData.NormalGlossXZnYFar1);
            FillString(ref renderData.NormalGlossYFar2, ref NormalGlossYFar2, ref renderData.NormalGlossXZnYFar2);
            FillString(ref renderData.ExtXZnYFar2, ref this.ExtXZnYFar2, ref renderData.ExtXZnYFar1);
            FillString(ref renderData.ExtYFar2, ref ExtYFar2, ref renderData.ExtXZnYFar2); 

            renderData.Scale           = this.Scale;
            renderData.ScaleFar1            = this.ScaleFar1;
            renderData.ScaleFar2 = this.ScaleFar2;
            renderData.ScaleFar3 = this.ScaleFar3;
            renderData.ScaleFar4 = this.ScaleFar4;


            renderData.ExtensionTextureArray1        = this.FoliageTextureArray1;
            renderData.ExtensionTextureArray2      = this.FoliageTextureArray2;
            renderData.ExtensionDensity             = this.FoliageDensity;
            renderData.ExtensionScale               = this.FoliageScale;
            renderData.ExtensionRandomRescaleMult   = this.FoliageRandomRescaleMult;
        }