Search Unity

Unity Standard Shader + Individual Texture Map Scaling

Discussion in 'Shaders' started by VigorousApathy, Feb 8, 2019.

  1. VigorousApathy

    VigorousApathy

    Joined:
    Dec 22, 2012
    Posts:
    12
    What's the best way to add individual texture scaling to each map (Albedo, Normal, Height, AO etc) for the Unity Standard Shader? As a default, the Unity Standard Shader scales all maps at the same scale. I'm very stuck.

    Note that I'm modifying the Standard Shader code downloaded from Unity and I'm unsure if I'm allowed to post the code here for editing (can delete if need be).

    Code (CSharp):
    1. // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
    2.  
    3. Shader "Standard-Scale"
    4. {
    5.     Properties
    6.     {
    7.         _Color("Color", Color) = (1,1,1,1)
    8.         _MainTex("Albedo", 2D) = "white" {}
    9.         _MainTexMapScale("MScale", Float) = 1.0
    10.  
    11.         _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
    12.  
    13.         _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
    14.         _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
    15.         [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0
    16.  
    17.         [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
    18.         _MetallicGlossMap("Metallic", 2D) = "white" {}
    19.  
    20.         [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
    21.         [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
    22.  
    23.         _BumpScale("Scale", Float) = 1.0
    24.         _BumpMap("Normal Map", 2D) = "bump" {}
    25.  
    26.         _Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02
    27.         _ParallaxMap ("Height Map", 2D) = "black" {}
    28.  
    29.         _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
    30.         _OcclusionMap("Occlusion", 2D) = "white" {}
    31.  
    32.         _EmissionColor("Color", Color) = (0,0,0)
    33.         _EmissionMap("Emission", 2D) = "white" {}
    34.  
    35.         _DetailMask("Detail Mask", 2D) = "white" {}
    36.  
    37.         _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
    38.         _DetailNormalMapScale("Scale", Float) = 1.0
    39.         _DetailNormalMap("Normal Map", 2D) = "bump" {}
    40.  
    41.         [Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0
    42.  
    43.  
    44.         // Blending state
    45.         [HideInInspector] _Mode ("__mode", Float) = 0.0
    46.         [HideInInspector] _SrcBlend ("__src", Float) = 1.0
    47.         [HideInInspector] _DstBlend ("__dst", Float) = 0.0
    48.         [HideInInspector] _ZWrite ("__zw", Float) = 1.0
    49.     }
    50.  
    51.     CGINCLUDE
    52.         #define UNITY_SETUP_BRDF_INPUT MetallicSetup
    53.     ENDCG
    54.  
    55.     SubShader
    56.     {
    57.         Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
    58.         LOD 300
    59.  
    60.  
    61.         // ------------------------------------------------------------------
    62.         //  Base forward pass (directional light, emission, lightmaps, ...)
    63.         Pass
    64.         {
    65.             Name "FORWARD"
    66.             Tags { "LightMode" = "ForwardBase" }
    67.  
    68.             Blend [_SrcBlend] [_DstBlend]
    69.             ZWrite [_ZWrite]
    70.  
    71.             CGPROGRAM
    72.             #pragma target 3.0
    73.  
    74.             // -------------------------------------
    75.  
    76.             #pragma shader_feature _NORMALMAP
    77.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    78.             #pragma shader_feature _EMISSION
    79.             #pragma shader_feature _METALLICGLOSSMAP
    80.             #pragma shader_feature ___ _DETAIL_MULX2
    81.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    82.             #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
    83.             #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
    84.             #pragma shader_feature _PARALLAXMAP
    85.  
    86.             #pragma multi_compile_fwdbase
    87.             #pragma multi_compile_fog
    88.             #pragma multi_compile_instancing
    89.             // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
    90.             //#pragma multi_compile _ LOD_FADE_CROSSFADE
    91.  
    92.             #pragma vertex vertBase
    93.             #pragma fragment fragBase
    94.             #include "UnityStandardCoreForward.cginc"
    95.  
    96.             ENDCG
    97.         }
    98.         // ------------------------------------------------------------------
    99.         //  Additive forward pass (one light per pass)
    100.         Pass
    101.         {
    102.             Name "FORWARD_DELTA"
    103.             Tags { "LightMode" = "ForwardAdd" }
    104.             Blend [_SrcBlend] One
    105.             Fog { Color (0,0,0,0) } // in additive pass fog should be black
    106.             ZWrite Off
    107.             ZTest LEqual
    108.  
    109.             CGPROGRAM
    110.             #pragma target 3.0
    111.  
    112.             // -------------------------------------
    113.  
    114.  
    115.             #pragma shader_feature _NORMALMAP
    116.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    117.             #pragma shader_feature _METALLICGLOSSMAP
    118.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    119.             #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
    120.             #pragma shader_feature ___ _DETAIL_MULX2
    121.             #pragma shader_feature _PARALLAXMAP
    122.  
    123.             #pragma multi_compile_fwdadd_fullshadows
    124.             #pragma multi_compile_fog
    125.             // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
    126.             //#pragma multi_compile _ LOD_FADE_CROSSFADE
    127.  
    128.             #pragma vertex vertAdd
    129.             #pragma fragment fragAdd
    130.             #include "UnityStandardCoreForward.cginc"
    131.  
    132.             ENDCG
    133.         }
    134.         // ------------------------------------------------------------------
    135.         //  Shadow rendering pass
    136.         Pass {
    137.             Name "ShadowCaster"
    138.             Tags { "LightMode" = "ShadowCaster" }
    139.  
    140.             ZWrite On ZTest LEqual
    141.  
    142.             CGPROGRAM
    143.             #pragma target 3.0
    144.  
    145.             // -------------------------------------
    146.  
    147.  
    148.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    149.             #pragma shader_feature _METALLICGLOSSMAP
    150.             #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    151.             #pragma shader_feature _PARALLAXMAP
    152.             #pragma multi_compile_shadowcaster
    153.             #pragma multi_compile_instancing
    154.             // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
    155.             //#pragma multi_compile _ LOD_FADE_CROSSFADE
    156.  
    157.             #pragma vertex vertShadowCaster
    158.             #pragma fragment fragShadowCaster
    159.  
    160.             #include "UnityStandardShadow.cginc"
    161.  
    162.             ENDCG
    163.         }
    164.         // ------------------------------------------------------------------
    165.         //  Deferred pass
    166.         Pass
    167.         {
    168.             Name "DEFERRED"
    169.             Tags { "LightMode" = "Deferred" }
    170.  
    171.             CGPROGRAM
    172.             #pragma target 3.0
    173.             #pragma exclude_renderers nomrt
    174.  
    175.  
    176.             // -------------------------------------
    177.  
    178.             #pragma shader_feature _NORMALMAP
    179.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    180.             #pragma shader_feature _EMISSION
    181.             #pragma shader_feature _METALLICGLOSSMAP
    182.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    183.             #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
    184.             #pragma shader_feature ___ _DETAIL_MULX2
    185.             #pragma shader_feature _PARALLAXMAP
    186.  
    187.             #pragma multi_compile_prepassfinal
    188.             #pragma multi_compile_instancing
    189.             // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
    190.             //#pragma multi_compile _ LOD_FADE_CROSSFADE
    191.  
    192.             #pragma vertex vertDeferred
    193.             #pragma fragment fragDeferred
    194.  
    195.             #include "UnityStandardCore.cginc"
    196.  
    197.             ENDCG
    198.         }
    199.  
    200.         // ------------------------------------------------------------------
    201.         // Extracts information for lightmapping, GI (emission, albedo, ...)
    202.         // This pass it not used during regular rendering.
    203.         Pass
    204.         {
    205.             Name "META"
    206.             Tags { "LightMode"="Meta" }
    207.  
    208.             Cull Off
    209.  
    210.             CGPROGRAM
    211.             #pragma vertex vert_meta
    212.             #pragma fragment frag_meta
    213.  
    214.             #pragma shader_feature _EMISSION
    215.             #pragma shader_feature _METALLICGLOSSMAP
    216.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    217.             #pragma shader_feature ___ _DETAIL_MULX2
    218.             #pragma shader_feature EDITOR_VISUALIZATION
    219.  
    220.             #include "UnityStandardMeta.cginc"
    221.             ENDCG
    222.         }
    223.     }
    224.  
    225.     SubShader
    226.     {
    227.         Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
    228.         LOD 150
    229.  
    230.         // ------------------------------------------------------------------
    231.         //  Base forward pass (directional light, emission, lightmaps, ...)
    232.         Pass
    233.         {
    234.             Name "FORWARD"
    235.             Tags { "LightMode" = "ForwardBase" }
    236.  
    237.             Blend [_SrcBlend] [_DstBlend]
    238.             ZWrite [_ZWrite]
    239.  
    240.             CGPROGRAM
    241.             #pragma target 2.0
    242.  
    243.             #pragma shader_feature _NORMALMAP
    244.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    245.             #pragma shader_feature _EMISSION
    246.             #pragma shader_feature _METALLICGLOSSMAP
    247.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    248.             #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
    249.             #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
    250.             // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2
    251.             // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
    252.  
    253.             #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED
    254.  
    255.             #pragma multi_compile_fwdbase
    256.             #pragma multi_compile_fog
    257.  
    258.             #pragma vertex vertBase
    259.             #pragma fragment fragBase
    260.             #include "UnityStandardCoreForward.cginc"
    261.  
    262.             ENDCG
    263.         }
    264.         // ------------------------------------------------------------------
    265.         //  Additive forward pass (one light per pass)
    266.         Pass
    267.         {
    268.             Name "FORWARD_DELTA"
    269.             Tags { "LightMode" = "ForwardAdd" }
    270.             Blend [_SrcBlend] One
    271.             Fog { Color (0,0,0,0) } // in additive pass fog should be black
    272.             ZWrite Off
    273.             ZTest LEqual
    274.  
    275.             CGPROGRAM
    276.             #pragma target 2.0
    277.  
    278.             #pragma shader_feature _NORMALMAP
    279.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    280.             #pragma shader_feature _METALLICGLOSSMAP
    281.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    282.             #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
    283.             #pragma shader_feature ___ _DETAIL_MULX2
    284.             // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
    285.             #pragma skip_variants SHADOWS_SOFT
    286.  
    287.             #pragma multi_compile_fwdadd_fullshadows
    288.             #pragma multi_compile_fog
    289.  
    290.             #pragma vertex vertAdd
    291.             #pragma fragment fragAdd
    292.             #include "UnityStandardCoreForward.cginc"
    293.  
    294.             ENDCG
    295.         }
    296.         // ------------------------------------------------------------------
    297.         //  Shadow rendering pass
    298.         Pass {
    299.             Name "ShadowCaster"
    300.             Tags { "LightMode" = "ShadowCaster" }
    301.  
    302.             ZWrite On ZTest LEqual
    303.  
    304.             CGPROGRAM
    305.             #pragma target 2.0
    306.  
    307.             #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
    308.             #pragma shader_feature _METALLICGLOSSMAP
    309.             #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    310.             #pragma skip_variants SHADOWS_SOFT
    311.             #pragma multi_compile_shadowcaster
    312.  
    313.             #pragma vertex vertShadowCaster
    314.             #pragma fragment fragShadowCaster
    315.  
    316.             #include "UnityStandardShadow.cginc"
    317.  
    318.             ENDCG
    319.         }
    320.  
    321.         // ------------------------------------------------------------------
    322.         // Extracts information for lightmapping, GI (emission, albedo, ...)
    323.         // This pass it not used during regular rendering.
    324.         Pass
    325.         {
    326.             Name "META"
    327.             Tags { "LightMode"="Meta" }
    328.  
    329.             Cull Off
    330.  
    331.             CGPROGRAM
    332.             #pragma vertex vert_meta
    333.             #pragma fragment frag_meta
    334.  
    335.             #pragma shader_feature _EMISSION
    336.             #pragma shader_feature _METALLICGLOSSMAP
    337.             #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    338.             #pragma shader_feature ___ _DETAIL_MULX2
    339.             #pragma shader_feature EDITOR_VISUALIZATION
    340.  
    341.             #include "UnityStandardMeta.cginc"
    342.             ENDCG
    343.         }
    344.     }
    345.  
    346.  
    347.     FallBack "VertexLit"
    348.     CustomEditor "StandardShaderGUI"
    349. }
    350.