温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

UnityShader中怎么实现描边OutLine效果

发布时间:2021-08-06 16:16:20 来源:亿速云 阅读:167 作者:Leah 栏目:编程语言

UnityShader中怎么实现描边OutLine效果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

具体内容如下

Shader实现描边流程大致为:对模型进行2遍(2个pass)绘制,第一遍(描边pass)在vertex shader中对模型沿顶点法线方向放大,fragment shader设置输出颜色为描边颜色;第二遍正常绘制模型,除被放大的部分外,其余被覆盖,这样就有了描边的效果。

实现代码如下:

Shader "Custom/OutlineShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _OutLineWidth("width", float) = 1.2//定义一个变量 } SubShader {  Pass { CGPROGRAM  #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"  struct appdata { float4 vertex:POSITION; float2 uv:TEXCOORD0; };  struct v2f { float2 uv :TEXCOORD0; float4 vertex:SV_POSITION; };   float _OutLineWidth;//设置变量 v2f vert(appdata v) { v2f o; //设置一下xy //v.vertex.xy *= 1.1; v.vertex.xy *= _OutLineWidth;//乘上变量 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.uv; return o; }  sampler2D _MainTex;  fixed4 frag(v2f i) :SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //return col; return fixed4(0, 0, 1, 1); } ENDCG }   Pass { ZTest Always CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"  struct appdata { float4 vertex:POSITION; float2 uv:TEXCOORD0; };  struct v2f { float2 uv :TEXCOORD0; float4 vertex:SV_POSITION; };   v2f vert(appdata v) { v2f o; o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.uv; return o; }  sampler2D _MainTex;  fixed4 frag(v2f i) :SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //return fixed4(0, 0, 1, 1);//返回蓝色,因为再次渲染会把第一个颜色覆盖掉 return col; } ENDCG } }  FallBack "Diffuse"}

关于UnityShader中怎么实现描边OutLine效果问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI