Unity3D Shader 之透视效果XRay

1、

Shader "Unlit/XRay"
{Properties{_MainTex("Texture", 2D) = "white" {}// 漫反射_Diffuse("Diffuse", COLOR) = (1,1,1,1)// XRay 效果_XRayColor("XRay Color", COLOR) = (0,1,1,1)_XRayPower("XRay Power", Range(0.00001,3)) = 0.001}SubShader{Tags { "Queue" = "Geometry+1000" "RenderType" = "Opaque" }LOD 100Pass{Stencil {Ref 254Comp AlwaysPass ReplaceZFail Keep}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f{float4 vertex : SV_POSITION;float2 uv : TEXCOORD0;float3 worldNormal:TEXCOORD1;float3 worldPos:TEXCOORD2;};sampler2D _MainTex;float4 _MainTex_ST;float4 _Diffuse;float _Steps;float _ToonLerpWeight;float4 _RimColor;float _RimPower;v2f vert(appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);return o;}fixed4 frag(v2f i) : SV_Target{// 环境光float3 ambient = UNITY_LIGHTMODEL_AMBIENT;// 贴图的本色fixed3 albedo = tex2D(_MainTex, i.uv).rgb;// 视野方向float3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));// 漫反射fixed3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos);float halfLambert = dot(worldLightDir,i.worldNormal) * 0.5 + 0.5;// 最终漫反射fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * halfLambert;return fixed4(ambient + diffuse,1);}ENDCG}Pass{Tags{"ForceNoShadowCasting" = "true"}Name "XRay"// 添加 混合效果 注意渲染顺序 QueueBlend SrcAlpha one// 关闭深度写入ZWrite offZTest Greater  // 表示大于的时候显示(目的显示墙后面的物体)//使用Stencil进行过滤,该Shader的第一个Pass中我们向Stencil Buffer中写入一个值254,在Xray的pass中,如果stencil的值为254,则不再绘制效果Stencil {Ref 254Comp NotEqualPass KeepZFail Keep}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _XRayColor;float _XRayPower;struct v2f {float4 vertex :SV_POSITION;//方法一,得到世界点,再到片元中计算视野方向//float3 worldPos:TEXCOORD0;//float3 worldNormal:TEXCOORD1;//方法二,放在Object空间下计算float3 viewDir:TEXCOORD0;float3 normal:TEXCOORD1;};v2f vert(appdata_base v) {v2f o;o.vertex = UnityObjectToClipPos(v.vertex);// 方法一,得到世界点,再到片元中计算视野方向//o.worldNormal = UnityObjectToWorldNormal(v.normal);//o.worldPos = mul(unity_ObjectToWorld,v.vertex);// 方法二,把视野方向在模型中就计算出来//o.worldNormal = UnityObjectToWorldNormal(v.normal);o.viewDir = ObjSpaceViewDir(v.vertex);o.normal = v.normal;return o;}float4 frag(v2f i) :SV_Target{/// 通过视野方向和世界法线方向求得边沿(视野方向和世界法线方向 垂直为边缘)// 方法一,得到世界点,再到片元中计算视野方向//float3 worldNormal = normalize(i.worldNormal);//float3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));// 方法二,把视野方向在模型中就计算出来float3 worldNormal = normalize(i.normal);float3 viewDir = normalize(i.viewDir);// 边缘float rim = 1 - dot(worldNormal,viewDir);  // 1- 让边沿为 1return _XRayColor * pow(rim,1 / _XRayPower);}ENDCG}}FallBack "Diffuse"
}

2、

Shader "Unity/XRay"
{Properties{_MainTex("Texture", 2D) = "white" {}_Diffuse("Color",Color) = (1,1,1,1)_XRayColor("XRayColor",Color) = (1,1,1,1)_XRayPower("XRayPower",float) = 0}SubShader{Tags {"Queue" = "Geometry+1000" "RenderType" = "Opaque" }LOD 100//Xray效果Pass{Name "Xray"//忽略阴影,半透明物体不需要阴影,可开启此功能Tags{ "ForceNoShadowCasting" = "true" }//开启混合Blend SrcAlpha One//不进行任何颜色信息写入ZWrite Off//大于深度缓冲池中的颜色深度的片元才进行处理 其他的全部舍弃ZTest GreaterCGPROGRAM#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"#include "Lighting.cginc"float4 _XRayColor;float _XRayPower;struct v2f{float4 vertex:SV_POSITION;float3 normal:TEXCOORD0;float3 viewDir:TEXCOORD1;};v2f vert(appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.normal = v.normal;o.viewDir = ObjSpaceViewDir(v.vertex);return o;};fixed4 frag(v2f i) :SV_TARGET{float3 NormalDir = normalize(i.normal);float3 ViewDir = normalize(i.viewDir);float rim = 1 - saturate(dot(NormalDir,ViewDir));float4 rimColor = _XRayColor * pow(rim,1 / _XRayPower);return rimColor;};ENDCG}//正常的漫反射渲染Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag #include "UnityCG.cginc"#include "Lighting.cginc"sampler2D _MainTex;float4 _MainTex_ST;float3 _Diffuse;struct v2f{float4 vertex:SV_POSITION;float2 uv:TEXCOORD0;float3 worldPos:TEXCOORD1;float3 worldNormal:TEXCOORD2;};v2f vert(appdata_base v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);o.worldPos = mul(unity_ObjectToWorld,v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;};fixed4 frag(v2f i) :SV_TARGET{float3 worldNormalDir = normalize(i.worldNormal);float3 WorldLightDir = normalize(UnityWorldSpaceLightDir(i.worldNormal));float3 texColor = tex2D(_MainTex,i.uv);float3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb * texColor.rgb;float3 diffuse = _LightColor0.rgb * _Diffuse.rgb * texColor.rgb * (dot(worldNormalDir,WorldLightDir) * 0.5 + 0.5);float3 color = diffuse + ambient;return fixed4(color,1);};ENDCG}}Fallback "Diffuse"
}

3、Highlight Plus - All in One Outline & Selection Effects

Highlight Plus - All in One Outline & Selection Effects | VFX Shaders | Unity Asset Store

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 将表里的两列值数据互换

示例: 需要将表中的 两个订单号互换 方案: 将同一张表数据做 临时数据 和主表 做数据交互 。 update 表 as main, 表 as temp set main.bill_no temp.track_bill_no, main.track_bill_no temp.bill_no where main.id temp.id…

新手小白如何搭建自己的服务器

由于近期六年前的域名到期了,阿里云的客服电话,正好提醒了我需要管理下这方面的东西, 正好看到阿里云的服务器99/年,而且可以原价续费两年,截止日期为2026年3月,所以我还是剁手了。 借着这次机会写一部分建…

分布式(7)

目录 31.基于Zookeeper如何实现分布式锁? 32.什么是ACID? 33.什么是分布式的XA协议? 34.什么是2PC? 35.什么是3PC? 31.基于Zookeeper如何实现分布式锁? 顺序节点 创建一个用于发号的节点“/test/lock…

应用在游戏机触摸屏中的触摸感应芯片

触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个电阻值,当手指…

【python入门】day19:学生管理系统需求分析、系统设计、主函数设计

需求分析 应具备功能—— 添加学生及成绩信息; 将学生信息保存到文件中; 修改和删除学生信息; 查询学生信息; 根据学生成绩进行排序; 统计学生的总分 系统设计 1.录入学生信息模块 2.查找 3.删除 4.修改 5.成绩排名…

数据分析求职-简历准备

简历在整个求职过程中的重要性不言而喻,今天咱们来聊求职过程中简历准备的那些事儿~ 1. 简历究竟有啥用 求职的流程简单说就是:网申->笔试->面试->offer 其中网申环节,简历100%决定了你的通过与否,这个点大家都知道。…

计算机Java项目|Springboot+vue 学生心理咨询评估系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

数据结构入门到入土——ArrayList与顺序表

目录 一,线性表 二,顺序表 1.接口实现 三,ArrayList简介 四,ArrayList使用 1.ArrayList的构造 2.ArrayList常见操作 3.ArrayList的遍历 4.ArrayList的扩容机制 五,ArrayLisit的具体使用 杨辉三角 一&#x…

linux 使用log4cpp记录项目日志

为什么要用log4cpp记录项目日志 在通常情况下,Linux/UNIX 每个程序在开始运行的时刻,都会打开 3 个已经打开的 stream. 分别用来输入,输出,打印错误信息。通常他们会被连接到用户终端。这 3 个句柄的类型为指向 FILE 的指针。可以…

【保研记录】2023年(24届)SE上岸经历

先开个坑,慢慢填~ 个人信息 学校:某双非 专业:软件工程 第四轮学科评估:无(对就是没有等级) 排名:1/400 竞赛/荣誉:国奖x2,省三好,大英国二,…

视频剪辑方法:一键批量转码,视频转GIF教程详解

在数字媒体时代,视频剪辑已经成为一项必备技能。无论是专业人士还是普通用户,都要对视频进行剪辑、转码和制作。但是视频剪辑并不简单,要掌握一定的技巧和知识。下面一起来看云炫AI智剪简单易学的视频剪辑方法:一键批量转码和视频…

案例093:基于微信小程序的南宁周边乡村游设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

【MATLAB】【数字信号处理】线性卷积和抽样定理

已知有限长序列:xk1,2,1,1,0,-3, hk[1,-1,1] , 计算离散卷积和ykxk*h(k) 。 程序如下: function [t,x] My_conv(x1,x2,t1,t2,dt) %文件名与函数名对应 %自写的卷积函数 x conv(x1,x2)*dt; t0 t1(1) t2(1); L length(x1) length(x2)-2; t t0:dt…

thinkphp6入门(14)-- 多关联模型查询

背景: 有3个数据表,一个User表,一个Cloth表,一个Shoe表。 Cloth表和Shoe表分别和User表通过user_id关联。 thinkphp 6中如何通过模型查询所有用户,其中包括每个用户的cloth和shoe。 多关联模型查询: 1.…

Qt6学习笔记:对象树

使用QObject及其子类创建的对象是以对象树的形式来组织的。创建一个QObject对象时若设置一个父对象,它就会被添加到父对象的子对象列表里,一个父对象被删除时,其全部的子对象都会自动删除。QObject类的构造函数里有一个参数用于设置对象的父对…

CommonJS 和 ES6 Module:一场模块规范的对决(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

python 数据容器

数据容器概念 一个可以存储多个元素的python数据类型 python有的数据容器 list(列表) tuple(元组) str(字符串) set(集合) dct(字典) 列表 python的列表的数据类型可以是不同的 my_list ["1",123,True,[123,"3333",d,False]]for item in my_list:p…

【uniapp】多规格选择

效果图 VUE <template> <view><view class"wp-80 pd-tb-40 mg-auto"><button type"warn" click"showDrawer(showRight)">筛选</button></view><!-- 筛选-uni-drawer --><uni-drawer ref"s…

暗光增强——Zero-DCE网络推理测试

目录 一、Zero-DCE方法1.1 网络优点1.2 网络适用场景1.3 网络不适用场景 二、源码包三、测试四、测试结果五、推理速度六、总结 一、Zero-DCE方法 Zero-DCE&#xff08;Zero-Reference Deep Curve Estimation&#xff09;是一种用于低光照增强的网络。 1.1 网络优点 无需参考…

ClickHouse数据库详解和应用实践

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 概述1.适用场景2.不适用场景 一、核心特性1.完备的DBMS功能2.列式存储与数据压缩 二、安装部署1.在线安装2.离线安装 三、jdbc访问总结 概述 ClickHouse 是一个用于…