[Shader] Curved vertex shader
카메라에서 멀어지면 커브를 줘서 꺾이는 듯한 시각 효과를 주는 셰이더. 적용하면 아래처럼 보임. 1인칭 러닝게임에 어울리는 셰이더.
실제 Transform 좌표는 더 위에 있지만 셰이더 연산으로 곡선으로 꺾이게 그림.
CG 코드.
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 color : COLOR;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 color : TEXCOORD2;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
float dist = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.vertex.z);
o.vertex.y -= dist * dist * _ProjectionParams.x;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.color = v.color;
UNITY_TRANSFER_FOG(o, o.vertex);
return o;
}
float4 UnityObjectToClipPos(float3 pos)
오브젝트 공간의 한 점을 동질적인 좌표에 있는 카메라의 클립 공간으로 변환합니다. mul(UNITY_MATRIX_MVP, float4(pos, 1.0))과 같으며, 이를 대신하여 사용해야 합니다.
float dist = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.vertex.z);
클립 공간(Z) 뎁스를 수동으로 사용하는 경우 다음 매크로를 사용하여 플랫폼 차이를 추상화할 수도 있습니다
_ProjectionParams (float4)
x is 1.0 (or –1.0 if currently rendering with a flipped projection matrix)
y is the camera’s near plane
z is the camera’s far plane
w is 1/FarPlane.
셰이더 빌트인 변수(Built-in shdaer variables)
https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html
빌트인 셰이더 헬퍼 함수
https://docs.unity3d.com/kr/2022.3/Manual/SL-BuiltinFunctions.html
여러 그래픽스 API를 위한 셰이더 작성
https://docs.unity3d.com/kr/current/Manual/SL-PlatformDifferences.html
게임 개발에 필수적인 내용을 담는 명서들을 소개합니다.
<유니티 교과서 개정6판>(유니티 최신 버전) 구입 링크
https://link.coupang.com/a/be3P0t
<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e> 구입 링크
https://link.coupang.com/a/8VWas
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것> 구입 링크
https://link.coupang.com/a/9BqLd
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)