Articles of shaders

我怎样才能使这个着色器背景更有效率?

我想使用着色器作为手机游戏的背景。 我为我的项目使用libgdx。 我从来没有写过glsl,但这是我迄今为止的尝试: http://glslsandbox.com/e#22332.13 在桌面上,代码运行良好,但是在移动设备上,有时可能会有点慢。 我读过使用内置函数减less分支,所以我尝试使用mix和smoothstep而不是if语句。 我也不确定是否正确渲染着色器。 首先我创建一个TextureRegion: fbo = new TextureRegion(new FrameBuffer(Pixmap.Format.RGB888, width, height, false).getColorBufferTexture()); 然后,我创建一个矩形网格,并将着色器渲染为网格上的两个三角形。 设备/窗口分辨率也作为统一数据传递给着色器。 然后我打电话给batch.setShader(background); 最后是batch.draw(fbo,0,0,width,height); 有没有更好的办法,我可以做到这一点? 上面的链接代码: #ifdef GL_ES precision mediump float; #endif uniform float time; uniform vec2 mouse; uniform vec2 resolution; //created 1/15/2015 by alex booth const vec3 sky_top_color = vec3(90.0/255.0, 200.0/255.0, 190.0/255.0); const vec3 sky_bot_color = vec3(235.0/255.0, 235.0/255.0, […]

如何将Maya着色器和渲染器着色器转换为GLSL?

我知道这2个产品,但我从来没有使用过他们的生产,因为我有一堆很酷的着色器,我想在OpenGL下使用它们与GLSL,但我不知道从哪里开始。 如果不能直接转换它们,我可以在哪里学习着色器的Renderman语法?

直通像素着色器不能正确显示

我是新来的着色器,HLSL和XNA一般。 我试图写一个传递像素着色器,但我遇到一些奇怪的行为。 我创建了一个简单的纹理,如下所示: 以下是我在运行游戏时看到的内容: 在spriteBatch.Begin()没有传递effect绘制纹理工作正常,例如: (40,10)而不是(0,0)绘制纹理也给出了不同的结果(绿色条纹不是那么厚): 我的着色器文件: sampler input; float4 PixelShaderFunction(float2 coords: TEXCOORD0) : COLOR0 { float4 color = tex2D(input, coords); return color; } technique Technique1 { pass Pass1 { PixelShader = compile ps_4_0_level_9_1 PixelShaderFunction(); } } 我的游戏代码: public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D tex; Effect effect; public Game1() { […]

通过多个着色器处理(LWJGL / Java / OpenGL)

非常简单的问题:是否有可能通过不同的着色器来处理vbo? 如果是这样,怎么样? 我想要的是这样的: reflectionShader.bind(); //starts shader reflectionShader.load(some_values); //loads uniform vars into shader process(vbo); //"renders" vbo using bound shader reflectionShader.unbind(); //stops shader refractionShader.bind(); refractionShader.load(some_other_values); process(vbo); refractionShader.unbind(); render(vbo); //output to screen

Unity – 在片段着色器中访问svPosition

我试图访问我的片段程序中的svPosition ,但我一直有这个错误。 无效input语义'POSITION':合法索引在[1,15]无效ps_3_0input语义'POSITION' 以下是关于我的整个着色器的一些信息。 struct : float4 pos : SV_POSITION; vertex : o.pos = mul(UNITY_MATRIX_MVP, v.vertex); fragment : col.rgb = i.pos.xyz; 任何想法如何访问此值?

GLSL着色器不编译(Android&LibGDX)和没有可用的日志

我试图得到一个“涟漪” – 工作的OpenGL ES 2.0 +(使用LibGDX)。 然而,我不能得到它编译,由于某种原因ShaderProgram.getLog()返回一个空string,即使该着色器没有编译。 我有100%的信心,顶点着色器是正确的..这里是片段着色器(不是我写的,但我修改了很久很久以前..当我有一个桌面项目 – 它回来了): #version 120 precision mediump float; varying vec2 v_texCoords; uniform float time; uniform float alpha; uniform float waveLengthMultiplier; uniform sampler2D u_texture; void main() { vec2 center = vec2(0.5, 0.5); vec2 tc = v_texCoords.xy; vec2 p = -1.0 + 2.0 * (tc – offset); float len = […]

简单的LWJGL程序不渲染任何东西

当我运行以下基本的LWJGL程序时,由于glClearColor(1, 0, 0, 1) 1,0,0,1),我得到的只是一个红色的屏幕。 除红色背景之外,没有任何东西在屏幕上呈现。 我使用Ubuntu作为我的操作系统。 我该如何解决? 这里是完整的源代码。 Main.java: import org.lwjgl.LWJGLException; import org.lwjgl.opengl.ContextAttribs; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.PixelFormat; public class Main { public static void main(String[] args) { createDisplay(1280, 720); //Initializations… float[] vertex = { -1.5f, 1.5f, 0f, //V0 -1.5f, -1.5f, 0f, //V1 1.5f, -1.5f, 0f, //V2 […]

为什么我的模糊着色器实现产生这个奇怪的结果?

我试图实现这里显示的模糊着色器。 我没有使用简单的2D纹理,而是使用Unity的GrabPassfunction来捕捉飞机背后的东西,使其具有透明效果。 然后我在3D平面上应用这个: struct v2f { float4 pos : SV_POSITION; float4 screenPos : TEXCOORD3; float3 uv; }; v2f vert(appdata_full v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.screenPos = ComputeScreenPos(o.pos); o.uv = UNITY_PROJ_COORD(o.screenPos); return o; } // In the frag part there is the shader blur computation but based on XYZ, with Z = 0 […]

屏幕空间reflection不正确跟踪 – GLSL

过去几天我一直在试图实现屏幕空间的reflection,但是很难find具体的实现说明或指南。 我可以find的主题上的大部分命中都与UE4或Unity相关,或者从GLSL派生的HLSL中的样例实现都使用y和z轴的不同坐标系。 以下我能find什么,我一直在使用以下着色器: #version 430 layout (std430, binding = 2) buffer Camera_Frag { mat4 pMatrix; mat4 InvPMatrix; vec2 ScreenSize; }; uniform sampler2D ViewNormalMap; uniform sampler2D DepthMap; uniform sampler2D LightMap; in vec2 TexCoord; layout (location = 0) out vec4 FragColor; vec2 RayCast(vec3 dir, inout vec3 hitCoord, out float dDepth) { dir *= 0.25f; for(int i = […]

需要帮助将DirectX 9 skybox hlsl着色器转换为DirectX 11

我正在为我的游戏实施一个天空盒。 我一直在关注这个教程http://rbwhitaker.wikidot.com/skyboxes-2 。 我使用MonoGame作为框架,为了支持Windows和Windows 8 metro,我需要使用像素和顶点着色器4来编译着色器。 compile vs_4_0_level_9_1 compile ps_4_0_level_9_1 然而,一些hlsl语法已经被DX10和DX11更新了。 我需要更新这个hlsl代码: float4x4 World; float4x4 View; float4x4 Projection; float3 CameraPosition; Texture SkyBoxTexture; samplerCUBE SkyBoxSampler = sampler_state { texture = <SkyBoxTexture>; magfilter = LINEAR; minfilter = LINEAR; mipfilter = LINEAR; AddressU = Mirror; AddressV = Mirror; }; struct VertexShaderInput { float4 Position : POSITION0; }; struct […]