回答編集履歴
1
単語の修正漏れを訂正、プロパティのデフォルト値を@aa_debdebさんの方式と同じに変更
answer
CHANGED
@@ -26,12 +26,12 @@
|
|
26
26
|
{
|
27
27
|
Properties
|
28
28
|
{
|
29
|
-
_Color ("Color", Color) = (
|
29
|
+
_Color ("Color", Color) = (0.8, 0.5, 0.5, 0.1)
|
30
30
|
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
31
31
|
_Glossiness ("Smoothness", Range(0,1)) = 0.5
|
32
32
|
_Metallic ("Metallic", Range(0,1)) = 0.0
|
33
|
-
_Refraction ("Refraction Index",
|
33
|
+
_Refraction ("Refraction Index", Range(1.0, 3.0)) = 1.33
|
34
|
-
_Distance ("Refraction Distance", Float) =
|
34
|
+
_Distance ("Refraction Distance", Float) = 10.0
|
35
35
|
}
|
36
36
|
SubShader
|
37
37
|
{
|
@@ -65,7 +65,7 @@
|
|
65
65
|
#define DISTANCE_DIVISOR 16.0
|
66
66
|
#define ITERATION_COUNT 32
|
67
67
|
#define DEPTH_THRESHOLD 0.1
|
68
|
-
#define
|
68
|
+
#define EDGE_BLENDING_EXPONENT 4.0
|
69
69
|
|
70
70
|
// まず屈折方向を求め...
|
71
71
|
float3 eyeDir = normalize(IN.worldPos - _WorldSpaceCameraPos);
|
@@ -105,7 +105,7 @@
|
|
105
105
|
// 検出された衝突点のデプスがある程度ずれているようなら誤検出と見なして検出を取り消す
|
106
106
|
// また、判定境界の部分に発生するノイズを軽減するため、境界付近では判定値をなめらかに変える
|
107
107
|
float depthDelta = abs(backgroundDepth + refractionViewPos.z);
|
108
|
-
hit = hit * saturate(1.0 - pow(depthDelta / DEPTH_THRESHOLD,
|
108
|
+
hit = hit * saturate(1.0 - pow(depthDelta / DEPTH_THRESHOLD, EDGE_BLENDING_EXPONENT));
|
109
109
|
|
110
110
|
// 衝突していると判定された場合はグラブテクスチャの色を、そうでなければ
|
111
111
|
// リフレクション用キューブマップの色を屈折色として採用する
|