1.
uv_MainTex
는 MainTex의 UVstruct Input //외부 인터페이스가 아닌, 유니티 내부로부터 받는 데이터를 선언하는 곳 { float2 uv_MainTex; };
2.
In.uv_Maintex.x
는 U,In.uv_Maintex.y
는 Vfixed4 c = tex2D (_MainTex, IN.uv_MainTex);
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Emission = float3(IN.uv_MainTex.x, IN.uv_MainTex.y, 0);
//빛의 영향을 배제한 순수한 결과만을 보기 위해 Albedo대신 Emission 사용
o.Alpha = c.a;
}
fixed4 c = tex2D (_MainTex, IN.uv_MainTex + 0.5);
_Time
을 사용해 UV가 자동으로 흘러가게 할 수 있다.fixed4 c = tex2D (_MainTex, IN.uv_MainTex + _Time.y);
//x, y에 동시에 더해줬기 때문에 좌측 아래로 흘러간다.
+) 시간 관련 변수 🔻
이름 타입 값 _TIme float4 씬이 열린 다음부터의 시간, (x, y, z, w)는 (t/20, t, t2, t3)에 대응 _SinTIme float4 sin 그래프의 시간, (x, y, z, w)는 (t/8, t/4, t/2, t)에 대응 _CosTIme float4 cos 그래프의 시간, (x, y, z, w)는 (t/8, t/4, t/2, t)에 대응 unity_DeltaTIme float4 델타 타임(지금 프레임과 이전 프레임의 시간차이), (x, y, z, w)는 (dt, 1/dt, smoothDt, 1/smoothDt)에 대응
- 불 이펙트를 만드는 방법
- 파티클 사용
- 시퀀스 이미지 사용
- 쉐이더 사용
* 1, 2번을 혼용해 사용하는 것이 일반적이고, 3번은 실무에 적용하기는 어렵다. 하지만 쉐이더를 배우는 과정이기 때문에 3번으로 배워볼 것이다!
Quad에 불 이미지를 텍스쳐로 적용, 아직 어색하다.
불 이미지가 조명의 영향을 받지 않도록 Albedo
를 Emission
으로 수정
o.Emission = c.rgb;
//1. Tags { "RenderType"="Opaque" }를 아래와 같이 수정
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
//2. #pragma surface surf Standard fullforwardshadows 를 아래와 같이 수정
#pragma surface surf Standard alpha:fade
- 추가할 이미지 🔽
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
//두번째 텍스쳐가 위로 흘러가도록
fixed4 d = tex2D(_MainTex2, float2(IN.uv_MainTex2.x, IN.uv_MainTex2.y-_Time.y));
//두 이미지 합치기
o.Emission = c.rgb * d.rgb;
o.Alpha = c.a * d.a;
위의 방법과 다르게, 두번째 텍스쳐를 검정색 이미지로 적용한다.
확실한 효과를 보기 위해 첫번째 텍스쳐도 체크무늬로 바꿔준다.(임시)
코드 수정 (c에 d연산이 들어가기 때문에 d의 순서가 바뀐다.)
d 텍스쳐 중 r채널만 가져와서 c의 uv에 더해주기
fixed4 c = tex2D(_MainTex, IN.uv_MainTex + d.r);
❗그렇다면... 아래와 같은 이미지를 넣으면 어떻게 될까?
- 텍스쳐의 가운데 부분만 이동한다!
➕ 노이즈 이미지를 넣으면 상당히 구겨지는 모습을 볼 수 있다.
fixed4 d = tex2D(_MainTex2, float2(IN.uv_MainTex2.x, IN.uv_MainTex2.y-_Time.y));