Пример #1
0
        public static Texture2D GenerateBillboardNormalTexture(GameObject prefab, BillboardQuality billboardQuality,
                                                               LODLevel billboardSourceLODLevel, Quaternion rotationOffset, string overrideBillboardAtlasNormalShader, bool recalculateNormals, float normalBlendFactor, bool flipBackNormals)
        {
            Shader normalShader = BillboardShaderDetector.GetNormalBillboardAtlasShader(prefab);

            if (overrideBillboardAtlasNormalShader != "")
            {
                normalShader = Shader.Find(overrideBillboardAtlasNormalShader);
            }

            if (flipBackNormals)
            {
                Shader.SetGlobalInt("_FlipBackNormals", 1);
            }
            else
            {
                Shader.SetGlobalInt("_FlipBackNormals", 0);
            }

            Material  minPostfilter = (Material)Resources.Load("MinPostFilter/MinPostFilter", typeof(Material));
            Texture2D texture       = GenerateBillboardNew(prefab, GetBillboardQualityTileWidth(billboardQuality),
                                                           GetBillboardQualityTileWidth(billboardQuality), GetBillboardQualityColumnCount(billboardQuality),
                                                           GetBillboardQualityRowCount(billboardQuality), normalShader, new Color(0.5f, 0.5f, 1, 0), minPostfilter,
                                                           billboardSourceLODLevel, rotationOffset, false, recalculateNormals, normalBlendFactor);

            Shader.SetGlobalInt("_FlipBackNormals", 0);
            return(texture);
        }
Пример #2
0
        public static int GetBillboardQualityTileWidth(BillboardQuality billboardQuality)
        {
            switch (billboardQuality)
            {
            case BillboardQuality.Normal:
            case BillboardQuality.Normal3D:
            case BillboardQuality.NormalSingle:
            case BillboardQuality.NormalQuad:
                return(128);

            case BillboardQuality.High:
            case BillboardQuality.High3D:
            case BillboardQuality.HighSingle:
            case BillboardQuality.HighQuad:
                return(256);

            case BillboardQuality.Max:
            case BillboardQuality.Max3D:
            case BillboardQuality.MaxSingle:
            case BillboardQuality.MaxQuad:
                return(512);

            case BillboardQuality.HighSample3D:
            case BillboardQuality.HighSample2D:
                return(256);

            default:
                return(128);
            }
        }
Пример #3
0
        public static Texture2D GenerateBillboardTexture(GameObject prefab, BillboardQuality billboardQuality,
                                                         LODLevel billboardSourceLODLevel, VegetationShaderType vegetationShaderType, Quaternion rotationOffset,
                                                         Color backgroundColor, string overrideBillboardAtlasShader, bool recalculateNormals, float normalBlendFactor)
        {
            Shader diffuseShader = BillboardShaderDetector.GetDiffuceBillboardAtlasShader(prefab);

            if (overrideBillboardAtlasShader != "")
            {
                diffuseShader = Shader.Find(overrideBillboardAtlasShader);
            }

            //if (vegetationShaderType == VegetationShaderType.Speedtree)
            //{

            //    diffuseShader = Shader.Find("AwesomeTechnologies/Billboards/RenderDiffuseAtlas");
            //}
            //else
            //{
            //    diffuseShader = Shader.Find("AwesomeTechnologies/Billboards/RenderDiffuseAtlasBright");
            //}

            Material  minPostfilter = (Material)Resources.Load("MinPostFilter/MinPostFilter", typeof(Material));
            Texture2D texture       = GenerateBillboardNew(prefab, GetBillboardQualityTileWidth(billboardQuality),
                                                           GetBillboardQualityTileWidth(billboardQuality), GetBillboardQualityColumnCount(billboardQuality),
                                                           GetBillboardQualityRowCount(billboardQuality), diffuseShader, backgroundColor, minPostfilter,
                                                           billboardSourceLODLevel, rotationOffset, false, recalculateNormals, normalBlendFactor);

            return(texture);
        }
