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; }
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 }; }
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); } }
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; }