在unity中景深效果,正交和透视投影不能用同一shader来实现,在正交投影中,物体坐标最终会投射到
(-1,-1,-1)--(1,1,1)的投影空间,且貌似最后,-1<=.z<=1以及.w=1..而透视投影的投影空间, near<=.w<=far,
0<=.z<=far.深度图上是 .z/.w(是这样吗?如果要做深度图的话应该是这样。)。
以下依次是我的在正交中和透视中的shader,效果不错。。以上都由我试验得出。
Shader "Custom/DepthOfField2" {
Properties {
_FocalDistance("FocalDistance Range",Range(0,1)) = 0.5
_OffsetDistance("OffsetDistance Range",Range(0.0,0.05))=0.02
_MainTex ("Base (RGB)", 2D) ="white" {}
_DepthTex("Depth Texture",2D)="white"{}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float _FocalDistance;
float _OffsetDistance;
sampler2D _MainTex;
float4 _MainTex_ST;
// uniform sampler2D _DepthTex;
struct appdata_t
{
float4 vertex : POSITION;
float4 texcoord : TEXCOORD0;
float dist: TEXCOORD1;
};
struct v2f
{
float4 vertex : POSITION;
float4 texcoord : TEXCOORD0;
float dist:TEXCOORD1;
};
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP,v.vertex);
o.texcoord=v.texcoord;
//o.texcoord=TRANSFORM_TEX(v.texcoord,_MainTex);
//o.dist=(1+o.vertex