質問編集履歴

1

2022/02/01 03:46

投稿

unity_beginner_
unity_beginner_

スコア14

test CHANGED
@@ -1 +1 @@
1
- unlit/color の自作シェーダで色インスペクタウィンドウから設定したい
1
+ スクリプトから色を指定できるシェーダ自作したい
test CHANGED
@@ -1,155 +1,73 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
+ Unity3Dで以下の条件を持ったシェーダーを作ろうとしています
4
+ ・影の描写をしない(unlit)
5
+ ・表裏両方描く(Cull off)
6
+ ・スクリプトでオブジェクトの色を取得できる
7
+ ・スクリプトからオブジェクトの色を変更できる
8
+ ・サブメッシュがある
3
9
 
4
-
5
- unlit/colorで作った自作シェーダを適用させたマテリアルのインスペクタウィンドウでマテリアルの色を設定したいです。
6
-
7
- 現在Main Colorで色の設定はできそれがマテリアルに反映されません。
10
+ 似た質問を探してみした見当たりませんでした、知っている方よろしくお願いします
8
-
9
-
10
-
11
-
12
-
13
-
14
11
 
15
12
 
16
13
 
17
14
  ### 該当のソースコード
18
15
 
16
+ ```ここに言語名を入力
17
+ Shader "Custom/ryoumen_sheder"
18
+ {
19
+ Properties
20
+ {
21
+ _Color ("Color", Color) = (1,1,1,1)
22
+ _MainTex ("Albedo (RGB)", 2D) = "red" {}
23
+ _Glossiness ("Smoothness", Range(0,1)) = 0.5
24
+ _Metallic ("Metallic", Range(0,1)) = 0.0
25
+ }
26
+ SubShader
27
+ {
28
+ Tags { "RenderType"="Opaque" }
29
+ LOD 200
30
+ Cull off
19
31
 
32
+ CGPROGRAM
33
+ // Physically based Standard lighting model, and enable shadows on all light types
34
+ #pragma surface surf Standard fullforwardshadows
20
35
 
36
+ // Use shader model 3.0 target, to get nicer looking lighting
21
- ```ここに言語名を入力
37
+ #pragma target 3.0
22
38
 
23
- Shader "Unlit/karui_sheder"
39
+ sampler2D _MainTex;
24
40
 
41
+ struct Input
25
- {
42
+ {
43
+ float2 uv_MainTex;
44
+ };
26
45
 
46
+ half _Glossiness;
47
+ half _Metallic;
48
+ fixed4 _Color;
27
49
 
50
+ // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
51
+ // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
52
+ // #pragma instancing_options assumeuniformscaling
53
+ UNITY_INSTANCING_BUFFER_START(Props)
54
+ // put more per-instance properties here
55
+ UNITY_INSTANCING_BUFFER_END(Props)
28
56
 
29
-
30
-
31
- Properties
57
+ void surf (Input IN, inout SurfaceOutputStandard o)
32
-
33
- {
58
+ {
34
-
35
- _Color("Color", Color) = (1,1,1,1)
36
-
37
- _MainTex("Albedo (RGB)", 2D) = "white" {}
59
+ // Albedo comes from a texture tinted by color
38
-
60
+ fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
61
+ o.Albedo = c.rgb;
62
+ // Metallic and smoothness come from slider variables
63
+ o.Metallic = _Metallic;
64
+ o.Smoothness = _Glossiness;
65
+ o.Alpha = c.a;
66
+ }
67
+ ENDCG
39
68
  }
40
-
41
- SubShader
42
-
43
- {
44
-
45
- Tags { "RenderType"="Opaque" }
46
-
47
- LOD 100
48
-
49
- Cull off
50
-
51
-
52
-
53
- Pass
54
-
55
- {
56
-
57
- CGPROGRAM
58
-
59
- #pragma vertex vert
60
-
61
- #pragma fragment frag
62
-
63
- // make fog work
64
-
65
- #pragma multi_compile_fog
66
-
67
-
68
-
69
- #include "UnityCG.cginc"
69
+ FallBack "Diffuse"
70
-
71
-
72
-
73
- struct appdata
74
-
75
- {
76
-
77
- float4 vertex : POSITION;
78
-
79
- float2 uv : TEXCOORD0;
80
-
81
- };
82
-
83
-
84
-
85
- struct v2f
86
-
87
- {
88
-
89
- float2 uv : TEXCOORD0;
90
-
91
- UNITY_FOG_COORDS(1)
92
-
93
- float4 vertex : SV_POSITION;
94
-
95
- };
96
-
97
-
98
-
99
- sampler2D _MainTex;
100
-
101
- float4 _MainTex_ST;
102
-
103
-
104
-
105
- v2f vert (appdata v)
106
-
107
- {
108
-
109
- v2f o;
110
-
111
- o.vertex = UnityObjectToClipPos(v.vertex);
112
-
113
- o.uv = TRANSFORM_TEX(v.uv, _MainTex);
114
-
115
- UNITY_TRANSFER_FOG(o,o.vertex);
116
-
117
- return o;
118
-
119
- }
120
-
121
-
122
-
123
- fixed4 frag (v2f i) : SV_Target
124
-
125
- {
126
-
127
- // sample the texture
128
-
129
- fixed4 col = tex2D(_MainTex, i.uv);
130
-
131
- // apply fog
132
-
133
- UNITY_APPLY_FOG(i.fogCoord, col);
134
-
135
- return col;
136
-
137
- }
138
-
139
- ENDCG
140
-
141
- }
142
-
143
- }
144
-
145
70
  }
146
71
 
147
72
  ```
148
73
 
149
-
150
-
151
- ### 試したこと
152
-
153
-
154
-
155
- MainTexの設定のほうが優先されてColorの設定が反映されていないのかと考え、_MainTexの行を消してみましたが灰色になるだけでした。