투명하게 되는 셰이더를 작성해 보았다
우선 무엇인가 만들고 싶다는 것으로 투명하게 되는 셰이더를 써 보았습니다.
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《반투명 폴리곤의 묘화 순서 문제[접촉편]》
결과는 이런 느낌입니다.
Reference
이 문제에 관하여(투명하게 되는 셰이더를 작성해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fumittu/items/31d59a83e27d8dd283a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)