68 lines
2.0 KiB
HLSL
68 lines
2.0 KiB
HLSL
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
|
|
// This code in no way belongs to BrainFailProductions. I have just made a small change to make
|
|
// it work with texture arrays
|
|
|
|
#ifndef UNITY_STANDARD_META_INCLUDED
|
|
#define UNITY_STANDARD_META_INCLUDED
|
|
|
|
// Functionality for Standard shader "meta" pass
|
|
// (extracts albedo/emission for lightmapper etc.)
|
|
|
|
// define meta pass before including other files; they have conditions
|
|
// on that in some places
|
|
#define UNITY_PASS_META 1
|
|
|
|
#include "UnityCG.cginc"
|
|
#include "Includes/BatchFewStandardInput.cginc"
|
|
#include "UnityMetaPass.cginc"
|
|
#include "Includes/BatchFewStandardCore.cginc"
|
|
|
|
struct v2f_meta
|
|
{
|
|
float4 uv : TEXCOORD0;
|
|
float4 pos : SV_POSITION;
|
|
half4 attribs : TEXCOORD1;
|
|
};
|
|
|
|
v2f_meta vert_meta (VertexInput v)
|
|
{
|
|
v2f_meta o;
|
|
o.pos = UnityMetaVertexPosition(v.vertex, v.uv1.xy, v.uv2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
o.uv = TexCoords(v);
|
|
o.attribs = SampleAttrImg(1, o.uv.w);
|
|
return o;
|
|
}
|
|
|
|
// Albedo for lightmapping should basically be diffuse color.
|
|
// But rough metals (black diffuse) still scatter quite a lot of light around, so
|
|
// we want to take some of that into account too.
|
|
half3 UnityLightmappingAlbedo (half3 diffuse, half3 specular, half smoothness)
|
|
{
|
|
half roughness = SmoothnessToRoughness(smoothness);
|
|
half3 res = diffuse;
|
|
res += specular * roughness * 0.5;
|
|
return res;
|
|
}
|
|
|
|
float4 frag_meta (v2f_meta i) : SV_Target
|
|
{
|
|
// we're interested in diffuse & specular colors,
|
|
// and surface roughness to produce final albedo.
|
|
FragmentCommonData data = UNITY_SETUP_BRDF_INPUT (i.uv, i.attribs);
|
|
|
|
UnityMetaInput o;
|
|
UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o);
|
|
|
|
#if defined(EDITOR_VISUALIZATION)
|
|
o.Albedo = data.diffColor;
|
|
#else
|
|
o.Albedo = UnityLightmappingAlbedo (data.diffColor, data.specColor, data.smoothness);
|
|
#endif
|
|
o.SpecularColor = data.specColor;
|
|
o.Emission = Emission(i.uv);
|
|
|
|
return UnityMetaFragment(o);
|
|
}
|
|
|
|
#endif // UNITY_STANDARD_META_INCLUDED
|