U3D着色器源码分析

最近在看u3d 5.3.3着色器的源码,这里先简单的分析下UnityShaderVariables.cginc 中 UnityLighting的_WorldSpaceLightPos0的值是怎么获取的。

CBUFFER_START(UnityLighting) //光照的参数

	//_WorldSpaceLightPos0.w可以表明该光源的类型,如果为0表示是平行光,为1表示是点光源或者聚光灯光源。
	#ifdef USING_DIRECTIONAL_LIGHT
	uniform half4 _WorldSpaceLightPos0; //位置  lightdir = nor(lightpos)  光源的向量
	#else
	uniform float4 _WorldSpaceLightPos0;
	#endif

	uniform float4 _LightPositionRange; // xyz = pos, w = 1/range 点光源才有效 阴影的时候才会有值
。。。。。。

通过帧调试窗口,可以看到这个值是。





图一中的是近视值,右键copy会得到真实的值,通过比较发现和我自己计算出来的是一样的。直接上代码

    void TestLigth()
    {
        //ForwardBase的光源应该是平行光
        //ForwardAdd的类型不限制

        Vector4 lightInfo;
        if (mLight.type != LightType.Directional)
        {
            Vector3 worldPos = mLight.transform.position;
            lightInfo = worldPos;
            lightInfo.w = 1.0f;
        }//The light is a directional light.
        else
        {
            Vector3 worldDir = mLight.transform.TransformDirection(new Vector3(0, 0, -1));
          //  worldDir1 = MyTransform.TransformDirection(mLight.transform, new Vector3(0, 0, -1));

            lightInfo = worldDir;
            lightInfo.w = 0.0f;
        }
        _WorldSpaceLightPos0 = lightInfo;
        //_LightMatrix0  == world2Light
        _LightMatrix0 = mLight.transform.worldToLocalMatrix;
        //UnityLightingCommon.cginc  fixed4 _LightColor0;
        //kShaderVecLightColor0 
        _LightColor0 = mLight.color * mLight.intensity;

        //MeshRenderer


    }



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值