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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1196閲覧

シェーダを使って描いた円の色をシェーダを使って変えたい(Unity)

futonmin

総合スコア33

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/09/17 07:59

編集2020/09/17 11:19

前提・実現したいこと

シェーダで描いた円の色をオレンジ色に変えたい

該当のソースコード

Cg

1Shader "Unlit/Circle" 2{ 3 Properties 4 { 5 _Color("Color", Color) = (1,1,1,1) 6 _MainTex ("Texture", 2D) = "white" {} 7 } 8 SubShader 9 { 10 Tags { "RenderType"="Opaque" } 11 LOD 100 12 13 Pass 14 { 15 CGPROGRAM 16 #pragma vertex vert 17 #pragma fragment frag 18 // make fog work 19 #pragma multi_compile_fog 20 21 #include "UnityCG.cginc" 22 23 struct appdata 24 { 25 float4 vertex : POSITION; 26 float2 uv : TEXCOORD0; 27 //float4 ncolor : COLOR; 28 }; 29 30 struct v2f 31 { 32 float2 uv : TEXCOORD0; 33 UNITY_FOG_COORDS(1) 34 float4 vertex : SV_POSITION; 35 }; 36 37 sampler2D _MainTex; 38 float4 _MainTex_ST; 39 40 v2f vert (appdata v) 41 { 42 v2f o; 43 o.vertex = UnityObjectToClipPos(v.vertex); 44 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 45 UNITY_TRANSFER_FOG(o,o.vertex); 46 return o; 47 } 48 49 fixed4 frag(v2f i) : SV_Target 50 { 51 fixed radius = 0.4; 52 fixed r = distance(i.uv, fixed2(0.5,0.5)); 53 return step(radius, r); 54 } 55 ENDCG 56 } 57 } 58} 59

試したこと

シェーダについて調べた
https://amagamina.jp/unity-shader/

補足情報(FW/ツールのバージョンなど)

環境:Windows10、VisualStudio2019、Unity2020.1.0b13 Personal

初歩的な質問ですが教えていただけると幸いです

↓円の画像です
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

stepを使って「円の内側なら0、外側なら1」の値を作るところまではできあがっている様子ですね。
では、それとlerpを組み合わせて2つの色を切り替えてみるのはどうでしょう。

ShaderLab

1Shader "Unlit/Circle" 2{ 3 Properties 4 { 5 _Color("Color", Color) = (1,0.5,0,1) // 円の内側の色 6 _BackgroundColor("Background Color", Color) = (1,1,1,1) // 円の外側の色 7 _MainTex ("Texture", 2D) = "white" {} 8 } 9 SubShader 10 { 11 Tags { "RenderType"="Opaque" } 12 LOD 100 13 14 Pass 15 { 16 CGPROGRAM 17 #pragma vertex vert 18 #pragma fragment frag 19 // make fog work 20 #pragma multi_compile_fog 21 22 #include "UnityCG.cginc" 23 24 struct appdata 25 { 26 float4 vertex : POSITION; 27 float2 uv : TEXCOORD0; 28 //float4 ncolor : COLOR; 29 }; 30 31 struct v2f 32 { 33 float2 uv : TEXCOORD0; 34 UNITY_FOG_COORDS(1) 35 float4 vertex : SV_POSITION; 36 }; 37 38 sampler2D _MainTex; 39 float4 _MainTex_ST; 40 41 // プロパティで設定された色を受け取るユニフォーム変数を用意する 42 fixed4 _Color; 43 fixed4 _BackgroundColor; 44 45 v2f vert (appdata v) 46 { 47 v2f o; 48 o.vertex = UnityObjectToClipPos(v.vertex); 49 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 50 UNITY_TRANSFER_FOG(o,o.vertex); 51 return o; 52 } 53 54 fixed4 frag(v2f i) : SV_Target 55 { 56 fixed radius = 0.4; 57 fixed r = distance(i.uv, fixed2(0.5,0.5)); 58 59 // lerpで色を選択する 60 // stepの結果が0なら_Colorを、1なら_BackgroundColorを返させるようにする 61 return lerp(_Color, _BackgroundColor, step(radius, r)); 62 } 63 ENDCG 64 } 65 } 66}

投稿2020/09/17 21:47

Bongo

総合スコア10811

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

futonmin

2020/09/18 01:40

回答ありがとうございます うまくいきました。勉強になります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問