Ejemplo n.º 1
0
    public CPatchConfig(en_PatchQuality patchQuality, en_NormalQuality normalQuality, bool filteredHeights)
    {
        switch (patchQuality)
        {
            case en_PatchQuality.Maximum:
            {
                m_PatchSize = 33;
                m_AtmosSlices = 128;
                m_AtmosStacks = 96;
                break;
            }

            case en_PatchQuality.High:
            {
                m_PatchSize = 21;
                m_AtmosSlices = 128;
                m_AtmosStacks = 96;
                break;
            }

            case en_PatchQuality.Standard:
            {
                m_PatchSize = 17;
                m_AtmosSlices = 128;
                m_AtmosStacks = 96;
                break;
            }

            case en_PatchQuality.Low:
            {
                m_PatchSize = 11;
                m_AtmosSlices = 96;
                m_AtmosStacks = 72;
                break;
            }

            case en_PatchQuality.Minimum:
            {
                m_PatchSize = 7;
                m_AtmosSlices = 96;
                m_AtmosStacks = 72;
                break;
            }
        }

        switch (normalQuality)
        {
            case en_NormalQuality.Maximum:
            {
                m_MaxHeightMapSize = 512;
                // heightmap resolution at each level, without lod
                m_LevelHeightMapRes = new ushort[]
                {
                    512, 512, 256, 256, 256, 128
                };
                break;
            }

            case en_NormalQuality.High:
            {
                m_MaxHeightMapSize = 256;
                // heightmap resolution at each level, without lod
                m_LevelHeightMapRes = new ushort[]
                {
                    256, 256, 256, 128
                };
                break;
            }

            case en_NormalQuality.Standard:
            {
                m_MaxHeightMapSize = 256;
                // heightmap resolution at each level, without lod
                m_LevelHeightMapRes = new ushort[]
                {
                    256, 256, 128, 128, 128, 64
                };
                break;
            }

            case en_NormalQuality.Low:
            {
                m_MaxHeightMapSize = 128;
                // heightmap resolution at each level, without lod
                m_LevelHeightMapRes = new ushort[]
                {
                    128, 128, 128, 64
                };
                break;
            }

            case en_NormalQuality.Minimum:
            {
                m_MaxHeightMapSize = 64;
                // heightmap resolution at each level, without lod
                m_LevelHeightMapRes = new ushort[]
                {
                    64
                };
                break;
            }
        }

        m_LowResHeightMapSize = m_PatchSize;
        m_GridSize = (ushort)(m_PatchSize * m_PatchSize);

        // if the low-res heightmap texture is already created, destroy it
        // because the resolution may have been changed
        if (m_LowResHeightmapTex != null)
        {
            #if UNITY_EDITOR
                Texture2D.DestroyImmediate(m_LowResHeightmapTex);
                RenderTexture.DestroyImmediate(m_LowResHeightmapRT);
            #else
                Texture2D.Destroy(m_LowResHeightmapTex);
                RenderTexture.Destroy(m_LowResHeightmapRT);
            #endif
        }

        // recreate the low-res heightmap texture (the one downloaded from the gpu)
        m_LowResHeightmapTex = new Texture2D(m_LowResHeightMapSize, m_LowResHeightMapSize, TextureFormat.ARGB32, false);
        m_LowResHeightmapTex.anisoLevel = 0;
        m_LowResHeightmapTex.filterMode = (filteredHeights ? FilterMode.Bilinear : FilterMode.Point);
        m_LowResHeightmapTex.wrapMode = CGlobal.WRAP_MODE;
        m_LowResHeightmapTex.Apply();

        m_LowResHeightmapRT = new RenderTexture(m_LowResHeightMapSize, m_LowResHeightMapSize, 0, RenderTextureFormat.ARGB32);
        m_LowResHeightmapRT.anisoLevel = 0;
        m_LowResHeightmapRT.isPowerOfTwo = false;
        m_LowResHeightmapRT.wrapMode = CGlobal.WRAP_MODE;
        m_LowResHeightmapRT.filterMode = (filteredHeights ? FilterMode.Bilinear : FilterMode.Point);
        m_LowResHeightmapRT.useMipMap = false;
        m_LowResHeightmapRT.Create();
    }
