Ejemplo n.º 1
0
 private void Start()
 {
     try
     {
         Mesh mesh = this.CreateBottomMesh(32, 512);
         this.m_bottomMask = new GameObject("Ceto Bottom Mask Gameobject");
         MeshFilter         meshFilter         = this.m_bottomMask.AddComponent <MeshFilter>();
         MeshRenderer       meshRenderer       = this.m_bottomMask.AddComponent <MeshRenderer>();
         NotifyOnWillRender notifyOnWillRender = this.m_bottomMask.AddComponent <NotifyOnWillRender>();
         meshFilter.sharedMesh             = mesh;
         meshRenderer.receiveShadows       = false;
         meshRenderer.shadowCastingMode    = ShadowCastingMode.Off;
         meshRenderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
         meshRenderer.material             = new Material(this.oceanBottomSdr);
         notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderWaveOverlays));
         notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanMask));
         notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanDepth));
         this.m_bottomMask.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
         this.m_bottomMask.hideFlags = HideFlags.HideAndDontSave;
         this.UpdateBottomBounds();
         UnityEngine.Object.Destroy(mesh);
     }
     catch (Exception ex)
     {
         Ocean.LogError(ex.ToString());
         base.WasError = true;
         base.enabled  = false;
     }
 }
Ejemplo n.º 2
0
        void Start()
        {
            try
            {
                m_refractionCommand = new RefractionCommand(copyDepthSdr);

                Mesh mesh = CreateBottomMesh(32, 512);

                //The bottom used to render the masks.
                m_bottomMask = new GameObject("Ceto Bottom Mask Gameobject");

                MeshFilter         filter     = m_bottomMask.AddComponent <MeshFilter>();
                MeshRenderer       renderer   = m_bottomMask.AddComponent <MeshRenderer>();
                NotifyOnWillRender willRender = m_bottomMask.AddComponent <NotifyOnWillRender>();

                filter.sharedMesh             = mesh;
                renderer.receiveShadows       = false;
                renderer.shadowCastingMode    = ShadowCastingMode.Off;
                renderer.reflectionProbeUsage = ReflectionProbeUsage.Off;
                renderer.material             = new Material(oceanBottomSdr);

                willRender.AddAction(m_ocean.RenderWaveOverlays);
                willRender.AddAction(m_ocean.RenderOceanMask);
                willRender.AddAction(m_ocean.RenderOceanDepth);

                m_bottomMask.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                m_bottomMask.hideFlags = HideFlags.HideAndDontSave;

                UpdateBottomBounds();

                Destroy(mesh);
            }
            catch (Exception e)
            {
                Ocean.LogError(e.ToString());
                WasError = true;
                enabled  = false;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates the grid for this resolution setting.
        /// </summary>
        void CreateGrid(MESH_RESOLUTION meshRes)
        {
            if (!m_grids.ContainsKey(meshRes))
            {
                m_grids.Add(meshRes, new Grid());
            }

            Grid grid = m_grids[meshRes];

            int screenWidth  = ScreenWidth();
            int screenHeight = ScreenHeight();
            int resolution   = ResolutionToNumber(meshRes);
            int groups       = ChooseGroupSize(resolution, gridGroups, screenWidth, screenHeight);

            if (!ForceRecreate && grid.screenWidth == screenWidth && grid.screenHeight == screenHeight && grid.groups == groups)
            {
                //Have already created a grid for this
                //resolution at the current screen size
                return;
            }
            else
            {
                //Grid has either not been created or the screen has been resized.
                //Clear grid and create.
                ClearGrid(grid);

                grid.screenWidth  = screenWidth;
                grid.screenHeight = screenHeight;
                grid.resolution   = resolution;
                grid.groups       = groups;
            }

            ForceRecreate = false;

            //Create the quads that will make up the grid.
            //The grid covers the screen and is split up
            //into smaller quads. Each quads has a mesh.
            IList <Mesh> meshs = CreateScreenQuads(resolution, groups, screenWidth, screenHeight);

            //For each mesh make a gameobject for the top side and under side.
            foreach (Mesh mesh in meshs)
            {
                if (oceanTopSideMat != null)
                {
                    GameObject top = new GameObject("Ceto TopSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = top.AddComponent <MeshFilter>();
                    MeshRenderer renderer = top.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = top.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.sharedMaterial       = oceanTopSideMat;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    top.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    top.hideFlags = HideFlags.HideAndDontSave;

                    //Must render reflection first or it will cause so artefacts on ocean
                    //for some reason. Its related to the overlays but exact cause is unknown.
                    willRender.AddAction(m_ocean.RenderReflection);

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.top.Add(top);
                    grid.topRenderer.Add(renderer);
                    grid.topFilters.Add(filter);
                }

                if (oceanUnderSideMat)
                {
                    GameObject under = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = under.AddComponent <MeshFilter>();
                    MeshRenderer renderer = under.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = under.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    renderer.sharedMaterial       = oceanUnderSideMat;
                    under.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    under.hideFlags = HideFlags.HideAndDontSave;

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.under.Add(under);
                    grid.underRenderer.Add(renderer);
                    grid.underFilters.Add(filter);
                }

                Destroy(mesh);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates the grid for this resolution setting.
        /// </summary>
        void CreateGrid(MESH_RESOLUTION meshRes)
        {
            Grid grid = null;

            if (!m_grids.TryGetValue((int)meshRes, out grid)) //OYM:  先获取一下网格,如果能获取到就不创建新的了
                                                              //OYM:  注意一下,这里的int转换出来是1234,但是下面那个取出来是1248.
            {
                grid = new Grid();
                m_grids.Add((int)meshRes, grid);
            }
            //OYM:  获取屏幕大小
            int screenWidth  = ScreenWidth();
            int screenHeight = ScreenHeight();
            int resolution   = ResolutionToNumber(meshRes);                                        //OYM:  对就是这里
            int groups       = ChooseGroupSize(resolution, gridGroups, screenWidth, screenHeight); //OYM:  选择分割的合适大小

            if (grid.screenWidth == screenWidth && grid.screenHeight == screenHeight && grid.groups == groups)
            {
                //OYM:  已经在当前分辨率下创建了一个网格
                //Have already created a grid for this
                //resolution at the current screen size
                return;
            }
            else
            {
                //Grid has either not been created or the screen has been resized.
                //Clear grid and create.
                ClearGrid(grid);//OYM:  创建一个网格

                grid.screenWidth  = screenWidth;
                grid.screenHeight = screenHeight;
                grid.resolution   = resolution; //OYM:  解析度
                grid.groups       = groups;     //OYM:  数目,-1代表只有一个
            }

            //Create the quads that will make up the grid.
            //The grid covers the screen and is split up
            //into smaller quads. Each quads has a mesh.
            IList <Mesh> meshs = CreateScreenQuads(resolution, groups, screenWidth, screenHeight);

            //For each mesh make a gameobject for the top side and under side.
            foreach (Mesh mesh in meshs)
            {
                if (oceanTopSideMat != null)
                {
                    //OYM:  创建海洋实体
                    GameObject top = new GameObject("Ceto TopSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = top.AddComponent <MeshFilter>();
                    MeshRenderer renderer = top.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = top.AddComponent <NotifyOnWillRender>(); //OYM:  本质上是一个component.实际上还不清楚

                    filter.sharedMesh             = mesh;                                    //OYM:  设置mesh
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;                   //OYM:  不投射阴影
                    renderer.receiveShadows       = receiveShadows;                          //OYM:   是否产生阴影
                    renderer.sharedMaterial       = oceanTopSideMat;                         //OYM:  设置mat
                    renderer.reflectionProbeUsage = reflectionProbes;                        //OYM:  设置反射球(所以还是用unity的反射吗)
                    top.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);                    //OYM:  设置层级
                    //top.hideFlags = HideFlags.HideAndDontSave; //OYM:  难怪选不中,原来在这里被藏起来了

                    //Must render reflection first or it will cause so artefacts on ocean
                    //for some reason. Its related to the overlays but exact cause is unknown.
                    willRender.AddAction(m_ocean.RenderReflection); //OYM:  需要先渲染反射,否则海洋可能看起来像是人工制品一样
                                                                    //OYM:  这底下的方法就难啃了

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.top.Add(top);
                    grid.topRenderer.Add(renderer);
                    grid.topFilters.Add(filter);
                }

                if (oceanUnderSideMat)
                {
                    GameObject under = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = under.AddComponent <MeshFilter>();
                    MeshRenderer renderer = under.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = under.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    renderer.sharedMaterial       = oceanUnderSideMat;
                    under.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    under.hideFlags = HideFlags.HideAndDontSave;

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.under.Add(under);
                    grid.underRenderer.Add(renderer);
                    grid.underFilters.Add(filter);
                }

                Destroy(mesh);
            }
        }
Ejemplo n.º 5
0
        private void CreateGrid(MESH_RESOLUTION meshRes)
        {
            ProjectedGrid.Grid grid = null;
            if (!this.m_grids.TryGetValue(meshRes, out grid))
            {
                grid = new ProjectedGrid.Grid();
                this.m_grids.Add(meshRes, grid);
            }
            int num  = this.ScreenWidth();
            int num2 = this.ScreenHeight();
            int num3 = this.ResolutionToNumber(meshRes);
            int num4 = this.ChooseGroupSize(num3, this.gridGroups, num, num2);

            if (!base.ForceRecreate && grid.screenWidth == num && grid.screenHeight == num2 && grid.groups == num4)
            {
                return;
            }
            this.ClearGrid(grid);
            grid.screenWidth   = num;
            grid.screenHeight  = num2;
            grid.resolution    = num3;
            grid.groups        = num4;
            base.ForceRecreate = false;
            IList <Mesh> list = this.CreateScreenQuads(num3, num4, num, num2);

            foreach (Mesh mesh in list)
            {
                if (this.oceanTopSideMat != null)
                {
                    GameObject         gameObject         = new GameObject("Ceto TopSide Grid LOD: " + meshRes);
                    MeshFilter         meshFilter         = gameObject.AddComponent <MeshFilter>();
                    MeshRenderer       meshRenderer       = gameObject.AddComponent <MeshRenderer>();
                    NotifyOnWillRender notifyOnWillRender = gameObject.AddComponent <NotifyOnWillRender>();
                    meshFilter.sharedMesh             = mesh;
                    meshRenderer.shadowCastingMode    = ShadowCastingMode.Off;
                    meshRenderer.receiveShadows       = this.receiveShadows;
                    meshRenderer.sharedMaterial       = this.oceanTopSideMat;
                    meshRenderer.reflectionProbeUsage = this.reflectionProbes;
                    gameObject.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    gameObject.hideFlags = HideFlags.HideAndDontSave;
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderReflection));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.ApplyProjection));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderWaveOverlays));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanMask));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanDepth));
                    grid.top.Add(gameObject);
                    grid.topRenderer.Add(meshRenderer);
                    grid.topFilters.Add(meshFilter);
                }
                if (this.oceanUnderSideMat)
                {
                    GameObject         gameObject2         = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);
                    MeshFilter         meshFilter2         = gameObject2.AddComponent <MeshFilter>();
                    MeshRenderer       meshRenderer2       = gameObject2.AddComponent <MeshRenderer>();
                    NotifyOnWillRender notifyOnWillRender2 = gameObject2.AddComponent <NotifyOnWillRender>();
                    meshFilter2.sharedMesh             = mesh;
                    meshRenderer2.shadowCastingMode    = ShadowCastingMode.Off;
                    meshRenderer2.receiveShadows       = this.receiveShadows;
                    meshRenderer2.reflectionProbeUsage = this.reflectionProbes;
                    meshRenderer2.sharedMaterial       = this.oceanUnderSideMat;
                    gameObject2.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    gameObject2.hideFlags = HideFlags.HideAndDontSave;
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.ApplyProjection));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderWaveOverlays));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanMask));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanDepth));
                    grid.under.Add(gameObject2);
                    grid.underRenderer.Add(meshRenderer2);
                    grid.underFilters.Add(meshFilter2);
                }
                UnityEngine.Object.Destroy(mesh);
            }
        }