Unity3D中shader 轮廓描边效果实现代码

发布时间 - 2026-01-11 00:09:55    点击率:

Unity3D中shader 轮廓描边效果

想利用Unity3D中shader这个功能实现描边轮廓边框效果该怎么做呢,相信有很多搞开发的人想知道,为此下面就给大家介绍下方法。

  Shade实现描边效果,如下图中的3D球效果图

          Shade代码如下:

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" 
} 

  以上就是Unity3D中利用shader这个功能实现描边轮廓边框效果的方法,不会的话就直接那这串代码去尝试吧。

       感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Unity3D中shader  # 轮廓描边效果  # Unity shader实现消融效果  # Unity shader实现自由放大缩小效果  # Unity Shader实现序列帧动画效果  # unity shader实现玻璃折射效果  # Unity Shader实现玻璃材质效果  # Unity Shader实现新手引导遮罩镂空效果  # Unity Shader实现描边OutLine效果  # Unity3D Shader实现贴图切换效果  # Unity shader实现遮罩效果  # 浅谈Unity中的Shader  # 的人  # 有很多  # 希望能  # 想知道  # 怎么做  # 谢谢大家  # 就给  # 图中  # vertex  # appdata  # POSITION  # NORMAL 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel集合Collection怎么用_Laravel集合常用函数详解  LinuxCD持续部署教程_自动发布与回滚机制  JavaScript常见的五种数组去重的方式  WordPress 子目录安装中正确处理脚本路径的完整指南  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  ,怎么在广州志愿者网站注册?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  利用JavaScript实现拖拽改变元素大小  java中使用zxing批量生成二维码立牌  iOS中将个别页面强制横屏其他页面竖屏  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  怎么用AI帮你为初创公司进行市场定位分析?  非常酷的网站设计制作软件,酷培ai教育官方网站?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  googleplay官方入口在哪里_Google Play官方商店快速入口指南  微信小程序 wx.uploadFile无法上传解决办法  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  详解jQuery中基本的动画方法  佛山网站制作系统,佛山企业变更地址网上办理步骤?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  如何在搬瓦工VPS快速搭建网站?  iOS UIView常见属性方法小结  香港服务器选型指南:免备案配置与高效建站方案解析  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Android滚轮选择时间控件使用详解  如何在IIS中配置站点IP、端口及主机头?  如何获取免费开源的自助建站系统源码?  大同网页,大同瑞慈医院官网?  如何在景安服务器上快速搭建个人网站?  js实现点击每个li节点,都弹出其文本值及修改  如何在宝塔面板中创建新站点?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  EditPlus中的正则表达式 实战(1)  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  如何快速生成橙子建站落地页链接?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel Session怎么存储_Laravel Session驱动配置详解  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  在Oracle关闭情况下如何修改spfile的参数  打造顶配客厅影院,这份100寸电视推荐名单请查收  如何在云服务器上快速搭建个人网站?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