투명하게 되는 셰이더를 작성해 보았다

4052 단어 ShaderUnity
쉐이더의 공부가 별로 되어 있지 않았기 때문에 오랜만에 공부한 것의 각서를・・・・
우선 무엇인가 만들고 싶다는 것으로 투명하게 되는 셰이더를 써 보았습니다.

sample.shader
Shader "Custom/sample" {
    SubShader {
        Tags { "Queue" = "Transparent" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard alpha:fade 
        #pragma target 3.0

        struct Input {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutputStandard o) {
            o.Albedo = fixed4(0.6f, 0.7f, 0.4f, 1);
            o.Alpha = 0.5;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

우선, Tag 블록의 Queue에서 드로잉 순서를 지정합니다.
기본적으로는 카메라에서 보고 멀리 있는 것부터 차례로 그려집니다.
따라서 Queue를 지정할 필요는 별로 없지만,
반투명 물체를 그릴 때 불투명 객체 뒤에 그리지 않으면
그리기 결과가 깨졌습니다.

Queue에서는 Background→Geometry→AlphaTest→Transparent→Overlay의 순서로 그려집니다.
이번에는 Queue에 Transparent를 지정하고 있기 때문에 불투명 객체를 모두 그린 후 반투명 오브 이젝트가 그려집니다.

다음으로 struct input입니다만
여기에서는 Vertex 쉐이더로부터 출력된 값을 입력에 취해, 오브젝트의 표면색을 출력합니다.
이 표면색에 대해서 라이팅을 실시해 최종적인 그림이 됩니다.
표면색은 SurfaceOutputStandard입니다.

struvt input이지만 다음 값을 가질 수 있습니다.


입력 변수 이름
의미


uv_MainTex
텍스처의 uv 좌표

viewDir
시선 방향

worldPos
월드 좌표

screenPos
화면 좌표


또 output의 분은 이하의 값을 가지고 있습니다


입력 변수 이름
의미


Albedo  
기본 색상

Normal
법선 정보


입출력으로 사용할 수 있는 다른 값은 아래의 공식 레퍼런스에 실려 있습니다.
공식 참조

그런 다음 #pragma surface surf Standard 다음에 "alpha:fade"를 지정합니다.
이것을 지정하는 것으로, 오브젝트를 반투명으로 그릴 수가 있게 됩니다.

투명도를 지정하는 경우에는 SurfaceOutputStandard의 Alpha에 값을 설정합니다.
알파 값은 0~1 범위로 지정합니다.
o.Alpha의 값을 만지면 투명도가 바뀔 것이라고 생각합니다.

이번에도 아래와 같은 사이트에서 공부했습니다.
【Unity 셰이더 입문】투명한 셰이더를 만든다
15-06-06《반투명 폴리곤의 묘화 순서 문제[접촉편]》

결과는 이런 느낌입니다.


     
     

좋은 웹페이지 즐겨찾기