商业渲染之乱七八糟的ShadowMap-利用了UnityWorldToClipPos
Posted avi9111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了商业渲染之乱七八糟的ShadowMap-利用了UnityWorldToClipPos相关的知识,希望对你有一定的参考价值。
创造一个Shadowmap
一开始,死活出问题,显示不了Shadowmap的正确贴图
换了Shader,换了写法,完全乱套,并不是换了的写法错误,Shader写法是正确的,而是无论怎么换,加减一些偏移,换下色等操作之后,表现和代码不一致,极度有点怀疑自己写错代码了
(这里其实有几个伏笔,一般人也确实可能写错代码,但要是没错;问题就变成代码表现不一致,这难道是Unity的错,若Unity也没错;那其实只能是某些配置错了。)
一起来找碴(不同场景,环境接近,结果不同)
同样shader,不同材质,结果又不同
最后发现是这个问题
// Upgrade NOTE: excluded shader from DX11; has structs without semantics (struct v2f members depth)
//#pragma exclude_renderers d3d11
// Upgrade NOTE: excluded shader from DX11; has structs without semantics (struct v2f members depth)
//#pragma exclude_renderers d3d11
跌落,使用了Diffuse(Fallback)过分保护害死人啊,本来不应该用这个
这个涉及到Unity HLSL Shader的保护机制,若Shader出错(但是没有任何提示),直接使用Fallback声明的后备Shader,例如Diffuse或Hidden/Shader等
所以一些特殊Shader,必须特别小心,我们想特殊显示ShadowMap,被用成Diffuse普通显示,当然不行
UnityWorldToClipPos方法原理
float4 vert= UnityWorldToClipPos(v.vertex);
总结一下Unity Shader编写入门
写 Unity HLSL的着色器,游戏版本太多,还是需要模板
需要一个高亮编辑器
(语法检测是有的,不过新手也看不懂)
(可见即可得,做的不错的,甚至可以runtime运行时直接编译Shader)
性能检测,(unity有提供一些工具
以上是关于商业渲染之乱七八糟的ShadowMap-利用了UnityWorldToClipPos的主要内容,如果未能解决你的问题,请参考以下文章