티스토리 뷰

Unity

Unity _ Shader : hololens 2 MRTK UI

잉_민 2022. 12. 9. 18:40

홀로렌즈 상황에서 UI 캔버스를 사용하면 오류난다.

그래서 얘네가 튜토리얼에서 UI를 어떻게 사용하였는지 봤더니

큐브나 쿼드, Mesh Text 를 활용해 사용한다는 것을 확인했다.

 

여러 문제사항을 정리해보고자 한다.

[목표]

음악 진행 사항에 맞춰 쿼드가 마스킹 되게 한다.

(UI canvas Image에 MASK를 활용하면 쉽게 되지만.. 3D 오브젝트를 사용해야하기 때문에 Shader 코드를 추가하여 해결했다.)

 

문제 1. 쿼트 뒷면 안 보임.

https://bloodstrawberry.tistory.com/760

 

유니티 쉐이더 - 평면의 양면 렌더링 (Double Sided Rendering)

Unity 전체 링크 Plane(평면)은 아래와 같이 한 쪽 side만 렌더링된다. 두 면을 렌더링하게 하기 위해서는 쉐이더를 직접 만들어서 cull off를 설정해야 한다. 먼저 새로운 Material을 추가한다. 그리고 Sta

bloodstrawberry.tistory.com

 

2. 스텐실 쉐이더 CG programing  언어 script

>>>>마스킹 될 오브젝트

Shader "Custom/PortalOBJ_01"
{
    Properties
    {
        _Color("COlor", Color) = (1,1,1,1)//흰색
        [Enum(Equal,3,NotEqua,6)]_StencilTest("Stencil Test",int) = 6
    }
        SubShader
    {
       Color[_Color]
       Stencil{
            Ref 2
            Comp[_StencilTest]

       }


        Pass
        {

        }
    }
}

간단히 하면 이렇지만

나는 alpha 값을 가진 이미지를 오브젝트에 넣었기 때문에 아래의 코드처럼

약간 복잡해졌다 (+ texture + alpha + unlit)

: 기존의 유니티의 기본 쉐이터 unlit  코드를 활용했음.

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Unlit alpha-blended shader.
 // - no lighting
 // - no lightmap support
 // - no per-material color
 
 Shader "Custom/PortalOBJ_01"{
 Properties {
     _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
        [Enum(Equal,3,NotEqua,6)]_StencilTest("Stencil Test",int) = 6
 }
 
 SubShader {
     Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
     LOD 100

     cull off
     ZWrite Off
     Blend SrcAlpha OneMinusSrcAlpha 
     Stencil{
          Ref 2
          Comp[_StencilTest]

     }

     Pass {  
         CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #pragma multi_compile_fog
             
             #include "UnityCG.cginc"
 
             struct appdata_t {
                 float4 vertex : POSITION;
                 float2 texcoord : TEXCOORD0;
             };
 
             struct v2f {
                 float4 vertex : SV_POSITION;
                 half2 texcoord : TEXCOORD0;
                 UNITY_FOG_COORDS(1)
             };
 
             sampler2D _MainTex;
             float4 _MainTex_ST;
             
             v2f vert (appdata_t v)
             {
                 v2f o;
                 o.vertex = UnityObjectToClipPos(v.vertex);
                 o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                 UNITY_TRANSFER_FOG(o,o.vertex);
                 return o;
             }
             
             fixed4 frag (v2f i) : SV_Target
             {
                 fixed4 col = tex2D(_MainTex, i.texcoord);
                 UNITY_APPLY_FOG(i.fogCoord, col);
                 return col;
             }
         ENDCG
     }
 }
 
 }

 

 

>>>마스킹하는 창

ader "Custom/PortalFilter_01"
{
    SubShader
    {
        ZWrite off
        ColorMask 0

        Stencil{
            Ref 2
            Pass replace
        }
        Pass
        {
            }
    }
}

 

참고

https://answers.unity.com/questions/1098744/unlit-texture-transparent-shader.html

 

Unlit Texture Transparent Shader - Unity Answers

 

answers.unity.com

https://learn.unity.com/tutorial/shaderlab-anatomy-of-a-shader#

 

ShaderLab: Anatomy of a Shader - Unity Learn

In this tutorial, you will learn the Anatomy of a High-Level Shading Language (HLSL) Shader.

learn.unity.com

 

쉐이더 다운받기

https://unity.com/releases/editor/archive

 

틴트도 추가했음

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Unlit alpha-blended shader.
 // - no lighting
 // - no lightmap support
 // - no per-material color

Shader "Custom/PortalOBJ_01"{
    Properties{
        _Color ("Color Tint", Color) = (1,1,1,1)
        _MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
           [Enum(Equal,3,NotEqua,6)]_StencilTest("Stencil Test",int) = 6
    }

        SubShader{
            Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
            LOD 100

            cull off
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha
            Stencil{
                 Ref 2
                 Comp[_StencilTest]

            }

            Pass {
                CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
                    #pragma multi_compile_fog

                    #include "UnityCG.cginc"

                    struct appdata_t {
                        float4 vertex : POSITION;
                        float2 texcoord : TEXCOORD0;
                    };

                    struct v2f {
                        float4 vertex : SV_POSITION;
                        half2 texcoord : TEXCOORD0;
                        UNITY_FOG_COORDS(1)
                    };

                    sampler2D _MainTex;
                    float4 _MainTex_ST;
                    //add tinit color
                    fixed4 _Color;


                    v2f vert(appdata_t v)
                    {
                        v2f o;
                        o.vertex = UnityObjectToClipPos(v.vertex);
                        o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                        UNITY_TRANSFER_FOG(o,o.vertex);
                        return o;
                    }

                    fixed4 frag(v2f i) : SV_Target
                    {
                        //color tint add
                        fixed4 col = tex2D(_MainTex, i.texcoord) * _Color;;
                        UNITY_APPLY_FOG(i.fogCoord, col);
                        return col;
                    }
                ENDCG
            }
           }

}
//
//Shader "Custom/PortalOBJ_01"
//{
//    Properties
//    {
//        _MainTex("Texture", 2D) = "white" {}
//        //_Color("COlor", Color) = (1,1,1,1)//흰색
//        _Alpha ("Alpha", range(0.0,1.0)) = 1.0
//        [Enum(Equal,3,NotEqua,6)]_StencilTest("Stencil Test",int) = 6
//    }
//        SubShader
//    {
//        Tags
//        {
//            "RenderType" = "Transparent"
//            "Queue"= "Transparent"
//        }
//       //Color[_Color]
//            float2 uv_MainTex : 
//       Stencil{
//            Ref 2
//            Comp[_StencilTest]
//
//       }
//
//        Pass
//        {
//
//        }
//    }
//}

https://forum.unity.com/threads/adding-a-color-tint-to-unlit-transparent-shader.261712/

 

Adding a color tint to unlit transparent shader

Hi , I want to add a color tint to this shader , how can I do that. Shader "Unlit/Transparent Color" { Properties { _Color ("Color Tint", Color)...

forum.unity.com

 

'Unity' 카테고리의 다른 글

VR_unity _ setting _ oculus quest2  (0) 2023.01.16
Unity_ animation _trigger  (0) 2022.12.14
Unity_ TD_ osc 통신_VFXgraph:scrip  (0) 2022.11.14
unity_ 타임라인 영상 기록 추출  (0) 2022.11.11
unity_TD_udp통신  (0) 2022.11.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함