public static void FixBillboardArtifact(Texture2D texture, BillboardQuality billboardQuality) { int rowCount = BillboardAtlasRenderer.GetBillboardQualityRowCount(billboardQuality); int tileWidth = BillboardAtlasRenderer.GetBillboardQualityTileWidth(billboardQuality); int lineCount = tileWidth / 64; int textureWidth = texture.width; for (int i = 0; i <= rowCount - 1; i++) { for (int j = 0; j <= lineCount - 1; j++) { for (int x = 0; x <= textureWidth - 1; x++) { Color pixelColor = texture.GetPixel(x, i * tileWidth + j); pixelColor.a = 0; texture.SetPixel(x, i * tileWidth + j, pixelColor); } } } texture.Apply(); }
private void CreateBillboardMaterials() { ClearBillboardMaterials(); for (int i = 0; i <= VegetationSystem.CurrentVegetationPackage.VegetationInfoList.Count - 1; i++) { if (VegetationSystem.CurrentVegetationPackage.VegetationInfoList[i].VegetationType == VegetationType.Tree && VegetationSystem.CurrentVegetationPackage.VegetationInfoList[i].UseBillboards) //&& VegetationSystem.CurrentVegetationPackage.VegetationInfoList[i].IncludeInTerrain { Material billboardMaterial = new Material(Shader.Find("AwesomeTechnologies/Billboards/GroupBillboards")) { enableInstancing = true }; if (OverrideRenderQueue) { billboardMaterial.renderQueue = RenderQueue; } VegetationItemInfo vegetationItemInfo = VegetationSystem.CurrentVegetationPackage.VegetationInfoList[i]; billboardMaterial.hideFlags = HideFlags.DontSave; billboardMaterial.SetTexture("_MainTex", vegetationItemInfo.BillboardTexture); billboardMaterial.SetTexture("_Bump", vegetationItemInfo.BillboardNormalTexture); billboardMaterial.SetFloat("_Cutoff", vegetationItemInfo.BillboardCutoff); billboardMaterial.SetFloat("_Brightness", vegetationItemInfo.BillboardBrightness); billboardMaterial.SetInt("_InRow", BillboardAtlasRenderer.GetBillboardQualityColumnCount(vegetationItemInfo .BillboardQuality)); billboardMaterial.SetInt("_InCol", BillboardAtlasRenderer.GetBillboardQualityRowCount(vegetationItemInfo .BillboardQuality)); billboardMaterial.SetInt("_CullDistance", 340); billboardMaterial.SetInt("_FarCullDistance", 5000); billboardMaterial.SetColor("_HueVariation", new Color(1f, 0.5f, 0f, 25f / 256f)); billboardMaterial.SetColor("_Color", vegetationItemInfo.BillboardTintColor); billboardMaterial.DisableKeyword("AT_CAMERA_SHADER"); billboardMaterial.EnableKeyword("AT_CAMERA_MATERIAL"); //billboardMaterial.EnableKeyword("LOD_FADE_CROSSFADE"); if (vegetationItemInfo.ShaderType == VegetationShaderType.Speedtree) { billboardMaterial.EnableKeyword("AT_HUE_VARIATION_ON"); billboardMaterial.DisableKeyword("AT_HUE_VARIATION_OFF"); } else { billboardMaterial.DisableKeyword("AT_HUE_VARIATION_ON"); billboardMaterial.EnableKeyword("AT_HUE_VARIATION_OFF"); } _vegetationItemBillboardMaterialList.Add(billboardMaterial); } else { _vegetationItemBillboardMaterialList.Add(null); } } }
void CreateBillboardMaterial() { if (VegetationItemInfo.BillboardRenderMode == BillboardRenderMode.Standard) { BillboardMaterial = new Material(Shader.Find("AwesomeTechnologies/Billboards/GroupBillboards")) { enableInstancing = true, hideFlags = HideFlags.DontSave }; } else { BillboardMaterial = new Material(Shader.Find("AwesomeTechnologies/Billboards/GroupBillboardsSpecular")) { enableInstancing = true, hideFlags = HideFlags.DontSave }; } BillboardMaterial.SetTexture("_MainTex", VegetationItemInfo.BillboardTexture); //BillboardMaterial.SetTexture("_AOTex", VegetationItemInfo.BillboardAoTexture); BillboardMaterial.SetTexture("_Bump", VegetationItemInfo.BillboardNormalTexture); BillboardMaterial.SetInt("_InRow", BillboardAtlasRenderer.GetBillboardQualityColumnCount(VegetationItemInfo .BillboardQuality)); BillboardMaterial.SetInt("_InCol", BillboardAtlasRenderer.GetBillboardQualityRowCount(VegetationItemInfo .BillboardQuality)); BillboardMaterial.SetInt("_CullDistance", 340); BillboardMaterial.SetInt("_FarCullDistance", 5000); if (Application.isPlaying) { BillboardMaterial.EnableKeyword("AT_CAMERA_SHADER"); BillboardMaterial.DisableKeyword("AT_CAMERA_MATERIAL"); } else { BillboardMaterial.DisableKeyword("AT_CAMERA_SHADER"); BillboardMaterial.EnableKeyword("AT_CAMERA_MATERIAL"); } if (ShaderControler != null && ShaderControler.Settings.DynamicHUE) { BillboardMaterial.EnableKeyword("AT_HUE_VARIATION_ON"); BillboardMaterial.DisableKeyword("AT_HUE_VARIATION_OFF"); } else { BillboardMaterial.DisableKeyword("AT_HUE_VARIATION_ON"); BillboardMaterial.EnableKeyword("AT_HUE_VARIATION_OFF"); } if (ShaderControler != null) { if (ShaderControler.Settings.BillboardSnow) { BillboardMaterial.EnableKeyword("USE_SNOW"); } else { BillboardMaterial.DisableKeyword("USE_SNOW"); } if (ShaderControler.Settings.BillboardHDWind) { BillboardMaterial.EnableKeyword("USE_HDWIND"); } else { BillboardMaterial.DisableKeyword("USE_HDWIND"); } } UpdateBillboardMaterial(); }