Unity中Shader的ShadowMapping的原理(阴影)

news/2024/7/24 2:40:10 标签: unity, 游戏引擎

文章目录

  • 前言
  • 一、阴影的作用
    • 1、阴影可以增加真实度
    • 2、阴影可以提升空间感
  • 二、阴影的生成
    • 1、现实中阴影的生成
    • 2、Unity中阴影的生成 ShadowMapping
  • 三、ShadowMapping原理
    • 1、在 光源处添加一个相机,同时打开深度测试 与 写入,并生成ShadowMap(深度图)
    • 2、正常绘制场景,把当前的片段转换到光源空间下,计算得到的深度 与采样ShadowMap中的深度值进行比较,如果大于则表示该片段处于阴影中,反之则不在阴影中
  • 四、Unity中是怎么实现的


前言

Unity中Shader的ShadowMapping的原理(阴影)


一、阴影的作用

在这里插入图片描述

在这里插入图片描述

1、阴影可以增加真实度

2、阴影可以提升空间感


二、阴影的生成

1、现实中阴影的生成

阴影是光线被阻挡的结果
在这里插入图片描述

2、Unity中阴影的生成 ShadowMapping

  • ShadowMapping是一种常用的实时阴影生成方法
  • ShadowMap 是动态生成的阴影纹理图,在需要时对其进行采样来获取阴影的一种技术手段

三、ShadowMapping原理

1、在 光源处添加一个相机,同时打开深度测试 与 写入,并生成ShadowMap(深度图)

2、正常绘制场景,把当前的片段转换到光源空间下,计算得到的深度 与采样ShadowMap中的深度值进行比较,如果大于则表示该片段处于阴影中,反之则不在阴影中

在这里插入图片描述


四、Unity中是怎么实现的

在FrameDebugger中,可以看见 在光线处的摄像机视角下的深度图 ShadowMap
在这里插入图片描述
然后,在计算阴影时,使用的就是这张ShadowMap


http://www.niftyadmin.cn/n/5106915.html

相关文章

『吴秋霖赠书活动 | 第三期』《Python asyncio并发编程》

文章目录 1. 写在前面2. 浅谈asyncio3. Python asyncio并发编程 不再受限于!asyncio异步让你的程序在高并发时翱翔自如! 声明:赠书活动是博主与出版社达成合作,只属于粉丝的专属福利 本期书籍:《Python asyncio并发编程…

Pandas与数据库交互详解

Pandas 是一个强大的数据分析库,可以与各种数据库进行交互,从而可以方便地从数据库中读取数据、分析数据,并将结果写回数据库中。以下是使用 Pandas 与数据库交互的一般步骤: 一 、数据库交互 安装必要的库:首先&…

git仓库中增加子仓库

在 Git 中包含另一个 Git 仓库通常使用 Git 子模块(Git Submodule)来实现。子模块允许你在一个 Git 仓库中包含另一个 Git 仓库,从而在一个仓库中管理多个相关但独立的项目。 以下是如何将一个 Git 仓库包含为另一个 Git 仓库的子模块的步骤…

promise返回值多层嵌套

实际上打印的是promise的res不是api接口返回值 因为用apifox测试开发服务器的代理接口,和不加代理测试返回值相同: http://localhost:3030是vue开发代理。 "D:\code\jeecg\vue\job-app-master\manifest.json" "proxy" : {"/ap…

有湖有仓,如何升级到湖仓一体

很多企业在过去的 IT 基础建设过程中,都已经搭建了数据仓库或数据湖,或者两者都有。其中数据仓库一般使用的是传统 Oracle 或者传统 MPP 数据库,如 Teradata 和 Greenplum,数据湖使用 Hadoop 大数据平台。所以在考虑湖仓一体升级改…

eNSP-OSPF协议其他区域不与骨干区域相连解决方法3

virtual-link技术 AR1 [ar1]int g0/0/0 [ar1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [ar1-GigabitEthernet0/0/0]quit [ar1]ospf [ar1-ospf-1]area 0 [ar1-ospf-1-area-0.0.0.0]net 192.168.1.0 0.0.0.255 [ar1-ospf-1-area-0.0.0.0]quit AR2 [ar2]int g0/0/0 [ar2-Gig…

删除字符串字符,使输出结果不包含回文串

回文串的判定条件:1、相邻两个字符相同;2、当前字符的前后两个字符相同 1、给定一个字符串,删除其中的回文串,使打印的字符串不包含回文字符 def deleteHuiwen(s):tmp ""for i in range(len(s)):if tmp ""…

学会C++之后,为什么学任何语言都会更加容易?

学会C之后,为什么学任何语言都会更加容易? 编程的本质是把自然语言翻译为机器语言,但机器没有联想力,所以它需要编写者事无巨细地告诉它怎么做。最近很多小伙伴找我,说想要一些c语言资料,然后我根据自己从业…