随风逐叶 随风逐叶
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档

rontian

从事游戏开发10多年的老菜鸟一枚!
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档
  • Unity

    • Unity3D UGUI生成并播放序列帧动画prefab
    • Unity3D UGUI 粒子特效层级与缩放
    • UGUI 新手引导镂空代码
    • Unity复制GameObject路径到剪切板
    • Unity模型变灰Shader
      • unity中判断iphone设备型号的方法
      • Unity Time详解
    • 游戏开发
    • Unity
    rontian
    2023-10-16
    目录

    Unity模型变灰Shader

    # 使用方法

    Renderer tryRenderer = gameObject.GetComponent<Renderer>();
    if (value)
    {
        tryRenderer.material.SetInt("_Desaturate", 1);
    }
    else
    {
        tryRenderer.material.SetInt("_Desaturate", 0);
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 代码

    // Shader created with Shader Forge v1.38 
    
    Shader "Shader Forge/Model gray" {
        Properties {
            _Diffuse ("Diffuse", 2D) = "white" {}
            _Color ("Color", Color) = (0.5,0.5,0.5,1)
            [MaterialToggle] _Desaturate ("Desaturate", Float ) = 0
            [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
        }
        SubShader {
            Tags {
                "Queue"="AlphaTest"
                "RenderType"="TransparentCutout"
            }
            Pass {
                Name "FORWARD"
                Tags {
                    "LightMode"="ForwardBase"
                }
                
                
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #define UNITY_PASS_FORWARDBASE
                #include "UnityCG.cginc"
                #include "AutoLight.cginc"
                #include "Lighting.cginc"
                #pragma multi_compile_fwdbase_fullshadows
                #pragma multi_compile_fog
                #pragma only_renderers d3d9 d3d11 glcore gles metal 
                #pragma target 3.0
                uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
                uniform float4 _Color;
                uniform fixed _Desaturate;
                struct VertexInput {
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                    float2 texcoord0 : TEXCOORD0;
                };
                struct VertexOutput {
                    float4 pos : SV_POSITION;
                    float2 uv0 : TEXCOORD0;
                    float4 posWorld : TEXCOORD1;
                    float3 normalDir : TEXCOORD2;
                    LIGHTING_COORDS(3,4)
                    UNITY_FOG_COORDS(5)
                };
                VertexOutput vert (VertexInput v) {
                    VertexOutput o = (VertexOutput)0;
                    o.uv0 = v.texcoord0;
                    o.normalDir = UnityObjectToWorldNormal(v.normal);
                    o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                    float3 lightColor = _LightColor0.rgb;
                    o.pos = UnityObjectToClipPos( v.vertex );
                    UNITY_TRANSFER_FOG(o,o.pos);
                    TRANSFER_VERTEX_TO_FRAGMENT(o)
                    return o;
                }
                float4 frag(VertexOutput i) : COLOR {
                    i.normalDir = normalize(i.normalDir);
                    float3 normalDirection = i.normalDir;
                    float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse));
                    clip(_Diffuse_var.a - 0.5);
                    float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
                    float3 lightColor = _LightColor0.rgb;
    ////// Lighting:
                    float attenuation = LIGHT_ATTENUATION(i);
    ////// Emissive:
                    float3 node_544 = (lerp( _Diffuse_var.rgb, (float3(0.6,0.6,0.6)*lerp(_Diffuse_var.rgb,dot(_Diffuse_var.rgb,float3(0.3,0.59,0.11)),1.0)), _Desaturate )*_Color.rgb); // Diffuse Color
                    float3 emissive = (node_544*_LightColor0.rgb*UNITY_LIGHTMODEL_AMBIENT.rgb);
                    float node_7731 = 0.5;
                    float node_5683 = ((max(0,dot(lightDirection,normalDirection))+node_7731)*node_7731);
                    float3 finalColor = emissive + ((node_544*(node_5683*node_5683))*_LightColor0.rgb*attenuation);
                    fixed4 finalRGBA = fixed4(finalColor,1);
                    UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                    return finalRGBA;
                }
                ENDCG
            }
            Pass {
                Name "FORWARD_DELTA"
                Tags {
                    "LightMode"="ForwardAdd"
                }
                Blend One One
                
                
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #define UNITY_PASS_FORWARDADD
                #include "UnityCG.cginc"
                #include "AutoLight.cginc"
                #include "Lighting.cginc"
                #pragma multi_compile_fwdadd_fullshadows
                #pragma multi_compile_fog
                #pragma only_renderers d3d9 d3d11 glcore gles metal 
                #pragma target 3.0
                uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
                uniform float4 _Color;
                uniform fixed _Desaturate;
                struct VertexInput {
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                    float2 texcoord0 : TEXCOORD0;
                };
                struct VertexOutput {
                    float4 pos : SV_POSITION;
                    float2 uv0 : TEXCOORD0;
                    float4 posWorld : TEXCOORD1;
                    float3 normalDir : TEXCOORD2;
                    LIGHTING_COORDS(3,4)
                    UNITY_FOG_COORDS(5)
                };
                VertexOutput vert (VertexInput v) {
                    VertexOutput o = (VertexOutput)0;
                    o.uv0 = v.texcoord0;
                    o.normalDir = UnityObjectToWorldNormal(v.normal);
                    o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                    float3 lightColor = _LightColor0.rgb;
                    o.pos = UnityObjectToClipPos( v.vertex );
                    UNITY_TRANSFER_FOG(o,o.pos);
                    TRANSFER_VERTEX_TO_FRAGMENT(o)
                    return o;
                }
                float4 frag(VertexOutput i) : COLOR {
                    i.normalDir = normalize(i.normalDir);
                    float3 normalDirection = i.normalDir;
                    float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse));
                    clip(_Diffuse_var.a - 0.5);
                    float3 lightDirection = normalize(lerp(_WorldSpaceLightPos0.xyz, _WorldSpaceLightPos0.xyz - i.posWorld.xyz,_WorldSpaceLightPos0.w));
                    float3 lightColor = _LightColor0.rgb;
    ////// Lighting:
                    float attenuation = LIGHT_ATTENUATION(i);
                    float3 node_544 = (lerp( _Diffuse_var.rgb, (float3(0.6,0.6,0.6)*lerp(_Diffuse_var.rgb,dot(_Diffuse_var.rgb,float3(0.3,0.59,0.11)),1.0)), _Desaturate )*_Color.rgb); // Diffuse Color
                    float node_7731 = 0.5;
                    float node_5683 = ((max(0,dot(lightDirection,normalDirection))+node_7731)*node_7731);
                    float3 finalColor = ((node_544*(node_5683*node_5683))*_LightColor0.rgb*attenuation);
                    fixed4 finalRGBA = fixed4(finalColor * 1,0);
                    UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                    return finalRGBA;
                }
                ENDCG
            }
            Pass {
                Name "ShadowCaster"
                Tags {
                    "LightMode"="ShadowCaster"
                }
                Offset 1, 1
                Cull Back
                
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #define UNITY_PASS_SHADOWCASTER
                #include "UnityCG.cginc"
                #include "Lighting.cginc"
                #pragma fragmentoption ARB_precision_hint_fastest
                #pragma multi_compile_shadowcaster
                #pragma multi_compile_fog
                #pragma only_renderers d3d9 d3d11 glcore gles metal 
                #pragma target 3.0
                uniform sampler2D _Diffuse; uniform float4 _Diffuse_ST;
                struct VertexInput {
                    float4 vertex : POSITION;
                    float2 texcoord0 : TEXCOORD0;
                };
                struct VertexOutput {
                    V2F_SHADOW_CASTER;
                    float2 uv0 : TEXCOORD1;
                };
                VertexOutput vert (VertexInput v) {
                    VertexOutput o = (VertexOutput)0;
                    o.uv0 = v.texcoord0;
                    o.pos = UnityObjectToClipPos( v.vertex );
                    TRANSFER_SHADOW_CASTER(o)
                    return o;
                }
                float4 frag(VertexOutput i) : COLOR {
                    float4 _Diffuse_var = tex2D(_Diffuse,TRANSFORM_TEX(i.uv0, _Diffuse));
                    clip(_Diffuse_var.a - 0.5);
                    SHADOW_CASTER_FRAGMENT(i)
                }
                ENDCG
            }
        }
        FallBack "Diffuse"
        CustomEditor "ShaderForgeMaterialInspector"
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    上次更新: 2023/10/16, 17:53:06 访问次数: 0
    Unity复制GameObject路径到剪切板
    unity中判断iphone设备型号的方法

    ← Unity复制GameObject路径到剪切板 unity中判断iphone设备型号的方法→

    最近更新
    01
    一些Shell常用的功能写法整理
    10-20
    02
    删除git仓库submodule的步骤
    10-20
    03
    django基本命令
    10-16
    更多文章>
    Copyright © 2017-2025 随风逐叶
    沪ICP备18008791号-1 | 沪公网安备31011502401077号

    网站访问总次数: 0次
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式