質問するログイン新規登録

回答編集履歴

1

範囲外を抜く案を追記

2021/08/28 20:11

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -343,4 +343,60 @@
343
343
 
344
344
  ![図5](d7a774ebc3378b2781d121d2252645d6.png)
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
+ ![グラデーション1](81f1375380c9b4c127a18c84021b2306.png)
370
+
371
+ 0.0以下や1.0以上の部分が透明になるでしょうし...
372
+
373
+ ![結果1](b704e857ca1581310da2b09388505445.png)
374
+
375
+ 両端の透明度をなだらかに変化させれば...
376
+
377
+ ![グラデーション2](3c36ee74284caccc65b8004fba138165.png)
378
+
379
+ 境界をなめらかにすることができるかと思います。
380
+
381
+ ![結果2](caaa0c189f87986669e8aa28edf9be5a.png)
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
+ ![結果3](cfc52cb57c4e54164ef6e2d9ff886a0e.png)