回答編集履歴
1
範囲外を抜く案を追記
answer
CHANGED
@@ -343,4 +343,60 @@
|
|
343
343
|
|
344
344
|

|
345
345
|
|
346
|
-
字数節約のためコード中のコメントは簡素になっています。もし疑問点がありましたらお気軽にコメントください。
|
346
|
+
字数節約のためコード中のコメントは簡素になっています。もし疑問点がありましたらお気軽にコメントください。
|
347
|
+
|
348
|
+
##範囲外を透明に抜く件について
|
349
|
+
|
350
|
+
まず、testファイル上のデータを下記のようにして、プラス方向とマイナス方向に範囲をはみ出すようにしました。
|
351
|
+
|
352
|
+
```
|
353
|
+
-0.25
|
354
|
+
-0.08333333333
|
355
|
+
0.08333333333
|
356
|
+
0.25
|
357
|
+
0.41666666666
|
358
|
+
0.58333333333
|
359
|
+
0.75
|
360
|
+
0.91666666666
|
361
|
+
1.08333333333
|
362
|
+
```
|
363
|
+
|
364
|
+
シェーダーは最初の`Hidden/Heatmap`をベースに検討することにし、マテリアルの`Radius`は0.45としました。
|
365
|
+
|
366
|
+
まず第1案としては、グラデーションテクスチャの両端を透明にしてしまうのはどうでしょうか?
|
367
|
+
両端1ピクセルを透明にすれば...
|
368
|
+
|
369
|
+

|
370
|
+
|
371
|
+
0.0以下や1.0以上の部分が透明になるでしょうし...
|
372
|
+
|
373
|
+

|
374
|
+
|
375
|
+
両端の透明度をなだらかに変化させれば...
|
376
|
+
|
377
|
+

|
378
|
+
|
379
|
+
境界をなめらかにすることができるかと思います。
|
380
|
+
|
381
|
+

|
382
|
+
|
383
|
+
また第2案として、グラデーションテクスチャには変更を加えず、シェーダーコードの下記部分を...
|
384
|
+
|
385
|
+
```ShaderLab
|
386
|
+
h = saturate(h);
|
387
|
+
half4 color = tex2D(_HeatTex, float2(h, 0.5));
|
388
|
+
return color;
|
389
|
+
```
|
390
|
+
|
391
|
+
下記のように変更し、`h`が0.0を下回ったり1.0を上回ったフラグメントを破棄してしまう手もあるかと思います。
|
392
|
+
|
393
|
+
```ShaderLab
|
394
|
+
half clampedH = saturate(h);
|
395
|
+
clip(-abs(h - clampedH));
|
396
|
+
half4 color = tex2D(_HeatTex, float2(clampedH, 0.5));
|
397
|
+
return color;
|
398
|
+
```
|
399
|
+
|
400
|
+
こちらの場合だと、0.0ぴったりや1.0ぴったりは範囲内におさまっていると判定させることができるでしょう。
|
401
|
+
|
402
|
+

|