- Home /
How can I make a skybox respect oblique frustum?
I'm using this script from the Manual to set my vanishing point away from the center. http://docs.unity3d.com/Documentation/Manual/ObliqueFrustum.html It work's great, except that the skybox dosn't respect the change in the projection matrix. Can this be fixed in the skybox shader? How?
Answer by DMGregory · Jun 05, 2014 at 05:45 PM
I know this question is from a while ago, but I just encountered this problem recently and found a solution today.
From what I can tell, Unity passes a different projection matrix when rendering skyboxes, one that omits the obliqueness parameters.
I made a copy of the built-in skybox cubed shader and applied the obliqueness manually:
Shader "Custom/Skybox Oblique" {
Properties {
_Tint ("Tint Color", Color) = (.5, .5, .5, .5)
_Tex ("Cubemap", Cube) = "white" {}
_Obliqueness ("Obliqueness", Vector) = (0, 0, 0, 0)
}
SubShader {
Tags { "Queue"="Background" "RenderType"="Background" }
Cull Off ZWrite Off Fog { Mode Off }
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
samplerCUBE _Tex;
fixed4 _Tint;
float4 _Obliqueness;
struct appdata_t {
float4 vertex : POSITION;
float3 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : POSITION;
float3 texcoord : TEXCOORD0;
};
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.vertex.xy += _Obliqueness.xy * o.vertex.w;
o.texcoord = v.texcoord;
return o;
}
fixed4 frag (v2f i) : COLOR
{
fixed4 tex = texCUBE (_Tex, i.texcoord);
fixed4 col;
col.rgb = tex.rgb + _Tint.rgb - unity_ColorSpaceGrey;
col.a = tex.a * _Tint.a;
return col;
}
ENDCG
}
}
Fallback Off
}
Your code that sets the obliqueness on the camera projection matrix should then also provide the values to the RenderSettings.skybox material using SetVector (remember to cache a local copy of the material so you don't inadvertently modify assets on-disc), and both the skybox and camera should then stay in sync.
Your answer
Follow this Question
Related Questions
Changing camera.projectionMatrix doesn't affect skyboxes? 0 Answers
changing camera view 3 Answers
how to change progection matrix for some objects 0 Answers
How to make an Off-axis / Off-center camera ? 2 Answers
Reproduce WorldToViewportPoint function 2 Answers