[unity] 유니티 쉐이더 공부 3
2021. 9. 8. 02:08
2021.09.05 - [컴퓨터/graphics] - [unity] 유니티 쉐이더 공부 2
점점 바빠지는 중..ㅠ
Part 6-6
Shader "Custom/fire3"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "black" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard
sampler2D _MainTex;
sampler2D _MainTex2;
struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
텍스쳐 하나는 초기값이 black이 되도록 설정
효과를 확인하기 위해 체크무늬 넣기
fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;
dot.tga는 이렇게 생김
검은부분은 r이 0이니까 변화가 없고 흰 부분(가운데)은 r이 0이 아니므로 어느정도 왼쪽 아래로 이동할 것이다(오른쪽 위의 텍스쳐가 밑쪽으로 이동한다는 의미)
노이즈 넣었을 때
fixed4 d = tex2D (_MainTex2, float2(IN.uv_MainTex2.x,IN.uv_MainTex2.y-_Time.y)) ;
fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;
위로 올라가는 효과
Shader "Custom/fire3"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "black" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent"}
CGPROGRAM
#pragma surface surf Standard alpha:fade
sampler2D _MainTex;
sampler2D _MainTex2;
struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 d = tex2D (_MainTex2, float2(IN.uv_MainTex2.x,IN.uv_MainTex2.y-_Time.y)) ;
fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
투명하게 바꾸기
일부 픽셀이 위로 나오는 것 해결방안: y좌표를 위로 조금 평행이동하기 (이미지가 왼쪽 아래로 내려간 현상도 이렇게 해결 가능)
물리기반 라이팅이 작동되어 비효율적인 쉐이더가 되어버림..ㅠㅠ
Part 7
이어서 씀
plane
Shader "Custom/NewSurfaceShader"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard noambient
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
float4 color:COLOR;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
o.Albedo = c.rgb;
o.Emission=IN.color.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Shader "Custom/NewSurfaceShader"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "white" {}
_MainTex3 ("Albedo (RGB)", 2D) = "white" {}
_MainTex4 ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard noambient
sampler2D _MainTex;
sampler2D _MainTex2;
sampler2D _MainTex3;
sampler2D _MainTex4;
struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
float2 uv_MainTex3;
float2 uv_MainTex4;
float4 color:COLOR;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
fixed4 e = tex2D (_MainTex3, IN.uv_MainTex3) ;
fixed4 f = tex2D (_MainTex4, IN.uv_MainTex4) ;
o.Albedo = lerp(c.rgb,d.rgb,IN.color.r);
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
vertex color에서 빨간 부분이 초록색(두번째로 넣은 텍스쳐)로 바뀜
o.Albedo = lerp(c.rgb,d.rgb,IN.color.r);
o.Albedo=lerp(o.Albedo,e.rgb,IN.color.g);
o.Albedo=lerp(o.Albedo,f.rgb,IN.color.b);
'컴퓨터 > graphics' 카테고리의 다른 글
[unity] 유니티 URP 셰이더 1 (0) | 2022.08.06 |
---|---|
[unity] 유니티 쉐이더 공부 4 (0) | 2022.02.22 |
[unity] 유니티 쉐이더 공부 2 (0) | 2021.09.05 |
[unity] 유니티 쉐이더 공부 1 (0) | 2021.09.04 |