DirectX Sample-ShadowVolumn阴影技术

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这种阴影技术的思想是创建一个shadowvolumn,shadowvolumn里面的物体产生阴影

shadowvolumn生成方法

对投影物体进行扩展GenerateShadowMesh,生成可以随时拉伸形成shadowvolumn的扩展mesh

渲染过程

渲染环境光照下的场景

对每一个灯光

    通过渲染shadowvolumn填充stencil位

    根据填充的stencil位渲染光照下的场景

问题

为什么生成volumemesh的时候不能有洞

因为渲染阴影过程采用depth-fail stencil技术(图7和图上下的描述文字),要求volumemesh不能有洞

分析

优点:生成一次扩展mesh以后,可以渲染任意灯光的阴影,生成扩展mesh需要cpu计算时间,阴影生成则完全gpu计算

缺点:扩展mesh顶点数最多可能是原始mesh的3倍,如果模型不够精确,边缘显示有问题,因为光照阴影产生是按面法向计算的,正常应该按点法向计算

可能的解决方法:

1.根据需要,背面扩展采用cpu计算

2.shadowvolumn采用不太精确的mesh

3.公用一部分顶点(index没法共用)

4.对于每个灯光不再渲染场景,而是输出一个光照图,最后对所有光照图一起处理(感觉这样更合理一点,如果灯光比较多)

sample中典型数值

mesh采用dwarf.x

原始mesh:                    faces:5270                           &n

[DirectX12学习笔记] 阴影 阴影贴图 阴影贴图简介 要渲染场景的阴影,我们可以在渲染场景之前,先从每个光源出发渲染一遍深度缓冲,记录下被光照射的深度,再正常渲染渲染的时候计算到光源的深度,深度大于记录下来的深度的话,就说明没有被照到,就是在阴影范围内。 下面介绍基础知识,首先是正射投影。正射投影的视锥是一个长方体,所以不会有透视效果,投影矩阵如下 在c++里可以这样获取正射投影矩阵 // Ortho frust... 阅读详情

相关推荐

DirectX9阴影映射实例

阴影映射,DirectX,Shadow,书本源码,很不错,VS下调试通过!

[学习笔记]UnityShader入门精要_第11章_让画面动起来

11.2.1序列帧动画 半透明要关闭深度写入 floor _Time 11.2.2滚动的背景 frac ShadowCaster V2F_SHADOW_CASTER LOD Stencil IgnoreProjector DisableBatching ZWrite 11.3.2广告牌 11.3.3注意事项 12.1建立一个基本的屏幕后处理脚本系统 ...

精密时空设计局 208

DirectX平面阴影

开发工具: Microsoft Visual Studio 2005 Microsoft DirectX 9.0 SDK Update

Directx 9中shadowmap 的解析

1.  ShadowMap原理:    首先准备一张纹理贴图,和一个深度模版。 准备深度模版的作用是为了进行深度测试,使得纹理贴图只用记录每个像素深度最小的值。 1:.将世界坐标系下的顶点转换到光源视点下,再投影,最后渲染一遍场景,得到一张带深度缓冲区的纹理贴图(以纹理贴图为渲染目标),但是纹理贴图中的记录的不是颜色值,而是深度值,由于使用了深度测试模版所以该贴图里得到的深度值是每个

Neversaydie_D的专栏 1359

vue3+threejs新手从零开发卡牌游戏(七):创建卡组

我们使用一个测试卡组来生成卡组里的卡牌,由于卡组是多张卡牌摞在一起,所以我们需要调整每张卡牌的位置高度,同时由于卡牌是盖放,所以我们通过rotateX进行180度翻转

lfYexun的博客 679

Directx11教程三十一之ShadowMap(阴影贴图)之聚光灯光源成影

这节教程我们将介绍一种生成Shadow(阴影)的主流技术,程序结构如下: 读懂此节教程你应该先懂得的技术:   (1)D3D11如何求得DepthBuffer(深度缓存值),D3D11教程二十五之DepthBuffer(深度缓存)                                                                    (2)

qq_29523119的博客 6557

Directx11教程三十一之ShadowMap(阴影贴图)之平行光成影

