2017-09-13 119 views
0

我想爲360圖像做一個自定義天空盒這至少有2個紋理與交叉淡入淡出,我需要它來響應旋轉值像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

Hi Tengku! 感謝您如此快速。我嘗試過這個帖子,兩個相機的竅門有些修改,但是當我將陀螺儀控制附加到主相機時,給我一些軸奇怪的動作。 正如你所說最好的方法將使用我的滑塊,但它沒有連接到沒有,因爲我不知道如何將它附加到着色器。這就是我想要做的,將我的滑塊添加到交叉淡入淡出處。 Thankas :) –

+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

感謝東姑希望我能回報這份青睞。 :D –