2014-12-04 69 views
1

我試圖建立一個統一的WebIS使用統一5測試版WebGL。 我寫的自定義着色器(或從現有的着色器更準確地編輯)不再適用於Unity 5. 繼承人着色器應該做什麼。創建一個圓球曲線中的阿爾法斜線的元球效果。 着色器打開這個.. enter image description here 到這個..(通過渲染紋理) enter image description here自定義着色器不再工作在Unity 5

繼承人的整個事情..

//Water Metaball Shader effect by Rodrigo Fernandez Diaz-2013 
//Visit http://codeartist.info/ for more!! 
Shader "Custom/Metaballs" { 
Properties { 


    _MyColor ("Some Color", Color) = (1,1,1,1) 
    _MainTex ("Texture", 2D) = "white" { } 

    _botmcut ("bottom cutoff", Range(0,1)) = 0.1 
    _topcut ("top cutoff", Range(0,4)) = 0.8 
    _constant ("curvature constant", Range(0,5)) = 1 
} 
SubShader { 
    Tags {"Queue" = "Transparent" } 
    Pass { 
    Blend SrcAlpha OneMinusSrcAlpha  
    CGPROGRAM 
    #pragma vertex vert 
    #pragma fragment frag 
    #include "UnityCG.cginc"  
    float4 _MyColor; 
    float4 _Color; 
    sampler2D _MainTex; 
    float _botmcut,_topcut,_constant; 

    struct v2f { 
     float4 pos : SV_POSITION; 
     float2 uv : TEXCOORD0; 
    }; 
    float4 _MainTex_ST; 

    v2f vert (appdata_base v){ 
     v2f o; 
     o.pos = mul (UNITY_MATRIX_MVP, v.vertex); 
     o.uv = TRANSFORM_TEX (v.texcoord, _MainTex); 
     return o; 
    } 

    half4 frag (v2f i) : COLOR{  
     half4 texcol,finalColor; 
     texcol = tex2D (_MainTex, i.uv);   
     //finalColor=_Color*texcol; 
     finalColor=_MyColor; 
     if(texcol.a<_botmcut) 
     { 
      finalColor.a= 0; 
     } 
     else if((texcol.a>_topcut)) 
     { 
      finalColor.a= 0; 
     } 
     else 
     { 
      float r = _topcut-_botmcut; 
      float xpos = _topcut - texcol.a; 

      finalColor.a= 1-(_botmcut + sqrt((xpos*xpos)-(r*r)))/_constant; 
     }   
     return finalColor; 
    } 
    ENDCG 

    } 
} 
Fallback "VertexLit" 
} 

我在Unity 5時遇到的問題是,所產生的紋理是空白的。即。 0 alpha。 似乎是導致問題的位是這一個。

else 
    { 
     float r = _topcut-_botmcut; 
     float xpos = _topcut - texcol.a; 

     finalColor.a= 1-(_botmcut + sqrt((xpos*xpos)-(r*r)))/_constant; 
    } 

如果我註釋掉這個「finalCOlor ......等等等等」的最後一行,然後我看到東西 這是通常創建圓形alpha曲線線,但在統一五是始終似乎解決爲0。 API有沒有變化?因爲這個數學應該和它在團結中的工作方式一樣。 Ps。我不太瞭解着色器!

回答

2

在跟蹤着色器問題時,我通常會做一些事情。

選項1 嘗試使用PIX或其他標準程序調試着色器。你只需要捕捉幀並右鍵單擊像素並點擊調試。我會密切關注每個值是什麼,確保沒有設置爲0不應該是。同時在這個工具中驗證正在使用正確的紋理。

選項2 如果您將finalColor.a設置爲0.5,這是否會執行任何操作?如果這是你知道的問題是你的變量之一是0.應該_constant甚至允許範圍0?我認爲這應該是從0到5誠實。同時驗證你沒有覆蓋材料上的任何常量或變量,確保它們仍然都設置爲默認值。你甚至可能只想在着色器中設置它們來查看是否解決了這個問題。

最後,解決着色器問題並不容易,但它在Unity 4中工作而不在5中的事實告訴我,您可能只是將某些東西解析爲0,所以我會先檢查它。

0

我不知道why..But改變這一行..

finalColor.a= 1-(_botmcut + sqrt((xpos*xpos)-(r*r)))/_constant; 

到這個..

finalColor.a= 1-(_botmcut + sqrt((r*r)-(xpos*xpos)))/_constant; 

合作。 它沒有任何意義!

+1

這使我相信在xpos nfirvine 2015-03-20 00:38:54