这一节教程跟 D3D11教程三十一之ShadowMap(阴影贴图)之点光源成影  那节教程差不多,那节教程是关于点光源下利用ShadowMap形成阴影的,这一节教程是关于平行光下利用ShadowMap形成阴影的。先看看这节教程的结构吧:       一,正交投影矩阵(OrthographicMatrix) 据我们所知在当顶点处于相机空间时,接下来使用的投影矩阵有两种:透视投影矩阵(P...

qq_29523119的博客 5755

平面阴影技术 DirectX例子 图形学2

平面阴影虽然不能满足所有的阴影要求,但是如果是相对简单的场景的话,用平面阴影也是个不错的选择,它的优点是速度快,并不需占用多少运算时间。 步骤如下: 1. 定位需要渲染阴影的物体,和阴影所在平面 2. 计算出平面上阴影的物体定点,定义一定透明度,如50%透明度 3. 渲染 一、首先解决问题是如何计算 方法就是利用向量代数和空间解析几何的知识,知道了光照的方向向量,物体定点,和平面位置,...

架构设计 276

DirectX 三维场景+聚光灯+阴影贴图

由于本人在学习过程中,苦于没有找到一个比较完整的dx相关例子,虽然其中也借鉴了网上各方大佬们的教程,但是学起来很慢,现在总算是完成了一个简单的实现版本,特意分享出来给大家学习。 内有部分代码注释,至于代码布局…..希望大家别介意 Vs 打开记得更换项目的DirectX SDK路径

ShadowMeshProxyPlugin:烘焙代理网格处理实时阴影,解决阴影drawcall太多的问题

ShadowMeshProxyPlugin

unity shadow mesh

用raycast.hit 计算shadow。适合用于puzzle game。

C# DirectX阴影效果

这个是用DirectX做的阴影效果,是从一位C++的源代码翻译过来的,非常不错。 我翻译的也比较辛苦呵呵。 原来的代码的主人是来自这里的吧。是C++做的。 http://www.pudn.com/downloads219/sourcecode/windows/directx/detail1029393.html

directx写的阴影例子源码

directx写的阴影例子源码,带汇编,带.x模型文件,极好的3d参考源码

DirectX光影详解

使用DirectX进行光影渲染,阴影贴图与漫反射计算结合.

专注图形三十年 2999

Directx11进阶教程之CascadeShadowMap(层级阴影)(上)

好久没写博客了,紧接着前面的博客,不过这次读取纹理的借口换为了DXUT框架里面的接口。 程序结构 如果没有学会ShadowMap,PCF软阴影原理的建议回去回顾下面几个教程: Directx11教程三十一之ShadowMap(阴影贴图)之聚光灯光源成影 Directx11教程三十三之Soft Shadows—PCF(Percent closer Filter) Directx11教程三十...

qq_29523119的博客 3878

体积阴影(Shadow Volumes)生成算法

我是3D初心者:) 不是技术百科全书,在blog上想说什么就说什么:) 下面以最快的速度简单谈谈阴影生成技术,目前普遍采用的一般有三种:Planar Shadow、Shadow Mapping和Shadow Volume,前者类似投影,计算最简单,缺点只能绘制抛射在平面上的阴影;Shadow mapping利用站在光源处所沿光源法线看去所生成的深度图来检测场景中的体象素是否处于阴影中,缺点是光源与...

weixin_34368949的博客 669

DirectX阴影矩阵的推导过程

DirectX龙书中给出了点光源和平行光源的投影矩阵,也就是从某个光源上的物体------>光源与平面的交点的变换矩阵。 书上给出了从物体上的点P投影到平面上的点S的变换公式以及变换矩阵, 但是没有给出这个矩阵的推导过程,并且说明了可以在网上找到这个过程, 出于好奇心和试试看的想法,本人就试着推导了一下这个公式(以平行光源为例)。 先说明一下平行光源:1.书中的平行光的图片

u010915593的专栏 1455

windows程序中生成崩溃转储文件(.dmp)

提供给用户使用的程序如果崩溃,如果能生成相应的转储文件,那么很容易定位出错原因 对于自己编写的win32程序,可以如下编写 __try { 逻辑代码 ... } __exception(ExceptionHandler(GetExceptionInformation())) { //log info //::ExitProcess(); } ExceptionHandler

buck84的专栏 6386
上一篇: DirectX Sample-Shadow Map阴影原理
下一篇: DirectX Sample-PIXGameDebugging:采用PIX调试程序
buck
博客等级 码龄14年 185粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值