質問編集履歴

1

コード全文 画像の追加

2017/12/13 10:16

投稿

donafudo
donafudo

スコア46

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,55 @@
2
2
 
3
3
  その際に、カメラとカメラに移されている頂点との距離を、以下のコードで取得しようとしています
4
4
 
5
+
6
+
7
+ コード全文に変更
8
+
5
9
  ```lang-HLSL
10
+
11
+ Shader "Hidden/DepthOfField"
12
+
13
+ {
14
+
15
+ Properties
16
+
17
+ {
18
+
19
+ _MainTex ("Texture", 2D) = "white" {}
20
+
21
+ _Depth("Depth",FLOAT) = 0.8
22
+
23
+ }
24
+
25
+ SubShader
26
+
27
+ {
28
+
29
+ // No culling or depth
30
+
31
+ Cull Off ZWrite Off ZTest Always
32
+
33
+
34
+
35
+ Pass
36
+
37
+ {
38
+
39
+ CGPROGRAM
40
+
41
+ #pragma vertex vert
42
+
43
+ #pragma fragment frag
44
+
45
+
46
+
47
+ #include "UnityCG.cginc"
48
+
49
+
50
+
51
+ float _Depth;
52
+
53
+
6
54
 
7
55
  struct appdata
8
56
 
@@ -24,7 +72,7 @@
24
72
 
25
73
  float4 vertex : SV_POSITION;
26
74
 
27
- float dist : TEXCOORD1;
75
+ float3 vertexWorldPos: TEXCOORD1;
28
76
 
29
77
  };
30
78
 
@@ -42,17 +90,57 @@
42
90
 
43
91
 
44
92
 
45
- float3 vertexWorldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
93
+ o.vertexWorldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
46
-
47
-          //distの値に応じてfragment内で分岐
48
-
49
- o.dist = distance(_WorldSpaceCameraPos , vertexWorldPos);
50
94
 
51
95
 
52
96
 
53
97
  return o;
54
98
 
55
99
  }
100
+
101
+
102
+
103
+ sampler2D _MainTex;
104
+
105
+ sampler2D _CameraDepthTexture;
106
+
107
+
108
+
109
+ fixed4 frag (v2f i) : SV_Target
110
+
111
+ {
112
+
113
+ float depth= tex2D(_CameraDepthTexture,i.uv);
114
+
115
+ float4 col = tex2D(_MainTex, i.uv);
116
+
117
+ float dist = length(i.vertexWorldPos - _WorldSpaceCameraPos);
118
+
119
+
120
+
121
+ if (dist < _Depth) {
122
+
123
+ return depth;
124
+
125
+ }
126
+
127
+ else {
128
+
129
+ return col;
130
+
131
+ }
132
+
133
+ }
134
+
135
+ ENDCG
136
+
137
+ }
138
+
139
+ }
140
+
141
+ }
142
+
143
+
56
144
 
57
145
  ```
58
146
 
@@ -63,3 +151,9 @@
63
151
  期待した結果になりません
64
152
 
65
153
  私が勘違いしているところや別の方法はありませんでしょうか?
154
+
155
+ ![現実](63bc15965aaa40e94ee6d8b31545ff58.png)![理想](f3057c8ec376ca667ccda2739e8146b5.png)
156
+
157
+ 上:実行結果(カメラを動かすと描画が分かれている部分も移動する) 
158
+
159
+ 下:理想(これは直線的なので距離フォグのようにしたい)