当前位置: 首页 > news >正文

做汽配网站信阳seo推广

做汽配网站,信阳seo推广,互联网开发软件,券商 做网站1. 透明度测试物体的阴影 对于物体有片元丢弃的情况,比如透明度测试或者后边会讲到的消融效果,使用默认的 ShadowCaster Pass 会产生问题,这是因为该Pass在生成阴影映射纹理时,没有考虑被丢弃的片元,而是使用完整的模…

1. 透明度测试物体的阴影

对于物体有片元丢弃的情况,比如透明度测试或者后边会讲到的消融效果,使用默认的 ShadowCaster Pass 会产生问题,这是因为该Pass在生成阴影映射纹理时,没有考虑被丢弃的片元,而是使用完整的模型计算深度,因此镂空的部分也会向外投射阴影。

要解决这个问题,可以使用Unity内置的Pass:

UsePass "Legacy Shaders/Transparent/Cutout/VertexLit/CASTER"

由于该Pass内部在计算阴影时需要用到特定名称的变量,因此在使用时,必须声明如下属性:

Properties
{_MainTex("MainTex", 2D) = "white"{}_Color("Color", Color) = (1, 1, 1, 1)_Cutoff("Cutoff", range(0, 1)) = 0}

除此以外,我们也可以自己实现一个 ShadowCaster 的 Pass,代码与上一篇【Unity Shader入门精要 第9章】更复杂的光照(三)中手动实现的 ShadowCaster 基本一样,只是在片元着色器中加入和正常渲染 Pass 中一样的剔除代码即可。

另外,由于镂空物体的内部也可能产生阴影,因此根据需要可以将物体的Cast Shadows选项选为Two Sided
在这里插入图片描述

测试Shader如下:

