質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.05%

  • C#

    5541questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    2800questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • プログラミング言語

    615questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

UnityのTextMeshProで文字を白くしたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 242

regulus123

score 3

UnityのTextMeshProでテキストを表示しているのですが、
FontSettings内のカラーを変更した時、テキストに割り当てている画像を
白色(255,255,255)の時は完全な白
灰色(128,128,128)の時は原色
黒色(0,0,0)の時は黒
になるようにしたいのですが、付属の「TMP_SDF」シェーダーの何処を弄ればいいのかわかりません。

わかる方がいればご回答お願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

流し読みした感じでは、下記部分でFaceのColor(以下「基本色」)とFaceのTexture(以下「テクスチャ色」)を合成しているみたいですね。

            float    scale    = input.param.y;
            float    bias    = input.param.z;
            float    weight    = input.param.w;
            float    sd = (bias - c) * scale;

            float outline = (_OutlineWidth * _ScaleRatioA) * scale;
            float softness = (_OutlineSoftness * _ScaleRatioA) * scale;

            half4 faceColor = _FaceColor;
            half4 outlineColor = _OutlineColor;

            faceColor.rgb *= input.color.rgb;

            faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
            outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);

            faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);

書き換え案として、基本色の暗い領域はテクスチャ色に乗算合成、基本色の明るい領域はテクスチャ色にスクリーン合成するというのはいかがでしょう?

参考:Adobe Photoshop での描画モード

            float    scale    = input.param.y;
            float    bias    = input.param.z;
            float    weight    = input.param.w;
            float    sd = (bias - c) * scale;

            float outline = (_OutlineWidth * _ScaleRatioA) * scale;
            float softness = (_OutlineSoftness * _ScaleRatioA) * scale;

            half4 faceColor = half4(input.color.rgb, 1.0); // まず最初はfaceColorを頂点色で初期化しておく
            half3 screenColor = saturate((_FaceColor.rgb - 0.5) * 2.0); // 基本色の灰~白を黒~白として抽出し、スクリーン色とする
            half3 multiplyColor = saturate(_FaceColor.rgb * 2.0); // 基本色の黒~灰を黒~白として抽出し、乗算色とする
            half4 outlineColor = _OutlineColor;
            half4 texColor = tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); // テクスチャ色を取得
            half3 modifiedTexColor = texColor.rgb * multiplyColor; // まずテクスチャ色と乗算色を乗算合成する

            modifiedTexColor = modifiedTexColor + screenColor - modifiedTexColor * screenColor; // さらに合成後の色とスクリーン色をスクリーン合成する
            faceColor *= half4(modifiedTexColor, texColor.a * _FaceColor.a); // faceColorに乗算&スクリーン合成結果を乗算する(アルファはとりあえず基本色とテクスチャ色の積にしました)
            outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);

            faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);

[追記]
FaceのColorは通常の動作と同様にFaceのTextureと乗算し、これとFONT SETTINGSのColor (Vertex)を乗算&スクリーン合成したパターンを追記します(コード的には大して違いはないですが...)。こちらの方が四隅に別々の色を設定してグラデーションにした場合にも対応できて便利そうですね。

            float    scale    = input.param.y;
            float    bias    = input.param.z;
            float    weight    = input.param.w;
            float    sd = (bias - c) * scale;

            float outline = (_OutlineWidth * _ScaleRatioA) * scale;
            float softness = (_OutlineSoftness * _ScaleRatioA) * scale;

            half4 outlineColor = _OutlineColor;
            half4 texColor = tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y) * _FaceColor; // texColorは基本色とテクスチャ色の積とする

            // 頂点色とtexColorを乗算&スクリーン合成
            half3 screenColor = saturate((input.color.rgb - 0.5) * 2.0);
            half3 multiplyColor = saturate(input.color.rgb * 2.0);
            half3 modifiedTexColor = texColor.rgb * multiplyColor;

            modifiedTexColor = modifiedTexColor + screenColor - modifiedTexColor * screenColor;

            half4 faceColor = half4(modifiedTexColor, texColor.a); // 合成結果をfaceColorとする

            outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);

            faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);

インスペクタの設定
プレビュー

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/19 13:32

    あっ、すみません...ご所望は「FONT SETTINGS」の方の色との合成でしたかね?多分、そちらの色はinput.colorに入っていると思うので、それとテクスチャ色を合成すればいいかと思います。
    すみませんが今はUnityが手元にないので、こちらのパターンは後ほど試してみます。

    キャンセル

  • 2017/12/19 19:52

    提案していただいた物を拝見させていただいたところ、無事実現したかった事が出来ました。
    大変助かります。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    5541questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    2800questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • プログラミング言語

    615questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。