Unity3d-模型描边和混色Shader

原创 2015年03月18日 15:49:01

游戏中很常见的一个模型描边shader,不用自己写,话不多说祭出Shader利器Shader Forge

用一个Cube测试效果:

编辑界面:

游戏中实际效果:


生成代码:

// Shader created with Shader Forge v1.03 
// Shader Forge (c) Neat Corporation / Joachim Holmer - http://www.acegikmo.com/shaderforge/
// Note: Manually altering this data may prevent you from opening it in Shader Forge
/*SF_DATA;ver:1.03;sub:START;pass:START;ps:flbk:,lico:0,lgpr:1,nrmq:1,limd:1,uamb:False,mssp:True,lmpd:False,lprd:False,rprd:False,enco:False,frtr:True,vitr:True,dbil:False,rmgx:True,rpth:0,hqsc:False,hqlp:False,tesm:0,blpr:0,bsrc:0,bdst:1,culm:0,dpts:2,wrdp:True,dith:2,ufog:True,aust:True,igpj:False,qofs:0,qpre:1,rntp:1,fgom:False,fgoc:False,fgod:False,fgor:False,fgmd:0,fgcr:0.5,fgcg:0.5,fgcb:0.5,fgca:1,fgde:0.01,fgrn:0,fgrf:300,ofsf:0,ofsu:0,f2p0:False;n:type:ShaderForge.SFN_Final,id:7889,x:33392,y:32570,varname:node_7889,prsc:2|emission-321-OUT,olwid-8727-OUT,olcol-323-RGB;n:type:ShaderForge.SFN_Color,id:323,x:32871,y:32990,ptovrint:False,ptlb:outlineColor,ptin:_outlineColor,varname:_outlineColor,prsc:2,glob:False,c1:0,c2:0,c3:0,c4:1;n:type:ShaderForge.SFN_Slider,id:8727,x:33003,y:32847,ptovrint:False,ptlb:outlineWidth,ptin:_outlineWidth,varname:_outlineWidth,prsc:2,min:0,cur:0.03418804,max:1;n:type:ShaderForge.SFN_Tex2d,id:3435,x:32935,y:32450,ptovrint:False,ptlb:mainTexture,ptin:_mainTexture,varname:_mainTexture,prsc:2,tex:3d403fe3184a448fa8bc190c7f07f28c,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Color,id:8677,x:32904,y:32704,ptovrint:False,ptlb:tintColor,ptin:_tintColor,varname:_tintColor,prsc:2,glob:False,c1:1,c2:0.05862069,c3:0,c4:1;n:type:ShaderForge.SFN_Multiply,id:321,x:33171,y:32668,varname:node_321,prsc:2|A-3435-RGB,B-8677-RGB;proporder:8727-323-3435-8677;pass:END;sub:END;*/

Shader "Shader Forge/NewShader" {
    Properties {
        _outlineWidth ("outlineWidth", Range(0, 1)) = 0.03418804
        _outlineColor ("outlineColor", Color) = (0,0,0,1)
        _mainTexture ("mainTexture", 2D) = "white" {}
        _tintColor ("tintColor", Color) = (1,0.05862069,0,1)
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "Outline"
            Tags {
            }
            Cull Front
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #pragma fragmentoption ARB_precision_hint_fastest
            #pragma multi_compile_shadowcaster
            #pragma exclude_renderers xbox360 ps3 flash d3d11_9x 
            #pragma target 3.0
            uniform float4 _outlineColor;
            uniform float _outlineWidth;
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float4 screenPos : TEXCOORD0;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.pos = mul(UNITY_MATRIX_MVP, float4(v.vertex.xyz + v.normal*_outlineWidth,1));
                return o;
            }
            fixed4 frag(VertexOutput i) : COLOR {
                return fixed4(_outlineColor.rgb,0);
            }
            ENDCG
        }
        Pass {
            Name "ForwardBase"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma exclude_renderers xbox360 ps3 flash d3d11_9x 
            #pragma target 3.0

            uniform sampler2D _mainTexture; uniform float4 _mainTexture_ST;
            uniform float4 _tintColor;
            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
                float4 screenPos : TEXCOORD1;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                return o;
            }
            fixed4 frag(VertexOutput i) : COLOR {

                float4 _mainTexture_var = tex2D(_mainTexture,TRANSFORM_TEX(i.uv0, _mainTexture));
                float3 emissive = (_mainTexture_var.rgb*_tintColor.rgb);
                float3 finalColor = emissive;
                return fixed4(finalColor,1);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
    CustomEditor "ShaderForgeMaterialInspector"
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

Unity Shader 物体外轮廓 描边

Shader "AX/Outline1" { // 漫反射光照模型(环境光+方向光) Properties { _MainTex("MainTex", 2D) = "white"{} ...
  • wxlguitar
  • wxlguitar
  • 2014年09月23日 17:32
  • 10001

Unity Shader-描边效果

简介 描边效果是游戏里面非常常用的一种效果,一般在选中物体或者NPC的时候,被选中的对象就会显示描边效果。比如最近又跑回去玩了玩《剑灵》,虽然出了三年了,在现在的网游里面画面仍然算很好的。 还...
  • puppet_master
  • puppet_master
  • 2017年01月15日 16:00
  • 6781

Unity Shader - 描边效果

原文链接:http://blog.csdn.net/puppet_master/article/details/54000951 简介 描边效果是游戏里面非常常用的一种效果...
  • lilysara
  • lilysara
  • 2017年04月03日 20:22
  • 3152

【Shader】彩虹色效果+模型卡通描边效果

Shader "Custom/VertexFragment" { Properties { _myTexture("Texture", 2D) = "white" {} _myColor(...
  • sinat_20559947
  • sinat_20559947
  • 2015年09月18日 16:39
  • 2773

三言两语说shader(五)轮廓描边

这也是个常见的shader,可以实现类似动漫《枪之国度》的那种轮廓描边卡通画风。 在我手头的项目里用来给怪物加“霸体”效果,所谓霸体意思是怪物此时无法被击倒。 用途诸如此类。 下面放效果图: ...
  • obmar45
  • obmar45
  • 2016年04月03日 14:10
  • 3504

shader实现描边效果

描边效果在项目中是常用到的,通常称作轮阔渲染。非opengl的方法是通过CCRenderTexture动态创建纯色纹理,加入到要设置描述效果的图片后面,达到描述效果,该方法要绘制多次,效率不是很好。下...
  • marunshengabc
  • marunshengabc
  • 2017年01月20日 12:01
  • 1287

Unity Shader Example 23 (透明物体描边)

Shader "Custom/OutLine" {Properties { _Color ("Main Color", Color) = (.5,.5,.5,1) _OutlineColor ...
  • aa20274270
  • aa20274270
  • 2016年11月22日 20:31
  • 1096

unity描边效果

这里总结了几种在unity实现描边效果的方法,首先准备一个模型导入在unity中,使用默认shader,上传一张原始图,以便后面实现功能效果的对比 一、边缘光,这里参照官方的一个Surf...
  • qq992817263
  • qq992817263
  • 2016年02月21日 14:31
  • 7329

Unity描边[Unity Shader]

本文详细的讲解使用shader进行描边处理的思路和具体实现。
  • cubesky
  • cubesky
  • 2014年08月15日 18:13
  • 5660

[UnityShader3]2D描边效果

参考链接: http://inpla.net/thread-6502-1-1.html http://www.jianshu.com/p/1d9d439c28fa 1. ...
  • lyh916
  • lyh916
  • 2016年05月24日 10:08
  • 3737
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3d-模型描边和混色Shader
举报原因:
原因补充:

(最多只允许输入30个字)