当前位置:网站首页>实施阴影介绍
实施阴影介绍
2022-07-02 16:38:00 【果冻喜之郎】
平面投影阴影
根据光的方向,把物体的每个顶点投影到平面地面.上。、
数学原理:相似三角形
缺点:只能投影到平面,投影物体必须在光线和平面之间
投影阴影
为每个阴影投影体设置一 个相机,把阴影投影体渲染到阴影纹理中,渲染阴影接收者,并且与阴影纹理进行混合

在Unity中实现:
Projector组件:可以设置它的参数生成一个视椎体,Projector会使用提供给它的材质,绘制所有在它视椎体内的物体,使用Render Texture生成阴影映射图,把阴影投影体绘制到阴影纹理,给Project设置物体和阴影映射图混合的材质

阴影映射


右侧未深度图,记录每个像素点的深度值,颜色越深表示离摄像机越近,白色区域表示天空盒。

阴影映射的核心思想:在阴影中的像素不可见,也就是说阴影中的像素深度值大于在阴影映射中像素的深度值。
流程:首先从关照视角生成阴影映射,再从摄像机视角生成整个场景物体,将摄像机坐标系转换为阴影映射坐标系后,对两张纹理进行深度猜测是,如果摄像机视角中像素深度值大于阴影映射中像素深度值,则该像素属于阴影。
Unity中的屏幕空间阴影映射
1.渲染屏幕空间的深度贴图;
2.从光源的方向渲染阴影映射;
3.在屏幕空间做一次阴影收集计算(Shadows Collector),这次计算会得到一-张屏幕空间阴影纹理;
4.在绘制物体的时候,用物体的屏幕坐标uv,采样3中生成的屏幕空间阴影贴图。

阴影映射的优化
自阴影问题
由于阴影映射的分辨率有限,离散的采样点以及数值.上的偏差可能造成不正确的自阴影,也被称为Z- Fighting或者阴影粉剌(Surface Acne)
当比较深度时,为了避免表面自阴影,需要设置容错阈值
●深度偏移(Depth Bias)
●法线偏移(Normal Bias)
但当深度偏移设置过大时,会导致漏光现象。即阴影与投影者之间发生脱节,也叫做Peter Panning问题。



深度偏移:增加深度偏移会使该像素向光源靠近;
法线偏移:沿表面法线方向向外偏移;
偏移单位是是阴影映射的纹素;
在Shadow Receive计算阶段,逐像素进行;
只会在阴影深度测试使使用,不会影响真实场景。
Unity中的偏移优化
在升程文丽阶段做偏移,让遮蔽物进行反向偏移,即减去偏移量,这样性能更高


走样问题
以信号重建的过程来审视阴影映射:
●初始采样:渲染阴影映射;
●重采样:从摄像机视角对采样信号(阴影映射)重采样。
透视走样
●阴影映射在世界空间均匀分配。
●视锥体内物体经过透视投影后,近大远小,近平面和远平面的像素一样;
●靠近观察者的元素所用到采样点明显变少。
解决方案:级联阴影映射
把视锥体分割为多个子视锥体;为每个子视锥体计算独立的相等大小的阴影映射;

重采样误差
阴影映射是一张动态生成的纹理;滤波——纹理采样误差的解决方案
滤波
●图像处理中,通过滤波强调一些特征或者去除图像中一些不需要的部分;
●滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。
阴影的滤波
●使用一部分阴影映射采样点来计算某个指定View采样点的最终阴影结果的方法。
PCF滤波
1.从光方向生成阴影映射;
2.从view视角渲染场景,用阴影映射进行深度测试;
3.当该着色点通过深度测试时,取该像素周围指定大小(滤波核)的范围。计算它们的可见平均值作为输出。

PCF滤波的不同实现
采样数K
●规则滤波,3*3 或5*5;
●采用Poisson Disk的形式来分布一定数量的采样点。
滤波核函数
●高斯函数作为滤波函数。
Unity阴影映射优化总结
●使用深度偏移和法线偏移解决自阴影的问题;
●使用级联阴影映射解决透视投影的问题;
●使用PCF解决重采样的问题,并且产生软阴影的效果。
边栏推荐
猜你喜欢

微信核酸检测预约小程序系统毕业设计毕设(1)开发概要

Finally detailed explanation

Taiwan Feiling fm8pb513b MCU provides MCU program development product design

【Zuul】com. netflix. zuul. exception. ZuulException: Hystrix Readed time out

Deep understanding of ThreadLocal

aloam 代码阅读与总结

Viewing technological changes through Huawei Corps (VI): smart highway

微信核酸检测预约小程序系统毕业设计毕设(4)开题报告

Explain kubernetes network model in detail

一个优秀程序员可抵五个普通程序员!
随机推荐
vimium映射鍵
Development and application case of pms134 scheme of Yingguang single chip microcomputer with original packaging
MySQL --- 數據庫的基本操作
No such file or directory: ‘/tmp/tmpxxx/tmpxxx. py‘
Memory mapping of QT
matplotlib的安装教程以及简单调用
Yingguang single chip microcomputer pms150/pmc150/pms150c consumer single chip microcomputer
pycharm 修改 pep8 E501 line too long > 0 characters
PHP gets the number of days, hours, minutes and seconds between the two timestamps
Enter a valid user name and password in the Microsoft LDAP configuration page, and enter a valid user name in the Microsoft LDAP configuration page
【Zuul】com. netflix. zuul. exception. ZuulException: Hystrix Readed time out
求求你们,别再刷 Star 了!这跟“爱国”没关系!
MySQL --- 数据库的基本操作
Redisson 高性能 Redis 分布式锁源码分析
What should we pay attention to in the development process of Yingguang single chip microcomputer?
1288_ Implementation analysis of vtask resume() interface and interrupt Security version interface in FreeRTOS
Huimang micro IO MCU ft60f010a-urt
android之循环定时器实现,实现定Android时缓存清理
Web聊天工具
微信小程序视频分享平台系统毕业设计毕设(1)开发概要