Shader "Sbin/Rim2"
{Properties{
// 泛光颜色_Color("Color",color) = (1,1,1,1)
// 泛光效果强度_Scale("Scale",Range(1,8)) = 1
// 泛光大小范围_Outer("Outer",range(0,1)) = 0.2}SubShader{// 通过标签对透明物体渲染进行排序tags{"queue" = "transparent"}// 该pass用于实现物体外部边缘的泛光的效果
pass{// Alpha混合blend srcalpha oneminussrcalpha// 取消将深度写入深度缓存zwrite offCGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float _Scale;float4 _Color;float _Outer;struct v2f{float4 pos: POSITION;float3 normal: TEXCOORD0;float4 vertex: TEXCOORD1;};// 顶点函数v2f vert(appdata_base v){// 将顶点沿着法线方向扩展v.vertex.xyz += v.normal * _Outer;v2f o;// 将顶点转换到投影空间o.pos = mul(UNITY_MATRIX_MVP,v.vertex);// 将原始数据传递给结构体o.vertex = v.vertex;o.normal = v.normal;return o;}// 片段函数fixed4 frag(v2f IN) :COLOR{// 计算世界空间法线向量float3 N = normalize(mul(IN.normal,(float3x3)unity_WorldToObject));// 计算世界空间顶点位置float3 worldPos = mul(unity_ObjectToWorld,IN.vertex).xyz;// 计算从顶点指向摄像机的向量float3 V = normalize(_WorldSpaceCameraPos.xyz - worldPos);float bright = saturate(dot(N, V));bright = pow(bright,_Scale);_Color.a *= bright;return _Color;}ENDCG}// ===================================================
// 该pass用于防止物体中心颜色过于明亮pass{blendop revsub// Alpha混合blend dstalpha one// 取消深度的写入zwrite offCGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float _Scale;struct v2f{float4 pos: POSITION;};// 顶点函数v2f vert(appdata_base v){v2f o;// 将顶点转换到投影空间o.pos = mul(UNITY_MATRIX_MVP,v.vertex);return o;}// 片段函数fixed4 frag(v2f IN) :COLOR{return fixed4(1,1,1,1);}ENDCG}// ===================================================
//  该pass用于实现物体的半透明效果pass {/*blend zero one*/// Alpha混合blend srcalpha oneminussrcalpha// 取消深度的写入zwrite offCGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float _Scale;struct v2f{float4 pos: POSITION;float3 normal: TEXCOORD0;float4 vertex: TEXCOORD1;};// 顶点函数v2f vert(appdata_base v){v2f o;// 将顶点转换到投影空间o.pos = UnityObjectToClipPos(v.vertex);// 将原始数据传递给结构体o.vertex = v.vertex;o.normal = v.normal;return o;}// 片段函数fixed4 frag(v2f IN):COLOR{// 计算世界空间法线向量float3 N = normalize(mul(IN.normal,(float3x3)unity_WorldToObject));// 计算世界空间顶点位置float3 worldPos = mul(unity_ObjectToWorld,IN.vertex).xyz;// 计算从顶点指向摄像机的向量float3 V = normalize(_WorldSpaceCameraPos.xyz - worldPos);float bright = 1 - saturate(dot(N, V));bright = pow(bright,_Scale);return fixed4(1,1,1,1) * bright;}ENDCG}}
}

效果截图:

【Unity Shader学习】边缘泛光效果2相关推荐

  1. Unity Shader学习:油画效果

    Unity Shader学习:油画效果 油画效果在学习浅墨大神的文章时看到的比较有趣,但是原文中也没详细的算法介绍如何实现,这里就先直接拿来用吧,UI和屏幕后处理都可以用,算法也看的不是很明白,好像是 ...

  2. Unity Shader学习:Dissolve消融效果

    Unity Shader学习:Dissolve消融效果 消融效果在游戏里非常常用,这里简单的实现下,代码里用到了if分支在shader里可能会费一点,如果想直接用puppet_master大佬版本的话 ...

  3. Unity Shader学习:动态模糊(shutter angle方式)

    Unity Shader学习:动态模糊 动态模糊一般有帧混合和motion vector两种,这里主要介绍motion vector的方法. Keijiro源码:https://github.com/ ...

  4. Unity Shader学习:水墨效果

    Unity Shader学习:水墨效果 偶然在网上看到9级铁甲蛹大神的水墨风格后处理觉得挺有意思,参照着实现一下,还是涉及到之前油画效果的算法,叫什么滤波暂时不清楚,应该用来处理手绘效果挺多的. 水墨 ...

  5. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  6. 《Unity Shader入门精要》学习笔记第5章 开始Unity Shader学习之旅

    本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第五章 开始Unity Sh ...

  7. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  8. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  9. Unity Shader学习:动态雾

    Unity Shader学习:动态雾 先将相机近裁面四个角向量传给shader,再通过观察空间下的深度值和相机位置算出像素在世界坐标系的位置,通过世界空间高度值来设定雾的范围和浓度,然后通过噪声和uv ...

  10. Unity Shader学习-高光反射

    Unity Shader学习-高光反射 高光反射计算公式 高光反射 = 光源的色彩和强度 * 材质的高光反射系数 * pow(max(0,视角方向 · 反射方向),_Gloss) 视角方向 = ref ...

最新文章

  1. 新手参加java培训都学什么
  2. python3 异步 asyncio get_event_loop new_event_loop 使用
  3. Matlab:利用Matlab实现布朗运动模拟
  4. navicat mysql两张表建立联系_初识MySQL
  5. UVA 11210 中国麻将
  6. EF Core 插件 —— ToSql
  7. leetcode116. 填充每个节点的下一个右侧节点指针(dfs)
  8. 为了实现自己的美好程序人生
  9. Rabbit MQ 配置
  10. Windows下编写的脚本文件无法在Linux上运行的问题
  11. zblog php 调用缩略图,缩略图插件
  12. nacos配置中心使用_SpringBoot开发案例Nacos配置管理中心
  13. 通俗演义TCP流量控制
  14. EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离
  15. 计算机网络课程设计——校园网的规划与设计
  16. 上行带宽,下行带宽和内网带宽的区别及相关问题
  17. Avalonia的Snoop
  18. android的shape(四周边框为灰色)
  19. Docker(2) 安全加密,habor仓库和Docker网络
  20. Hexo接入码云评论系统

热门文章

  1. 原平学计算机去哪里学,原平学电脑,原平学电脑报班,原平学电脑一般怎么收费 - IT教育频道...
  2. 个人永久性免费-Excel催化剂功能第18波-在Excel上也能玩上词云图
  3. 模拟ic学习笔记(拉扎维)--第一节MOSFET结构
  4. 微信公众号开发笔记2(springboot后台项目搭建)
  5. 小程序这样火,现在还可以加盟吗?
  6. [Vue]使用keep-alive第一次失效,第二次进入才正常
  7. 数据处理之搜索关键词分析
  8. 数字电路基础(一)数制与码制
  9. Mapbar图片算法
  10. OPENCV3.0+VS2015安装配置