Search Unity

Add Vertex Colors To A Shader

Discussion in 'Shaders' started by jafioti, Mar 31, 2020.

  1. jafioti

    jafioti

    Joined:
    May 28, 2015
    Posts:
    8
    Hi everyone,
    I am working on a low poly game and I am using a flat-lit shader. The flat lighting works great while allowing shared vertexes. The problem is, this shader does not support vertex colors, which I need to color the terrain I am generating properly. I am not good at writing shaders, but here is the shader I am currently using. How can I add vertex coloring with this shader?
    Code (CSharp):
    1. Shader "Custom/Flat Wireframe" {
    2.  
    3.     Properties {
    4.         _Color ("Tint", Color) = (1, 1, 1, 1)
    5.         _MainTex ("Albedo", 2D) = "white" {}
    6.  
    7.         [NoScaleOffset] _NormalMap ("Normals", 2D) = "bump" {}
    8.         _BumpScale ("Bump Scale", Float) = 1
    9.  
    10.         [NoScaleOffset] _MetallicMap ("Metallic", 2D) = "white" {}
    11.         [Gamma] _Metallic ("Metallic", Range(0, 1)) = 0
    12.         _Smoothness ("Smoothness", Range(0, 1)) = 0.1
    13.  
    14.         [NoScaleOffset] _ParallaxMap ("Parallax", 2D) = "black" {}
    15.         _ParallaxStrength ("Parallax Strength", Range(0, 0.1)) = 0
    16.  
    17.         [NoScaleOffset] _OcclusionMap ("Occlusion", 2D) = "white" {}
    18.         _OcclusionStrength ("Occlusion Strength", Range(0, 1)) = 1
    19.  
    20.         [NoScaleOffset] _EmissionMap ("Emission", 2D) = "black" {}
    21.         _Emission ("Emission", Color) = (0, 0, 0)
    22.  
    23.         [NoScaleOffset] _DetailMask ("Detail Mask", 2D) = "white" {}
    24.         _DetailTex ("Detail Albedo", 2D) = "gray" {}
    25.         [NoScaleOffset] _DetailNormalMap ("Detail Normals", 2D) = "bump" {}
    26.         _DetailBumpScale ("Detail Bump Scale", Float) = 1
    27.  
    28.         _Cutoff ("Alpha Cutoff", Range(0, 1)) = 0.5
    29.  
    30.         [HideInInspector] _SrcBlend ("_SrcBlend", Float) = 1
    31.         [HideInInspector] _DstBlend ("_DstBlend", Float) = 0
    32.         [HideInInspector] _ZWrite ("_ZWrite", Float) = 1
    33.     }
    34.  
    35.     CGINCLUDE
    36.  
    37.     #define BINORMAL_PER_FRAGMENT
    38.     #define FOG_DISTANCE
    39.  
    40.     #define PARALLAX_BIAS 0
    41. //    #define PARALLAX_OFFSET_LIMITING
    42.     #define PARALLAX_RAYMARCHING_STEPS 10
    43.     #define PARALLAX_RAYMARCHING_INTERPOLATE
    44. //    #define PARALLAX_RAYMARCHING_SEARCH_STEPS 3
    45.     #define PARALLAX_FUNCTION ParallaxRaymarching
    46.     #define PARALLAX_SUPPORT_SCALED_DYNAMIC_BATCHING
    47.  
    48.     ENDCG
    49.  
    50.     SubShader {
    51.  
    52.         Pass {
    53.             Tags {
    54.                 "LightMode" = "ForwardBase"
    55.             }
    56.             Blend [_SrcBlend] [_DstBlend]
    57.             ZWrite [_ZWrite]
    58.  
    59.             CGPROGRAM
    60.  
    61.  
    62.             #pragma target 3.0
    63.  
    64.             #pragma shader_feature _ _RENDERING_CUTOUT _RENDERING_FADE _RENDERING_TRANSPARENT
    65.             #pragma shader_feature _METALLIC_MAP
    66.             #pragma shader_feature _ _SMOOTHNESS_ALBEDO _SMOOTHNESS_METALLIC
    67.             #pragma shader_feature _NORMAL_MAP
    68.             #pragma shader_feature _PARALLAX_MAP
    69.             #pragma shader_feature _OCCLUSION_MAP
    70.             #pragma shader_feature _EMISSION_MAP
    71.             #pragma shader_feature _DETAIL_MASK
    72.             #pragma shader_feature _DETAIL_ALBEDO_MAP
    73.             #pragma shader_feature _DETAIL_NORMAL_MAP
    74.  
    75.             #pragma multi_compile _ LOD_FADE_CROSSFADE
    76.  
    77.             #pragma multi_compile_fwdbase
    78.             #pragma multi_compile_fog
    79.             #pragma multi_compile_instancing
    80.             #pragma instancing_options lodfade force_same_maxcount_for_gl
    81.  
    82.             #pragma vertex MyVertexProgram
    83.             #pragma fragment MyFragmentProgram
    84.  
    85.             #define FORWARD_BASE_PASS
    86.  
    87.             #pragma target 4.0
    88.             #pragma vertex MyVertexProgram
    89.             #pragma fragment MyFragmentProgram
    90.             #pragma geometry MyGeometryProgram
    91.  
    92.             #include "MyFlatWireframe.cginc"
    93.  
    94.             ENDCG
    95.         }
    96.  
    97.         Pass {
    98.             Tags {
    99.                 "LightMode" = "ForwardAdd"
    100.             }
    101.  
    102.             Blend [_SrcBlend] One
    103.             ZWrite Off
    104.  
    105.             CGPROGRAM
    106.  
    107.             #pragma target 3.0
    108.  
    109.             #pragma shader_feature _ _RENDERING_CUTOUT _RENDERING_FADE _RENDERING_TRANSPARENT
    110.             #pragma shader_feature _METALLIC_MAP
    111.             #pragma shader_feature _ _SMOOTHNESS_ALBEDO _SMOOTHNESS_METALLIC
    112.             #pragma shader_feature _NORMAL_MAP
    113.             #pragma shader_feature _PARALLAX_MAP
    114.             #pragma shader_feature _DETAIL_MASK
    115.             #pragma shader_feature _DETAIL_ALBEDO_MAP
    116.             #pragma shader_feature _DETAIL_NORMAL_MAP
    117.  
    118.             #pragma multi_compile _ LOD_FADE_CROSSFADE
    119.  
    120.             #pragma multi_compile_fwdadd_fullshadows
    121.             #pragma multi_compile_fog
    122.            
    123.             #pragma vertex MyVertexProgram
    124.             #pragma fragment MyFragmentProgram
    125.  
    126.             #pragma target 4.0
    127.             #pragma vertex MyVertexProgram
    128.             #pragma fragment MyFragmentProgram
    129.             #pragma geometry MyGeometryProgram
    130.  
    131.             #include "MyFlatWireframe.cginc"
    132.  
    133.             ENDCG
    134.         }
    135.  
    136.         Pass {
    137.             Tags {
    138.                 "LightMode" = "Deferred"
    139.             }
    140.  
    141.             CGPROGRAM
    142.  
    143.             #pragma target 3.0
    144.             #pragma exclude_renderers nomrt
    145.  
    146.             #pragma shader_feature _ _RENDERING_CUTOUT
    147.             #pragma shader_feature _METALLIC_MAP
    148.             #pragma shader_feature _ _SMOOTHNESS_ALBEDO _SMOOTHNESS_METALLIC
    149.             #pragma shader_feature _NORMAL_MAP
    150.             #pragma shader_feature _PARALLAX_MAP
    151.             #pragma shader_feature _OCCLUSION_MAP
    152.             #pragma shader_feature _EMISSION_MAP
    153.             #pragma shader_feature _DETAIL_MASK
    154.             #pragma shader_feature _DETAIL_ALBEDO_MAP
    155.             #pragma shader_feature _DETAIL_NORMAL_MAP
    156.  
    157.             #pragma multi_compile _ LOD_FADE_CROSSFADE
    158.  
    159.             #pragma multi_compile_prepassfinal
    160.             #pragma multi_compile_instancing
    161.             #pragma instancing_options lodfade
    162.  
    163.             #pragma vertex MyVertexProgram
    164.             #pragma fragment MyFragmentProgram
    165.  
    166.             #define DEFERRED_PASS
    167.  
    168.             #pragma target 4.0
    169.             #pragma vertex MyVertexProgram
    170.             #pragma fragment MyFragmentProgram
    171.             #pragma geometry MyGeometryProgram
    172.  
    173.             #include "MyFlatWireframe.cginc"
    174.  
    175.             ENDCG
    176.         }
    177.  
    178.         Pass {
    179.             Tags {
    180.                 "LightMode" = "ShadowCaster"
    181.             }
    182.  
    183.             CGPROGRAM
    184.  
    185.             #pragma target 3.0
    186.  
    187.             #pragma shader_feature _ _RENDERING_CUTOUT _RENDERING_FADE _RENDERING_TRANSPARENT
    188.             #pragma shader_feature _SEMITRANSPARENT_SHADOWS
    189.             #pragma shader_feature _SMOOTHNESS_ALBEDO
    190.  
    191.             #pragma multi_compile _ LOD_FADE_CROSSFADE
    192.  
    193.             #pragma multi_compile_shadowcaster
    194.             #pragma multi_compile_instancing
    195.             #pragma instancing_options lodfade force_same_maxcount_for_gl
    196.  
    197.             #pragma vertex MyShadowVertexProgram
    198.             #pragma fragment MyShadowFragmentProgram
    199.  
    200.             #include "My Shadows.cginc"
    201.  
    202.             ENDCG
    203.         }
    204.  
    205.         Pass {
    206.             Tags {
    207.                 "LightMode" = "Meta"
    208.             }
    209.  
    210.             Cull Off
    211.  
    212.             CGPROGRAM
    213.  
    214.             #pragma vertex MyLightmappingVertexProgram
    215.             #pragma fragment MyLightmappingFragmentProgram
    216.  
    217.             #pragma shader_feature _METALLIC_MAP
    218.             #pragma shader_feature _ _SMOOTHNESS_ALBEDO _SMOOTHNESS_METALLIC
    219.             #pragma shader_feature _EMISSION_MAP
    220.             #pragma shader_feature _DETAIL_MASK
    221.             #pragma shader_feature _DETAIL_ALBEDO_MAP
    222.  
    223.             #include "My Lightmapping.cginc"
    224.  
    225.             ENDCG
    226.         }
    227.     }
    228.  
    229.     CustomEditor "MyLightingShaderGUI"
    230. }
    Thanks in advance!