Questions tagged «shaders»

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

5
在纸牌游戏中,我将使用什么渲染技术为纸牌绘制阴影效果?
什么样的阴影算法可以用来创建像这样的阴影? 我正在制作的是类似的东西,但是都由OpenGL驱动的2D绘图API完成,因此没有Z坐标。 另外,对于手本身,我真的很想得到一种阴影效果,如下所示: 我只是不确定如何获得接近它的阴影外观。 卡的数量一定会发生变化,并且卡会扔到桌子上,所以我不能使用任何类型的光照图。 我应该研究哪种算法(除了模糊,我知道需要做些什么?) 谢谢 更新资料 我正在制作2D纸牌游戏。我想从卡上添加阴影阴影偏移,有点像: 我正在考虑的方式是: 保留与后缓冲大小相同的纹理。 绘制黑色矩形作为该纹理的临时卡片。 模糊该纹理。 用这种纹理画我的卡片。 对卡进行其他照明。 将此纹理绘制到后缓冲区。 我的问题是: 这是正确的方法吗? 有没有一种方法可以在不渲染纹理的情况下(保持位图 与后缓冲区一样大)? 是否可以安全地假定后 缓冲区大小不会超过最大纹理大小?(我的意思是,如果后缓冲区 为2000x3000,那么可以说我可以在 该大小的视频内存中创建纹理了吗? 谢谢

2
DirectX11,如何管理和更新多个着色器常量缓冲区?
好吧,我很难理解常量缓冲区如何绑定到流水线阶段并进行更新。我知道DirectX11每阶段最多可以有15个着色器常量缓冲区,每个缓冲区最多可以容纳4096个常量。但是,我不明白用于与常量缓冲区交互的ID3D11Buffer COM是否只是用于填充这些缓冲区插槽的机制(或句柄),还是该对象是否实际引用了来回推送的缓冲区数据的特定实例?在GPU和CPU之间。 我认为我对该主题的困惑是导致我使用两个不同的常量缓冲区的问题的原因。 这是一些示例着色器代码。 cbuffer PerFrame : register(b0) { float4x4 view; }; cbuffer PerObject : register(b1) { float4x4 scale; float4x4 rotation; float4x4 translation; }; 我的代码的组织方式,相机将处理更新相关的每帧数据,而GameObjects将更新其自己的每对象数据。这两个类都有自己的ID3D11Buffer来执行此操作(使用集线器体系结构,因此一个GameObject类将处理世界上所有实例GameObject的呈现)。 问题是我一次只能更新一个,具体取决于插槽,并且我假设一个缓冲区被填充,而另一个缓冲区被填充为零的更新顺序。 这本质上是我的代码。这两个类使用相同的更新逻辑。 static PerObjectShaderBuffer _updatedBuffer; // PerFrameShaderBuffer if Camera class _updatedBuffer.scale = _rScale; _updatedBuffer.rotation = _rRotation; _updatedBuffer.translation = _rTranslation; pDeviceContext->UpdateSubresource(pShaderBuffer, 0 , 0, &_updatedBuffer, 0, …

4
OpenGL多通道着色器如何工作?
在Direct3D中,多通道着色器易于使用,因为您可以从字面上定义程序中的通道。在OpenGL中,这似乎有点复杂,因为可以为着色器程序提供所需的任意数量的顶点,几何和片段着色器。 多遍着色器的流行示例是卡通着色器。一遍会产生实际的阴影效果,另一遍会创建轮廓。如果我有两个顶点着色器“ cel.vert”和“ outline.vert”,以及两个片段着色器“ cel.frag”和“ outline.frag”(类似于在HLSL中的处理方式),结合起来创建完整的卡通着色器? 我不想让您说可以使用几何着色器,因为我只想了解多通道GLSL着色器背后的理论;)
13 opengl  shaders  glsl 

1
通过Alpha混合精灵查看着色器的轮廓
我想在Unity中实现类似于以下示例中的透视效果: 在我的特定情况下,有两个要求: 子画面使用Alpha混合,并且子画面具有透明区域。 遮挡字符有2种元素。一个应创建轮廓效果,而另一个应具有正常的行为。 对于遮挡创建轮廓的元素,我启用了ZWrite,并为没有轮廓的元素禁用了它。 对于角色,我尝试将着色器的队列设置为transparent + 1,并添加了此步骤: Pass { ZTest Greater Lighting Off Color [_Color] } 效果部分起作用: 轮廓绘制在整个角色上,甚至透明的部分。透明的部分不应创建轮廓。 当角色在精灵后面时,即使该精灵的那部分是透明的,也会创建轮廓。在精灵的透明部分后面不应创建轮廓。 角色出现在其余元素的前面,即使它位于它们的后面。我猜这是因为将队列设置为“透明+1”。但是,如果我将其保留为“透明”,则会以正确的顺序绘制角色,但永远不会看到轮廓。 我尝试遵循某人给我的这些提示,但无法使其正常工作: 1)保留渲染精灵的过程。 2)添加一个写入z缓冲区的通道,但是具有一个着色器,该着色器使用clip()丢弃基于alpha的像素。如果不使用MSAA和alpha-to coverage,则不能使用z缓冲区进行软性z测试。这样的质量不会很好,但是这是您可以做到的最好的。更快的替代方法是图案或噪声抖动,或者,如果您的精灵都具有相当尖锐的边缘,则可以使用老式的阈值。 3)向使用z测试绘制遮挡颜色的可遮挡对象添加第三遍,并确保将其绘制为最终遍。 我是着色器的新手,尤其是在Unity中,我只是想不出如何使其正常工作。

