Скайбокс не имеет положения освещения, поскольку он является всенаправленным, поэтому из него нельзя рассчитать правильное направленное освещение (только окружающее).Однако, если вы просто хотите, чтобы цвет скайбокса был в любом направлении, для весовых зондов есть весы unity_SpecCube0, unity_SpecCube1 и т. Д.Вы можете использовать что-то вроде этого:
inline half3 SurfaceReflection(half3 viewDir, half3 worldNormal, half roughness) {
half3 worldRefl = reflect(-viewDir, worldNormal);
half r = roughness * 1.7 - 0.7 * roughness; // Some magic for calculating MIP level
float4 reflData = UNITY_SAMPLE_TEXCUBE_LOD(
unity_SpecCube0, worldRefl, r * 6
);
return DecodeHDR (reflData, unity_SpecCube0_HDR);
}
Если ваш датчик отражения отличается от вашего скайбокса, просто определите скайбокс как форму texCUBE в своем шейдере и используйте ее.Если вы не хотите устанавливать его для каждого материала, использующего этот шейдер, просто объявите его в блоке CGPROGRAM как унифицированное, но не как свойство ShaderLab - тогда оно будет считаться глобальным шейдером.Затем вы можете установить его через скрипт, используя Shader.SetGlobalTexture.Проверьте документацию для этого здесь:
https://docs.unity3d.com/ScriptReference/Shader.SetGlobalTexture.html