细节慢慢补充,有几个需要注意的地方,必须要有接收投影的pass也就是Name是ShadowCollector的,必须添加#pragma multi_compile_fwdbase,物体的着色器必须有Tag 里面的 {"LightMode" = "ForwardBase"}。处理投影要在接收投影的物体shader里。

随后是三个宏。

SHADOW_COORDS这个宏后面的参数是指第几个通道,不要和其他的出现冲突,也就是要改变投影的颜色话必须要占用一个通道。

在顶点处理器里调用TRANSFER_SHADOW。

然后像素着色器调用SHADOW_ATTENUATION,返回的就是这个像素是否存在阴影中。

可改变投影颜色的范例如下。

Shader "Example/ShadowColor"
{
Properties
{
_MainColor("MainColor",color) = (0.5,0.5,0.5,)
_ShadowColor("ShadowColor",color) = (,,,)
}
SubShader
{
Tags {"RenderType"="Opaque"}
Pass
{
Tags {"LightMode" = "ForwardBase"} CGPROGRAM
#pragma multi_compile_fwdbase
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc" #pragma vertex vertexMain
#pragma fragment fragmentMain fixed4 _MainColor;
fixed4 _ShadowColor; struct VertexToFragment
{
float4 pos : SV_POSITION;
half4 uv : TEXCOORD0;
SHADOW_COORDS()
}; VertexToFragment vertexMain (appdata_full v)
{
VertexToFragment result = (VertexToFragment);
result.pos = mul(UNITY_MATRIX_MVP, v.vertex);
result.uv.xy = v.texcoord.xy;
TRANSFER_SHADOW(result)
return result;
} fixed4 fragmentMain (VertexToFragment i) : COLOR0
{
float attenuation = SHADOW_ATTENUATION(i);
return lerp(_MainColor*_ShadowColor,_MainColor,attenuation);
} ENDCG
} Pass
{
Name "ShadowCollector"
Tags { "LightMode" = "ShadowCollector" } Fog {Mode Off}
ZWrite On ZTest LEqual CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_shadowcollector #define SHADOW_COLLECTOR_PASS
#include "UnityCG.cginc" struct appdata { float4 vertex : POSITION;};
struct v2f { V2F_SHADOW_COLLECTOR;}; v2f vert (appdata v)
{
v2f o;
TRANSFER_SHADOW_COLLECTOR(o)
return o;
} fixed4 frag (v2f i) : SV_Target { SHADOW_COLLECTOR_FRAGMENT(i)}
ENDCG
} } }

Unity的Shader如何控制投影颜色的更多相关文章

  1. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

  2. 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨)  ...

  3. Unity中使用摇杆控制

    Unity中使用摇杆控制 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50 ...

  4. unity shader 剔除指定的颜色

    Shader "MyShader/PaintingBGTransparency" { Properties{ _MainTex("Base (RGB)", 2D ...

  5. Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)

    好久没坚持写blog了,是时候开始撸一波新博文了!学习Unity有一段时间了,关于Shader的书也看了几本<Unity Shader入门精要>,<Unity 3D ShaderLa ...

  6. 关于Unity中Shader的使用

    在游戏的开发过程中,程序员不太会自己去写shader,因为写起来很麻烦,而且只有Unity会报错,编译器也没有什么提示. 通常是拿别人的shader改一改,当然,程序员还是要能看懂和会一点shader ...

  7. 关于Unity中Shader的基础认识

    Shader也叫着色器,是Unity里面比较难的一个点,网上有很多别人写好的shader,我们可以下载下来用或者修改学习. Shader可以做出很多非常不错的效果,因为它是插在渲染管道里面的程序,一来 ...

  8. unity surface shader 1

    Unity ShaderLib :  CGPROGRAM  ENDCG之间是CG代码,之外的代码功能都由ShaderLib提供,CG中的一些方法比如tex2D(...)也是ShaderLib对CG进行 ...

  9. 关于Unity中Shader的内置值

    Unity provides a handful of builtin values for your shaders: things like current object's transforma ...

随机推荐

  1. 查看端口号根据pid号找到相关占用端口应用

    查看端口号根据pid号找到相关占用端口应用   8080 端口被占用不知道被哪个应用软件占用,下面我来教你查出那个该死的应用 方法/步骤   1 首先用netstat 找到端口对应的pid号,找到之后 ...

  2. 7-掉馅饼(数组dp)

    /*                                             免费馅饼 时间限制:1000 ms  |  内存限制:65535 KB                   ...

  3. 禁用xampp的ssl功能

    按照Disable SSL on XAMPP for Windows文章里讲解的步骤如下: 1 以管理员身份启动XAMPP控制面板,点击Config按钮打开httpd.conf 分别注释171,539 ...

  4. FormValidator表单验证

    所需的库文件 红色框内是所需要的JavaScript库文件. <%@ page language="java" contentType="text/html; ch ...

  5. How to Set Up an Rsync Daemon on Your Linux Server

    Introduction This tutorial will take you through setting up an rsync daemon on your Linux server. Yo ...

  6. Zookeeper 系列(四)ZKClient API

    Zookeeper 系列(四)ZKClient API 环境准备: <dependency> <groupId>com.101tec</groupId> <a ...

  7. predict_proba 的使用

  8. centos 6.5 安装mysql

    步骤1: yum -y install mysql-server 步骤2: chkconfig mysqld on 步骤3: service mysqld start mysql -u root se ...

  9. 2018.09.27 bzoj2118: 墨墨的等式(最短路+背包)

    传送门 好题啊. 首先找到最小的一个非零系数记做a1a_1a1​,然后如果WWW modmodmod a1=W′a_1=W'a1​=W′ modmodmod a1a_1a1​,且WWW是方程的一个可行 ...

  10. Navicat for oracle cannot load OCI DLL

    Navicat for oracle 提示 cannot load OCI DLL87,126,193 instant client package is required for basic and ...