Пример #4
0
        public static int GetBillboardQualityRowCount(BillboardQuality billboardQuality)
        {
            switch (billboardQuality)
            {
            case BillboardQuality.Normal:
            case BillboardQuality.High:
            case BillboardQuality.Max:
            case BillboardQuality.HighSample2D:
            case BillboardQuality.NormalSingle:
            case BillboardQuality.HighSingle:
            case BillboardQuality.MaxSingle:
                return(1);

            case BillboardQuality.NormalQuad:
            case BillboardQuality.HighQuad:
            case BillboardQuality.MaxQuad:
                return(1);

            case BillboardQuality.Normal3D:
            case BillboardQuality.High3D:
            case BillboardQuality.Max3D:
                return(8);

            case BillboardQuality.HighSample3D:
                return(16);
            }
            return(1);
        }
        public static Texture2D GenerateBillboardTexture(GameObject prefab, BillboardQuality billboardQuality,
                                                         int billboardLodIndex, VegetationShaderType vegetationShaderType, Quaternion rotationOffset,
                                                         Color backgroundColor)
        {
            Shader diffuseShader = BillboardShaderDetector.GetDiffuceBillboardAtlasShader(prefab);


            //if (vegetationShaderType == VegetationShaderType.Speedtree)
            //{

            //    diffuseShader = Shader.Find("AwesomeTechnologies/Billboards/RenderDiffuseAtlas");
            //}
            //else
            //{
            //    diffuseShader = Shader.Find("AwesomeTechnologies/Billboards/RenderDiffuseAtlasBright");
            //}

            Material  minPostfilter = (Material)Resources.Load("MinPostFilter/MinPostFilter", typeof(Material));
            Texture2D texture       = GenerateBillboardNew(prefab, GetBillboardQualityTileWidth(billboardQuality),
                                                           GetBillboardQualityTileWidth(billboardQuality), GetBillboardQualityColumnCount(billboardQuality),
                                                           GetBillboardQualityRowCount(billboardQuality), diffuseShader, backgroundColor, minPostfilter,
                                                           billboardLodIndex, rotationOffset);

            return(texture);
        }
Пример #6
0
        public static Texture2D GenerateBillboardAOTexture(GameObject prefab, BillboardQuality billboardQuality,
                                                           LODLevel billboardSourceLODLevel, Quaternion rotationOffset, bool recalculateNormals, float normalBlendFactor)
        {
            Shader    normalShader  = Shader.Find("AwesomeTechnologies/Billboards/AOBackground");
            Material  minPostfilter = (Material)Resources.Load("MinPostFilter/MinPostFilter", typeof(Material));
            Texture2D texture       = GenerateBillboardNew(prefab, GetBillboardQualityTileWidth(billboardQuality),
                                                           GetBillboardQualityTileWidth(billboardQuality), GetBillboardQualityColumnCount(billboardQuality),
                                                           GetBillboardQualityRowCount(billboardQuality), normalShader, new Color(0.5f, 0.5f, 1, 0), minPostfilter,
                                                           billboardSourceLODLevel, rotationOffset, true, recalculateNormals, normalBlendFactor);

            return(texture);
        }
        public static Texture2D GenerateBillboardNormalTexture(GameObject prefab, BillboardQuality billboardQuality,
                                                               int billboardLodIndex, Quaternion rotationOffset)
        {
            Shader    normalShader  = BillboardShaderDetector.GetNormalBillboardAtlasShader(prefab);
            Material  minPostfilter = (Material)Resources.Load("MinPostFilter/MinPostFilter", typeof(Material));
            Texture2D texture       = GenerateBillboardNew(prefab, GetBillboardQualityTileWidth(billboardQuality),
                                                           GetBillboardQualityTileWidth(billboardQuality), GetBillboardQualityColumnCount(billboardQuality),
                                                           GetBillboardQualityRowCount(billboardQuality), normalShader, new Color(0.5f, 0.5f, 1, 0), minPostfilter,
                                                           billboardLodIndex, rotationOffset);

            return(texture);
        }
Пример #8
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();
        }