美文网首页
Shader学习——描边外拓(物体空间外拓,视角空间外拓,裁剪空

Shader学习——描边外拓(物体空间外拓,视角空间外拓,裁剪空

作者: BacteriumFox | 来源:发表于2019-08-25 15:00 被阅读0次

核心

新建Pass对物体的顶点进行偏移上色

Shader "Unlit/019"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Diffuse ("漫反射", Color) = (1,1,1,1)
        _Outline ("外廓粗细", Range(0,0.05)) = 0.02
        _OutlineColor ("外廓颜色", Color) = (0,0,0,0)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            //定义Pass名,用于重复使用该Pass
            Name "Outline"
            //渲染前面
            Cull Front
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            float _Outline;
            fixed4 _OutlineColor;

            struct v2f
            {
                float4 vertex :SV_POSITION;
            };

            v2f vert(appdata_base v)
            {
                v2f o;
                //描边=顶点在法线上偏移 * 颜色
                
                //物体空间法线外拓
                //v.vertex.xyz += v.normal * _Outline;
                //o.vertex = UnityObjectToClipPos(v.vertex);

                //视角空间法线外拓
                //float4 pos = mul(UNITY_MATRIX_V,mul(unity_ObjectToWorld,v.vertex));
                //float3 normal = normalize (mul((float3x3)UNITY_MATRIX_IT_MV,v.normal));
                //pos = pos + float4(normal,0) * _Outline;
                //o.vertex = mul(UNITY_MATRIX_P,pos);

                //裁剪空间法线外拓
                o.vertex = UnityObjectToClipPos(v.vertex);
                float3 normal = normalize (mul((float3x3)UNITY_MATRIX_IT_MV,v.normal));
                float2 viewNoraml = TransformViewToProjection(normal.xy);
                o.vertex.xy += viewNoraml * _Outline;

                return o;
            }

            float4 frag(v2f i):SV_Target
            {
                return _OutlineColor;
            }

            ENDCG
        }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
        //引入光照
        #include "Lighting.cginc" 
             
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                fixed3 worldNormal : TEXCOORD1;
                float3 worldPos : TEXCOORD2;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
        float4 _Diffuse;

            v2f vert (appdata_base v)
            {
                v2f o;
                //顶点位置
                o.vertex = UnityObjectToClipPos(v.vertex);
                //法线方向
                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                //世界坐标
                o.worldPos = mul(unity_ObjectToWorld,v.vertex);
                //纹理坐标缩放偏移
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
              
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // 纹理采样
                fixed4 albedo = tex2D(_MainTex, i.uv);

                //光源方向
                fixed3 worldLightDir = UnityWorldSpaceLightDir (i.worldPos);

                //漫反射光=入射光线强度*纹素值*材质的漫反射系数* 映射值为正数(表面法线方向 · 光源方向)
                fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * (dot(worldLightDir,i.worldNormal)*0.5+0.5);

                //环境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

                fixed3 color = ambient + diffuse;
                return fixed4(color,1);
            }
            ENDCG
        }
    }
}

相关文章

  • Shader学习——描边外拓(物体空间外拓,视角空间外拓,裁剪空

    核心 新建Pass对物体的顶点进行偏移上色

  • Shader学习——卡通材质渲染

    核心 运用到核心知识:边缘光,描边外拓,颜色阶级 效果图 带入XRay Shader

  • 外拓

    今天单位外拓活动,天气很热,本来很享受这个过程,结果不幸的是一开始就扭到手了,很痛,可是跟着大佬们一组,还是强忍着...

  • 外拓

    外拓指走出去搞宣传,营销 如果你想卖辣条,除了摆地摊,等待客人上门购买,还可以带着辣条,去人多的地方主动推销 这个...

  • 康正汽车连锁超市江苏常熟店积极组织慰问福利院儿童公益活动

    外拓市场,强基固本,稳步提升,健康发展。近日,康正汽车超市全国连锁燕郊店的外拓小分队再次出击,前往高楼镇市场外拓。...

  • 康正汽车连锁超市河北燕郊店精诚团结,打造狼性队伍

    外拓市场,强基固本,稳步提升,健康发展。近日,康正汽车超市全国连锁燕郊店的外拓小分队再次出击,前往高楼镇市场外拓。...

  • 外拓总结

    2天的户外拓展结束了,可谓是很累,当然之前也跑过店面,还是有差距的,毕竟美容院不是哪里都有,只是一个片区会有多少家...

  • 巡展外拓

    前几天区域市场部经理和销售经理带着两名新招聘的销售顾问到我们店来帮忙做巡展外拓。 为什么要做巡展外拓呢,是因...

  • 外拓心得

    今天天气比昨天又热了些,但是外拓营销的热情不减,今天比昨天好像又娴熟些,说话显得更加自然,没有像昨天那么胆...

  • 晚秋外拓

    秋风追落叶 晖尽炽云天 亮剑比干岭 植根晋水苑 彬彬红绶带 楚楚信合衫 普惠三农客 乡情话不完

网友评论

      本文标题:Shader学习——描边外拓(物体空间外拓,视角空间外拓,裁剪空

      本文链接:https://www.haomeiwen.com/subject/eoghectx.html