Search Unity

Transfer of shader 2d water to the universal renderer.

Discussion in 'Universal Render Pipeline' started by ALEX_PAINT, Nov 14, 2019.

  1. ALEX_PAINT

    ALEX_PAINT

    Joined:
    Jan 19, 2019
    Posts:
    1
    Hello! I need to work on a project based on a universal renderer. The current task is to transfer the old shader to the shader graph. Shader is a 2d water visual with reflections of objects that are on the same layer as the water. And the scattering of objects that are on the layer, below the water.

    Code (CSharp):
    1. // 2016 - Damien Mayance (@Valryon)
    2. // Source: https://github.com/valryon/water2d-unity/
    3. using UnityEngine;
    4.  
    5. /// <summary>
    6. /// Automagically create a water reflect for a sprite.
    7. /// </summary>
    8. [RequireComponent(typeof(SpriteRenderer))]
    9. public class WaterReflectableScript : MonoBehaviour
    10. {
    11.   #region Members
    12.  
    13.   [Header("Reflect properties")]
    14.   public Vector3 localPosition = new Vector3(0, -0.25f, 0);
    15.   public Vector3 localRotation = new Vector3(0, 0, -180);
    16.   [Tooltip("Optionnal: force the reflected sprite. If null it will be a copy of the source.")]
    17.   public Sprite sprite;
    18.   public string spriteLayer = "Default";
    19.   public int spriteLayerOrder = -5;
    20.  
    21.   private SpriteRenderer spriteSource;
    22.   private SpriteRenderer spriteRenderer;
    23.  
    24.   #endregion
    25.  
    26.   #region Timeline
    27.  
    28.   void Awake()
    29.   {
    30.     GameObject reflectGo = new GameObject("Water Reflect");
    31.     reflectGo.transform.parent = this.transform;
    32.     reflectGo.transform.localPosition = localPosition;
    33.     reflectGo.transform.localRotation = Quaternion.Euler(localRotation);
    34.     reflectGo.transform.localScale = new Vector3(reflectGo.transform.localScale.x, reflectGo.transform.localScale.y, reflectGo.transform.localScale.z);
    35.  
    36.     spriteRenderer = reflectGo.AddComponent<SpriteRenderer>();
    37.     spriteRenderer.sortingLayerName = spriteLayer;
    38.     spriteRenderer.sortingOrder = spriteLayerOrder;
    39.    
    40.     spriteSource = GetComponent<SpriteRenderer>();
    41.   }
    42.  
    43.   void OnDestroy()
    44.   {
    45.     if (spriteRenderer != null)
    46.     {
    47.       Destroy(spriteRenderer.gameObject);
    48.     }
    49.   }
    50.  
    51.   void LateUpdate()
    52.   {
    53.     if (spriteSource != null)
    54.     {
    55.       if (sprite == null)
    56.       {
    57.         spriteRenderer.sprite = spriteSource.sprite;
    58.       }
    59.       else
    60.       {
    61.         spriteRenderer.sprite = sprite;
    62.       }
    63.       spriteRenderer.flipX = spriteSource.flipX;
    64.       spriteRenderer.flipY = spriteSource.flipY;
    65.       spriteRenderer.color = spriteSource.color;
    66.     }
    67.   }
    68.  
    69.   #endregion
    70. }

    Code (CSharp):
    1. // 2016 - Damien Mayance (@Valryon)
    2. // Source: https://github.com/valryon/water2d-unity/
    3. using UnityEngine;
    4.  
    5. /// <summary>
    6. /// Water surface script (update the shader properties).
    7. /// </summary>
    8. public class Water2DScript : MonoBehaviour
    9. {
    10.   public Vector2 speed = new Vector2(0.01f, 0f);
    11.  
    12.   private Renderer rend;
    13.   private Material mat;
    14.  
    15.   void Awake()
    16.   {
    17.     rend = GetComponent<Renderer>();
    18.     mat = rend.material;
    19.   }
    20.  
    21.   void LateUpdate()
    22.   {
    23.     Vector2 scroll = Time.deltaTime * speed;
    24.  
    25.     mat.mainTextureOffset += scroll;
    26.   }
    27. }
    I attached an open example of a shader working on an old renderer.
    ( https://github.com/valryon/water2d-unity/ )
    I hope you have a solution to implement it on the shader graph.
    Thank you in advance.
     

    Attached Files:

    Romano, Tapwated and florianhanke like this.