回答編集履歴

1

範囲外を抜く案を追記

2021/08/28 20:11

投稿

Bongo
Bongo

スコア10811

test CHANGED
@@ -689,3 +689,115 @@
689
689
 
690
690
 
691
691
  字数節約のためコード中のコメントは簡素になっています。もし疑問点がありましたらお気軽にコメントください。
692
+
693
+
694
+
695
+ ##範囲外を透明に抜く件について
696
+
697
+
698
+
699
+ まず、testファイル上のデータを下記のようにして、プラス方向とマイナス方向に範囲をはみ出すようにしました。
700
+
701
+
702
+
703
+ ```
704
+
705
+ -0.25
706
+
707
+ -0.08333333333
708
+
709
+ 0.08333333333
710
+
711
+ 0.25
712
+
713
+ 0.41666666666
714
+
715
+ 0.58333333333
716
+
717
+ 0.75
718
+
719
+ 0.91666666666
720
+
721
+ 1.08333333333
722
+
723
+ ```
724
+
725
+
726
+
727
+ シェーダーは最初の`Hidden/Heatmap`をベースに検討することにし、マテリアルの`Radius`は0.45としました。
728
+
729
+
730
+
731
+ まず第1案としては、グラデーションテクスチャの両端を透明にしてしまうのはどうでしょうか?
732
+
733
+ 両端1ピクセルを透明にすれば...
734
+
735
+
736
+
737
+ ![グラデーション1](81f1375380c9b4c127a18c84021b2306.png)
738
+
739
+
740
+
741
+ 0.0以下や1.0以上の部分が透明になるでしょうし...
742
+
743
+
744
+
745
+ ![結果1](b704e857ca1581310da2b09388505445.png)
746
+
747
+
748
+
749
+ 両端の透明度をなだらかに変化させれば...
750
+
751
+
752
+
753
+ ![グラデーション2](3c36ee74284caccc65b8004fba138165.png)
754
+
755
+
756
+
757
+ 境界をなめらかにすることができるかと思います。
758
+
759
+
760
+
761
+ ![結果2](caaa0c189f87986669e8aa28edf9be5a.png)
762
+
763
+
764
+
765
+ また第2案として、グラデーションテクスチャには変更を加えず、シェーダーコードの下記部分を...
766
+
767
+
768
+
769
+ ```ShaderLab
770
+
771
+ h = saturate(h);
772
+
773
+ half4 color = tex2D(_HeatTex, float2(h, 0.5));
774
+
775
+ return color;
776
+
777
+ ```
778
+
779
+
780
+
781
+ 下記のように変更し、`h`が0.0を下回ったり1.0を上回ったフラグメントを破棄してしまう手もあるかと思います。
782
+
783
+
784
+
785
+ ```ShaderLab
786
+
787
+ half clampedH = saturate(h);
788
+
789
+ clip(-abs(h - clampedH));
790
+
791
+ half4 color = tex2D(_HeatTex, float2(clampedH, 0.5));
792
+
793
+ return color;
794
+
795
+ ```
796
+
797
+
798
+
799
+ こちらの場合だと、0.0ぴったりや1.0ぴったりは範囲内におさまっていると判定させることができるでしょう。
800
+
801
+
802
+
803
+ ![結果3](cfc52cb57c4e54164ef6e2d9ff886a0e.png)