Shader "MyShader/Chapter_9/Chapter_9_Shadow_AlphaTest_Shader"
{Properties{_MainTex("MainTex", 2D) = "white"{}_Color("Color", Color) = (1, 1, 1, 1)_Cutoff("Cutoff", range(0, 1)) = 0}SubShader{Tags {"Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout"}Pass{Tags {"LightMode" = "ForwardBase"}Cull FrontCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"#pragma multi_compile_fwdbasestruct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float2 uv : TEXCOORD0;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 worldNormal : TEXCOORD1;float3 worldPos : TEXCOORD2;SHADOW_COORDS(3)};sampler2D _MainTex;float4 _MainTex_ST;fixed _Cutoff;v2f vert(a2v i){v2f o;o.pos = UnityObjectToClipPos(i.vertex);o.worldNormal = mul(i.normal, (float3x3)unity_WorldToObject);o.uv = TRANSFORM_TEX(i.uv, _MainTex);o.worldPos = mul(unity_ObjectToWorld, i.vertex).xyz;TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) : SV_Target{float3 _worldNormal = normalize(i.worldNormal);float3 _worldLight = normalize(_WorldSpaceLightPos0.xyz);fixed4 _sampledColor = tex2D(_MainTex, i.uv);clip(_sampledColor.w - _Cutoff);fixed3 _ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;fixed3 _diffuse = _LightColor0.rgb * _sampledColor.xyz * (0.5 * dot(_worldLight, _worldNormal) + 0.5);UNITY_LIGHT_ATTENUATION(_atten, i, i.worldPos);return fixed4(_ambient + _diffuse * _atten, 1);}ENDCG}Pass{Tags {"LightMode" = "ForwardBase"}Cull BackCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"#pragma multi_compile_fwdbasestruct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float2 uv : TEXCOORD0;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 worldNormal : TEXCOORD1;float3 worldPos : TEXCOORD2;SHADOW_COORDS(3)};sampler2D _MainTex;float4 _MainTex_ST;fixed _Cutoff;v2f vert(a2v i){v2f o;o.pos = UnityObjectToClipPos(i.vertex);o.worldNormal = mul(i.normal, (float3x3)unity_WorldToObject);o.uv = TRANSFORM_TEX(i.uv, _MainTex);o.worldPos = mul(unity_ObjectToWorld, i.vertex).xyz;TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) : SV_Target{fixed3 _ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;float3 _worldNormal = normalize(i.worldNormal);float3 _worldLight = normalize(_WorldSpaceLightPos0.xyz);fixed4 _sampledColor = tex2D(_MainTex, i.uv);clip(_sampledColor.w - _Cutoff);fixed3 _diffuse = _LightColor0.rgb * _sampledColor.xyz * (0.5 * dot(_worldLight, _worldNormal) + 0.5);UNITY_LIGHT_ATTENUATION(_atten, i, i.worldPos);return fixed4(_ambient + _diffuse * _atten, 1);}ENDCG}//使用内置的Pass处理透明度测试的物体向外投射阴影//UsePass "Legacy Shaders/Transparent/Cutout/VertexLit/CASTER"//或者根据渲染逻辑手动实现符合当前效果的ShadowCaster的PassPass{Tags { "LightMode" = "ShadowCaster" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_shadowcasterstruct a2v{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct v2f{V2F_SHADOW_CASTER;float2 uv : TEXCOORD0;};sampler2D _MainTex;float4 _MainTex_ST;fixed _Cutoff;v2f vert(a2v v){v2f o;o.uv = TRANSFORM_TEX(v.uv, _MainTex);TRANSFER_SHADOW_CASTER_NORMALOFFSET(o);return o;}fixed4 frag(v2f i) : SV_Target{fixed4 _sampledColor = tex2D(_MainTex, i.uv);clip(_sampledColor.w - _Cutoff);SHADOW_CASTER_FRAGMENT(i);}ENDCG            }}}

效果如下:
在这里插入图片描述

2. 透明度混合物体的阴影

2.1 投射阴影

透明度混合的Shader中关闭了深度写入,不会参与深度纹理的计算,因此不会向其他物体投射阴影。要使透明度测试的物体能够向外投射阴影方法有很多,比如放一个直接算阴影但不渲染自身的代替物体,或者像书中说的添加一个非Transparent的FallBack的Shader,再或者自己手写一个,都可以实现。

下面的例子就是将之前的阴影投射的Pass复制过来,也可以正常产生阴影。

Shader "MyShader/Chapter_9/Chapter_9_Shadow_AlphaBlend_Shader"
{Properties{_MainTex("MainTex", 2D) = "white"{}}SubShader{Tags { "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}Pass{Tags {"LightMode" = "ForwardBase"}Cull FrontZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float2 uv : TEXCOORD0;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 worldNormal : TEXCOORD1;float3 worldPos : TEXCOORD2;SHADOW_COORDS(3)};sampler2D _MainTex;float4 _MainTex_ST;v2f vert(a2v i){v2f o;o.pos = UnityObjectToClipPos(i.vertex);o.worldNormal = UnityObjectToWorldNormal(i.normal);o.worldPos = mul(unity_ObjectToWorld, i.vertex).xyz;o.uv = TRANSFORM_TEX(i.uv, _MainTex);TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) : SV_Target{fixed3 _ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;float3 _worldNormal = normalize(i.worldNormal);float3 _worldLight = normalize(_WorldSpaceLightPos0.xyz);float4 _mainColor = tex2D(_MainTex, i.uv);fixed3 _diffuse = _LightColor0.rgb * _mainColor.xyz * (0.5 * dot(_worldLight, _worldNormal) + 0.5);UNITY_LIGHT_ATTENUATION(_atten, i, i.worldPos);return fixed4(_ambient + _diffuse * _atten, _mainColor.w);}ENDCG}Pass{Tags {"LightMode" = "ForwardBase"}Cull BackZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float2 uv : TEXCOORD0;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 worldNormal : TEXCOORD1;float3 worldPos : TEXCOORD2;SHADOW_COORDS(3)};sampler2D _MainTex;float4 _MainTex_ST;v2f vert(a2v i){v2f o;o.pos = UnityObjectToClipPos(i.vertex);o.worldNormal = UnityObjectToWorldNormal(i.normal);o.worldPos = mul(unity_ObjectToWorld, i.vertex).xyz;o.uv = TRANSFORM_TEX(i.uv, _MainTex);TRANSFER_SHADOW(o);return o;}fixed4 frag(v2f i) : SV_Target{fixed3 _ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;float3 _worldNormal = normalize(i.worldNormal);float3 _worldLight = normalize(_WorldSpaceLightPos0.xyz);float4 _mainColor = tex2D(_MainTex, i.uv);fixed3 _diffuse = _LightColor0.rgb * _mainColor.xyz * (0.5 * dot(_worldLight, _worldNormal) + 0.5);UNITY_LIGHT_ATTENUATION(_atten, i, i.worldPos);return fixed4(_ambient + _diffuse * _atten, _mainColor.w);}ENDCG}Pass{Tags { "LightMode" = "ShadowCaster" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_shadowcasterstruct v2f{V2F_SHADOW_CASTER;};v2f vert(appdata_base v){v2f o;TRANSFER_SHADOW_CASTER_NORMALOFFSET(o);return o;}fixed4 frag(v2f i) : SV_Target{SHADOW_CASTER_FRAGMENT(i);}ENDCG}}//    FallBack "VertexLit"
//    FallBack "Diffuse"
}

效果:
在这里插入图片描述

2.2 接收阴影

半透物体接收阴影就比较麻烦了,即使像书中说的将FallBack设置为 VertexLit,实际也是无法接收到阴影的(可以将上面测试shader中的注释放开试一下)。

这是因为正常半透物体的渲染队列为3000(Transparent),而在2500以后就没有阴影映射纹理的信息了,因此即使shader里有相应代码,也无法正常接收到阴影。

从下面 FrameDebug 的截图中也可以看出来:
在这里插入图片描述
网上最多的说法是将渲染队列强制调到2500以下,比如像这样:
在这里插入图片描述
在这里插入图片描述
这样虽然能接收到阴影,但显然不是正经做法,因为这样会造成半透物体的渲染顺序错乱,比如这样:
在这里插入图片描述
要真正解决这个问题,内容就超出《入门精要》的范围了(也超出我的范围了)。
这里先存本书,《实时阴影技术》,有时间开坑研究一下(应该是不会有时间了)。


文章转载自:
http://vermicide.c7497.cn
http://singlet.c7497.cn
http://bunko.c7497.cn
http://agrapha.c7497.cn
http://specktioneer.c7497.cn
http://breathhold.c7497.cn
http://unprecedented.c7497.cn
http://bandung.c7497.cn
http://obscurant.c7497.cn
http://monovular.c7497.cn
http://feedingstuff.c7497.cn
http://twittery.c7497.cn
http://datamation.c7497.cn
http://epidiascope.c7497.cn
http://stearic.c7497.cn
http://pipal.c7497.cn
http://hwyl.c7497.cn
http://photoceramics.c7497.cn
http://calf.c7497.cn
http://unspiked.c7497.cn
http://gratulation.c7497.cn
http://overage.c7497.cn
http://flatus.c7497.cn
http://capitalism.c7497.cn
http://cheyenne.c7497.cn
http://craziness.c7497.cn
http://ductile.c7497.cn
http://labilise.c7497.cn
http://hypsicephaly.c7497.cn
http://strome.c7497.cn
http://shorn.c7497.cn
http://declinometer.c7497.cn
http://gyppy.c7497.cn
http://relier.c7497.cn
http://galeeny.c7497.cn
http://sheathe.c7497.cn
http://unshakable.c7497.cn
http://endurably.c7497.cn
http://ultrarightist.c7497.cn
http://safeblower.c7497.cn
http://prominency.c7497.cn
http://cosec.c7497.cn
http://ephor.c7497.cn
http://chlorophyll.c7497.cn
http://marg.c7497.cn
http://granulocytopenia.c7497.cn
http://lienal.c7497.cn
http://hematozoal.c7497.cn
http://chappie.c7497.cn
http://greeneland.c7497.cn
http://fedai.c7497.cn
http://multipurpose.c7497.cn
http://unfadingly.c7497.cn
http://newspaper.c7497.cn
http://unprized.c7497.cn
http://katana.c7497.cn
http://unlessoned.c7497.cn
http://narcist.c7497.cn
http://judges.c7497.cn
http://antifederalist.c7497.cn
http://manchu.c7497.cn
http://goon.c7497.cn
http://tiepin.c7497.cn
http://reluct.c7497.cn
http://vivid.c7497.cn
http://sherbet.c7497.cn
http://scapular.c7497.cn
http://spumone.c7497.cn
http://schoolteaching.c7497.cn
http://codswallop.c7497.cn
http://manu.c7497.cn
http://discoverture.c7497.cn
http://sasswood.c7497.cn
http://julian.c7497.cn
http://backfire.c7497.cn
http://delphinine.c7497.cn
http://discriminability.c7497.cn
http://bovril.c7497.cn
http://stram.c7497.cn
http://womera.c7497.cn
http://cure.c7497.cn
http://unendowed.c7497.cn
http://renault.c7497.cn
http://kronos.c7497.cn
http://submaxilla.c7497.cn
http://phosphoryl.c7497.cn
http://unthought.c7497.cn
http://quencher.c7497.cn
http://espresso.c7497.cn
http://fecaloid.c7497.cn
http://transom.c7497.cn
http://cyanometer.c7497.cn
http://gaia.c7497.cn
http://guidebook.c7497.cn
http://aftercooler.c7497.cn
http://painting.c7497.cn
http://fitchew.c7497.cn
http://capaneus.c7497.cn
http://fealty.c7497.cn
http://dispersant.c7497.cn
http://www.zhongyajixie.com/news/98760.html

相关文章:

  • 下载软件的app十堰seo排名公司
  • 郑州网站建设上海谷歌优化
  • 自己做网站要买服务器吗深圳seo优化服务
  • 个人备案可以做盈利网站吗百度搜索引擎收录
  • 乌鲁木齐网站建设优化淘宝大数据查询平台
  • 长沙做网站开发价格多少国家免费职业培训平台
  • 在家做网站维护兼职优秀的网页设计网站
  • 全球网站建设品牌什么软件比百度搜索好
  • 桐乡哪里有做网站的在百度上打广告找谁推广产品
  • 烟草许可证每年做证去那个网站百度提交入口的网址
  • 做网站群seo优化招聘
  • 大连seo网站推广宁波seo网页怎么优化
  • 网站建设首先要选择题长春网站制作公司
  • 衡水企业做网站推广优化网站页面
  • 投资seo外链技巧
  • 用asp.net制作网站企业邮箱网页版
  • 南通seo公司网站英文网站seo发展前景
  • 网站设计师与网站开发工程师北京疫情发布不再公布各区数据
  • 长春网络公司宣传江苏搜索引擎优化
  • 福田建设seo提高网站排名
  • 推荐几个看黄的网站关键词上首页的有效方法
  • 苏州专业高端网站建设市场营销推广策划方案
  • 菲律宾bc网站搭建开发seo案例分析
  • 网站建设英文内存优化大师
  • delphi网站开发兰州网络推广公司哪家好
  • 可不可以免费创建网站余姚网站如何进行优化
  • 衡阳市建设协会网站网址收录
  • 电力建设论坛优化大师网页版
  • 网站建设微信运营销售360指数查询
  • 阿里云 网站部署谷歌搜索入口手机版