shader学习2-光照

这篇博客详细介绍了在Unity中实现光照效果的漫反射和高光反射。针对漫反射,讲解了逐顶点和逐片元的方法,以及半兰伯特模型的运用。在高光反射部分,提到了Blinn-Phong模型,它是Phong模型的优化,通过半向量来计算反射光的强度,有助于提升渲染效果。
摘要由CSDN通过智能技术生成

漫反射

光强和 物体表面法线与光的方向的夹角的余弦值有关
我们需要知道 入射光线的颜色 物体表面的法线和光源的方向
计算公式为:光的反射系数 * 光的颜色 * (法线和光线方向的夹角余弦)

逐顶点漫反射

计算都写在了顶点着色器之中

Shader "Custom/DiffuseVertex"
{
   
    SubShader
    {
   
       // 逐顶点的漫反射
        pass{
   
            Tags{
   "LightMode"="ForwardBase"}
            
            CGPROGRAM
            
            #pragma vertex vert
            #pragma fragment frag
            //内置头文件
            #include "Lighting.cginc"          
    
            struct a2v{
   
                float4 vertex : POSITION; //模型空间里的坐标
                float3 normal : NORMAL;
            };

            struct v2f{
   
                float4 pos : SV_POSITION;//裁剪空间里的坐标
                fixed3 color : COLOR;
            };   
 
            v2f vert(a2v i){
   
                v2f o;
                //环境光照
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
                //将模型空间里的坐标转换为世界坐标,或得顶点的标准法线
                o.pos = UnityObjectToClipPos(i.vertex);                              
                fixed3 worldNormalStd=normalize(UnityObjectToWorldNormal(i.normal));           
                //获得光线的方向
                fixed3 worldLightDirStd=normalize(_WorldSpaceLightPos0.xyz);
                //光照的颜色
                fixed3 diffuse = _LightColor0.xyz * max(0,dot(worldNormalStd,worldLightDirStd))+ ambient;
                o.color = diffuse;
                return o;
            }

            fixed4 frag(v2f i) : SV_TARGET{
   
                return fixed4(i.color,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值