前幾天在改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
沒有留言 :
張貼留言