Articles of 后处理

我的中间渲染到后处理着色器的方法有什么问题?

我正在开发一个OpenGL项目。 本周早些时候,我成功实现了延迟着色,但是我不确定如何将信息从“延期着色器”传递到“后期着色器”。 glBindFramebuffer(GL_FRAMEBUFFER, fboId); glViewport(0, 0, int(ScreenSize.x), int(ScreenSize.y)); // Render on the whole framebuffer, complete from the lower left corner to the upper right glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //…Drawing for Opaque objects, pass all transparent objects to a seperate texture //after having drawn them using Forward Shading //glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, int(ScreenSize.x), int(ScreenSize.y)); // Clear the […]

Unity Ambient Occlusion无法使用Orthographic相机

看起来像Unity Post Post堆栈中的Ambient Occlusion设置(从资产商店获得)只能用于Perspective摄像头,但是我还没有遇到任何文档说明这种情况,或者它缺less对Orthographic的支持。 在堆栈中的所有其他设置似乎都在透视和正交的工作。 这是一个错误,还是我不正确或理解的事情?

如何使用FrameBuffer对象(OpenGL)

我想画一个2D场景,场景之后,我想绘制一些灯光效果。 当我画一些光,我创建一个FBO,绘制它,当完成绘图时,我想要创建一个纹理,我画的FBO的内容。 我目前的代码: ////////// //Init_ //Create Texture glActiveTexture(GL_TEXTURE0); glGenTextures(1, out _texfbo); glBindTexture(GL_TEXTURE_2D, _texfbo); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _screenWidth, _screenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, null); glBindTexture(GL_TEXTURE_2D, 0); //Create Renderbuffer glGenRenderbuffers(1, out _rb); glBindRenderbuffer(GL_RENDERBUFFER, _rb); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _screenWidth, _screenHeight); glBindRenderbuffer(GL_RENDERBUFFER, 0); //Create Framebuffer glGenFramebuffers(1, out _fbo); glBindFramebuffer(GL_FRAMEBUFFER, _fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texfbo, 0); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _rb); glBindFramebuffer(GL_FRAMEBUFFER, 0); […]

问题与SSAO

我试图根据本教程(和其他)实现SSAO。 我的设置: XNA 4.0 递延 深度= z / w 这是结果: 移动相机时,建筑物之间的线路正在移动。 所以我想知道在代码或参数中的这个问题? 这是代码: float3 normal_from_depth(float depth0, float2 texcoords) { const float2 offset1 = float2(0.0, 0.001); const float2 offset2 = float2(0.001, 0.0); float depth1 = dot(tex2D(depth, texcoords + offset1).rgb, byte_to_float); float depth2 = dot(tex2D(depth, texcoords + offset2).rgb, byte_to_float); float3 p1 = float3(offset1, depth1 – depth0); float3 […]

Unity3D – 后处理在用户界面上不需要的

(a)使用单个摄像机渲染场景。 第二个摄像头用于渲染UI,并使用与第一个相同的目标纹理(a)。 第三个摄像头采用目标纹理(a),深度纹理和后期处理。 结果呈现在屏幕上。 我如何才能将后处理仅应用于不是UI的输出元素?

HLSL白天到晚上的后期处理(DTN)

我正在尝试通过使用全屏HLSL像素着色器来实现2D游戏(XNA)的“日常”filter(通常用于电影)。 其目的是将任何明亮多彩的图像变成黑暗和蓝色的夜晚版本的图像,有点像: 从概念上讲,我的想法是: 降低亮度 合并蓝色灰度版本的图像与原始图像 增加对比度 目前的着色器是: // Look up the color of the original pixel float3 colorOriginal = tex2D(TextureSampler, texCoord); // Get corresponding greyscale value (adjusted to human vision) float greyscale = dot(colorOriginal, float3(0.3, 0.59, 0.11)); // Merge and tint color.rgb = lerp(colorOriginal, colorOriginal * float3(pow(greyscale,6), pow(greyscale,6), pow(greyscale,3)), timeFactor); 结果还是不尽如人意。 我怎么能改善这个?

在OpenGL中渲染场景两次,用透明度叠加第二次渲染

是否有可能渲染两个场景(不同设置的相同场景)没有任何alpha,然后在第一层顶部的第二个渲染结果叠加了静态透明度? 我该怎么做? 我希望它快,所以透明度不应该在渲染过程中执行,只能在最后的覆盖过程。 基本上,我要求一个高效的OpenGL后处理方法来绘制到屏幕时结合两个不同的渲染。

从HLSL着色器写入多个RenderTarget2D

我需要写两个渲染目标:一个用于颜色,另一个用于深度+正常(用于后期处理)。 不过,我有一个问题。 这两个目标似乎都获得了COLOR0的输出值,而第二个目标应该从COLOR1获取值。 我做错了什么? RT初始化: renderTarget = new RenderTarget2D(device, gameResolution.Width, gameResolution.Height, false, graphics.PreferredBackBufferFormat, DepthFormat.Depth24); extraTarget = new RenderTarget2D(device, gameResolution.Width, gameResolution.Height, false, SurfaceFormat.Color, DepthFormat.None); 使用RT: Device.SetRenderTargets(new RenderTargetBinding(renderTarget), new RenderTargetBinding(extraTarget)); 相关的HLSL: struct Pixel { float4 Color : COLOR0; float4 Extra : COLOR1; }; Pixel PS(Middle input) { Pixel output; // perform other shader code output.Color = float4(totalDiffuse […]

在屏幕空间中复制世界空间球体

我正在处理一个后期处理着色器,我正在努力工作。 我使用Unity,并且在屏幕空间中有一个我想要的着色器,作为后期处理的一部分,渲染一个看起来像是在世界空间中绘制的球体。 现在,我尝试了一些不同的方法。 对于所有的尝试,我给着色器一个球体的世界位置,一个球体的屏幕位置和一个相机位置: uniform float4 _SpherePositionCamera; uniform float4 _SpherePositionCamera; uniform float4 _SpherePositionWorld; 也就是说,分别在世界空间相机空间和屏幕空间的相同点。 我试图使用逆投影matrix将屏幕空间中的片段投影到相机空间中,并且在xy坐标系中testing,减去球体的屏幕空间中心长度<1。这在屏幕上给出了一个圆圈真的非常好地跟随世界空间。 gc代码的顶点程序是 v2f vert (appdata_img v){ v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.uv = MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord.xy); o.camPos = mul (inverseProjection, float4((o.uv * 2) – 1, _SpherePositionCamera.zw)); return o; } 而片段程序是 fixed4 frag (v2f i) : COLOR { // Get […]

统一 – 模糊选定的图层

我正在搞Unity Unity的后期处理工具,同时做一个2D游戏,利用透视相机的parallaxing效果。 请注意,游戏主要是使用精灵制作的 。 现在,我有一个玩家的地球 ,一个背景和一个前景 。 我只想模糊背景和前景,而不是玩家背景。 我想知道如何做到这一点,与焦距玩没有做任何事情,无论距离相机的距离,所有东西都接收相同的模糊量。