商业渲染之乱七八糟的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的主要内容,如果未能解决你的问题,请参考以下文章

Shadow Map阴影贴图技术之探

ShadowMap

学习OpenGL ES之ShadowMap(二)

《CSM and PCF》

UE4移动端动态阴影ShadowMap使用率过低问题

引擎设计跟踪 ShadowMap 细节和分析