투명도 지정 |
더보기
Shader "StudySRP/Catlike1"
{
Properties{
_BaseMap("Texture", 2D) = "white" {} //Unity의 표준 흰색 텍스처를 기본값으로 사용합니다. 오류방지.
_BaseColor("Color", Color) = (1.0, 1.0, 1.0, 1.0)
[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("Src Blend", Float) = 1 //편집을 쉽게 하기위한 블랜드 모드 열거형
[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("Dst Blend", Float) = 0 //편집을 쉽게 하기위한 블랜드 모드 열거형
[Enum(Off, 0, On, 1)] _ZWrite("Z Write", Float) = 1//켜기 끄기 토글을 만듭니다.
}
SubShader{
Pass {
Blend[_SrcBlend][_DstBlend] //셰이더 이전의 오래된 구문임.
ZWrite[_ZWrite] ///깊이를 쓰지 않음.
HLSLPROGRAM
#include "Catlike1Pass.hlsl"
#include "UnityInput.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#define UNITY_MATRIX_M unity_ObjectToWorld
#define UNITY_MATRIX_I_M unity_WorldToObject
#define UNITY_MATRIX_V unity_MatrixV
#define UNITY_MATRIX_VP unity_MatrixVP
#define UNITY_MATRIX_P glstate_matrix_projection
#ifndef CUSTOM_UNITY_INPUT_INCLUDED
#define CUSTOM_UNITY_INPUT_INCLUDED
CBUFFER_START(UnityPerDraw)
float4x4 unity_ObjectToWorld;
float4x4 unity_WorldToObject;
float4 unity_LODFade;
real4 unity_WorldTransformParams;
CBUFFER_END
float4x4 unity_MatrixVP;
float4x4 unity_MatrixV;
float4x4 glstate_matrix_projection;
#endif
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
TEXTURE2D(_BaseMap); // 셰이더 리소스
SAMPLER(sampler_BaseMap); // 셰이더 리소스_Unity가 자동으로 제공하는 샘플러 상태의 이름
UNITY_INSTANCING_BUFFER_START(UnityPerMaterial)
UNITY_DEFINE_INSTANCED_PROP(float4, _BaseMap_ST)// 텍스처의 타일링 및 오프셋을 사용할 수 있도록
UNITY_DEFINE_INSTANCED_PROP(float4, _BaseColor)
UNITY_INSTANCING_BUFFER_END(UnityPerMaterial)
#pragma multi_compile_instancing
#pragma vertex vert
#pragma fragment frag
#ifndef CUSTOM_UNLIT_PASS_INCLUDED
#define CUSTOM_UNLIT_PASS_INCLUDED
#endif
struct Attributes {
float3 positionOS : POSITION;
float2 baseUV : TEXCOORD0; //텍스쳐 공간 차원 선언
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings {
float4 positionCS : SV_POSITION;
float2 baseUV : VAR_BASE_UV;// 좌표전달
UNITY_VERTEX_INPUT_INSTANCE_ID
};
Varyings vert(Attributes input) {
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, output);
float3 positionWS = TransformObjectToWorld(input.positionOS.xyz);
output.positionCS = TransformWorldToHClip(positionWS);
float4 baseST = UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, _BaseMap_ST);
output.baseUV = input.baseUV * baseST.xy + baseST.zw; //스케일은 xy에, 오프셋은 zw에 저장된 배율과 오프셋을 적용할 수 있습니다.
return output;
}
float4 frag(Varyings input) : SV_TARGET{
UNITY_SETUP_INSTANCE_ID(input);
float4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.baseUV); //여기에서 텍스처를 샘플링함.
float4 baseColor = UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, _BaseColor); // 색상은 여기다 담고
return baseMap * baseColor; // 두개의 동일한 크기의 벡터를 곱하면 일치하는 구성요소가 곱해짐. RxR, GxG..
}
ENDHLSL
}
}
}
알파 클리핑 |
공부하면서 정리중.. 더럽게 어렵네 ;ㅁ;...
나머지는 내일
반응형