Articles of 着色器

无论如何,我能从双方看到一架飞机吗?

在Unity中,我有一个树叶的模型,由一个平面和一个纹理组成,当我将它上传到一个单元时,纹理只在一侧可见,所以我怎样才能在不增加多边形的情况下将其变为可见的。 而且我不熟悉复杂的着色器编程和东西,所以请你详细解释一下。 谢谢我提前。

如何使用Shader Model 3或更低来确定顶点索引?

我需要像HLSL着色器中的SV_VertexId(在Shader Model 4中添加)来确定当前处理哪个顶点。 不幸的是,我只能编译vs_3_0或更低版本。 目标是使用HLSL改变一个特定顶点的位置。 我无法编辑网格,也无法传递来自游戏引擎的任何数据,我的能力受到HLSL着色器的限制。 着色器只写一个网格(人脸),我需要改变它的形状(例如,闭上眼睛或使它微笑)。 我已经试图通过TEXCOORD来定位顶点,但是不知道如何将其与其他连接到它的三角形垂直分开(放置在与许多三角形相交的同一点)。 if ( VS.TC[0] > 0.8828125 && VS.TC[1] > 0.6328125 && VS.TC[1] < 0.671875 ) { // Upper lip center VS.Position += VS.Normal * uUpLip; } 请你给我任何建议如何识别/移动HLSL只有一个特定的垂直? 我需要像在搅拌机的编辑模式中移动垂直(wytn邻居三角形仍然连接在一个点),但我的尝试与TEXTCOORD使他们在不同的方向移动 谢谢

着色器包含什么?

我在研究着色器,因为我正在考虑在Uni做我最后一年的项目。 我在网上看了很多例子,我想我明白了。 这是你应用到一个对象或场景,以创建一个所需的效果,而不会改变原来的对象/场景,我想。 我知道有不同types的着色器,但这是最基本的目标吗? 此外,着色器包含什么? 游戏着色器中的天气系统? 粒子效应? 滑坡? 我不知道在animation/电影和着色器之间画线。 另外我猜游戏中的着色器会影响游戏世界,例如,在BF4中爆炸的塔。 爆炸本身就是着色器,但塔的影响方式是物理和碰撞。 我对吗?

当光线方向平行于平面时,奇怪的阴影行为

我有一个阴影痤疮奇怪的问题。 它发生在光线方向平行于一个平面的时候。 这是我的代码和几个问题的图片: //this calculates the shadow matrix //########## 1st phase ########## float rangeX = globalData::windowWidth; float rangeY = globalData::windowHeight; m_ProjectionMatrix = glm::ortho<float>(-rangeX,rangeX,-rangeY,rangeY, 0.1f,(float)globalData::zFar); // zfar is 500.0f here m_viewProjection = glm::lookAt( glm::vec3(lightPosition.x,lightPosition.y,lightPosition.z), glm::vec3( ((lightDirection.x==lightPosition.x) ? lightDirection.x+0.1f : lightDirection.x), ((lightDirection.y==lightPosition.y) ? lightDirection.y+0.1f : lightDirection.y), ((lightDirection.z==lightPosition.z) ? lightDirection.z+0.1f : lightDirection.z) ), glm::vec3(0,1,0) ); glm::mat4 biasMatrix( 0.5, […]

GLSL统一arrays的大小由另一个统一设置

下面的GLSL代码是否可以工作? #version 330 uniform int size; uniform float[size]; void main() { //do something }

HLSL SetVertexShader Texture2DArray示例

我想在顶点着色器中做一些纹理样本,但是看起来不能像使用像素着色器那样完成。 代码基本上是.. Texture2DArray gTexture; VS() { gTexture.Sample(samPoint, float3(x, y, z) } PS() { gTexture.Sample(samPoint, float3(x, y, z) } technique11 main { pass P0 { SetVertexShader(CompileShader(vs_4_0, VS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0, PS())); } } PS()将编译和工作正常,但我也需要在VS()中做这种事情。 当把这个代码在VS()我得到:错误X4532不能映射expression式vs_4_0指令集…. 我做了一些谷歌search,看起来像你可以在VS中的纹理样本,但我不能得到足够的细节,使这项工作。 任何帮助,这将是很好的。 仅供参考:我正在使用DirectX11 VS2015

如何在运行时更改对象的颜色?

我希望通过ketchapp在游戏“The stack”中获得着色效果 https://play.google.com/store/apps/details?id=com.ketchapp.stack&hl=en 正如你所看到的,物体的颜色以及天空箱不断变化。 我完全是c#noob,并尽我所能find着色器来复制效果。 但我什么都找不到 如何在运行时更改对象的颜色?

如何使用线框着色器创建网格?

所以我很难创建一个80年代霓虹灯色网格线框,就像例子 。 你怎么会把地板变成80年代的格子地板? 我只是在寻找方格。 这是我目前使用的 Shader "Custom/Grid" { Properties { _GridThickness ("Grid Thickness", Float) = 0.01 _GridSpacingX ("Grid Spacing X", Float) = 1.0 _GridSpacingY ("Grid Spacing Y", Float) = 1.0 _GridOffsetX ("Grid Offset X", Float) = 0 _GridOffsetY ("Grid Offset Y", Float) = 0 _GridColour ("Grid Colour", Color) = (0.5, 1.0, 1.0, 1.0) _BaseColour ("Base […]

为什么纹理采样只能在(0,0,0)处工作?

我想保存RWTexture3D (无人机资源)中的一个对象的每个点的颜色,并将其转移到其着色器中的另一个对象。 我在两个着色器中做了一个testing。 两者都在片段着色器中。 在第一个着色器中,我给了 RWTexture3D<float4> gUAVColor; gUAVColor[uint3(0,0,0)] = float4(1.0f,0.0f,0.0f,1.0f); 在第二个着色器中: Texture3D<float4> gVoxelList; float4 output = gVoxelList.SampleLevel(SVOFilter, uint3(0,0,0),0); 结果是正确的,结果是red 。 但是当我更改代码时,纹理不能被正确采样。 在第一个着色器中,我给了 RWTexture3D<float4> gUAVColor; gUAVColor[uint3(1,0,0)] = float4(1.0f,0.0f,0.0f,1.0f); 在第二个着色器中: Texture3D<float4> gVoxelList; float4 output = gVoxelList.SampleLevel(SVOFilter, uint3(1,0,0),0); 我只改变了从uint(0,0,0) to uint(1,0,0)保存红色的pos,但是我变成了black ,这意味着它是不正确的。 如果我使用gVoxelList[uint(1,0,0)].xyz ,它可以工作。 我不知道错误在哪里。

特殊纹理拉伸而不变形

我正在尝试在着色器中实现特殊的纹理拉伸效果。 这里是我如何定义我的紫外线,然后抽样我的纹理,没有什么特别的。 // uv_ST contains the tiling and offset values uv.xy = uv.xy * uv_ST.xy + uv_ST.zw 如下图所示,当您平铺/拉伸夹持的纹理时,会给出标准的平铺/拉伸和偏移行为。 第一是正常的,第二是抵消,最后是拉伸。 但是我想要避免拉伸时的变形行为,我想保持边缘,当拉伸我的纹理,或者简单地在中间切割和拉伸。 下面是一个例子。 在采样纹理之前定义我的uvs时,我怎么能在我的着色器中做到这一点?