Q&A
解決したいこと
テクスチャの回転させたいのですが、うまくできません。
Unity上ではマテリアルの表示はされますが、回転の動作だけできません。
回転のソースコードは下記のサイトを参照しております。
https://zenn.dev/kento_o/articles/64c8d585924c60633342
お手数をおかけしますが、ご教授頂けると幸いです。
実現したいこと
- テクスチャの回転
該当のソースコード
Shader "Wit/StandardTransparent_js_Rotation" { Properties { _Color ("Color", Color) = (1, 1, 1, 1) _MainTex ("Albedo (RGB)", 2D) = "white" {} [Header(Base Spec)] _Glossiness ("Glossiness", Range(0,1)) = 0.5 _Shininess ("Shininess", Range(0,1)) = 0.0 _SpecularColor ("SpecColor", Color) = (1, 1, 1, 1) [Space][Space][Space][Space][Space] [Toggle]_Active ("Second Spec", Range(0, 1)) = 0 [Header(uv.X2)] _Glossiness2 ("Glossiness2", Range(0,1)) = 0.5 _Shininess2 ("Shininess2", Range(0,1)) = 0.0 _SpecularColor2 ("SpecColor2", Color) = (1, 1, 1, 1) [Space][Space][Space][Space][Space] [Header(uv.Y2)] [NOScaleOffset]_BumpMap ("NormalMap", 2D) = "bump"{} _NormalTiling("NormalTiling", range(1, 50)) = 1 _NormalPower("NormalPower", range(0,3)) = 1 [Space][Space][Space][Space][Space] [Header(uv.Y3)] //sparkle variables _SparkleTex("Sequin Texture", 2D) = "black" {} //the noise texture _SparkleColor("SequinColor", Color) = (1,1,1,1) //color of the sparkle effect _SparkleRange("SequinRange", range(0.1, 10)) = 0.1 //range of the sparkle effect _Intensity("Intensity", range(0.1, 30)) = 1 //intensity of the sparkle effect [Space][Space][Space][Space][Space] //rim lighting variables _RimColor("RimColor", Color) = (1,1,1,1) //color of rim lighting _RimPower("RimPower", Float) = 1 //intensity of rim lighting [HideInInspector]_LogLut ("_LogLut", 2D) = "white" {} //テクスチャー(オフセット、タイリングの設定なし) [NoScaleOffset] _MainTex ("Texture", 2D) = "white" {} //回転の速度 _RotateSpeed ("Rotate Speed", float) = 1.0 } SubShader { Tags { "RenderType"="Transparent" "Queue" = "Transparent" } zwrite off cull off CGPROGRAM #pragma surface surf StandardSpecular alpha:blend finalcolor:tonemapping #include "ToneMapping.cginc" sampler2D _MainTex; sampler2D _BumpMap; //sparkle variables sampler2D _SparkleTex; float _SparkleRange, _Intensity; half4 _SparkleColor; //rim lighting variables half4 _RimColor; float _RimPower; struct Input { float2 uv_MainTex; float2 uv_BumpMap; float2 uv_SparkleTex; float3 viewDir; float3 worldNormal; INTERNAL_DATA }; half _Glossiness, _Glossiness2, _Shininess, _Shininess2; fixed4 _Color; fixed4 _SpecularColor; fixed4 _SpecularColor2; fixed _NormalPower, _Active, _NormalTiling; void surf(Input IN, inout SurfaceOutputStandardSpecular o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; //sparkel effect fixed3 sparklemap = tex2D(_SparkleTex, IN.uv_SparkleTex); sparklemap -= half3(0.1, 0.8, 0.1); sparklemap = normalize(sparklemap); half sparkle = step(2, IN.uv_MainTex.y) * (pow(saturate((dot(IN.viewDir * float3(_SparkleRange, 0, _SparkleRange), normalize(sparklemap + IN.worldNormal)))), _Intensity)); //Metallic and smoothness come from slider variables o.Specular = (_Shininess * (1 - (step(1, IN.uv_MainTex.x) * _Active)) * _SpecularColor) + (_Shininess2 * (step(1, IN.uv_MainTex.x) * _Active) * _SpecularColor2); o.Smoothness = (_Glossiness * (1 - (step(1, IN.uv_MainTex.x) * _Active))) + (_Glossiness2 * (step(1, IN.uv_MainTex.x) * _Active)); fixed3 nm = UnpackNormal(tex2D(_BumpMap, fixed2(IN.uv_MainTex.x * _NormalTiling, IN.uv_MainTex.y * _NormalTiling))); o.Normal = ((nm * fixed3(_NormalPower, _NormalPower, 1)) * step(1, IN.uv_MainTex.y)) + ((nm * fixed3(0, 0, 1)) * (1 - step(1, IN.uv_MainTex.y))); //rim lighting float rim = dot(o.Normal, IN.viewDir); o.Albedo = c.rgb; o.Emission = (max(0, (pow(1 - rim, _RimPower) * _RimColor.rgb)) + (_SparkleColor * sparkle * smoothstep(0, 1, pow(rim, _RimPower - 0.05)))) * step(1, IN.uv_MainTex.y); o.Alpha = c.a; } void tonemapping(Input IN, SurfaceOutputStandardSpecular o, inout fixed4 color) { color = ApplyColorGrading(color); } ENDCG // 보물 for js pass { Name "ALPHA_WRITER" Blend One OneMinusSrcAlpha ColorMask A CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; float2 uv : TEXCOORD1; //1番目のUV座標 という意味らしい }; struct v2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; float2 uv : TEXCOORD1; //テクスチャUV }; sampler2D _MainTex; float4 _MainTex_ST; fixed4 _Color; float _RotateSpeed; v2f vert (appdata_t v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex);//3D空間座標→スクリーン座標変換 o.uv = v.uv; //受け取ったUV座標をフラグメントシェーダーで使うので代入しとく o.color = v.color; o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { return _Color * tex2D(_MainTex, i.texcoord); // Timeを入力として現在の回転角度を作る half timer = _Time.x; // 回転行列を作る half angleCos = cos(timer * _RotateSpeed); half angleSin = sin(timer * _RotateSpeed); /* |cosΘ -sinΘ| R(Θ) = |sinΘ cosΘ| 2次元回転行列の公式*/ half2x2 rotateMatrix = half2x2(angleCos, -angleSin, angleSin, angleCos); //中心 half2 uv = i.uv - 0.5; // 中心を起点にUVを回転させる i.uv = mul(uv, rotateMatrix) + 0.5; fixed4 col = tex2D(_MainTex, i.uv); return col; } ENDCG } } FallBack "Wit/Standard(NoColor)" }
補足情報(FW/ツールのバージョンなど)
バージョン
Unity 2020.3.9f1
お手数おかけしますが、「ToneMapping.cginc」はこちらからDLお願い致します。
https://studio.zepeto.me/jp/guides/creating-your-item-custom-shader
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/07/17 01:52