2023-05-08 15:56:10 +03:00

91 lines
2.6 KiB
Plaintext

Shader "SkyboxTest"
{
Properties
{
_Cube ("Environment Map", Cube) = "" {}
_RotationY ("RotationY", Float) = 0
_RotationX ("RotationX", Float) = 0
_Exposure ("Exposure", Float) = 1
}
SubShader
{
Tags
{
"Queue" = "Background"
}
Pass
{
ZWrite Off
Cull Front
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
// User-specified uniforms
uniform samplerCUBE _Cube;
float _RotationY;
float _RotationX;
float _Exposure;
struct vertexInput
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct vertexOutput
{
float4 pos : SV_POSITION;
float3 viewDir : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
vertexOutput vert(vertexInput input)
{
vertexOutput output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_OUTPUT(vertexOutput, output);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
float4x4 modelMatrix = unity_ObjectToWorld;
output.viewDir = mul(modelMatrix, input.vertex).xyz
- _WorldSpaceCameraPos;
// Add float _RotationY to the view direction
output.viewDir = mul(output.viewDir,
float3x3(1, 0, 0, 0, cos(radians(_RotationY)), sin(radians(_RotationY)), 0,
-sin(radians(_RotationY)), cos(radians(_RotationY))));
// Add float _RotationX to the view direction
output.viewDir = mul(output.viewDir,
float3x3(cos(radians(_RotationX)), 0, -sin(radians(_RotationX)), 0, 1, 0,
sin(radians(_RotationX)), 0, cos(radians(_RotationX))));
output.pos = UnityObjectToClipPos(input.vertex);
return output;
}
float4 frag(vertexOutput input) : COLOR
{
// Flip _Cube horizontally
input.viewDir.x = -input.viewDir.x;
float4 cube = texCUBE(_Cube, input.viewDir).rgba;
// Add float _Exposure to the cube
cube *= _Exposure;
return cube;
}
ENDCG
}
}
}