Questions tagged «shaders»

在图形硬件上运行的计算机程序,可高度控制场景的渲染方式

1
GLSL中的相对论着色器
我正在尝试实现一个GLSL着色器,该着色器有助于理解相对论的洛伦兹变换。 让我们拿两个与轴对齐的惯性观测器 O和O'。观察者O'处于运动中,观察者O具有速度v=(v_x,0,0)。 用O'坐标描述时,事件P' = (x',y',z',ct')已转换坐标(x,y,z,ct)= L (x',y',z',ct') 其中L是一个称为Lorentz变换的4x4矩阵,它可以帮助我们将事件P'的O坐标写入坐标中。 (有关详细信息,请参见http://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x方向) 我已经写下了第一个初步的顶点着色器,该着色器在给定每个顶点速度的情况下应用了Lorentz变换,但是我无法使变换正常工作。 vec3 beta= vec3(0.5,0.0,0.0); float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12; float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost) float q=(g-1.0)/b2; //http://en.wikipedia.org/wiki/Lorentz_transformation#Matrix_forms vec3 tmpVertex = (gl_ModelViewMatrix*gl_Vertex).xyz; float w = gl_Vertex.w; mat4 lorentzTransformation = mat4( 1.0+beta.x*beta.x*q , beta.x*beta.y*q , beta.x*beta.z*q , …


2
高效的骨骼动画
我正在考虑为RTS游戏采用骨骼动画格式(如此处提示)。屏幕上每种模型的单独代表将很小,但会有很多! 在骨骼动画(例如MD5文件)中,每个单独的顶点都可以附加到任意数量的关节上。 在GLSL中进行插值时,如何有效地支持这一点?还是引擎在CPU上做动画? 还是引擎对每个顶点的最大关节数设置了任意限制,并对那些不使用最大数量的关节调用nop乘法? 是否有游戏在类似RTS的设置中使用骨骼动画,从而证明在集成显卡上走骨头路线时我无需担心?

4
是否有着色器目录?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有很多教程可以学习GLSL,Cg,HLSL ...,其中包括经典示例,如凹凸贴图,卡通阴影... 但是,是否存在着色器目录? 我可以共享着色器的网站 按名称,描述和实现搜索着色器
11 web  shaders 

2
可以“切割”所有几何形状的孔的着色器
如何创建“切割”所有几何图形的着色器,仅在Unity中渲染清除背景?一个例子: 那是一个巨大的白色盒子形房间里的棱镜。棱镜的表面只是渲染场景的天空盒(星空)。我使用了多个摄像头,效率很低...必须有一种仅使用着色器的方法。 我怎样才能做到这一点?

1
如何创建基于高度的体积雾?
最近,我一直在寻找在游戏世界的某些Y位置上产生体积雾的技术。但是我发现的全部是使用粒子系统或内置引擎雾产生的雾,这些雾并不能真正满足我的需求。 就我而言,我需要一种既高效又浓的雾。它应该遍及整个游戏世界,但是显然,出于性能方面的考虑,它只能作为相机或着色器的一部分进行渲染,尽管它只是一种幻觉,但看起来就像是在移动。如果可以的话,我可以设置一个粒子系统,将其安装到相机上并使其移动。 因此,主要问题仍然存在-如何实现既浓密又有效的体积雾? 作为我正在使用的特定引擎,它是Unity。 例如,我的意思是,这里是我想要的具有效果的游戏的链接:Astromike
10 unity  shaders  rendering  fog 

2
如何为动态世界实现符号距离场射线行进?
我想我了解“签名距离场射线行进”的基本知识。您使用一堆距离场(例如:http : //iquilezles.org/www/articles/distfunctions/distfunctions.htm)为场景建模,然后对于投射射线的每个像素,从射线的起点开始,找到到该点最近的物体的距离,然后将该点增加最近的距离,直到您碰到东西。我设法制作了一个简单的渲染器,这是该技术的大多数描述都停止的地方。 这使我对如何在实际场景中使用SDF Ray Marching提出了一些疑问: 问题1:在真实游戏中,场景通常很复杂,并加载到CPU上,并带有许多动态对象。我了解基本的遮挡剔除(例如八叉树),并且通过多边形渲染,可以在视锥中创建要渲染的项目列表(在CPU上)。 因此,想象一下我有一个非常复杂的场景,其中许多字符和动态对象在屏幕上移动,并由CPU控制。如何将每帧要渲染的对象流式传输到GPU?每个示例都将场景硬编码为GLSL。有人可以分享动态传输到着色器的级别的示例吗? 问题2:物体如何具有多种颜色?distance函数仅返回一个距离,但是实现通常如何将颜色传回?(例如,您击中了一个红色的球体,而不是一个蓝色的立方体。)如果这是一个CPU实现,那么在终止光线行进器时,我可以在distance函数内部调用一个global函数,这也可以传递被击中对象的纹理/颜色。但是,如何在GLSL中返回商品的颜色或纹理? 谢谢。

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)" …

