回答編集履歴
5
初期テクスチャサイズが1の時エラーを起こすため、縮小ループをdo-whileからwhileに変更
test
CHANGED
@@ -206,7 +206,7 @@
|
|
206
206
|
|
207
207
|
|
208
208
|
|
209
|
-
d
|
209
|
+
while (scaledSize > 1)
|
210
210
|
|
211
211
|
{
|
212
212
|
|
@@ -226,8 +226,6 @@
|
|
226
226
|
|
227
227
|
}
|
228
228
|
|
229
|
-
while (scaledSize > 1);
|
230
|
-
|
231
229
|
|
232
230
|
|
233
231
|
var currentActiveTexture = RenderTexture.active;
|
4
他環境での不具合を修正
test
CHANGED
@@ -44,6 +44,12 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
+
[追記]
|
48
|
+
|
49
|
+
当初のカメラスクリプトではテクスチャ生成時にテクスチャフォーマットを指定していましたが、それをやめてサイズだけ指定するようにしました(最初のコードはMac版OpenGL上でしか動作確認していなかったのですが、後で試したらMetalやWindows版で正しい結果が得られませんでした...)。また併せて、シェーダーコードで返していたフラグメントの色を`fixed4(result, 0.0, 0.0, 1.0)`から`fixed4(result, result, result, 1.0)`に変えました。動作上は変える必要はないのですが、縮小過程をフレームデバッガで見た時に、前者だと目的色部分が赤色になってしまいます。上記のコード概要説明では抽出結果を白だの黒だのと表現していますので、それに合わせるようにしてみました。
|
50
|
+
|
51
|
+
|
52
|
+
|
47
53
|
- カメラのスクリプト
|
48
54
|
|
49
55
|
```C#
|
@@ -180,7 +186,7 @@
|
|
180
186
|
|
181
187
|
{
|
182
188
|
|
183
|
-
this.queryResultTexture = new Texture2D(1, 1
|
189
|
+
this.queryResultTexture = new Texture2D(1, 1);
|
184
190
|
|
185
191
|
}
|
186
192
|
|
@@ -188,7 +194,7 @@
|
|
188
194
|
|
189
195
|
var scaledSize = this.level0TextureSize;
|
190
196
|
|
191
|
-
var previousLevelTexture = RenderTexture.GetTemporary(scaledSize, scaledSize
|
197
|
+
var previousLevelTexture = RenderTexture.GetTemporary(scaledSize, scaledSize);
|
192
198
|
|
193
199
|
|
194
200
|
|
@@ -208,7 +214,7 @@
|
|
208
214
|
|
209
215
|
|
210
216
|
|
211
|
-
var scaledTexture = RenderTexture.GetTemporary(scaledSize, scaledSize
|
217
|
+
var scaledTexture = RenderTexture.GetTemporary(scaledSize, scaledSize);
|
212
218
|
|
213
219
|
|
214
220
|
|
@@ -338,195 +344,195 @@
|
|
338
344
|
|
339
345
|
{
|
340
346
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
347
|
+
Properties
|
348
|
+
|
349
|
+
{
|
350
|
+
|
351
|
+
_MainTex ("Texture", 2D) = "white" {}
|
352
|
+
|
353
|
+
_ReferenceColor ("Reference Color", Color) = (1.0, 0.0, 0.0, 1.0)
|
354
|
+
|
355
|
+
_ReferenceColorThreshold ("Reference Color Threshold", Range(0.0, 1.0)) = 0.5
|
356
|
+
|
357
|
+
}
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
SubShader
|
362
|
+
|
363
|
+
{
|
364
|
+
|
365
|
+
Cull Off ZWrite Off ZTest Always
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
// 抽出パス
|
370
|
+
|
371
|
+
Pass
|
372
|
+
|
373
|
+
{
|
374
|
+
|
375
|
+
CGPROGRAM
|
376
|
+
|
377
|
+
#pragma vertex vert
|
378
|
+
|
379
|
+
#pragma fragment frag
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
#include "UnityCG.cginc"
|
384
|
+
|
385
|
+
|
386
|
+
|
387
|
+
struct appdata
|
388
|
+
|
389
|
+
{
|
390
|
+
|
391
|
+
float4 vertex : POSITION;
|
392
|
+
|
393
|
+
float2 uv : TEXCOORD0;
|
394
|
+
|
395
|
+
};
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
struct v2f
|
400
|
+
|
401
|
+
{
|
402
|
+
|
403
|
+
float2 uv : TEXCOORD0;
|
404
|
+
|
405
|
+
float4 vertex : SV_POSITION;
|
406
|
+
|
407
|
+
};
|
408
|
+
|
409
|
+
|
410
|
+
|
411
|
+
sampler2D _MainTex;
|
412
|
+
|
413
|
+
float4 _ReferenceColor;
|
414
|
+
|
415
|
+
float _ReferenceColorThreshold;
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
v2f vert(appdata v)
|
420
|
+
|
421
|
+
{
|
422
|
+
|
423
|
+
v2f o;
|
424
|
+
|
425
|
+
o.vertex = UnityObjectToClipPos(v.vertex);
|
426
|
+
|
427
|
+
o.uv = v.uv;
|
428
|
+
|
429
|
+
return o;
|
430
|
+
|
431
|
+
}
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
fixed4 frag(v2f i) : SV_Target
|
436
|
+
|
437
|
+
{
|
438
|
+
|
439
|
+
// ピクセル色と目的色の距離がしきい値未満なら1、さもなくば0
|
440
|
+
|
441
|
+
float result = sign(max(_ReferenceColorThreshold - length(_ReferenceColor.rgb - tex2D(_MainTex, i.uv).rgb), 0.0));
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
return fixed4(result, result, result, 1.0);
|
446
|
+
|
447
|
+
}
|
448
|
+
|
449
|
+
ENDCG
|
450
|
+
|
451
|
+
}
|
452
|
+
|
453
|
+
|
454
|
+
|
455
|
+
// 縮小パス
|
456
|
+
|
457
|
+
Pass
|
458
|
+
|
459
|
+
{
|
460
|
+
|
461
|
+
CGPROGRAM
|
462
|
+
|
463
|
+
#pragma vertex vert
|
464
|
+
|
465
|
+
#pragma fragment frag
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
#include "UnityCG.cginc"
|
470
|
+
|
471
|
+
|
472
|
+
|
473
|
+
struct appdata
|
474
|
+
|
475
|
+
{
|
476
|
+
|
477
|
+
float4 vertex : POSITION;
|
478
|
+
|
479
|
+
float2 uv : TEXCOORD0;
|
480
|
+
|
481
|
+
};
|
482
|
+
|
483
|
+
|
484
|
+
|
485
|
+
struct v2f
|
486
|
+
|
487
|
+
{
|
488
|
+
|
489
|
+
float2 uv : TEXCOORD0;
|
490
|
+
|
491
|
+
float4 vertex : SV_POSITION;
|
492
|
+
|
493
|
+
};
|
494
|
+
|
495
|
+
|
496
|
+
|
497
|
+
sampler2D _MainTex;
|
498
|
+
|
499
|
+
|
500
|
+
|
501
|
+
v2f vert(appdata v)
|
502
|
+
|
503
|
+
{
|
504
|
+
|
505
|
+
v2f o;
|
506
|
+
|
507
|
+
o.vertex = UnityObjectToClipPos(v.vertex);
|
508
|
+
|
509
|
+
o.uv = v.uv;
|
510
|
+
|
511
|
+
return o;
|
512
|
+
|
513
|
+
}
|
514
|
+
|
515
|
+
|
516
|
+
|
517
|
+
fixed4 frag(v2f i) : SV_Target
|
518
|
+
|
519
|
+
{
|
520
|
+
|
521
|
+
// 近傍4テクセルの中心からサンプリング、ピクセル色が0より大きければ(1のテクセルが1つ以上あれば)1、さもなくば0
|
522
|
+
|
523
|
+
float result = sign(tex2D(_MainTex, i.uv).r);
|
524
|
+
|
525
|
+
|
526
|
+
|
527
|
+
return fixed4(result, result, result, 1.0);
|
528
|
+
|
529
|
+
}
|
530
|
+
|
531
|
+
ENDCG
|
532
|
+
|
533
|
+
}
|
534
|
+
|
535
|
+
}
|
530
536
|
|
531
537
|
}
|
532
538
|
|
3
マテリアルをHideFlags.DontSave指定する必要はなかった気がしたので削除
test
CHANGED
@@ -168,8 +168,6 @@
|
|
168
168
|
|
169
169
|
this.material = new Material(Shader.Find("Hidden/Color Extractor"));
|
170
170
|
|
171
|
-
this.material.hideFlags = HideFlags.DontSave;
|
172
|
-
|
173
171
|
this.referenceColorId = Shader.PropertyToID("_ReferenceColor");
|
174
172
|
|
175
173
|
this.referenceColorThresholdId = Shader.PropertyToID("_ReferenceColorThreshold");
|
2
リファレンスのリンク先を修正
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
- 画面をレンダリングする。天球画像の代用としてシーンに赤い球を配置し、カメラに赤色が写り込んでいるかを判定することにした。
|
26
26
|
|
27
|
-
- [ポストプロセッシングエフェクト](https://docs.unity3d.com/Manual/PostProcessingWritingEffects.html)のやり方を参考に、カメラにアタッチしたスクリプトの[OnRenderImage](https://docs.unity3d.com/ScriptReference/
|
27
|
+
- [ポストプロセッシングエフェクト](https://docs.unity3d.com/Manual/PostProcessingWritingEffects.html)のやり方を参考に、カメラにアタッチしたスクリプトの[OnRenderImage](https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnRenderImage.html)内で色判定処理を行う。
|
28
28
|
|
29
29
|
- レンダリング結果を適当な2の冪乗サイズの一時レンダーテクスチャに写す。この時色判定を行い、目的の色であれば白、そうでなければ黒として写す。
|
30
30
|
|
1
リンクを追加、機能名を訂正
test
CHANGED
@@ -544,8 +544,8 @@
|
|
544
544
|
|
545
545
|
|
546
546
|
|
547
|
-
- フレームデバッ
|
547
|
+
- [フレームデバッガ](https://docs.unity3d.com/Manual/FrameDebugger.html)で見た描画の過程
|
548
|
-
|
549
|
-
|
550
|
-
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
-
![フレームデバッ
|
551
|
+
![フレームデバッガ](ce43511581e94bfc1e5fc171a31dba0a.gif)
|