Articles of 混合

Unity3D精灵VS网格四边形 – 深度,混合,阴影

我对团结是新的,但对游戏开发并不陌生。 在我的OpenGL ES 2.0(移动)游戏中,我创建了一个包含所有“精灵”的顶点数组,并将其填充到VBO中。 然后按照我需要的方式绘制它们,一次一个,回到前面,开始和closures深度testing和混合,以便构建我的场景。 可能不是超高效的(也许是批量绘图),但我现在的设备上可以达到60fps。 这个特定的场景有一个“纸张”的背景,写在纸上(相同的Z深度),然后在上面的3d对象。 三维物体将阴影投射到纸上。 (如有必要,我可以发布截图。) 为了完成这个任务,我渲染了任何投射阴影的对象的阴影贴图。 然后在纸上用阴影着色器渲染我的场景,而不是在纸上的东西上,然后再回到上面浮动或坐在纸上的3d物体。 现在我正在切换到Unity3D并移植这个工作的游戏。 我有两个问题,我不明白。 作为一个团结的新手,我带入了我的精灵表,并将它们设置为“高级”,但是作为精灵并且使用精灵编辑器进行切片。 但是Sprite渲染器没有用于投射或接收阴影的checkbox。 精灵只用于没有阴影和照明的2D游戏吗? 我必须切换到所有网格四边形,并使用网格渲染器,并手动处理我所有的“精灵”? 在统一论文和所有在同一个Z上的论文中绘制的东西,我有深入的问题。 在我的OpenGL版本中,我做了glDisable(GL_DEPTH_TEST); 并启用混合,绘制“墨水”的东西,然后重新启用深度,并绘制其余的3D场景。 在统一,我不知道如何closures深度或混合工作。 由于墨水必须在纸张上画出来,因此我无法使用不同的相机。

如何在Direct3D中使用16位Alpha通道制作32位渲染目标?

我想创建一个32位渲染目标,每个渲染目标有16位,用于alpha和亮度。 我可以在DirectX SDK中find的最接近的表面格式是: D3DFMT_A8L8 // 16-bit, 8 bits each for alpha and luminance. D3DFMT_G16R16F // 32-bit float, 16 bits for red and 16 bits for green. 但我不认为这些都会工作,因为D3DFMT_A8L8没有精度和D3DFMT_G16R16F没有alpha通道(我需要一个单独的alpha混合状态)。 我怎样才能创建一个渲染目标,允许亮度和alpha的独立混合状态,在每个通道上16位精度,不超过每像素32位?

如何在多个点之间线性混合,偏离默认点?

我有一套3D点,我需要“融合”之间。 可以说,我有点[A,B,C] ,我有我想要混合的数量[0.5, 0.2, 0.8] ,我怎么能混合这些点之间的数额,我需要? 我之前问过这个问题,得到了答案。 但是,当所有的值都是0 ,我需要返回到一个Default点,所以所有的混合必须生效,如果偏离了Default 。 我如何计算这个? 我确定它不仅仅是一个加权重心?

在XNA中使用像素着色器时颜色混合不正确

我使用XNA 4.0来创建一个2D游戏,同时实现一个图层着色像素着色器,我注意到当纹理的alpha值是1或0之间的任何值时,最终结果与预期不同。 调色工作从select一种颜色和设置色调量。 这是通过着色器来实现的,它首先计算起始颜色(对于每个r,g,b和a): float red = texCoord.r * vertexColour.r; 然后最终着色的颜色: output.r = red + (tintColour.r – red) * tintAmount; alpha值没有着色,保留为: output.a = texCoord.a * vertexColour.a; 在下面的链接中的图片显示了不同的背景下的能量球对象,它的外部辉光没有混合,因为我希望。 中间两个是不正确的,因为第二个不着色的人不应该对白色的BG发光,第三个应该是完全不可见的。 混合function是NonPremultiplied。 为什么alpha值会干扰最终的颜色?

我怎样才能在一个特定的位置在一个更大的位图上绘制一个小的位图? (Canvas / SurfaceView)

我正在构建一个游戏,需要为某些位图添加颜色混合。 假设我有4种不同types的对象,每种types都有十种不同的颜色。 如果这些对象重叠,我想在重叠的部分进行叠加混合。 在对这个主题做了一些研究后,我发现了这个关于绘图和添加混合的主题 。 它有很多有用的信息,但它不使用位图。 然后,我发现另一个关于混合来自两个位图的像素的线程,这也是有用的,但是基于相同大小的位图。 所以我解决这个问题的解决scheme是创建四个临时位图,每个对象types/颜色一个,这些位图的大小与设备屏幕大小相同。 我想将每种颜色的所有对象绘制到相关的位图上,所以在一个位图上的所有蓝色对象,在另一个位图上的所有橙色对象,依此类推。 然后,当所有的位图准备就绪时,我将在上面的链接上的四个相同大小的位图上进行叠加混合。 然后在canvas上绘制结果。 我唯一的问题是我不知道如何在较大的位置上正确放置较小的位图。 任何人都可以告诉我如何可以继续这样做?

