// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. // NOTE: MRTK Shaders are versioned via the MRTK.Shaders.sentinel file. // When making changes to any shader's source file, the value in the sentinel _must_ be incremented. Shader "Hidden/ChannelPacker" { Properties { _MetallicMap("Metallic Map", 2D) = "black" {} _MetallicMapChannel("Metallic Map Channel", Int) = 0 // Red. _MetallicUniform("Metallic Uniform", Float) = -0.01 _OcclusionMap("Occlusion Map", 2D) = "white" {} _OcclusionMapChannel("Occlusion Map Channel", Int) = 1 // Green. _OcclusionUniform("Occlusion Uniform", Float) = -0.01 _EmissionMap("Emission Map", 2D) = "black" {} _EmissionMapChannel("Emission Map Channel", Int) = 4 // RGBAverage. _EmissionUniform("Emission Uniform", Float) = -0.01 _SmoothnessMap("Smoothness Map", 2D) = "gray" {} _SmoothnessMapChannel("Smoothness Map Channel", Int) = 3 // Alpha. _SmoothnessUniform("Smoothness Uniform", Float) = -0.01 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 uv : TEXCOORD0; }; sampler2D _MetallicMap; int _MetallicMapChannel; float _MetallicUniform; sampler2D _OcclusionMap; int _OcclusionMapChannel; float _OcclusionUniform; sampler2D _EmissionMap; int _EmissionMapChannel; float _EmissionUniform; sampler2D _SmoothnessMap; int _SmoothnessMapChannel; float _SmoothnessUniform; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 ToGrayScale(fixed4 color) { return color.r * 0.21 + color.g * 0.71 + color.b * 0.08; } fixed Sample(fixed4 color, int channel, float uniformValue) { if (uniformValue >= 0.0) { return uniformValue; } if (channel == 4) { return ToGrayScale(color); } return color[channel]; } fixed4 frag(v2f i) : SV_Target { fixed4 output; output.r = Sample(tex2D(_MetallicMap, i.uv), _MetallicMapChannel, _MetallicUniform); output.g = Sample(tex2D(_OcclusionMap, i.uv), _OcclusionMapChannel, _OcclusionUniform); output.b = Sample(tex2D(_EmissionMap, i.uv), _EmissionMapChannel, _EmissionUniform); output.a = Sample(tex2D(_SmoothnessMap, i.uv), _SmoothnessMapChannel, _SmoothnessUniform); return output; } ENDCG } } }