博客
关于我
【Shader进阶】SubShader块标签Tags——IgnoreProjector
阅读量:510 次
发布时间:2019-03-07

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

一、创建空物体,挂载Projector,并赋值Material

在Unity中创建一个空物体,并将Projector组件挂载到它上面。通过ScriptableObjects属性将Material赋给Projector,可以实现在Projector范围内将物体材质替换为指定Material的效果。

为了实现这一目标,建议使用Unlit Shader类型的Shader,该类型不需要Lighting System的支持,适合简单的着色效果。Shader代码如下:

Shader "Unlit/ProjectorShaderTest" {    Properties {        _MainTex ("Texture", 2D) = "white" {}        _Color("Color", Color) = (1,1,1,1)    }    SubShader {        Tags { "RenderType"="Opaque" }        LOD 100        Pass {            Tags {                "LightMode" = "ForwardBase"            }            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #pragma multi_compile_fwdbase            include "UnityCG.cginc"            include "Lighting.cginc"            struct appdata {                float4 vertex : POSITION;                float2 uv : TEXCOORD0;                float3 normal : NORMAL;            };            struct v2f {                float2 uv : TEXCOORD0;                float4 vertex : SV_POSITION;                float3 normal : NORMAL;                float4 pos : TEXCOORD1;            };            sampler2D _MainTex;            float4 _MainTex_ST;            v2f vert(appdata v) {                v2f o;                o.vertex = UnityObjectToClipPos(v.vertex);                o.uv = TRANSFORM_TEX(v.uv, _MainTex);                o.normal = UnityObjectToWorldNormal(v.normal);                o.pos = mul(unity_ObjectToWorld, v.vertex);                return o;            }            fixed4 frag(v2f i) : SV_Target {                fixed4 col = tex2D(_MainTex, i.uv);                return col * _Color * i.uv.x;            }            ENDCG        }    }}

二、创建主角物体并设置Material

将主角物体设置为不会受到Projector影响的属性。这可以通过在物体材质中设置IgnoreProjector标志位来实现。选择一个适合的Unlit Shader类型的Shader,确保物体呈现美观外观。

此外,需要注意的是IgnoreProjector属性默认值为False。如果没有设置该属性,物体的材质会被Projector覆盖。可以通过修改Shader代码来实时反映材质变化。

三、遇到的问题

问题一:使用标准着色器材质无法渲染

当尝试对Projector的Material赋标准着色器材质时,可能会遇到渲染失败的情况。这是因为标准着色器通常依赖于Lighting System,而Projector的Material在这方面可能有特殊需求。因此,建议继续使用Unlit Shader类型的材料,以确保渲染过程中的兼容性。

问题二:如何正确设置IgnoreProjector

要实现让主角物体不受Projector影响,可以在其材质中设置IgnoreProjector标记。通过修改Shader代码,这个属性可以在运行时动态控制,确保物体的外观与预期一致。

需要注意的是,设置IgnoreProjector属性后,Projector的影响可能会不同。原始效果可能会因为忽略Projector而改变。如果需要保留部分Projector的影响,可以通过调整材质混合参数来实现。

通过以上配置,可以更好地理解和使用Projector组件,并结合适当的Material实现所需的特定效果。

转载地址:http://geucz.baihongyu.com/

你可能感兴趣的文章
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>