ShadowGun代码
http://blog.csdn.net/candycat1992/article/details/42061701 不知道有没有案例 不怎么会用
Shader "MADFINGER/Transparent/GodRays" { Properties { _MainTex ("Base texture", 2D) = "white" {} _FadeOutDistNear ("Near fadeout dist", float) = 10 _FadeOutDistFar ("Far fadeout dist", float) = 10000 _Multiplier("Multiplier", float) = 1 _ContractionAmount("Near contraction amount", float) = 5
} SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } Blend One One
// Blend One OneMinusSrcColor Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) } LOD 100 CGINCLUDE #include "UnityCG.cginc" sampler2D _MainTex; float _FadeOutDistNear; float _FadeOutDistFar; float _Multiplier; float _ContractionAmount; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; fixed4 color : TEXCOORD1; }; v2f vert (appdata_full v) { v2f o; float3 viewPos = mul(UNITY_MATRIX_MV,v.vertex); float dist = length(viewPos); float nfadeout = saturate(dist / _FadeOutDistNear); float ffadeout = 1 - saturate(max(dist - _FadeOutDistFar,0) * 0.2); ffadeout *= ffadeout; nfadeout *= nfadeout; nfadeout *= nfadeout; nfadeout *= ffadeout; float4 vpos = v.vertex; vpos.xyz -= v.normal * saturate(1 - nfadeout) * v.color.a * _ContractionAmount; o.uv = v.texcoord.xy; o.pos = mul(UNITY_MATRIX_MVP, vpos); o.color = nfadeout * v.color * _Multiplier; return o; } ENDCG Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest fixed4 frag (v2f i) : COLOR { return tex2D (_MainTex, i.uv.xy) * i.color; } ENDCG }
}
} Shader "Custom/Blinking GodRays" { Properties { _MainTex ("Base texture", 2D) = "white" {} //用于模拟光照的透明纹理 _FadeOutDistNear ("Near fadeout dist", float) = 10 //小于这个距离时 会出现淡出效果 _FadeOutDistFar ("Far fadeout dist", float) = 10000 //大于这个距离时 会出现淡出效果 _Multiplier("Color multiplier", float) = 1 //光照颜色的乘数 可以用来调节最后的模拟光照 _Bias("Bias",float) = 0 //模拟闪烁时 波形的偏移 可以理解为波形图像Y方向的移动量 _TimeOnDuration("ON duration",float) = 0.5 //模拟闪烁时 闪烁时亮着的时间 _TimeOffDuration("OFF duration",float) = 0.5 //模拟闪烁时 闪烁时暗着的时间 _BlinkingTimeOffsScale("Blinking time offset scale (seconds)",float) = 5 //模拟闪烁时 指定闪烁在波形中开始位置 _SizeGrowStartDist("Size grow start dist",float) = 5 //大于这个距离时,会开始对顶点进行扩展,即从0开始增长。 _SizeGrowEndDist("Size grow end dist",float) = 50 //达到这个距离时,扩张达到最大程度,即扩展程度为1。 _MaxGrowSize("Max grow size",float) = 2.5 //扩张的最大大小 _NoiseAmount("Noise amount (when zero, pulse wave is used)", Range(0,0.5)) = 0 //模拟闪烁时,噪声的程度,用于混合均匀的脉冲波和噪声波 _Color("Color", Color) = (1,1,1,1) //用于改变光照颜色。 } SubShader{ Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Blend One One // 贴图和背景叠加 无Alpha透明通道处理 Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) } CGINCLUDE #include "UnityCG.cginc" sampler2D _MainTex; float _FadeOutDistNear; float _FadeOutDistFar; float _Multiplier; float _Bias; float _TimeOnDuration; float _TimeOffDuration; float _BlinkingTimeOffsScale; float _SizeGrowStartDist; float _SizeGrowEndDist; float _MaxGrowSize; float _NoiseAmount; float4 _Color; struct v2f{ float4 pos : SV_POSITION; //裁剪空间中的顶点坐标 float2 uv : TEXCOORD0; //顶点的纹理坐标 fixed4 color : TEXCOORD1; //顶点颜色 }; v2f vert(appdata_full v) { v2f o; float time = _Time.y + _BlinkingTimeOffsScale * v.color.b; float3 viewPos = mul(UNITY_MATRIX_MV,v.vertex); //mul(x, y) 返回x、y矩阵相乘的积。 float dist = length(viewPos); //length(v) 返回v向量的长度 dist 距离视角的远近 float nfadeout = saturate(dist / _FadeOutDistNear); //saturate(x) 把x截取在[0, 1]之间 如果小于了_FadeOutDistNear,那么就会开始模拟淡出的效果 float ffadeout = 1 - saturate(max(dist - _FadeOutDistFar,0) * 0.2); //0.2是模拟了淡入的速率 float fracTime = fmod(time,_TimeOnDuration + _TimeOffDuration); //fmod(x, y) 返回x/y的浮点余数。 float wave = smoothstep(0,_TimeOnDuration * 0.25,fracTime) * (1 - smoothstep(_TimeOnDuration * 0.75,_TimeOnDuration,fracTime)); //smoothstep(min, max, x) 如果x的范围是[min, max],则返回一个介于0和1之间的Hermite插值。 float noiseTime = time * (6.2831853f / _TimeOnDuration); float noise = sin(noiseTime) * (0.5f * cos(noiseTime * 0.6366f + 56.7272f) + 0.5f); float noiseWave = _NoiseAmount * noise + (1 - _NoiseAmount); float distScale = min(max(dist - _SizeGrowStartDist,0) / _SizeGrowEndDist,1); wave = _NoiseAmount < 0.01f ? wave : noiseWave; //这里主要是为了模拟闪烁的效果 distScale = distScale * distScale * _MaxGrowSize * v.color.a; //扩大顶点区域 这主要是为了模拟射灯的效果 ,我们在远离光源的过程中会感觉好像光照范围范围变大了 wave += _Bias; ffadeout *= ffadeout; nfadeout *= nfadeout; nfadeout *= nfadeout; nfadeout *= ffadeout; float4 mdlPos = v.vertex; mdlPos.xyz += distScale * v.normal; o.uv = v.texcoord.xy; o.pos = mul(UNITY_MATRIX_MVP, mdlPos); o.color = nfadeout * _Color * _Multiplier * wave; return o; } ENDCG Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest fixed4 frag (v2f i) : COLOR { return tex2D (_MainTex, i.uv.xy) * i.color; } ENDCG } }
} Shader "MADFINGER/Transparent/Blinking GodRays Billboarded" {Properties {_MainTex ("Base texture", 2D) = "white" {}_FadeOutDistNear ("Near fadeout dist", float) = 10 _FadeOutDistFar ("Far fadeout dist", float) = 10000 _Multiplier("Color multiplier", float) = 1_Bias("Bias",float) = 0_TimeOnDuration("ON duration",float) = 0.5_TimeOffDuration("OFF duration",float) = 0.5_BlinkingTimeOffsScale("Blinking time offset scale (seconds)",float) = 5_SizeGrowStartDist("Size grow start dist",float) = 5_SizeGrowEndDist("Size grow end dist",float) = 50_MaxGrowSize("Max grow size",float) = 2.5_NoiseAmount("Noise amount (when zero, pulse wave is used)", Range(0,0.5)) = 0_VerticalBillboarding("Vertical billboarding amount", Range(0,1)) = 1_ViewerOffset("Viewer offset", float) = 0_Color("Color", Color) = (1,1,1,1)
}SubShader {Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }Blend One OneCull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }LOD 100CGINCLUDE #include "UnityCG.cginc"sampler2D _MainTex;float _FadeOutDistNear;float _FadeOutDistFar;float _Multiplier;float _Bias;float _TimeOnDuration;float _TimeOffDuration;float _BlinkingTimeOffsScale;float _SizeGrowStartDist;float _SizeGrowEndDist;float _MaxGrowSize;float _NoiseAmount;float _VerticalBillboarding;float _ViewerOffset;float4 _Color;struct v2f {float4 pos : SV_POSITION;float2 uv : TEXCOORD0;fixed4 color : TEXCOORD1;};void CalcOrthonormalBasis(float3 dir,out float3 right,out float3 up){up = abs(dir.y) > 0.999f ? float3(0,0,1) : float3(0,1,0); right = normalize(cross(up,dir)); up = cross(dir,right); }float CalcFadeOutFactor(float dist){float nfadeout = saturate(dist / _FadeOutDistNear);float ffadeout = 1 - saturate(max(dist - _FadeOutDistFar,0) * 0.2);ffadeout *= ffadeout;nfadeout *= nfadeout;nfadeout *= nfadeout;nfadeout *= ffadeout;return nfadeout;}float CalcDistScale(float dist){float distScale = min(max(dist - _SizeGrowStartDist,0) / _SizeGrowEndDist,1);return distScale * distScale * _MaxGrowSize;}v2f vert (appdata_full v){v2f o;#if 0// cheap view space billboardingfloat3 centerOffs = float3(float(0.5).xx - v.color.rg,0) * v.texcoord1.xyy;float3 BBCenter = v.vertex + centerOffs.xyz; float3 viewPos = mul(UNITY_MATRIX_MV,float4(BBCenter,1)) - centerOffs;#elsefloat3 centerOffs = float3(float(0.5).xx - v.color.rg,0) * v.texcoord1.xyy;float3 centerLocal = v.vertex.xyz + centerOffs.xyz;float3 viewerLocal = mul(_World2Object,float4(_WorldSpaceCameraPos,1)); float3 localDir = viewerLocal - centerLocal;localDir[1] = lerp(0,localDir[1],_VerticalBillboarding);float localDirLength=length(localDir);float3 rightLocal;float3 upLocal;CalcOrthonormalBasis(localDir / localDirLength,rightLocal,upLocal);float distScale = CalcDistScale(localDirLength) * v.color.a; float3 BBNormal = rightLocal * v.normal.x + upLocal * v.normal.y;float3 BBLocalPos = centerLocal - (rightLocal * centerOffs.x + upLocal * centerOffs.y) + BBNormal * distScale;BBLocalPos += _ViewerOffset * localDir;#endiffloat time = _Time.y + _BlinkingTimeOffsScale * v.color.b; float fracTime = fmod(time,_TimeOnDuration + _TimeOffDuration);float wave = smoothstep(0,_TimeOnDuration * 0.25,fracTime) * (1 - smoothstep(_TimeOnDuration * 0.75,_TimeOnDuration,fracTime));float noiseTime = time * (6.2831853f / _TimeOnDuration);float noise = sin(noiseTime) * (0.5f * cos(noiseTime * 0.6366f + 56.7272f) + 0.5f);float noiseWave = _NoiseAmount * noise + (1 - _NoiseAmount);wave = _NoiseAmount < 0.01f ? wave : noiseWave;wave += _Bias;o.uv = v.texcoord.xy;o.pos = mul(UNITY_MATRIX_MVP, float4(BBLocalPos,1));o.color = CalcFadeOutFactor(localDirLength) * _Color * _Multiplier * wave;return o;}ENDCGPass {CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_precision_hint_fastest fixed4 frag (v2f i) : COLOR{ return tex2D (_MainTex, i.uv.xy) * i.color;}ENDCG }
}}
ShadowGun代码相关推荐
- 隐私合规:收集SDK部分介绍
com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- IDEA自定义快捷指令,快捷生成代码、注释
我们在使用idea时会发现有非常多的代码生成间接指令,比如输出指令.建主函数指令等等,只需要一个回车,代码就出来了,那我们能不能自定义这些东西呢?答案如下: 第一步,添加一个自定义组 第二步,单击新建 ...
- Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范
这是帮助开发者规范代码,培养优良的编码习惯的两个IDEA插件
- Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决
- 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)
十大算法 1.冒泡排序 (1)算法描述 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- 编写高性能Java代码的最佳实践
编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...
- Jquery DIV滚动至浏览器顶部后固定不动代码
获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 效果例1 代码如下复制代码 <scr ...
- 距离传感器控制灯泡代码_如何使用颜色传感器和超声波传感器检测障碍物和避障...
上一期的内容中,我给大家介绍了如何使用触碰传感器检测障碍物和避障,今天我们再来说说如何使用颜色传感器和超声波传感器检测障碍物和避障. 使用颜色传感器 在大多数情况下,EV3颜色传感器并不适合用于障碍物 ...
- etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程
1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...
最新文章
- 博士发公众号文章也能评国奖?双一流高校新规引热议!
- 如何使用华为云的计算资源来进行机器学习(CodeLab)
- 上海大学c语言基础题目,求c语言大神学长学姐解答题目
- 云时代架构阅读笔记二——Java性能优化(二)
- 理解AMD ,CMD,CommonJS规范
- 西山居php面试,西山居面试经验
- 使用Jupyter Notebook+bokeh绘图入门完整步骤
- Xamarin 设置可接受的版本
- 2021-06-19表单,内嵌框架
- POST 请求的三种常见数据提交格式
- Java自学 day02
- EPLAN学习笔记——常用操作步骤
- 网络流量分析系统的价值
- photoshop更改图片DPI方法
- 用python语言怎么打出菱形的*号_Python打印“菱形”星号代码方法
- python简单聊天工具开发
- Oracle中rowid的用法(全面)
- 常用的数字正则表达式(含小数)
- UOS开机之后进入emergency mode“journalctl -xb”
- 腾讯云互动直播SDK集成综述
热门文章
- matlab 图像检测,基于matlab图像识别的基本操作方法(以番茄识别为例)
- 网络安全kali渗透学习 web渗透入门 Google搜索引擎的使用技巧
- 如何用spss客户端和SPSS AU在线进行单样本T检验操作?
- Qt +ffmpeg(vp8) 记录视频每一帧并生成webm文件格式
- EndNote X9导入文献的5种方式
- bootice 修改ubuntu win10 系统引导在一个硬盘上时的系统启动顺序
- 在线制作证件照教程,只需30秒
- AD元器件英中名称对照【Ctrl + F 快速查找元器件英文名称】
- dell台式计算机恢复出厂设置,戴尔电脑如何恢复出厂设置
- 迅雷高速通道无限使用破解教程