2013年10月22日 星期二

CubeMap奇怪現象

前幾天在改Shader時,發現一個奇怪的現象

Unity 的shader可以在貼圖的地方,設定TexGen,讓它自動產生uv
SL-Properties

但是這個產生的UV (我指CubeReflect的部分) 和自己在Shader裡產生的結果不大一樣

最左邊的是用內建的Shader
中間的Shader code是
 Shader "Custom/testCubeMap1" {  
      Properties {  
           _Color ("Color", Color) = (1,1,1,1)  
           _ReflectTex ("Reflection Texture", Cube) = "dummy.jpg" {  
                TexGen CubeReflect  
           }  
      }        
      SubShader {  
           Tags {  
                "Queue" = "Geometry"  
           }  
           Pass {  
                Fog { Color (0,0,0,0)}  
                SetTexture [_ReflectTex] {  
                     combine texture  
                }  
           }  
      }  
      SubShader {  
           Pass {  
                Color [_Color]  
           }  
      }  
 }  
最右邊的是:
 Shader "Custom/testCubeMap2" {  
      Properties {  
           _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect }  
      }  
      SubShader {  
           Tags { "RenderType"="Opaque" }  
           LOD 200  
           CGPROGRAM  
           #pragma surface surf Lambert  
     #pragma target 3.0  
           samplerCUBE _Cube;  
           struct Input {  
                float3 worldRefl;  
           INTERNAL_DATA  
           };  
           void surf (Input IN, inout SurfaceOutput o) {  
           o.Emission = texCUBE (_Cube, WorldReflectionVector (IN, float3(0,0,1))).rgb;  
           }  
           ENDCG  
      } 
中間的是用自動產生的UV,左右都是用算的(左的產生方法是 fixed4 reflcol = texCUBE (_Cube, IN.worldRefl);  可以抓unity Default shader來看) 自動產生的uv x方向反了,而且視角在動時,邊緣Distort很明顯。 目前用的版本是Unity 4.2.0f4

沒有留言 :

張貼留言