95 lines
2.0 KiB
Plaintext
95 lines
2.0 KiB
Plaintext
// 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
|
|
}
|
|
}
|
|
}
|