Articles of 着色器

ScreenToWorldPoint问题,否则真棒Unity演示

我正在使用Stack Overflow上的这个整齐的Unity演示,演示了通过RenderTexture进行纹理遮罩的过程: 你可以在Unity中实时擦除纹理吗? 但从鼠标位置到世界空间的映射是错误的。 这是映射的脚本: using UnityEngine; using System.Collections; public class MaskCamera : MonoBehaviour { public Material EraserMaterial; private bool firstFrame; private Vector2? newHolePosition; private void CutHole(Vector2 imageSize, Vector2 imageLocalPosition) { Rect textureRect = new Rect(0.0f, 0.0f, 1.0f, 1.0f); Rect positionRect = new Rect( (imageLocalPosition.x – 0.5f * EraserMaterial.mainTexture.width) / imageSize.x, (imageLocalPosition.y – 0.5f * […]

统一,手动剔除

有没有办法在例如顶点着色器剔除当前顶点? 我有我自己的草地系统,我想剔除距离比一些距离更远的秸秆,但是我不能使用摄像机剔除,因为草块被划分成大块,并且隐藏了整个块。

SFML / GLSL中的轮廓着色器不起作用

我有一个SFML的问题。 此代码不起作用: uniform sampler2D texture; varying vec2 v_texCoords; float offset = 1.0/32; void main() { v_texCoords = gl_TexCoord[0].xy vec4 col = texture2D(texture, v_texCoords); if (col.a == 1) gl_FragColor = col; else { float au = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y -offset )).a; float ad = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y + offset)).a; float al = texture2D(texture, vec2(v_texCoords.x […]

D3D9CAPS提供了不寻常的最大着色指令值

我正在试图在一个硬件上实现一个顶点和像素着色器,我们正在开发一个使用DirectX 9.0c运行时的游戏。 着色器是用于粘结网格animation的,并且比我到目前为止工作的唯一的其他着色器要复杂一点,这是一个简单的二维精灵着色器。 在我的PC上开发时,粘结的网格着色器似乎工作正常,但在将其转移到目标硬件时不起作用。 这导致我检查两台机器的硬件function,以检查是否有任何差异,我得到了以下不寻常的结果: 开发机Dx9上盖结果: Maximum primitive count: 16777215 Device supports level 3.0 vertex shaders Vertex shader maximum number of instructions run when using flow control 65535 Vertex shader maximum number of constant buffers 256 Vertex shader maximum number of 30 instruction slots 4096 Vertex shader instruction predication supported Vertex shader dynamic flow control […]

为什么当我运行我的游戏时,我的着色器的纹理变成未选中状态?

我想添加一个自定义材质到我在Unity中绘制的线(使用Vectrosity )。 我正在使用Unity内置的“不亮/纹理”着色器。 当我从我的资源目录中拖放纹理到我的着色器中的“纹理”插槽时,一切都看起来不错: 但是当我点击播放,纹理消失: 我的队伍并没有出现在我的比赛中 但是,如果在单击播放之后将纹理拖动到着色器的纹理槽,贴图看起来会“粘住”,而且我的行按预期呈现: 但是,一旦我停下来开始游戏,纹理再次消失。 为什么Unity在我的游戏开始时踢出了我的纹理? 我的纹理有问题吗? 我在控制台中看不到任何警告或错误。 我尝试了许多不同的纹理,他们都做同样的事情。 我正在使用Unity 5.6.1f1。

使用多个纹理的MonoGame HLSL fx

我将旧的XNA标题转换为MonoGame,其中一个HLSL fx文件使用两种纹理。 但是不管我做什么,它只在使用MonoGame渲染效果的时候使用屏幕纹理,否则什么也不画。 我可以看到在debugging模式下,我试图传递正确的纹理在C#中,再加上它在XNA版本中正常工作。 那么为什么我的着色器只使用Monogame中的屏幕纹理? HLSL Texture2D ScreenTexture; sampler2D ScreenSampler = sampler_state { Texture = <ScreenTexture>; }; Texture2D DistortionMap; sampler2D OffsetSampler = sampler_state { Texture = <DistortionMap>; AddressU = Clamp; AddressV = Clamp; }; float4 PixelShaderFunction(float4 pos : SV_POSITION, float4 color1 : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { // Use the DistortionMap to […]

如何在LibGdx + SpriteBatch中使用多个着色器

我正在编写一个2D游戏libgdx。 我正在使用一个SpriteBatch来绘制一些Sprites 。 现在我想用SpriteBatch来使用多个ShaderPrograms ,但不幸的是,一次只能设置一个ShaderProgram。 例如,我想用特定的颜色绘制整个场景,并希望通过在着色器中操作texCoords来为某些精灵添加视差效果。 我知道,在原生的OpenGL中,您可以在绘制调用之前启用尽可能多的着色器。 但似乎在libgdx中是不可能的。

纯金属reflection率的基本方程

我正在做一个活的壁纸,显示一个纯粹的金属物体。 由于它是一个dynamic壁纸,我可以做大量的近似…这不是一个游戏世界的完整场景。 我的着色器只需要支持这一个材质。 人们不会期望极端的细节等等。所以,例如,我甚至不用担心散射,因为纯粹的导电材料几乎没有。 所以我试图实现一个reflection的导电表面,从表示照明环境的立方体贴图中拉出reflection。 在一个非常基本的层面上看起来像这样: vec3 fresnelSchlick (vec3 f0, float cosTheta) { return mix(f0, vec3(1.0), pow(1.0 – cosTheta, 5.0)); } //… float NdV = dot(normal, viewDir); vec2 brdf = texture2D(u_brdf, vec2(u_roughness, NdV)).rg; // from a LUT vec3 reflection = textureCube(u_cubemap, reflect(viewDir, normal)); gl_FragColor = reflection * (fresnelSchlick(materialColor, NdV) * brdf.x + brdf.y); 这里我简单的math问题是,可能的最终像素颜色的范围不会产生一个适当的色调范围。 假设我的素材颜色是#0050ff,环境是单色的白色。 […]

有没有与GLSL的“地图”function相当的HLSL?

Google在这方面并没有帮助我。 这是GLSL着色器: vec3 globalIllumination(vec3 p, vec3 n) { vec3 g = vec3(0.0); float dist; for (float i = 1.0; i <= samples; i++) { dist = stepDistance * i; float d = vec3(dist – map(p + n * dist, returnColor)); g += returnColor*d/ i; } return g; } 我知道如何将其转换为HLSL,除了该地图function。 我可以使用一些帮助。

着色器资源绑定

我试图设置一个恒定的缓冲区,在我的着色器中的值。 但是一无所获,没有结果。 在着色器中的代码 cbuffer MatrixBuffer : register(b0) { float4 test; }; —————————————————————- In main part #pragma pack(push,1) struct CB_GBUFFER_UNPACK { D3DXVECTOR4 test; }; #pragma pack(pop) D3D11_BUFFER_DESC cbDesc; ZeroMemory( &cbDesc, sizeof(cbDesc) ); cbDesc.Usage = D3D11_USAGE_DYNAMIC; cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; cbDesc.ByteWidth = sizeof( CB_GBUFFER_UNPACK ); device->CreateBuffer( &cbDesc, NULL, &m_pGBufferUnpackCB ); D3D11_MAPPED_SUBRESOURCE MappedResource; ic->Map( m_pGBufferUnpackCB, 0, […]