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

回答編集履歴

1

頂点カラー版を追記

2017/12/19 10:32

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -45,4 +45,36 @@
45
45
  outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
46
46
 
47
47
  faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
48
- ```
48
+ ```
49
+
50
+ [追記]
51
+ FaceのColorは通常の動作と同様にFaceのTextureと乗算し、これとFONT SETTINGSのColor (Vertex)を乗算&スクリーン合成したパターンを追記します(コード的には大して違いはないですが...)。こちらの方が四隅に別々の色を設定してグラデーションにした場合にも対応できて便利そうですね。
52
+
53
+ ```HLSL
54
+ float scale = input.param.y;
55
+ float bias = input.param.z;
56
+ float weight = input.param.w;
57
+ float sd = (bias - c) * scale;
58
+
59
+ float outline = (_OutlineWidth * _ScaleRatioA) * scale;
60
+ float softness = (_OutlineSoftness * _ScaleRatioA) * scale;
61
+
62
+ half4 outlineColor = _OutlineColor;
63
+ half4 texColor = tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y) * _FaceColor; // texColorは基本色とテクスチャ色の積とする
64
+
65
+ // 頂点色とtexColorを乗算&スクリーン合成
66
+ half3 screenColor = saturate((input.color.rgb - 0.5) * 2.0);
67
+ half3 multiplyColor = saturate(input.color.rgb * 2.0);
68
+ half3 modifiedTexColor = texColor.rgb * multiplyColor;
69
+
70
+ modifiedTexColor = modifiedTexColor + screenColor - modifiedTexColor * screenColor;
71
+
72
+ half4 faceColor = half4(modifiedTexColor, texColor.a); // 合成結果をfaceColorとする
73
+
74
+ outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
75
+
76
+ faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
77
+ ```
78
+
79
+ インスペクタの設定
80
+ ![プレビュー](c0dfb5a1fb7cbf91285594cb9b2a4ba7.gif)