Ejemplo n.º 2
0
    public CPatchConfig(en_PatchQuality patchQuality, en_NormalQuality normalQuality, bool filteredHeights)
    {
        switch (patchQuality)
        {
        case en_PatchQuality.Maximum:
        {
            m_PatchSize   = 33;
            m_AtmosSlices = 128;
            m_AtmosStacks = 96;
            break;
        }

        case en_PatchQuality.High:
        {
            m_PatchSize   = 21;
            m_AtmosSlices = 128;
            m_AtmosStacks = 96;
            break;
        }

        case en_PatchQuality.Standard:
        {
            m_PatchSize   = 17;
            m_AtmosSlices = 128;
            m_AtmosStacks = 96;
            break;
        }

        case en_PatchQuality.Low:
        {
            m_PatchSize   = 11;
            m_AtmosSlices = 96;
            m_AtmosStacks = 72;
            break;
        }

        case en_PatchQuality.Minimum:
        {
            m_PatchSize   = 7;
            m_AtmosSlices = 96;
            m_AtmosStacks = 72;
            break;
        }
        }

        switch (normalQuality)
        {
        case en_NormalQuality.Maximum:
        {
            m_MaxHeightMapSize = 512;
            // heightmap resolution at each level, without lod
            m_LevelHeightMapRes = new ushort[]
            {
                512, 512, 256, 256, 256, 128
            };
            break;
        }

        case en_NormalQuality.High:
        {
            m_MaxHeightMapSize = 256;
            // heightmap resolution at each level, without lod
            m_LevelHeightMapRes = new ushort[]
            {
                256, 256, 256, 128
            };
            break;
        }

        case en_NormalQuality.Standard:
        {
            m_MaxHeightMapSize = 256;
            // heightmap resolution at each level, without lod
            m_LevelHeightMapRes = new ushort[]
            {
                256, 256, 128, 128, 128, 64
            };
            break;
        }

        case en_NormalQuality.Low:
        {
            m_MaxHeightMapSize = 128;
            // heightmap resolution at each level, without lod
            m_LevelHeightMapRes = new ushort[]
            {
                128, 128, 128, 64
            };
            break;
        }

        case en_NormalQuality.Minimum:
        {
            m_MaxHeightMapSize = 64;
            // heightmap resolution at each level, without lod
            m_LevelHeightMapRes = new ushort[]
            {
                64
            };
            break;
        }
        }

        m_LowResHeightMapSize = m_PatchSize;
        m_GridSize            = (ushort)(m_PatchSize * m_PatchSize);

        // if the low-res heightmap texture is already created, destroy it
        // because the resolution may have been changed
        if (m_LowResHeightmapTex != null)
        {
                        #if UNITY_EDITOR
            Texture2D.DestroyImmediate(m_LowResHeightmapTex);
            RenderTexture.DestroyImmediate(m_LowResHeightmapRT);
                        #else
            Texture2D.Destroy(m_LowResHeightmapTex);
            RenderTexture.Destroy(m_LowResHeightmapRT);
                        #endif
        }

        // recreate the low-res heightmap texture (the one downloaded from the gpu)
        m_LowResHeightmapTex            = new Texture2D(m_LowResHeightMapSize, m_LowResHeightMapSize, TextureFormat.ARGB32, false);
        m_LowResHeightmapTex.anisoLevel = 0;
        m_LowResHeightmapTex.filterMode = (filteredHeights ? FilterMode.Bilinear : FilterMode.Point);
        m_LowResHeightmapTex.wrapMode   = CGlobal.WRAP_MODE;
        m_LowResHeightmapTex.Apply();

        m_LowResHeightmapRT              = new RenderTexture(m_LowResHeightMapSize, m_LowResHeightMapSize, 0, RenderTextureFormat.ARGB32);
        m_LowResHeightmapRT.anisoLevel   = 0;
        m_LowResHeightmapRT.isPowerOfTwo = false;
        m_LowResHeightmapRT.wrapMode     = CGlobal.WRAP_MODE;
        m_LowResHeightmapRT.filterMode   = (filteredHeights ? FilterMode.Bilinear : FilterMode.Point);
        m_LowResHeightmapRT.useMipMap    = false;
        m_LowResHeightmapRT.Create();
    }