// 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 } } }