标签: shader

适用于Android OpenGL ES的Shader

是否可以在Android应用程序中使用顶点或像素着色器?请举例说明如何设置着色器.

shader android opengl-es

15
推荐指数
1
解决办法
2万
查看次数

在像素着色器中实现卷积滤波器的最有效方法是什么?

在像素着色器中实现卷积对于非常大量的纹理提取而言有些代价.

实现卷积滤波器的直接方法是对每个片段进行N×N个查找,每个片段使用两个循环.一个简单的计算表明,使用4x4高斯内核模糊的1024x1024图像需要1024 x 1024 x 4 x 4 = 16M查找.

人们可以做些什么呢?

  1. 可以使用一些需要较少查找的优化吗?我对特定于内核的优化感兴趣,比如Gaussian的优化(或者它们是特定于内核的吗?)
  2. 是否可以通过某种方式利用可以使用的像素的局部性来使这些查找更快?

谢谢!

opengl optimization shader glsl

15
推荐指数
1
解决办法
1万
查看次数

WebGL和HTML着色器类型

我使用以下代码在HTML文件中声明我的GLSL ES着色器程序:

<script id="shader-fs" type="x-shader/x-fragment">..shader-code..</script>
Run Code Online (Sandbox Code Playgroud)

正如在学习WebGL示例中看到的那样.一切正常,但我不明白为什么我应该使用脚本标签的type属性.我想知道指定"x-shader/x-fragment"值的位置.是谁... W3C,Khronos集团或浏览器开发商?有谁能够帮我?Tahnk你.

html shader types glsl webgl

15
推荐指数
2
解决办法
4522
查看次数

如何通过C++代码将统一的struct数组传递给着色器

例如.在FragmentShader中: -

struct LightSource
{
        int Type;
        vec3 Position;
        vec3 Attenuation;
        vec3 Direction;
        vec3 Color;
};

uniform LightSource Light[4];

main(){
        //somecode
}
Run Code Online (Sandbox Code Playgroud)

现在我该如何发送值Light[4].

opengl shader opengl-es

15
推荐指数
1
解决办法
2万
查看次数

为什么我需要在webgl着色器中定义精度值?

我试图让本教程工作,但我遇到了两个问题,其中一个是以下问题.

当我按原样运行代码时,我在片段着色器中得到一个错误:THREE.WebGLShader: gl.getShaderInfoLog() ERROR: 0:2: '' : No precision specified for (float).所以我所做的是为我定义的每个浮点数/向量指定精度varying highp vec3 vNormal.这消除了错误,但我不明白为什么?我找不到任何其他将精度值添加到变量声明的示例.任何人都能解释为什么会这样吗?它与我的浏览器(Chrome 38)有关吗?

shader glsl webgl fragment-shader three.js

15
推荐指数
2
解决办法
1万
查看次数

你如何在着色器中编写z-depth?

此着色器(末尾的代码)使用光线匹配来渲染过程几何:

着色器输出

但是,在图像(上图)中,背景中的立方体应该部分遮挡粉红色的固体; 不是因为这个:

  struct fragmentOutput {
    float4 color : SV_Target;
    float zvalue : SV_Depth;
  };

  fragmentOutput frag(fragmentInput i) {
    fragmentOutput o;
    ...
    o.zvalue = IF(output[1] > 0, 0, 1);
  }
Run Code Online (Sandbox Code Playgroud)

但是,我不能在我的生活中弄清楚如何在这里正确生成深度值,正确地允许光线移动的实体隐藏/不掩盖场景中的其他几何体.

我知道这是可能的,因为这里有一个有效的例子:https://github.com/i-saint/RaymarchingOnUnity5(相关的日语博客http://i-saint.hatenablog.com/)

然而,它是日语,很大程度上没有文档,而且非常复杂.

我正在寻找同样的东西的极简化版本,从中可以构建.

在着色器中我正在使用片段程序行:

float2 output = march_raycast(i.worldpos, i.viewdir, _far, _step);
Run Code Online (Sandbox Code Playgroud)

将四边形上的输入点p映射到需要相机(此着色器附加到其上)的输出浮点2(密度,距离),其中距离是从程序表面上的四边形到"点"的距离.

问题是,如何以任何有用的方式将其映射到深度缓冲区?

完整的着色器在这里,使用它,创建一个球体在0,0,0,大小至少为50的新场景,并为其指定着色器:

