透视效果shader(边缘光)
思路:渲染两次。
1.第一次渲染:利用Greater进行深度测试,当目标被遮挡时,用一个边缘光的效果显示。
2.第二次渲染:正常渲染。
边缘光的思路:观察方向和顶点法向量夹角越大,边缘光越明显。边缘光强度由公式rim=1-dot(view,normal)来表示。
代码实现:
Shader "Pj/XRay"
{
Properties
{
_MainTex("Base 2D", 2D) = "white"{}
_XRayColor("XRay Color",Color)=(,,,)
_SelfBritness("Self Britness",Range(,))=
} SubShader
{
Tags{ "Queue" = "Geometry+233" "RenderType" = "Opaque" } Pass
{
Blend SrcAlpha OneMinusSrcAlpha
//Blend One OneMinusSrcColor
ZWrite Off
ZTest Greater
//Offset -1000,0
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "Lighting.cginc"
#include "UnityCG.cginc" sampler2D _MainTex;
float4 _MainTex_ST;
float4 _XRayColor;
float _SelfBritness; struct v2f
{
float4 pos : SV_POSITION;
float4 worldPos:TEXCOORD0;
float3 normal: NORMAL;
//float2 uv : TEXCOORD1;
}; v2f vert (appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.worldPos=mul(_Object2World, v.vertex);
//o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.normal=v.normal;
return o;
} fixed4 frag(v2f i) : SV_Target
{
float3 normal = normalize(mul(i.normal, (float3x3)_World2Object));
float3 viewDir=normalize(_WorldSpaceCameraPos-i.worldPos).xyz;
float rim = -max(, dot(normal, viewDir));
return _XRayColor * rim* _SelfBritness ;
} ENDCG
} Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag #include "Lighting.cginc" sampler2D _MainTex;
float4 _MainTex_ST; struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD1;
}; v2f vert(appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
} fixed4 frag(v2f i) : SV_Target
{
return tex2D(_MainTex, i.uv);
} ENDCG
}
} FallBack "Diffuse"
}
透视效果shader(边缘光)的更多相关文章
- Rim 边缘光
边缘光:计算眼睛和模型顶点法线的点积,结果作为强度,和材质输出:顶点和法线平行时,强度最大,垂直时,强度最小.因此将他取反,即同一方向时,强度最小,垂直时,强度最大. -dot(normalize(v ...
- pixijs shader 扫光加强版
pixijs shader 扫光加强版 const app = new PIXI.Application({ transparent: true }); document.body.appendChi ...
- 小强学渲染之Unity Shader边缘描边加强
项目开发遇到一个需求,就是当坦克的准心瞄准敌方(enemy tank 或 item box)时,要让选中的对象的轮廓高亮起来,这实际上是接下来要讲解的实时渲染中轮廓线的渲染应用.实现方式有多种,下面逐 ...
- Unity3d shader之卡通着色Toon Shading
卡通着色的目的是为了让被着色物体显得过渡的不那么好,明暗交界线很明显,等等卡通风格的一系列特征, 也叫Non-photorealisticrendering非真实渲染 重点要做到两点: 1. 描 ...
- Unity Shader 阶段性反思与总结(一)
Unity Shader 阶段性反思与总结(一) 最近在写Shader的时候,总是感觉力不从心,感觉自己已经看了蛮久的书了,也有一定的积累了,但是一想写什么效果,完完全全就是脑袋一团空白.典型的例子就 ...
- Unity Shader实现描边效果
http://gad.qq.com/article/detail/28346 描边效果是游戏里面非常常用的一种效果,一般是为了凸显游戏中的某个对象,会给对象增加一个描边效果.本篇文章和大家介绍下利用S ...
- Unity shader 护盾shield的简单实现
先上效果图 shader所用的贴图资源 扰动 直接对uv进行变换就可以了,记得首先把六边形格子地图的Tilling调高点 先预先调成合适大小的六边形,然后repeat铺满整个护盾 // Tiles a ...
- [转]结合轮廓显示,实现完整的框选目标(附Demo代码)
原地址:http://www.cnblogs.com/88999660/articles/2887078.html 几次看见有人问框选物体的做法,之前斑竹也介绍过,用画的框生成的视椎,用经典图形学的视 ...
- unity3d Human skin real time rendering 真实模拟人皮实时渲染(转)
先放出结果图片...由于网上下的模型是拼的,所以眼皮,脸颊,嘴唇看起来像 存在裂痕,解决方式是加入曲面细分和置换贴图 进行一定隆起,但是博主试了一下fragment shader的曲面细分,虽然细分成 ...
随机推荐
- Tango Java API常数
Tango Java API Constants常数 Constant Field Values常数字段值 Contents com.google.* com.google.* com.google. ...
- [LintCode笔记了解一下]44.Minimum Subarray
这道题和max subarray很类似,我用local 和 global 的dp方式阔以解决这道 那么我们来看动态规划的四个要素分别是什么? State: localmin[i] 表示以当前第i个数最 ...
- C++中的类型判断typeid()操作与java中的 instanceof 做比较
这是RTTI(运行阶段类型识别)的问题,c++有三个支持RTTI的元素: 1. dynamic_cast 操作符 如果可能的话,dynamic_cast操作符将使用一个指向基类的指针来生成一个 ...
- 网络安全之iptables防火墙
1>各种传输方式到最后都会转化为能够通过网络发送的数据格式: 1>文本格式: 2>二进制格式:2>TCP三次握手连接,四次断开,连接时客户端是主动打开,服务器是被动 打开,处于 ...
- delphi Form显示先后问题
- [Erlang09]Erlang gen_server实现定时器(interval)的几种方法及各自的优缺点?
方法1: %%gen_server:部分call_back function. -define(TIME,1000). init([]) –> erlang:send_after(?TIME,s ...
- HBase入门篇
目录: 1-HBase的安装 2-Java操作HBase例子 3-HBase简单的优化技巧 4–存储 5(集群) -压力分载与失效转发 6 -白话MySQL(RDBMS)与HBase之间 7 -安全& ...
- 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
bool flag = false; string agent = System.Web.HttpContext.Current.Request.UserAgent.ToLower(); string ...
- docker : RabbitMQ ElasticSearch
docker 运行RabbitMQ容器 docker run -d -p 5672:5672 -p 15672:15672 --name 命名 CONTAINER ID 放出5672 / 156 ...
- 如何用Python做Web开发?——Django环境配置
用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手. 概念 最近有个词儿很流行,叫做“全栈”(full stack ...