private void UpdateDisplacement(bool on) { Vector3 vector3 = new Vector3(); Vector2 vector2 = new Vector2(); Vector2 vector21 = new Vector2(); Camera camera; if (!on) { Shader.SetGlobalVector("_DisplacementWorldMin", Vector2.zero); Shader.SetGlobalVector("_DisplacementWorldMax", Vector2.zero); return; } FPGrassDisplacementCamera fPGrassDisplacementCamera = FPGrassDisplacementCamera.Get(); if (fPGrassDisplacementCamera == null) { camera = null; } else { camera = fPGrassDisplacementCamera.camera; } Camera vector31 = camera; if (vector31 == null) { return; } float single = vector31.orthographicSize; float single1 = single / (float)vector31.targetTexture.width; Vector3 vector32 = base.camera.transform.position; if (TransformHelpers.Dist2D(vector32, vector31.transform.position) > 5f) { vector3.x = Mathf.Round(vector32.x / single1) * single1; vector3.y = Mathf.Round(vector32.y / single1) * single1; vector3.z = Mathf.Round(vector32.z / single1) * single1; vector31.transform.position = vector3 + new Vector3(0f, 50f, 0f); } Vector3 vector33 = vector31.transform.position; vector2.x = vector33.x - single; vector2.y = vector33.z - single; vector21.x = vector33.x + single; vector21.y = vector33.z + single; Shader.SetGlobalVector("_DisplacementWorldMin", vector2); Shader.SetGlobalVector("_DisplacementWorldMax", vector21); vector31.Render(); }
static Global() { GameObject gameObject = GameObject.FindWithTag("DisplacementCamera"); if (gameObject) { FPGrassDisplacementCamera.Global.singleton = gameObject.GetComponent <FPGrassDisplacementCamera>(); if (FPGrassDisplacementCamera.Global.singleton) { UnityEngine.Object.DestroyImmediate(gameObject); } FPGrassDisplacementCamera.Global.singleton = null; } GameObject color = new GameObject("FPGrassDisplacementCamera") { hideFlags = HideFlags.DontSave }; color.AddComponent <Camera>(); color.transform.rotation = Quaternion.Euler(new Vector3(90f, 0f, 0f)); color.camera.backgroundColor = new Color(0f, 0f, 0f, 0f); color.camera.clearFlags = CameraClearFlags.Color; color.camera.orthographic = true; color.camera.orthographicSize = 50f; color.camera.nearClipPlane = 0.3f; color.camera.farClipPlane = 1000f; color.camera.renderingPath = RenderingPath.VertexLit; color.camera.enabled = false; color.camera.cullingMask = 1 << (LayerMask.NameToLayer("GrassDisplacement") & 31); color.camera.tag = "DisplacementCamera"; FPGrassDisplacementCamera.Global.singleton = color.AddComponent <FPGrassDisplacementCamera>(); RenderTexture renderTexture = new RenderTexture(512, 512, 0, FPGrass.Support.ProbabilityRenderTextureFormat1Channel) { hideFlags = HideFlags.DontSave }; RenderTexture renderTexture1 = renderTexture; renderTexture1.Create(); renderTexture1.name = "FPGrassDisplacement_RT"; color.camera.targetTexture = renderTexture1; FPGrassDisplacementCamera fPGrassDisplacementCamera = FPGrassDisplacementCamera.Global.singleton; Material material = new Material(Shader.Find("Custom/DisplacementBlit")) { hideFlags = HideFlags.DontSave }; fPGrassDisplacementCamera.blitMat = material; }
static Global() { GameObject obj2 = GameObject.FindWithTag("DisplacementCamera"); if (obj2 != null) { singleton = obj2.GetComponent <FPGrassDisplacementCamera>(); if (singleton != null) { UnityEngine.Object.DestroyImmediate(obj2); } singleton = null; } GameObject obj3 = new GameObject("FPGrassDisplacementCamera") { hideFlags = HideFlags.DontSave }; obj3.AddComponent <Camera>(); obj3.transform.rotation = Quaternion.Euler(new Vector3(90f, 0f, 0f)); obj3.camera.backgroundColor = new Color(0f, 0f, 0f, 0f); obj3.camera.clearFlags = CameraClearFlags.Color; obj3.camera.orthographic = true; obj3.camera.orthographicSize = 50f; obj3.camera.nearClipPlane = 0.3f; obj3.camera.farClipPlane = 1000f; obj3.camera.renderingPath = RenderingPath.VertexLit; obj3.camera.enabled = false; obj3.camera.cullingMask = ((int)1) << LayerMask.NameToLayer("GrassDisplacement"); obj3.camera.tag = "DisplacementCamera"; singleton = obj3.AddComponent <FPGrassDisplacementCamera>(); RenderTexture texture = new RenderTexture(0x200, 0x200, 0, FPGrass.Support.ProbabilityRenderTextureFormat1Channel) { hideFlags = HideFlags.DontSave }; texture.Create(); texture.name = "FPGrassDisplacement_RT"; obj3.camera.targetTexture = texture; Material material = new Material(Shader.Find("Custom/DisplacementBlit")) { hideFlags = HideFlags.DontSave }; singleton.blitMat = material; }
internal void Draw(FPGrassPatch patch, UnityEngine.Mesh mesh, ref Vector3 renderPosition, ref FPGrass.RenderArguments renderArgs) { if (this.probabilityUpdateQueued || grass.forceredraw) { this.UpdateMapsNow(this.lastPosition); this.probabilityUpdateQueued = false; } if (grass.displacement) { Graphics.Blit(FPGrassDisplacementCamera.GetRT(), this.probabilityGenerator.probabilityTexture, FPGrassDisplacementCamera.GetBlitMat()); } if (renderArgs.immediate) { GL.PushMatrix(); this.levelMaterial.SetPass(0); Graphics.DrawMeshNow(mesh, renderPosition, Constant.rotation, 0); GL.PopMatrix(); } else { Graphics.DrawMesh(mesh, renderPosition, Constant.rotation, this.levelMaterial, base.gameObject.layer, base.camera, 0, null, FPGrass.castShadows, FPGrass.receiveShadows); } }
private void UpdateDisplacement(bool on) { if (!on) { Shader.SetGlobalVector("_DisplacementWorldMin", Vector2.zero); Shader.SetGlobalVector("_DisplacementWorldMax", Vector2.zero); } else { FPGrassDisplacementCamera camera = FPGrassDisplacementCamera.Get(); Camera camera2 = (camera == null) ? null : camera.camera; if (camera2 != null) { Vector2 vector4; Vector2 vector5; float orthographicSize = camera2.orthographicSize; float num2 = orthographicSize / ((float)camera2.targetTexture.width); Vector3 position = base.camera.transform.position; if (TransformHelpers.Dist2D(position, camera2.transform.position) > 5f) { Vector3 vector2; vector2.x = Mathf.Round(position.x / num2) * num2; vector2.y = Mathf.Round(position.y / num2) * num2; vector2.z = Mathf.Round(position.z / num2) * num2; camera2.transform.position = vector2 + new Vector3(0f, 50f, 0f); } Vector3 vector3 = camera2.transform.position; vector4.x = vector3.x - orthographicSize; vector4.y = vector3.z - orthographicSize; vector5.x = vector3.x + orthographicSize; vector5.y = vector3.z + orthographicSize; Shader.SetGlobalVector("_DisplacementWorldMin", vector4); Shader.SetGlobalVector("_DisplacementWorldMax", vector5); camera2.Render(); } } }