下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Unity3D 描边效果代码(轮廓边框) 实例

作者:课课家教育     来源: http://www.kokojia.com点击数:4374发布时间: 2016-03-02 11:59:03

标签: Unity3DUnity3D代码Unity3D描边Unity3D Shader

游戏开发unity3D 描边效果教程,使用Shader模块就可以轻松实现

这里先给出圆球效果图(PS:这是一个3D球)

 Unity3D 描边效果代码(轮廓边框) 实例_Unity3D描边_Unity3D Shader - 课课家

 

Unity3D 描边效果(轮廓边框)但是我并不熟悉shader这一块这里直接给出 shader 的代码

Shader "Outlined/Silhouetted Diffuse" {

Properties {

_Color ("Main Color", Color) = (1,1,1,1)

_OutlineColor ("Outline Color", Color) = (0,0,0,1)//改变这个能改变轮廓边的颜色

_Outline ("Outline width", Range (0.0, 0.03)) = 0.008//改变这个能改变轮廓边的粗细

_MainTex ("Base (RGB)", 2D) = "white" { }

}

CGINCLUDE

#include "UnityCG.cginc"

 

struct appdata {

float4 vertex : POSITION;

float3 normal : NORMAL;

};

 

struct v2f {

float4 pos : POSITION;

float4 color : COLOR;

};

 

uniform float _Outline;

uniform float4 _OutlineColor;

 

v2f vert(appdata v) {

// just make a copy of incoming vertex data but scaled according to normal direction

v2f o;

o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

 

float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);

float2 offset = TransformViewToProjection(norm.xy);

 

o.pos.xy += offset * o.pos.z * _Outline;

o.color = _OutlineColor;

return o;

}

ENDCG

 

SubShader {

Tags { "Queue" = "Transparent" }

 

// note that a vertex shader is specified here but its using the one above

Pass {

Name "OUTLINE"

Tags { "LightMode" = "Always" }

Cull Off

ZWrite Off

ZTest Always

ColorMask RGB // Alpha not used

 

// you can choose what kind of blending mode you want for the outline

Blend SrcAlpha OneMinusSrcAlpha // Normal

//Blend One One // Additive

//Blend One OneMinusDstColor // Soft Additive

//Blend DstColor Zero // Multiplicative

//Blend DstColor SrcColor // 2x Multiplicative

 

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

 

half4 frag(v2f i) :COLOR {

return i.color;

}

ENDCG

}

 

Pass {

Name "BASE"

ZWrite On

ZTest LEqual

Blend SrcAlpha OneMinusSrcAlpha

Material {

Diffuse [_Color]

Ambient [_Color]

}

Lighting On

SetTexture [_MainTex] {

ConstantColor [_Color]

Combine texture * constant

}

SetTexture [_MainTex] {

Combine previous * primary DOUBLE

}

}

}

SubShader {

Tags { "Queue" = "Transparent" }

 

Pass {

Name "OUTLINE"

Tags { "LightMode" = "Always" }

Cull Front

ZWrite Off

ZTest Always

ColorMask RGB

 

// you can choose what kind of blending mode you want for the outline

Blend SrcAlpha OneMinusSrcAlpha // Normal

//Blend One One // Additive

//Blend One OneMinusDstColor // Soft Additive

//Blend DstColor Zero // Multiplicative

//Blend DstColor SrcColor // 2x Multiplicative

 

CGPROGRAM

#pragma vertex vert

#pragma exclude_renderers gles xbox360 ps3

ENDCG

SetTexture [_MainTex] { combine primary }

}

 

Pass {

Name "BASE"

ZWrite On

ZTest LEqual

Blend SrcAlpha OneMinusSrcAlpha

Material {

Diffuse [_Color]

Ambient [_Color]

}

Lighting On

SetTexture [_MainTex] {

ConstantColor [_Color]

Combine texture * constant

}

SetTexture [_MainTex] {

Combine previous * primary DOUBLE

}

}

}

Fallback "Diffuse"

}

 

 

赞(21)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程