混合和阴影映射?

我试图实现阴影贴图,目前我有2个点光源和1个全局环境光源,渲染循环看起来大致如下(细节不相关): void OpenGLRenderer::DrawRenderables(const uint32_t windowWidth, const uint32_t windowHeight, const RenderQueue& renderQueue, const RenderableLighting& lighting) { GLCALL(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); for (uint32_t lightIndex = 0; lightIndex < lighting.mUsedLights; lightIndex++) { if (lighting.mLights[lightIndex].mLightType == LightType::LIGHT_TYPE_POINT) { GLCALL(glUseProgram(mShadowMapProgram.mProgramHandle)); GLCALL(glBindFramebuffer(GL_FRAMEBUFFER, mFrameBuffer)); GLCALL(glViewport(0, 0, mShadowTextureWidth, mShadowTextureHeight)); for (uint32_t faceNum = 0; faceNum < CUBEMAP_NUM_FACES; faceNum++) { GLCALL(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceNum, […]

混合问题与帧缓冲区

我试图让一些粒子正常工作 – 它们应该混合在一起,但不能与背景颜色混合。 为此,我正在使用叠加混合,使用premultipled alpha的纹理,并将颜色设置为(r * a,g * a,b * a,0)在我要合成的纹理上。 我使用的混合模式:glBlendFunc(GL11.GL_ONE,GL_ONE_MINUS_SRC_ALPHA); 为了一切。 我发现我想要做的事情可以通过在一个帧缓冲区中渲染和混合这些粒子,然后用标准的alpha混合渲染这个帧缓冲区来实现。 理论上,我认为这应该工作..但是我仍然得到了和以前一样的结果,在背景的明亮区域非常明亮的粒子。 所以我在做的只是:1)像往常一样渲染背景色(r * a,g * a,b * a,a) 2)绑定我的FBO 3)使用GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); GL11.glClearColor(0f,0f,0f,0.0f); 4)渲染所有粒子的颜色为(r * a,g * a,b * a,0) 5)取消绑定fbo,并使用(1,1,1,1)颜色将其渲染到bg顶部。 为什么这不工作?

什么是graphics渲染的“乒乓球”?

我必须渲染一个场景,每个灯光一次,混合各种传球的结果。 我听说过,增加表演和提供目标的一种方法就是乒乓球 。 我是新来的这个上下文。 这对于渲染目标+混合来说意味着什么?

纹理混合修改的algorithm

我正在为我的游戏编写一个地形编辑器(为了logging:没有商业意图),并且在实现了我喜欢的地形变形之后,现在正在处理所述地形的纹理。 一块地形最多可以由4层不同的纹理组成,这些纹理使用4字节的rgba纹理和alpha值混合在一起。 阿尔法值是0-255,一起加起来255,所以在GPU上的混合发生这样的事情: float4 finalColor = color0 * alpha.r + color1 * alpha.g + color2 * alpha.b + color3 * alpha.a; 在第一种方法中,我一直在对混合(伪代码)进行非常简单的修改: selectedLayer.alpha += amount; allOtherLayers.alpha -= (amount / numOtherLayers); 这不是太糟糕了,但它会在块之间产生大量的文物或尖锐的线条。 这是一个示例图像: 现在我正在寻找不同的,更好的algorithm。 画笔目前由一个内半径和一个外半径组成(如图所示)。 在内半径内部,根据到中心的距离不出现内插值,在内部和外部半径之间,内部和0之间的压力产生线性插值。 我希望我的问题很清楚,如果需要更多的信息,请留下评论。 先谢谢你。

Unity使精灵只能看见着色器

我为我的UIbutton做了着色器,精灵应该是黑白的,所以它们可以在混合时用作掩码。 他们应该允许他们背后的图像通过更白的像素,并被黑暗的人挡住。 我想为我的菜单使用这个效果,有一个黑色的背景和一个有色的(如渐变或图案),让有色的只通过button和其他地方的黑色。 我的着色器就是这样做的,但有一个问题。 我无法隐藏相机的彩色背景。 如果我改变它的图层,它是无用的(我猜是因为它是一个canvas的孩子),如果我使用一个普通的精灵(非UI)它只是被相机忽略和button不拿起颜色。 我怎样才能达到这个效果,让精灵在相机中是看不见的,但是button的着色器是可见的。