Questions tagged «lighting»

模拟游戏中的灯光和照明,包括其与环境的交互作用。游戏的核心元素,可以将活力带入其他静态世界。


2
如何在体素引擎中实现照明?
我正在创建类似于地形引擎的MC,我曾想过照明会使其看起来更好,但问题是当放置发光块时,这些块未正确照明(请参见底部的屏幕截图)在页面上。 到目前为止,我想实现我的世界的“块状”照明。所以我创建了一个VertexFormat: struct VertexPositionTextureLight { Vector3 position; Vector2 textureCoordinates; float light; public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration ( new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), new VertexElement(sizeof(float) * 3, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0), new VertexElement(sizeof(float) * 5, VertexElementFormat.Single, VertexElementUsage.TextureCoordinate, 1) ); public VertexPositionTextureLight(Vector3 position, Vector3 normal, Vector2 textureCoordinate, float light) { …
15 c#  xna  lighting  raycasting 

1
高斯模糊是柔和阴影边缘的相当准确的表示吗?
我不确定现实生活中的柔和阴影(来自封闭的大型光源)是否具有高斯或线性衰减,或其他原因。 我正在做一些可以通过操纵某种预渲染的渐变纹理来创建阴影的事情,因此我不必依靠帧缓冲区和传统的阴影技术。我计划将渐变烘焙到网格纹理的一个通道中,然后根据每个四边形覆盖多少阴影来操纵值。这是可能的,因为我只是像锯齿一样排列了四边形,其中每个峰都可以将阴影投射到下一个相邻的四边形上。 因此,线性衰减将是最简单的(只需要从线性梯度中减去一些值即可),但是我很难说出实际看起来是真实的。是否有一个简单的数学公式可以应用于线性梯度以得出高斯近似值?

1
什么是斜坡着色或照明?
什么是匝道阴影或照明,它如何工作?它与卡通着色是不同的还是相同的概念?渐变阴影与blinn-phong或lambert的镜面反射度如何计算不同?
14 shaders  lighting 

4
如何在Minecraft风格的游戏中实现具有遮挡的基于体素的照明?
我正在使用C#和XNA。我当前的照明算法是一种递归方法。但是,这样做很昂贵,以至于每5秒计算一个8x128x8块。 还有其他照明方法会产生可变暗度阴影吗? 还是递归方法好,也许我只是做错了? 似乎递归的东西从根本上来说是昂贵的(每个块被迫遍历约25k块)。我当时正在考虑使用一种类似于光线跟踪的方法,但是我不知道这将如何工作。我尝试的另一件事是将光源存储在一个列表中,并为每个块获取到每个光源的距离,并使用该光源将其照亮到正确的水平,但随后照明将穿过墙壁。 我当前的递归代码如下。在清除并重新添加阳光和手电筒之后,从不具有零光照水平的块中的任何位置调用此方法。 world.get___at是一个可以在该块之外获取块的函数(该块位于块类内部)。Location是我自己的结构,类似于Vector3,但是使用整数而不是浮点值。light[,,]是该块的光照图。 private void recursiveLight(int x, int y, int z, byte lightLevel) { Location loc = new Location(x + chunkx * 8, y, z + chunky * 8); if (world.getBlockAt(loc).BlockData.isSolid) return; lightLevel--; if (world.getLightAt(loc) >= lightLevel || lightLevel <= 0) return; if (y < 0 || …

3
试图了解Opengl上的光线,如何模拟逼真的阳光?
我不知道我做错了什么还是错过了什么,但我想模拟阳光,例如在晴天。 当物体面对定向光时,它的光线很好,那里没有问题。如果我绕过该物体并回头看,那是黑暗的。并不是因为我正在使用GL_AMBIENT而太暗,但对于晴天来说仍然太暗了。如果增加该值,它将永远看起来不会更好,因为物体面向光的一侧会太亮。 而且,环境光还有一个烦人的问题,当看着物体的背面时,我看不到任何形状,只有纯色。很难解释,下面是一些图片: 对象前:http : //i.stack.imgur.com/YW53X.png对象前:http : //i.stack.imgur.com/Qufha.png 如您所见,正面看起来很漂亮,可以看到红色的形状。在背面,很简单,看不到相同的形状。 现在,我知道我正在看物体的背面,并且我朝光的方向看,它应该比正面暗。但是它不应该看起来像这样简单。这不是我们在阳光下看着某个物体时看到的,我们看到这些物体形成了某种形状。 如何在OpenGL上具有相同(或相似)的效果? 我的灯光当前定义如下: float posLight0[4] = {-1.0f, 1.0f, 1.0f, 0.0f}; float ambLight0[4] = {0.5f, 0.5f, 0.5f, 0.5f}; glLightfv(GL_LIGHT0, GL_POSITION, posLight0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambLight0);
13 opengl  lighting 


1
如何创建多个2D聚光灯?
我正在寻找创建2D“聚光灯”效果,以允许在多个实体上聚光灯。即,好像几个精灵在握火炬。对于单个实体(一个聚光灯),我使用一种技术,其中叠加了渐变精灵,并使中心点追逐该实体。该技术对于单个聚光灯效果很好。这是一个截图,以说明我在说什么: 单一焦点-作品 我遇到的问题是该技术无法扩展到多个实体。如果叠加另一个聚光灯图像,则会遇到几个问题。这是一个模拟的屏幕截图: 多个聚光灯=问题 最明显的问题是可见的角。可以通过使聚光灯图像巨大地覆盖整个级别来解决此问题,但这并不正确。第二个也是更棘手的问题是,我正在用这种技术有效地增加黑暗度。因此,添加的每个精灵都会使其他所有人变暗。显然我正在错误地解决此问题。 有任何想法吗? 不断的努力 评论中已经有一些关于混合选项的讨论。这是我目前的想法。在上面的单个Spotlight示例中,我使用了一个看起来像这样的图像文件:(为了更易于说明,我将透明色替换为绿色) 如上所述,问题在于该图像与另一图像的Alpha混合不会产生所需的效果。相反,它将产生以下内容: 作为混合选项问题,这并不令我震惊。在我看来,问题在于这种图像具有透明遮罩和应隔离的图像(黑色正方形)。 因此,我应该使用在运行时针对黑色正方形使用的透明蒙版,而不是内置了切出的透明蒙版的黑色图像。这样做时,我仍然无法使用传统的白色和黑色透明蒙版,否则会遇到相同的问题。这是一个示例,这次白色和黑色代表白色和黑色: 看来,解决方案将是应用本身利用透明度的透明蒙版。像这样:(绿色=透明) 这样,可以将多个透明蒙版混合在一起,然后将其用作黑色正方形的透明蒙版。这是两个Alpha混合在一起的透明蒙版的示例: 无论如何,这就是我正在努力实现的方法。如果可行,我将发布结果。我目前不知道的是我是否可以使用本身具有透明度的透明蒙版。
12 2d  sprites  camera  lighting 


2
PBR和SSR有什么区别?
我对游戏开发非常陌生,我一直试图了解屏幕空间反射和基于物理的渲染之间的区别。 我已经读过有关PBR的知识,据我了解,它试图模仿光在现实生活中的反射方式,这通常是根据材料的类型将其分为两个部分,镜面反射和散射。 至于SSR,如果我错了,请纠正我,这是表面反射的样子。 如果我对SSR的理解是正确的,那么它们是否在某种程度上是相同的?我的意思是,反射在表面上的外观是否取决于表面粗糙度等,这将影响镜面反射的光量和扩散反射的光量。再次,请在我错的任何地方纠正我。

1
如何在多层2d tilemap中实现光影?
我正在从头开始编写等距游戏,我想知道如何/是否可以添加灯光和阴影。 我到目前为止的代码可以在这里找到,但它应该是不够了解,现在,地图是真/假值的简单3D阵列。这是环境的快照: 如果是单层tilemap,那将是直接的。我可以理解所需的2d中简单的光线投射。 但是,考虑到我的地图具有多个高度级别以及类似洞穴的区域,我真的不知道该如何为它创建令人信服的阴影。也许逐块解决方案是唯一现实的方法?

3
如何在基于块的2D游戏中实现遮挡照明?
我想要2D照明可以被游戏中的物体阻挡。我的游戏具有自顶向下的视图,所有游戏对象均由矩形描述。 假设我有一个10x10的世界,我在1x1处放置了一个灯光,并在该灯光周围放置了墙壁。我希望能够看到1x1的光源,但看不到其他任何地方,因为它被墙壁挡住了。 我听说过投射光线有效,但实际上如何运作?

1
如何获得中途变色的光?
我想到创建光源和一些彩色窗口。现在,窗户是半透明的。我怎样才能做到,当光线(例如纯白色)射到玻璃上并继续穿过玻璃时,却将颜色更改为与通过的玻璃相同的颜色? 我知道这里描述的效果可以通过在窗口“彩色”侧使用区域灯来伪造,但是如果我只想拥有一个白点灯怎么办?
11 opengl  lighting  color 

2
由于libGDX中不推荐使用Table.drawDebug,因此应该使用什么呢?
我正在按照“学习LibGDX游戏开发”一书来制作一个简单的游戏。我在菜单创建部分中,在其中创建一个舞台并使用调试边框对其进行渲染。 这本书说要使用,Table.drawDebug(stage)但是这个静态方法似乎已经从框架Table类中完全删除了。 我正在进口com.badlogic.gdx.scenes.scene2d.ui.Table; 下面是我的代码: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } 最后一行,Table.drawDebug(stage);有编译错误"The method drawDebug(ShapeRenderer) in the type Table is not applicable for the arguments (Stage)" …

1
多灯快速照明
如何实现多灯快速照明? 我不想束缚玩家,他可以放置无限数量,并且可以在关卡中重叠(点)灯。 问题在于,包含动态循环(用于计算光照)所必需的着色器往往非常慢。 我的想法是,如果有可能在编译时编译一个着色器n次,其中n是光照数量。如果在编译时知道数字n,则可以自动展开循环。是否可以仅使用不同数量的灯光来生成同一着色器的n个版本? 然后,在运行时,我可以决定将哪个着色器用于关卡的哪个部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.