当前位置:网站首页>实施阴影介绍
实施阴影介绍
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解决重采样的问题,并且产生软阴影的效果。
边栏推荐
- Detailed explanation of map set
- WPS inserts a picture and displays it completely
- Does pytorch support 32 bits?
- Troubleshooting ideas that can solve 80% of faults
- Two pieces of nature a day! Duan Fengfeng, an alumnus of the University of science and technology of China, was the third Chinese winner of the belby medal
- MySQL -- basic concept of database
- Memory mapping of QT
- What should we pay attention to in the development process of Yingguang single chip microcomputer?
- Yingguang pmc131 SOP16 16pin eight bit MCU
- wait_ for_ Gap -- restore archive from primary archive to secondary Archive
猜你喜欢
Does pytorch support 32 bits?
Babbitt | metauniverse daily must read: can you buy a virtual anchor for 1000 yuan? Is this the live gospel of small businesses or "cutting leeks"
微信小程序视频分享平台系统毕业设计毕设(2)小程序功能
1288_ Implementation analysis of vtask resume() interface and interrupt Security version interface in FreeRTOS
MySQL advanced - transaction and index
Picking up the camera is the best artistic healing
Editor编辑器扩展在Scene View添加按钮和logo
微信小程序视频分享平台系统毕业设计毕设(5)任务书
如何开启IDEA的Run Dashboard功能
Easyai notes - machine learning
随机推荐
基数排序的简单理解
Interview, about thread pool
Easyai notes - deep learning
Development of original Yingguang MCU chip pms152 sop8 encapsulated MCU
php获取两个时间戳之间相隔多少天多少小时多少分多少秒
Use dosbox to run the assembly super detailed step "suggestions collection"
Finally detailed explanation
win10 kms activator
Clé de cartographie vimium
能解决 80% 故障的排查思路
MySQL -- basic concept of database
如何开启IDEA的Run Dashboard功能
Aptos教程-参与官方激励测试网(AIT2 激励测试网)
Calculation of favorable comment rate
Modbus protocol communication exception
Problems needing attention in the development and debugging of Yingguang single chip microcomputer
C# 检测图片是否被旋转并修改到正真的旋转
读写 XML/JSON/INI 和 UBJSON 等格式的数据文件的统一接口
Pms150c Yingguang MCU development case
wait_for_gap -- 从主库归档备库恢复归档