2
我应该使用多少个OpenGL程序来渲染多个对象?
我的场景中有多个对象。(假设3个立方体,1个圆柱体,8个球体。)我假设我应该为每个立方体创建一个顶点着色器。我应该有几个程序? 备择方案: 每个对象一个程序 一个程序用于所有立方体,另一个程序用于所有球体(假定它们使用相同的着色器) 一个适用于一切的大型程序 正确的方法是什么?

2
折射玻璃着色器
我有一个无限的六边形地板,是通过在镶嵌细分着色器对中镶嵌点网格生成的: 请注意,这是一个扁平的线框-“阴影”是一种照明技巧: 现在,我想使它看起来像是厚的折射玻璃,但是不确定如何进行。 我想到的第一件事是 设置包含所请求的“厚度”块的制服 在计算光照时,请使用斯涅尔定律来计算光线穿过十六进制块的光程长度(如果实际上与“厚度”制服说的一样厚),并求和该长度上的alpha。这样可以提高透明度,但不能处理内部反射/ TIR等问题。 我还没有尝试过,所以我不确定视觉效果如何。 最终,对于这个特定级别,我试图在光盘战役中使用《 Tron:Legacy》中使用的六角形玻璃地板外观。(有关示例,请参见此图像。) 有什么建议吗?
10 shaders  glsl 

3
多重纹理真的只是“使用多个纹理”吗?
这可能看起来很愚蠢,但却使我烦恼。据我了解,多重纹理化每个着色器仅使用一种以上的纹理(通常以某种方式进行混合)。因此,我没有创建2个纹理,而是创建了2个或更多纹理,这很明显! 为什么有一个特殊的术语呢?除了“使用多个纹理”之外,还有更多的功能吗?我想念什么吗?

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

1
引擎渲染管道:使着色器通用
我正在尝试使用OpenGL ES 2.0(目前为iOS)制作2D游戏引擎。我已经在Objective C中编写了Application层,并在C ++中编写了一个独立的RendererGLES20。在渲染器外部不会进行GL特定的调用。运行良好。 但是在使用着色器时,我有一些设计问题。每个着色器都有自己的唯一属性和统一体,需要在主绘制调用之前进行设置(在本例中为glDrawArrays)。例如,为了绘制一些几何图形,我要做: void RendererGLES20::render(Model * model) { // Set a bunch of uniforms glUniformMatrix4fv(.......); // Enable specific attributes, can be many glEnableVertexAttribArray(......); // Set a bunch of vertex attribute pointers: glVertexAttribPointer(positionSlot, 2, GL_FLOAT, GL_FALSE, stride, m->pCoords); // Now actually Draw the geometry glDrawArrays(GL_TRIANGLES, 0, m->vertexCount); // …

2
投射纹理和延迟照明
在上一个问题中,我问是否可以使用延迟照明进行投影纹理化。现在(半年后),我对同一件事的实现有疑问。我正在尝试将这种技术应用于轻型通行证。(我的投影仪不影响反照率)。我有这台投影机查看投影矩阵: Matrix projection = Matrix.CreateOrthographicOffCenter(-halfWidth * Scale, halfWidth * Scale, -halfHeight * Scale, halfHeight * Scale, 1, 100000); Matrix view = Matrix.CreateLookAt(Position, Target, Vector3.Up); 其中halfWidth和halfHeight是纹理的宽度和高度的一半,Position是投影机的位置,target是投影机的目标。这似乎还可以。我正在使用此着色器绘制全屏四边形: float4x4 InvViewProjection; texture2D DepthTexture; texture2D NormalTexture; texture2D ProjectorTexture; float4x4 ProjectorViewProjection; sampler2D depthSampler = sampler_state { texture = <DepthTexture>; minfilter = point; magfilter = point; mipfilter …

1
gl_TexCoord [0]的组件是什么意思?
gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p和之间有什么区别gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z? 我了解gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z像素坐标吗? 但是什么gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p意思,我必须在哪里使用它们?

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.