着色器场景中的Cubemap天空盒

时间:2019-10-12 12:44:30

标签: c# unity3d shader textures skybox

问题也许很简单: 我不知道如何获取天空盒并将其应用于我的着色器。

我想我已经接近了,但是如何从场景中拿出天空盒?

mygameobjec.GetComponent<Renderer>().material.SetTexture("_SkyReflection",Skybox.material.Texture??);

谢谢

1 个答案:

答案 0 :(得分:0)

尝试使用RenderSettings.skybox.mainTexture。

https://docs.unity3d.com/ScriptReference/RenderSettings-skybox.html

一个技巧:也可以从一个名为unity_SpecCube0的全局着色器访问着色器内部的当前反射环境。这是我在着色器中经常使用的功能:

// Returns the reflection color given a normal and view direction.
inline half3 SurfaceReflection(half3 viewDir, half3 worldNormal, half roughness) {

    half3 worldRefl = reflect(-viewDir, worldNormal);
    half r = roughness * 1.7 - 0.7 * roughness;
    float4 reflData = UNITY_SAMPLE_TEXCUBE_LOD(
        unity_SpecCube0, worldRefl, r * 6
    );

    return DecodeHDR (reflData, unity_SpecCube0_HDR);
}