博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ShaderLab学习小结(六)接收点光源阴影
阅读量:7038 次
发布时间:2019-06-28

本文共 1861 字,大约阅读时间需要 6 分钟。

运行环境:

Win10 x64
Unity 5.5.4
在“”中,通过修改代码,让原来的shader可以接收主平行光的阴影。但是没有点光源的阴影。

在原有的pass通道下面再添加一个pass通道,用于接收点光源阴影。

直接将原来的pass复制粘贴成新的pass通道,再进行一些修改即可。

pass {        tags{ "lightmode" = "forwardadd" }  //1.        blend one one               //2.        CGPROGRAM        #pragma vertex vert        #pragma fragment frag        #include "unitycg.cginc"        #include "lighting.cginc"        #include "autolight.cginc"        #pragma multi_compile_fwdadd_fullshadows  //3.        fixed4 _Spec;        float _Shin;        struct v2f {            float4 pos:POSITION;            float3 normal:NORMAL;            float4 vertex:TEXCOORD2;            SHADOW_COORDS(0)        };        v2f vert(appdata_base v)        {            v2f o;            o.pos = mul(UNITY_MATRIX_MVP, v.vertex);            o.normal = normalize(v.normal);            o.vertex = v.vertex;            TRANSFER_SHADOW(o)                return o;        }        fixed4 frag(v2f IN) :COLOR        {            float3 wpos = mul(unity_ObjectToWorld, IN.vertex).xyz;            UNITY_LIGHT_ATTENUATION(atten, IN, wpos)                //diffuse                float3 N = UnityObjectToWorldNormal(IN.normal);                float3 L = normalize(_WorldSpaceLightPos0).xyz;                float ndotl = saturate(dot(N, L));                fixed4 col = _LightColor0*ndotl;                //shadow                col.rgb *= atten;                return col;        }            ENDCG    }

效果如下图:

图1.
ShaderLab学习小结(六)接收点光源阴影

原有平板已成功接收了点光源照射球体产生的阴影。

代码中三处标记有改动

1.

tags{ "lightmode" = "forwardadd" } //1.

原来的pass中是forwardbase,改为forwardadd

2.

在CGPROGRAM前添加一行

blend one one //2.

将前面pass计算的颜色和此pass one one相加,如果不加这一行的话效果如下:

图2.
ShaderLab学习小结(六)接收点光源阴影

3.

#pragma multi_compile_fwdadd_fullshadows //3.

原pass中为 fwdbase,现改为fwdadd_fullshadows。同样见

4.

在新pass中删除高光及点光反射的计算,且最后不再加环境光UNITY_LIGHTMODEL_AMBIENT。

这样就得出了如上 图1的效果。

转载于:https://blog.51cto.com/shuxiayeshou/2065532

你可能感兴趣的文章
PHP 5.3以上版本推荐使用mysqlnd驱动
查看>>
Android_listview设置每条信息的间距
查看>>
详解Linux服务器最大tcp连接数
查看>>
JAVA & JSON详解
查看>>
C#编程总结(八)数字签名
查看>>
Mac显示隐藏文件的终端命令
查看>>
Spring MVC controller间跳转 重定向 传参 (转)
查看>>
再破博客园登录
查看>>
Entity Framework在WCF中序列化的问题
查看>>
OpenCL快速入门
查看>>
选择生成日报表,月报表,年报表
查看>>
使用位操作
查看>>
Babelfish(二分)
查看>>
JS 中如何判断 undefined 和 null
查看>>
ftk学习记录(一个进度条文章)
查看>>
log4j直接输出日志到flume
查看>>
非正确使用浮点数据由项目产生BUG讨论的问题
查看>>
jquery实现ajax提交form表单的方法总结
查看>>
[Angular 2] Template property syntax
查看>>
Android开展:ADT+Eclipse使用错误:Text editor does not have a document provider
查看>>