计算机图形学--阴影1--PCSS算法
阴影是怎么产生的,如何渲染出阴影
Shadow Mapping
假设要渲染以下场景
渲染场景2次:
1.第一次,产生一个shadow map,shadow map描述光源能照到的着色点.
2.从眼睛出发,从第一次渲染 shadow map中,看某个点是否在阴影里.
3. 再次渲染,我们渲染一个结果,比较深度。
好处:不再需要知道场景的几何信息
坏处:走样和锯齿
Shadow Mapping 的问题
问题一:渲染结果自遮挡
原因:我们对每一个场景的像素的深度,这个值是固定的。Shadow Map记录的深度不连续。且光线和场景的像素有夹角,也就是斜着照到像素上,Shadow Mapping 就会出现自遮挡现象。
解决方法:
如果光线打到像素上的时候夹角很大,我们Shadow Map中记录的深度和计算的深度加上偏移。光线和和着色点法线的夹角越大,偏移值越大。
问题二:引入问题一的方案后阴影不全
问题三:走样
如何渲染出好的阴影
预备知识:不等式
我们在实时渲染中,会把不等式在一定条件下,当做约等于用。
乘积的积分和积分的乘机近似:
以上不等式什么时候可以近似相等:
1.实际的积分范围很小的时候,可以近似.
2.g(x)在积分域的范围内变化不大(min,max差别不).
1.面光源,光源没有什么变化
2.BRDF是一个diffuse的材质
PCSS算法(产生软阴影的方法)
Percentage Closer Filtering(PCF)**
第一:不是对已经存在的阴影做Filter
第二:不是对ShadowMap做Filter
PCF算法:
硬阴影:对任意一个着色点,计算它的阴影时候。比较shadow map中点和这个点的深度,看是否在阴影里。这种方式某个点的阴影只有0和1两种结果,也就是在阴影里面,或者不在阴影里面。这种方式产生的阴影叫做硬阴影
软阴影: 如果我们需要软阴影,那么我们这个点(某个着色点)需要和shadow map中的一个点比较。同时和shadow map中这个点附近的 7 * 7(除去该点)个点比较深度。那么我们得到了很多49个值(这些值是0或者1) 加权平均,就得到了一个在0~1之间的数值。那么这个值就可以代表阴影有多"软",越接近0,越软,越接近1,越硬。
PCF的效果:
什么时候是软一些,什么时候硬一些
Percentage Closer Soft Shadows (PCSS)**
距离遮挡物越近,阴影越硬,距离遮挡物越远,阴影越软。我们需要计算一个相对的平均的遮挡物和阴影的投射物之间的距离。
下图是光线,遮挡物(Blocker),阴影接收物(Receiver)和阴影的软硬关系。我们用这个计算的结果来确定过滤时候的核多大。PCF算法中 77 还是 33。
算法的核心:
第一步:记录一个shading point的遮挡物的平均深度(计算多大的区域内遮挡物?)
第二步:计算Filter的大小
第三步:PCF算法
找多大的区域?在着色点,连向光源,形成一个椎体,在这个椎体中去找blocker,再去找平均深度。
截图和公式来源闫令琪老师games202课程
感谢闫令琪老师为我们带来这么精彩的图形学课程
https://www.bilibili.com/video/BV1YK4y1T7yY?p=4&spm_id_from=pageDriver
计算机图形学--阴影1--PCSS算法相关推荐
- 计算机图形学E2——OpenGL Bresenham算法画直线
其他计算机图形学实验见 链接 要求 使用Bresemham算法画直线,并且通过鼠标可以实现交互操作 参考代码: 代码1 代码2 代码3(代码好理解) 代码4(讲解很全面) #include<io ...
- 计算机图形学椭圆_椭圆算法| 计算机图形学
计算机图形学椭圆 椭圆的性质 (Properties of ellipse) Ellipse is defined as the locus of a point in a plane which m ...
- 计算机图形学阴影的的分类,计算机图形学8_光照模型与阴影处理_.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > 图形图像 计算机图形学8_光照模型与阴影处理_.pdf5页 本文 ...
- 计算机图形学 Bresenham直线生成算法
bresenham算法是一种光栅化的直线生成算法,是计算机图形学目前使用广泛的直线扫描转换算法,具体逻辑很简单,就是描点.所以bresenham的算法研究实际上是研究目标点的选择. 实验环境: ope ...
- 计算机图形学 之 DDA直线算法(数值微分法)
1. 直线段的扫描转换算法 在数学上,直线就是由无穷多个点组成的, 在计算机屏幕显示的话, 需要做一些处理,对于光栅显示器 光栅显示器上就是用有限多个点去逼近直线, 那么这些有限个点,我们需要知道每一 ...
- 13、计算机图形学——阴影贴图
一.图形学中阴影的产生原理 阴影产生的原因就在于相机能看到的地方而光源无法照射到,所以,基于此,就有了下面的过程 首先从光源的方向放一个相机,进行一次透视投影,但是,只保存透视投影后深度信息 然后,从 ...
- java实现计算机图形学中点画线算法
代码:DrawLine.java: import javax.swing.*; import java.awt.*;public class DrawLine extends JPanel {publ ...
- 计算机图形学——阴影
阴影 投影阴影 我们我们根据点光源和多边形进行相似变换,通过变换矩阵实现,前提是我们只能投影到一个平面上.比如草原上的人的影子,马的影子,只要是影子都投影到草原上可以用到. 阴影体 首先要计算出处于阴 ...
- 计算机图形学 OpenGl-种子填充算法画红黄绿交通灯
一.实验原理 我就不多叙述了,课本上说的已经够多了,其次我自己也是借鉴别人的代码写出来的 二.上机环境 VS2010 三.代码运行效果 四.完整代码 #include <GL/glut.h> ...
最新文章
- 关于GCD多任务处理
- 直接用Win32 API创建对话框Demo
- 还不知道 Redis 分布式锁的背后原理?还不赶快学习一下
- [OS复习]设备管理1
- Check for Palindromes(算法)
- 使用Eclipse连接SAP Netweaver系统遇到的错误消息和解决办法
- Vue之实例的生命周期
- 推荐20款基于 jQuery CSS 的文本效果插件
- MVC中使用KindEditor
- 生成N位的数字英文随机混合的字符串
- 基于Java Swing的进销存管理系统
- 一文带你了解SpringMVC框架的基本使用(上)
- 关于卫星定位,你想知道的一切
- web学习一——We简介、Tomcat、HTTP协议
- Scrum之团队绩效评估
- 滑滑的、嫩嫩的、又一种美观的字体效果做法!
- esp8266学习笔记(5)——连接wifi、AP、UDP通信
- mysql建表语句enum_mysql创建表语句格式
- C语言求任意四边形面积和其关联的三角形面积的关系
- UE4 AndroidSDK配置
热门文章
- C++查缺补漏之异常(续)
- 如何借助psacct或acct工具监视用户活动
- Java毕设项目小区停车场管理系统(java+VUE+Mybatis+Maven+Mysql)
- linux无线wps连接wifi,通过Wi-Fi保护的设置(WPS)设置无线连接在RV系列路由器
- GARP和GVRP的简介
- [USACO12JAN][SPOJ10502][Luogu3041]Video Game Combos
- 已知基点的经纬度,根据方位角和运动距离求另外一点的经纬度
- 阿里云相关-智能接入网关
- 电子管晶体管电视机收音机录音机电路图
- UGUI 多音字项目中用到多音字 奈何拼音字体库并非支持多音字,随便写了小工具类