资源简介
将Depth of Filed 挂载相机上,将Shader导入脚本中,然后调节数值,直到达到效果就好了
代码片段和文件信息
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class DepthOfFiled : PostEffectbase
{
[Range(0.0f 100.0f)]
public float focalDistance = 10.0f;
[Range(0.0f 100.0f)]
public float nearBlurScale = 0.0f;
[Range(0.0f 1000.0f)]
public float farBlurScale = 50.0f;
//分辨率
public int downSample = 1;
//采样率
public int samplerScale = 1;
private Camera _mainCam = null;
public Camera MainCam
{
get
{
if (_mainCam == null)
_mainCam = GetComponent();
return _mainCam;
}
}
void OnEnable()
{
//maincam的depthTextureMode是通过位运算开启与关闭的
MainCam.depthTextureMode |= DepthTextureMode.Depth;
}
void OnDisable()
{
MainCam.depthTextureMode &= ~DepthTextureMode.Depth;
}
void OnRenderImage(RenderTexture source RenderTexture destination)
{
if (_Material)
{
//首先将我们设置的焦点限制在远近裁剪面之间
Mathf.Clamp(focalDistance MainCam.nearClipPlane MainCam.farClipPlane);
//申请两块RT,并且分辨率按照downSameple降低
RenderTexture temp1 = RenderTexture.GetTemporary(source.width >> downSample source.height >> downSample 0 source.format);
RenderTexture temp2 = RenderTexture.GetTemporary(source.width >> downSample source.height >> downSample 0 source.format);
//直接将场景图拷贝到低分辨率的RT上达到降分辨率的效果
Graphics.Blit(source temp1);
//高斯模糊,两次模糊,横向纵向,使用pass0进行高斯模糊
_Material.SetVector(“_offsets“ new Vector4(0 samplerScale 0 0));
Graphics.Blit(temp1 temp2 _Material 0);
_Material.SetVector(“_offsets“ new Vector4(samplerScale 0 0 0));
Graphics.Blit(temp2 temp1 _Material 0);
//景深操作,景深需要两的模糊效果图我们通过_BlurTex变量传入shader
_Material.SetTexture(“_BlurTex“ temp1);
//设置shader的参数,主要是焦点和远近模糊的权重,权重可以控制插值时使用模糊图片的权重
_Material.SetFloat(“_focalDistance“ FocalDistance01(focalDistance));
_Material.SetFloat(“_nearBlurScale“ nearBlurScale);
_Material.SetFloat(“_farBlurScale“ farBlurScale);
//使用pass1进行景深效果计算,清晰场景图直接从source输入到shader的_MainTex中
Graphics.Blit(source destination _Material 1);
//释放申请的RT
RenderTexture.ReleaseTemporary(temp1);
RenderTexture.ReleaseTemporary(temp2);
}
}
//计算设置的焦点被转换到01空间中的距离,以便shader中通过这个01空间的焦点距离与depth比较
private float FocalDistance01(float distance)
{
return MainCam.WorldToViewportPoint((distance - MainCam.nearClipPlane) * MainCam.transform.forward + MainCam.transform.position).z / (MainCam.farClipPlane - MainCam.nearClipPlane);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-01-11 10:59 景深效果\
文件 4222 2020-01-11 10:40 景深效果\DepthOfField.shader
文件 3292 2020-01-11 10:40 景深效果\DepthOfFiled.cs
文件 1158 2020-01-11 10:42 景深效果\PostEffectba
相关资源
- unity4.0官方正式版
- Behavior Designer 1.6.3(u2018.3.0).unitypa
- Unity纪念碑谷.rar
- A Pathfinding Project Pro v4.2.2.rar
- Unity 声音播放插件,支持将字符串转
- Gaia 1.7.2
- Unity3d实现扭动挤压浏览效果
- UnityShader卷轴效果
- 爱酱(绊爱Kizuna)模型
- 遗传算法越野小车unity5.5
- unity 3D 百度语音合成 并播放
- unity案例入门坦克大战源码
- Graph And Chart 1.91.unitypackage
- Animated Steel Coaster 1.51.rar
- Unity3D游戏开发.pdf 宣雨松著完整高清
- Unity3D版水果忍者
- unity3d爆炸特效包
- unity3d_见缝插针源码及报告.zip
- Unity3d车库场景模型
- unity3d 警察动画模型
- unity20多种烟雾以及爆炸特效
- unity博物馆.zip
- burpsuite_community社区版x86系统
- unity3D 新手引导遮罩,支持圆形和矩形
- 兼容unity的System.Drawing.dll
- unity3d枪支武器包FPS第一人称射击游戏
- UniWebView 3.unitypackage
- unity2D猛禽战机空战游戏完整源码
- Final IK 1.9
- ChangeSkin.rar
评论
共有 条评论