Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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();
        }