鞍山招聘网站,网站建设需什么软件,如何制作网址链接,三只松鼠网站怎样做简单阴影制作思路#xff1a;1#xff1a;在角色脚底 放置一块平板2#xff1a;shader中 根据平板传入的矩阵 以及 光照 对角色进行变换3#xff1a; 得到投影在地面上的阴影4#xff1a;阴影直接渲染到 屏幕上缺点#xff1a;上面的阴影无法 增加半透明阴影效果#xf…简单阴影制作思路1在角色脚底 放置一块平板2shader中 根据平板传入的矩阵 以及 光照 对角色进行变换3 得到投影在地面上的阴影4阴影直接渲染到 屏幕上缺点上面的阴影无法 增加半透明阴影效果因为如果直接设置渲染阴影的 pass 为半透明就会导致阴影不同面片的阴影 之间重叠的部分颜色加深导致半透明阴影颜色不均匀。因此采用另一种思路将阴影作为独立的渲染层 增加一个相机只用于渲染玩家阴影使用Camera.RenderWithShader 接口来渲染将阴影渲染到一个 RenderTexture 上面接着在主镜头的 OnRenderImage 接口中将渲染的阴影 renderTexture 和 主镜头渲染的正常场景进行alpha混合。上面混合主要问题是 如何处理 阴影 renderTexture和 主镜头渲染对象的 深度问题防止阴影遮挡住其它对象。Unity中可以设置镜头 Camera.depth 深度模式为 depth我们设置主镜头深度模式depth这样主镜头就会产生一个 depthTexture;这个depthTexture 在shader里面可以通过 _CameraDepthTexture 来访问接着我们在阴影渲染shader里面通过这个_CameraDepthTexture 得到阴影所在位置的深度信息如果比阴影靠近镜头我们就将阴影裁减掉。这样阴影就不会遮挡住其它对象了。但是再人物脚底可能会因为存在浮点数误差导致的一些问题可以在人物脚底增加黑色圆圈来弥补这个缺陷。shader中从_CameraDepthTexture 中获得深度信息的核心代码是vert(){v.pos mul(MVP, vertex);v.screen CameraScreenPos(v.pos);EyeLinear(v.screen.z);v.uv v.pos.xy;}frag() {d SAMPLE_DEPTH_PROJ(_CameraDepthTexture, v.uv);EyeLinear(d);clip(d, v.screen, 1e-2f)}参考 Unity Image Effect 代码中的:MotionBlurClear.shader需要注意问题深度计算需要根据根据 投影的平面阴影来计算 不要用 原始模型计算因此需要 ComputerSceenPos 代码调整