Articles of 阴影

无限的地形阴影

我正在创造一个无限的地形引擎,它会产生分形或噪音的地形。 如果事先不知道在太阳前会呈现什么,我怎么能在这个地形上为太阳制造dynamic的阴影。 我的地形:太阳是唯一的光,它是定向的,我的地形是在一个位于相机之前的飞机上产生的,平截头体被剔除并且适合于观看平截头体的大小。 它是用生成的噪声纹理进行高度映射的,并在其上使用曲面细分着色器。 video: http : //www.youtube.com/watch?v = tk6yFwYusOsdynamic阴影与无限的地形。

以照相机眼睛为中心定向光线阴影

我正在使用这个视图和投影来绘制我的方向光影 XMFLOAT3 dir((float)pitch, (float)yaw, (float)roll); XMFLOAT3 center(0.0f, 0.0f, 0.0f); XMVECTOR lightDir = XMLoadFloat3(&dir); XMVECTOR lightPos = radius * lightDir; XMVECTOR targetPos = XMLoadFloat3(&center); XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f); XMMATRIX V = XMMatrixLookAtLH(lightPos, targetPos, up); // This is the view // Transform bounding sphere to light space. XMFLOAT3 sphereCenterLS; XMStoreFloat3(&sphereCenterLS, XMVector3TransformCoord(targetPos, V)); // Ortho […]

深度地图分辨率转移

问题是你可以看到阴影映射, 实际上它工作正常,但是在一定的条件下,深度图大小必须等于渲染缓冲区的大小,我使用无限定向光 所以如果窗口是800×600深度图必须是800×600,当我改变阴影地图的大小为900×600它开始被移动,当它的大小为1024×1024时,它也移动,直到它消失 GLSL阴影function float calcShadow(sampler2D Dmap, vec4 coor){ vec4 sh = vec4((coor.xyz/coor.w),1); sh.z *= 0.9; return step(sh.z,texture2D(Dmap,sh.xy).r); } 这是与窗口大小相同的结果 彩色的结果和深度图 这里是移位的结果,因为您可以注意到深度图与前一个一样正确,并在右侧添加了空格。 彩色结果http://goo.gl/5lYIFV 深度图http://goo.gl/7320Dd

如何为整个地图的阴影定义一个视野?

我最近在我的XNA游戏中添加了“阴影贴图”来包含阴影。 我遵循“Riemers”中的优秀教程: http ://www.riemers.net/eng/Tutorials/XNA/Csharp/Series3/Shadow_map.php。 这个代码工作很好,我可以看到我的光影的来源。 但问题是我的光源与我创建的视野不匹配。 我想让灯光覆盖整个我的游戏地图。 我不知道为什么,但光线只影响我地图的2-3个立方体。 ScreenShot :(光的发射只能照亮2-3个方块而不是完整的地图) 这里是我的代码,我为LightviewProjectionmatrix创建fieldOfView: Vector3 lightDir = new Vector3(10, 52, 10); Vector3 lightPos = new Vector3(2, 52, 2); Matrix lightsView = Matrix.CreateLookAt(lightPos, lightDir ,new Vector3(0, 1, 0)); Matrix lightsProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver2, 1f, 20f, 1000f); lightsViewProjectionMatrix = lightsView * lightsProjection; 正如你所看到的,我的nearPlane和FarPlane设置为20f和100f。 所以我不知道为什么光在2立方之后停下来。 它应该更大 这是在着色器文件中为我的自定义效果HLSL设置的值 /* SHADOW VALUE */ effectWorld.Parameters["LightDirection"].SetValue(lightDir); […]

select哪个方向灯遮蔽哪个对象

假设你有两个指向不同角度的一个球体的方向灯。 你会期望球体投下两个阴影,但事实certificate,这不是默认的行为。 现场第一盏灯是唯一投下阴影的灯。 我希望我所有的黄色球体都能从光线A上获得阴影,但是我希望我所有的蓝色球体都能从光线B而不是A上获得阴影。有没有办法做到这一点? (看起来有一个完整的前景阴影,可以使球体投下两个阴影,如果需要的话,我会尽量弄明白,但是我真的只需要每个球体一个阴影。)

统一:正交相机和阴影

当使用正视相机时,阴影看起来质量很差。 我怎样才能显示光滑的阴影?

着色器投射阴影,不会收到阴影,也不会渲染任何纹理/模型?

一个奇怪的位,但我在这种情况下,我需要着色器本质上没有渲染和投下阴影! 我发现这虽然有一些谷歌search,但可悲的投下阴影本身是不可取的。

如何使用Monogame和HLSL写入16位深度缓冲区?

我正在研究阴影映射。 部分实现涉及以建议的16位深度将3D模型绘制到深度缓冲区。 为此,我首先创建一个渲染目标如下: new RenderTarget2D(graphicsDevice, width, height, false, SurfaceFormat.HalfSingle, DepthFormat.Depth16) 我的HLSL着色器如下所示。 #define VShaderModel vs_4_0_level_9_1 #define PShaderModel ps_4_0_level_9_1 matrix World; matrix LightProjection; struct MapVOutput { float4 Position : SV_Position; float Depth : Depth; }; MapVOutput MapVShader(in float4 position : SV_Position) { MapVOutput output; output.Position = mul(position, mul(World, LightProjection)); output.Depth = output.Position; return output; } float MapPShader(MapVOutput […]

阴影贴图边缘闪烁

我正在尝试为游戏实现一个简单的低分辨率阴影贴图系统。 我已经设法解决了我的大部分问题,但我无法解决这个问题。 问题是阴影边缘的“闪烁” 我的阴影贴图的大小是静态的。 我的光(太阳)如你所愿地移动。 相机(眼睛)也随着玩家移动。 阴影视图和投影是根据用户可以看到的每个帧dynamic计算的。 我已经做了一些阅读,我想我需要根据阴影贴图的大小将我的眼睛和太阳位置四舍五入到一些值。 但是由于我的知识缺陷,或者因为我使用的是非常不同的实现方式,所以我不能完全理解我发现的任何示例。 我应该修理我的太阳位置吗? 或我的眼睛位置? 或两者? 我的阴影贴图着色器代码只包含一个vector着色器 Position : SV_POSITION … Position * WorldViewProjection 我的“颜色”着色器很复杂,但阴影位很简单 shadowMap.SampleCmpLevelZero(samShadow,shadowPosH.xy + offsetsets [i],depth).r; 哪里“我”是一个平滑的循环,让我抽样9个区域。 轻视图是 XMMatrixLookAtLH((DirectionalLight.Direction * -1.0f), SCENE_CENTER, SCENE_UP); 光投射是 //Calculate extents of visible items (World space) auto MinimumX = 10000.0f; auto MaximumX = -10000.0f; auto MinimumY = 10000.0f; auto MaximumY = […]

如何将三角形信息放入glsl着色器中进行dynamic阴影处理?

我正在尝试用多less巧妙的优化和正确的硬件使用来推动GPU,所以我知道这可能会滞后我的电脑,这不是问题。 目前我的目标如下: 定义一个包含浮点数的可变大小结构(即一个数组),每三个浮点数定义一个位置向量,每9个定义一个三角形。 我需要创建一个这些结构数组(当前加载的所有阴影投射对象的数组),并将数组传递给GPU(glsl着色器)。 如果我将这些数据转化为这种格式,我可以使用散列法来获得阴影投射三角形的分期恒定search时间, 问题是将数据转换成我需要的格式。 如果这是C ++的格式将是一个向量的数组,我们完成,但GLSL不善于管理内存,有人知道一种方式来传递我所描述的时尚信息,或者我想做的事情那不能做?