2017-09-13 5 views
0

私はクロスフェードで2つのテクスチャを持つ360イメージ用のカスタムスカイボックスを作ろうとしており、Unity Skyboxのように回転値に応答する必要があります。私は同じスライダーが必要ですが、私は幸運を得ていません。私は完全にシェイダーで新しいです。ここで ユニティカスタムスカイボックスUnityスカイボックスのように

は今

Shader "Custom/fundido" 
{ 
    Properties { 

    _Blend ("Blend", Range (0, 1)) = 0.0 
    _Rotation ("Rotation", Range(0, 360)) = 0 
    _BaseTexture ("Cubemap (HDR)", Cube) = "grey" {} 
    _OverlayTexture ("Cubemap2 (HDR)", Cube) = "grey" {} 

} 

SubShader { 

Tags { "Queue"="Background" "RenderType"="Background" 
"PreviewType"="Skybox" } 

Pass { 

     SetTexture[_BaseTexture] 
     SetTexture[_OverlayTexture] { 
     ConstantColor (0,0,0, [_Blend]) 
     combine texture Lerp(constant) previous 
     } 
    } 
} 
} 

_Blend私はちょうど回転リスナーを追加する必要がクロスフェードのための完璧な作品まで、私が持っているコードです。

ありがとうございます!

+0

このリンクで見ている:https://forum.unity.com/threads/rotate-a-skybox.130639/を、しかし、その代わりにスクリプトを経由して回転を変更するので、あなたがそれを変更しますスライダ_回転のプロパティ。 –

+0

こんにちはテンク! すごくありがとうございます。そのポストと2台のカメラのトリックを試してみましたが、ジャイロスコープのコントロールをメインカメラに取り付けると、いくつかの軸の動きが変わってしまいました。 あなたが言うように、最良の方法は私のスライダーを使用することですが、シェーダーに接続する方法がわからないため何も接続されません。そしてそれが私がやろうとしていることです。スライダをクロスフェード用のシェーダに追加してください。 ありがとう:) –

+0

こんにちは、私はちょうど家に到着します。私はシェイダーを作成することができ、それは私のために働く、いくつかのクリーニングの後に私はあなたに答えを投稿します。 –

答えて

1

ここはシェーダです。スクリプトを使用して日周期をシフトすることができます。 https://docs.unity3d.com/ScriptReference/Material.SetFloat.html

Shader "TFTM/Skybox2CubeBlend" { 
Properties { 
    _Blend ("Blend", Range (0, 1)) = 0.0 
    _Rotation ("Rotation", Range(0, 360)) = 0 
    _Tex ("Cubemap (HDR)", Cube) = "grey" {} 
    _OverlayTex ("CubemapOverlay (HDR)", Cube) = "grey" {} 
} 

SubShader { 
    Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" } 
    Cull Off ZWrite Off 

    Pass { 

     CGPROGRAM 
     #pragma vertex vert 
     #pragma fragment frag 
     #pragma target 2.0 

     #include "UnityCG.cginc" 

     samplerCUBE _Tex; 
     samplerCUBE _OverlayTex; 
     half4 _Tex_HDR; 
     half4 _Tint; 
     half _Exposure; 
     float _Rotation; 
     float _Blend; 

     float3 RotateAroundYInDegrees (float3 vertex, float degrees) 
     { 
      float alpha = degrees * UNITY_PI/180.0; 
      float sina, cosa; 
      sincos(alpha, sina, cosa); 
      float2x2 m = float2x2(cosa, -sina, sina, cosa); 
      return float3(mul(m, vertex.xz), vertex.y).xzy; 
     } 

     struct appdata_t { 
      float4 vertex : POSITION; 
     }; 

     struct v2f { 
      float4 vertex : SV_POSITION; 
      float3 texcoord : TEXCOORD0; 
     }; 

     v2f vert (appdata_t v) 
     { 
      v2f o; 
      float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation); 
      o.vertex = UnityObjectToClipPos(rotated); 
      o.texcoord = v.vertex.xyz; 
      return o; 
     } 

     fixed4 frag (v2f i) : SV_Target 
     { 
      half4 tex = texCUBE (_Tex, i.texcoord); 
      half4 tex2 = texCUBE (_OverlayTex, i.texcoord); 
      float4 env = lerp(tex, tex2, _Blend); 

      half3 c = DecodeHDR (env, _Tex_HDR); 

      return half4(c, 1); 
     } 
     ENDCG 
    } 
} 
Fallback Off 

} 
+0

うわー!!!すごくありがとう!シェーダの学習を始めるには良い文書をお持ちですか?私は将来の問題のためにそれらを理解したい。本当にありがとうございます。D –

+0

個人的に私は本当にAlan Zucconiシェーダーブックが好きです。 http://www.alanzucconi.com/books/ –

+0

ありがとうTengku私は賛成を返すことができることを願っています。 :D –

関連する問題