Heroes_of_Hiis/Assets/Fantasy Adventure Environment/Shaders/PigmentMapComposite.shader

95 lines
2.0 KiB
Plaintext
Raw Normal View History

2022-03-07 16:33:30 +00:00
// Fantasy Adventure Environment
// Copyright Staggart Creations
// staggart.xyz
Shader "Hidden/PigmentMapComposite"
{
Properties
{
[NoScaleOffset] _MainTex("Input pigment map", 2D) = "white" {}
[NoScaleOffset] _SplatMap("Splatmap", 2D) = "white" {}
_SplatMask("SplatMask", Vector) = (1,1,1,1) //RGBA component masks
_Transform("Transform", Vector) = (0,0,0,0)
//X: Horizontal
//Y: Vertical
//Z: Rotation
//W: ...
}
SubShader
{
Tags { "RenderType" = "Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _SplatMap;
uniform float4 _SplatMask;
uniform float4 _Transform;
float2 RotateUV(float2 uv, float rotation) {
float cosine = cos(rotation);
float sine = sin(rotation);
float2 pivot = float2(0.5, 0.5);
float2 rotator = (mul(uv - pivot, float2x2(cosine, -sine, sine, cosine)) + pivot);
return saturate(rotator);
}
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
float2 uv = TRANSFORM_TEX(v.uv, _MainTex);
if (_Transform.x == 1) uv.x = 1 - uv.x;
if (_Transform.y == 1) uv.y = 1 - uv.y;
uv = RotateUV(uv, _Transform.z);
o.uv = uv;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
//Tex samples
float3 col = tex2D(_MainTex, i.uv).rgb;
float4 splatMap = tex2D(_SplatMap, i.uv);
//Isolate splatmap channel
float alpha = 0;
alpha += splatMap.r * _SplatMask.r;
alpha += splatMap.g * _SplatMask.g;
alpha += splatMap.b * _SplatMask.b;
alpha += splatMap.a * _SplatMask.a;
//return float4(alpha, alpha, alpha, 1);
//return float4(0, 1, 0, alpha);
return float4(col.rgb, alpha);
}
ENDCG
}
}
}