티스토리 뷰
유니티 코리아에 무한 감사!
나만 이해하된 돼~
Shader "URPTraining/URPBasic"
{
Properties
{
_BaseColor("Tint Color", color) = (1,1,1,1)
_BaseMap("Albedo(RGB)", 2D) = "white"{}
_SubMap("Sub Texture", 2D) = "black"{}
_Lerp("Lerp", Range(0,1)) = .5
}
SubShader
{
Tags
{
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"Queue"="Geometry"
}
Pass
{
Name "Universal Forward"
Tags { "LightMode" = "UniversalForward" }
HLSLPROGRAM
#pragma prefer_hlslcc gles
#pragma exclude_renderers d3d11_9x
#pragma vertex vert
#pragma fragment frag
//cg shader는 .cginc를 hlsl shader는 .hlsl을 include하게 됩니다.
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
//vertex buffer에서 읽어올 정보를 선언합니다.
//메모리에서 오브젝트 정보를 알아서 받아온다
struct VertexInput
{
//float4 vertex : POSITION 로컬 공간 (모델 공간)의 정점 위치
//float3 normal : NORMAL 버텍스의 노멀
//float4 texcoord[n] : TEXCOORD[n] 버텍스의 UV 좌표.
//float4 tangent : TANGENT 메시에서 계산된 또는 import된 탄젠트 값
//float4 color : COLOR 버텍스의 컬러값.
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
//보간기를 통해 버텍스 셰이더에서 픽셀 셰이더로 전달할 정보를 선언합니다.
//Fragment Shader가 받아서 사용할 메쉬 정보를 저장하기 위한 구조체 선언.
//Fragment Shader는 VertexOutput 형식의 데이터를 받아 픽셀 값을 결정한다.
struct VertexOutput
{
//SV_POSITION에서 SV는 값이 수정됐다는 의미.
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
//버텍스 셰이더
VertexOutput vert(VertexInput v)
{
VertexOutput o;
//반드시 공간 변환 필요 (MVP)
o.vertex = TransformObjectToHClip(v.vertex.xyz);
o.uv = v.uv;
//버텍스 쉐이더에서 Tiling과 Offset 계산 가능
//o.uv = v.uv *_ST.xy +_ST.zw;
//이 경우 float4 _BaseMap_ST의 선언은 버텍스 쉐이더보다 상단에 위치
return o;
}
float4 _BaseColor;
float _Lerp;
//텍스처 UV
//ST는 텍스처의 Tiling과 Offset을 의미
float4 _BaseMap_ST;
//텍스처 샘플링에는 2가지 방법이 있다.
/////////////////////////////////
//Coupled textures and samplers//
/////////////////////////////////
/*
sampler2D _BaseMap;
sampler2D _SubMap;
//픽셀 셰이더
half4 frag(VertexOutput i) : SV_Target
{
float2 uv = i.uv.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
float2 uv2 = i.uv.xy;
float4 f = tex2D(_BaseMap, uv);
float4 s = tex2D(_SubMap, uv2);
f = lerp(f, s, .5);
return f * _BaseColor;
}
*/
//////////////////////////////////
//Separate textures and samplers//
//////////////////////////////////
Texture2D _BaseMap;
Texture2D _SubMap;
//Tex2D 타입의 변수명 앞에 sampler를 추가한 형태
SamplerState sampler_BaseMap;
float4 _SubMap_ST;
//픽셀 셰이더
half4 frag(VertexOutput i) : SV_Target
{
float2 uv = i.uv.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
float2 uv2 = i.uv.xy * _SubMap_ST.xy + _SubMap_ST.zw;
float4 f = _BaseMap.Sample(sampler_BaseMap, uv);
float4 s = _SubMap.Sample(sampler_BaseMap, uv2);
f = lerp(f, s, _Lerp);
return f * _BaseColor;
}
ENDHLSL
}
}
}
'유니티 > Shader' 카테고리의 다른 글
가려져도 보이는 쉐이더 (0) | 2021.02.01 |
---|---|
알파테스팅(컷아웃)쉐이더를작성할뿐인초라한글 (0) | 2020.07.10 |
알파블렌딩쉐이더작성 (0) | 2020.07.09 |
2Pass로만드는OutLineShader (0) | 2020.07.09 |
2Path를 이용한 Clean한 AlphaBlending (0) | 2020.07.09 |