Beispiel #1
0
    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();
    }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
 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();
         }
     }
 }