Shader "Shaders/Raymarching/BasicMarch" {
  Properties {
    _sun ("Sun", Vector) = (0, 0, 0, 0)
    _far ("Far Depth Value", Float) = 20
    _edgeFuzz ("Edge fuzziness", Range(1, 20)) = 1.0 …
Run Code Online (Sandbox Code Playgroud)

shader unity-game-engine

15
推荐指数
1
解决办法
9481
查看次数

Unity Shader突出显示重叠

我正在尝试为团结编写着色器,以突出网格的重叠片段.它应该适用于一个重叠自身的对象以及多个对象.

结果应该看起来像附加图像.在此输入图像描述

首先,我试图通过碰撞检测来实现这一点,但我认为最好的方法是编写着色器.

我对着色器不太熟悉,所以如果有人能帮助我,我将不胜感激.

我认为它可以通过使用类似http://docs.unity3d.com/Manual/SL-Stencil.html的模板着色器来完成, 但是此着色器仅渲染两个对象的交集而不渲染整个对象.

我还发现基于深度的着色器(https://chrismflynn.wordpress.com/2012/09/06/fun-with-shaders-and-the-depth-buffer/)但这也适用于两个对象而不是在一个自身重叠的网格上工作

关于@Zze评论关于两个Pass的想法我现在有两个着色器.当一个具有一个着色器而另一个具有第二个着色器时,它适用于两个对象.

也许任何人都可以帮助我如何将它组合成一个着色器,它也可以在自身重叠的对象中工作?

ShaderOne

Shader "Custom/ShaderOne"
{
    SubShader {
        Tags { "RenderType"="Opaque" "Queue"="Geometry"}
        Pass {
            Stencil {
                Ref 2
                Comp always
                Pass keep 
                Fail decrWrap 
                ZFail keep
            }

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            struct appdata {
                float4 vertex : POSITION;
            };
            struct v2f {
                float4 pos : SV_POSITION;
            };
            v2f vert(appdata v) {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                return o;
            }
            half4 frag(v2f i) : SV_Target { …
Run Code Online (Sandbox Code Playgroud)

opengl shader unity-game-engine

15
推荐指数
1
解决办法
3545
查看次数

什么是学习着色器程序的最佳工具?

我最近一直在做一些DirectX 10工作,我正在寻求转向DirectX 11和Shader Model 5.0.我过去曾写过一些非常简单的着色器,我正在寻求拓宽视野,开拓更复杂的着色器.我的问题有点多重:

  1. 什么是编程着色器的最佳工具?我只使用了visual studio和SOME FX作曲家 - 阅读:足以打开它并查看它.

  2. gfx卡的品牌是否会影响您可以编程的着色器类型?

    • 我问的原因是,似乎Nvidia有更好的工具,ATI似乎取消了RenderMonkey.我似乎没有看到任何替代品?我错了吗?
  3. 排序与#1相同的问题,但如果您打算编写DirectX着色器而非特定于供应商,是否可以使用跨供应商工具?

    • 如果您需要针对特定​​供应商,Nvidia通常会有更好的工具吗?我现在真的很喜欢ATI,因为它们似乎是最好的降压(我有一块AMD主板) - 但我犹豫不决,因为我主要使用我的gfx卡进行编程.

c++ directx shader directx-10

14
推荐指数
1
解决办法
1619
查看次数

OpenGL ES 2.0 Shader最佳实践

我一直在寻找OpenGL着色器的例子,我看到了一些不同的风格.一些着色器专门使用内置类型(即gl_Vertex)与应用程序代码和着色器之间传输数据.

一些着色器使用变化类型将数据从顶点传输到片段着色器而不是gl_Position和gl_FragColor.

一些着色器使用前缀'in'和'out'来指定数据传输:

in vec3 vertex;

void main() {
    gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

...而其他人使用属性:

attribute vec4 vertex_attrib;
attribute vec4 tex_coord_attrib;
attribute vec4 color_attrib;
uniform mat4 mvp_matrix;
uniform mat4 texture_matrix;
varying vec4 frag_color;
varying vec2 tex_coord;

void main(void)
{
  gl_Position = mvp_matrix * vertex_attrib;
  vec4 transformed_tex_coord = texture_matrix * tex_coord_attrib;
  tex_coord = transformed_tex_coord.st / transformed_tex_coord.q;
  frag_color = color_attrib;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,GLES 2.0中编写着色器的首选方法是什么?有最佳实践指南吗?有人可以提供一个顶点和片段着色器的例子,它是"怎样做"的光辉榜样?

谢谢.

shader opengl-es glsl

14
推荐指数
2
解决办法
2万
查看次数

在QML中绘制虚线和点线贝塞尔曲线

我已经看到在QML有一个Bezier曲线的示例实现,但我正在寻找一个如何实现虚线或点状贝塞尔曲线的提示.据我所知,Bezier曲线示例的作者QSGGeometryNode用于存储内部,QSGGeometryQSGFlatColorMaterial在其上应用了材料.然后,他们只需创建点列表并在它们之间绘制段.

是否有可能写一个shader,并把它应用到QSGFlatColorMaterial(以显示线dashed,dotted等等)?

最终,是否可以存储多个QSGGeometry内部QSGGeometryNode

UPDATE

我想在"纯QtQuick"中实现它- 而不是在"旧"接口(例如QPainter etc)中 - 因为我不想使用切换上下文(openGL和CPU)的东西.我更喜欢使用自定义着色器的解决方案(如果它可行) - 因为我将有更多的可能性来实现自定义外观(虚线,溺爱,彩色,可能是动画等).

如果不可能,我会用QPainter.

c++ opengl shader qt qml

14
推荐指数
1
解决办法
7971
查看次数