2
罗夏墨迹(又名心理学测试图片)着色器
(来源:bonnefil.com) 我希望这种华丽的图案出现在我的游戏中。到目前为止,我已经知道了... 画出一侧,然后左右两次渲染。 如何在一侧渲染此图案?嗯... 我需要帮助。 我需要一些关于编写着色器的见解。 如果您认为不是着色器拟合任务,那么请告诉我,希望有替代解决方案! 但是,我认为没有gpu不可能实现这一目标。(除非您建议存储一堆准备好的rorscach pic图片)

4
Unity 5的玻璃材料
有人知道如何在Unity 5中制作玻璃材料吗? 我可以做金属和图像纹理,但不确定如何创建玻璃材料。 在Google上进行搜索不会为我带来Unity 5的任何好处,因此它必须非常容易做到。 用于淋浴门和平面玻璃,如下所示:

2
如何使用GLSL创建高效的Bloom Shader?
我已经在网上搜索了与使用GLSL渲染光晕效果相关的资源,但没有发现任何东西。尽管Philip Rideout网站上的教程不错,但在我的Nvidia GPU上却表现不佳。 谁能指导我如何解决这个问题,并建立相当有效的布隆效应实现方法?
12 shaders  glsl  bloom 

3
HLSL半透明塑料着色器
我正在尝试制作一个着色器,以复制内部带有彩色光的白色塑料对象。通过具有半透明的着色器,或者如果将光放入对象内部,则该光将显示出来,或者通过具有伪装内部光效果的着色器来实现。 我想要的效果有点像光穿过类似于这些图片的灯罩: 理想情况下,我将能够控制光的强度和颜色,使其发出脉冲并通过一些漂亮的明亮荧光色旋转 虽然我不确定从哪里开始! 我的问题是,是否有人知道我应该研究的技术才能产生这样的着色器,或者有一个我可以用作起点的相同/相似着色器的示例?甚至即使您想提供可以完成此任务的着色器
12 graphics  shaders  hlsl 

3
如何使自然的雨滴落在屏幕上?
我试图通过金属球和屏幕上的雨痕使雨滴效果下降。我在阴影中找到了线索,但我不知道如何实现: https://www.shadertoy.com/view/ltffzl 不幸的是,它有很多数学计算,我不能统一使用它,因为它会产生滞后。显然我应该使用纹理,但是如何产生拖尾效果呢?! 我的想法是使用纹理和尾迹渲染器进行拖放,但是如何产生元弹效果? 更新资料 我可以通过本文实现Metaballs https://github.com/smkplus/RainFX/tree/master 但我还不知道线索


1
如何使用GLSL片段着色器实现这种波动?
所以我已经实现了反射部分: uniform sampler2D texture; uniform vec2 resolution; uniform vec3 overlayColor; void main() { vec2 uv = gl_FragCoord.xy / resolution.xy; if (uv.y > 0.3)// is air - no reflection or effect { gl_FragColor = texture2D(texture, vec2(uv.x, uv.y)); } else { // Compute the mirror effect. vec4 color = texture2D(texture, vec2(uv.x, 0.6 …

1
在基于图的材料系统中,如何支持各种输入和输出类型?
我想换我的头周围怎么样材料系统这样,这个实现。这些功能强大且用户友好的,类似于图形的系统作为允许程序员和非程序员都可以快速创建着色器的方法,似乎相对普遍。但是,从我相对有限的图形编程经验来看,我不太确定它们是如何工作的。 背景: 因此,当我之前对简单的 OpenGL渲染系统进行编程时,通常会创建一个Material类,该类从我手动创建的静态GLSL文件中加载,编译和链接着色器。我通常还将此类创建为访问GLSL统一变量的简单包装。举一个简单的例子,假设我有一个基本的顶点着色器和片段着色器,并带有一个额外的均匀Texture2D用于传递纹理。我的Material类将简单地将这两个着色器加载并编译到材质中,从那时起,它将公开一个简单的接口来读取/写入该着色器的Texture2D制服。 为了使该系统更具灵活性,我通常以一种允许我尝试传递任何名称/类型的制服的方式编写它(即:SetUniform_Vec4(“ AmbientColor”,colorVec4); 如果材质中存在均匀的AmbientColor统一矢量,该矢量将被称为“ colorVec4”。 class Material { private: int shaderID; string vertShaderPath; string fragSahderPath; void loadShaderFiles(); //load shaders from files at internal paths. void buildMaterial(); //link, compile, buffer with OpenGL, etc. public: void SetGenericUniform( string uniformName, int param ); void SetGenericUniform( string uniformName, float param ); …


1
如何分别描述顶点着色器和片段着色器的速度?
我想知道如何检查顶点或片段着色器是渲染管道中的瓶颈。 我已经读过glQueryCounter与GL_TIMESTAMP目标一起使用以获取OpenGL命令之间的时钟检查点的信息,但是这些不能区分不同类型的着色器。 例如,如果GPU上的一帧需要8毫秒的渲染时间,我是否可以说顶点着色器需要7毫秒,片段着色器需要1毫秒?

1
镶嵌与几何着色器
如果我错了,请纠正我,但是“几何着色器”和“细分曲面着色器”作业都将在“图形管线”中生成顶点。我想知道的是它们之间的区别,何时应该在另一个之上使用?

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.