/// <summary> /// Converts the resolution enum to a number. /// The number is how many pixels make up one grid in the mesh. /// </summary> int ResolutionToNumber(MESH_RESOLUTION resolution) { switch (resolution) { case MESH_RESOLUTION.EXTREME: return(1); case MESH_RESOLUTION.ULTRA: return(2); case MESH_RESOLUTION.HIGH: return(4); case MESH_RESOLUTION.MEDIUM: return(8); case MESH_RESOLUTION.LOW: return(16); default: return(16); } }
void pegaDados() { int valor; valor = int.Parse(dados[7]); if (valor == 0) { resolution = MESH_RESOLUTION.LOW; } if (valor == 1) { resolution = MESH_RESOLUTION.MEDIUM; } if (valor == 2) { resolution = MESH_RESOLUTION.HIGH; } if (valor == 3) { resolution = MESH_RESOLUTION.ULTRA; } if (valor == 4) { resolution = MESH_RESOLUTION.EXTREME; } if (dados [8] == "True") { receiveShadows = true; } else { receiveShadows = false; } }
/// <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); } }
/// <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); } }
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); } }
/// <summary> /// Converts the resolution enum to a number. /// The number is how many pixels make up one grid in the mesh. /// </summary> int ResolutionToNumber(MESH_RESOLUTION resolution) { switch (resolution) { case MESH_RESOLUTION.EXTREME: return 1; case MESH_RESOLUTION.ULTRA: return 2; case MESH_RESOLUTION.HIGH: return 4; case MESH_RESOLUTION.MEDIUM: return 8; case MESH_RESOLUTION.LOW: return 16; default: return 16; } }
/// <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); } }
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 current 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 = current; 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 = current; 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(current); } }