유니티/URP-Shader

유니티 URP OutLine Shader Graph

민또배기 2022. 4. 15. 10:16
반응형

유니티 버전 : 2020.3.25f1(URP)

작업환경 : Mac (Monterey 12.2.1)

 

이번엔 외곽선을 구현하는 방법에 대해서 알아봤습니다.

유튜브에 정말 친절히 나와있더군요.. 유니티 에셋스토어를 이용해도 되지만 URP는 거의 유료라서... 따라서 만들어보기로 했습니다.

유튜브 영상은 아래 주소를 확인하시면 됩니다

https://www.youtube.com/watch?v=X-kaX_8bYRc 

 

Create → Shader → Unlit Shader Graph 를 눌러 shader graph를 생성합니다. 이름은 OutlineShader로 합니다

Shader Node 는 다음과 같이 작성합니다.

OutlineShader Node

ProPerties를 추가해야하는데 다음과 같이 추가해 줍니다.

쉐이더 그래프를 새로 생성한 Material에 넣고 OutlineScript.cs스크립트를 작성합니다.

 

OutlineScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class OutlineScript : MonoBehaviour
{
    [SerializeField] private Material outlineMaterial;
    [SerializeField] private float outlineScaleFactor;
    [SerializeField] private Color outlineColor;
    private Renderer outlineRenderer;

    void Start()
    {
        outlineRenderer = CreateOutline(outlineMaterial, outlineScaleFactor, outlineColor);
        outlineRenderer.enabled = true;
    }

    Renderer CreateOutline(Material outlineMat, float scaleFactor, Color color)
    {
        GameObject outlineObject = Instantiate(this.gameObject, transform.position, transform.rotation, transform);
        Renderer rend = outlineObject.GetComponent<Renderer>();

        rend.material = outlineMat;
        rend.material.SetColor("_OutlineColor", color);
        rend.material.SetFloat("_Scale", scaleFactor);
        rend.shadowCastingMode = ShadowCastingMode.Off;

        outlineObject.GetComponent<OutlineScript>().enabled = false;
        outlineObject.GetComponent<Collider>().enabled = false;

        rend.enabled = false;

        return rend;
    }
}

 

작성한 스크립트를 원하는 오브젝트에 추가하시고 Material과 scale값을 추가해주면 다음과 같이 나타납니다.

 

# 추가로 Shader Graph를 수정했는데 적용(저장)이 안되서 찾아봤는데 Save Asset을 해야한다고 합니다. Save Asset의 위치는 Shader Graph왼쪽 상단에 위치합니다.

 

위 내용을 파일로 첨부해 드립니다. 실행시켰을 때 Material이 에러(분홍색)으로 된다면 Shader를 다시 넣어주시면 됩니다.

OutLine.zip
0.00MB

 

반응형

'유니티 > URP-Shader' 카테고리의 다른 글

Unity(URP) UV_Scroll Shader  (0) 2022.05.16
유니티+블렌더 크리스탈 만들기  (0) 2022.05.03
유니티 URP - Plane Reflection  (0) 2022.04.19