Unity3D中shader 輪廓描邊效果實(shí)現(xiàn)代碼
Unity3D中shader 輪廓描邊效果
想利用Unity3D中shader這個(gè)功能實(shí)現(xiàn)描邊輪廓邊框效果該怎么做呢,相信有很多搞開發(fā)的人想知道,為此下面就給大家介紹下方法。
Shade實(shí)現(xiàn)描邊效果,如下圖中的3D球效果圖

Shade代碼如下:
Shader "Outlined/Silhouetted Diffuse" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_OutlineColor ("Outline Color", Color) = (0,0,0,1) //改變這個(gè)能改變輪廓邊的顏色
_Outline ("Outline width", Range (0.0, 0.03)) = 0.008 //改變這個(gè)能改變輪廓邊的粗細(xì)
_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"
}
以上就是Unity3D中利用shader這個(gè)功能實(shí)現(xiàn)描邊輪廓邊框效果的方法,不會(huì)的話就直接那這串代碼去嘗試吧。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Unity shader實(shí)現(xiàn)消融效果
- Unity shader實(shí)現(xiàn)自由放大縮小效果
- Unity Shader實(shí)現(xiàn)序列幀動(dòng)畫效果
- unity shader實(shí)現(xiàn)玻璃折射效果
- Unity Shader實(shí)現(xiàn)玻璃材質(zhì)效果
- Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果
- Unity Shader實(shí)現(xiàn)描邊OutLine效果
- Unity3D Shader實(shí)現(xiàn)貼圖切換效果
- Unity shader實(shí)現(xiàn)遮罩效果
- 淺談Unity中的Shader
相關(guān)文章
Scala函數(shù)式編程專題--函數(shù)思想介紹
這篇文章主要介紹了Scala函數(shù)式編程的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
K8S二進(jìn)制部署的K8S(1.15)部署hpa功能
這篇文章主要介紹了K8S二進(jìn)制部署的K8S(1.15)部署hpa功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
淺談測(cè)試驅(qū)動(dòng)開發(fā)TDD之爭(zhēng)
在軟件行業(yè)中,神仙打架的名場(chǎng)面,那就不得不提的是2014年的那場(chǎng)——測(cè)試驅(qū)動(dòng)開發(fā)(TDD)之爭(zhēng)。2021-05-05
淺談架構(gòu)模式變遷之從分層架構(gòu)到微服務(wù)架構(gòu)
一般地,架構(gòu)模式大致可以分成兩類,單體架構(gòu)(monolithic architecture)和分布式架構(gòu)(distributed architecture)。2021-05-05

