您的位置:首页 > 动漫 >

当前热议!MME编写入门(六)后处理模板

生成后处理用的效果文件的情况下,一定要在效果文件中声明以下变量。创建后期效果时,必须始终包含以下内容:

这声明了此效果文件是后期效果,没有它,您将无法使用 ScriptExternal 命令

为了处理后期效果,有必要准备一个特殊的纹理,该纹理将成为绘图的输出目标(渲染目标)。


(资料图片仅供参考)

带有“RENDERCOLORTARGET”的纹理参数是一种可以记录绘制结果颜色信息的纹理。 此外,带有“RENDERDEPTHSTENCILTARGET”的纹理参数被指定为深度缓冲区(Z缓冲区)。

上所述设置时,每个纹理都以与屏幕相同的大小生成。 

采样器

渲染的目标屏幕的尺寸。类型是float2,单位是像素。此值为MMD的预览窗口大小或者离屏渲染的屏幕大小。即使通过Scripts的RenderColorTarget命令变更了渲染目标,此值也不会改变。此语义可以使用以下值:VIEWPORTPIXELSIZE

为什么添加了ViewportOffset

主要是处理纹理坐标偏移的情况。

纹理坐标 Tex 指向屏幕左上点 (0,0) 处和屏幕右下点 (1,1)。 

顶点着色器中,视口偏移量被添加到 Tex,但如果将输入 Tex 值按原样传递给像素着色器并用作输入纹理的坐标,则会出现以下问题。

当光栅器将顶点信息扩展为像素时,像素的顶点信息是该像素左上点的信息。 例如,如果您考虑屏幕上的左上角像素,如果未添加视口偏移,则 Tex 的值将为 (0,0)。 

这指向表示此像素的 1x1 矩形的左上点,而不是像素的中心。 

为了获得纹理每个像素的确切颜色,我们需要为 tex2D() 函数提供一个指向像素矩形中心的坐标。 根据采样器设置,如果纹理坐标不指向一个像素的中心,而是指向像素之间边界的坐标,则生成的像素颜色将是两个像素颜色的平均值。

为了避免这种情况,我们正在执行在顶点着色器中向 Tex 添加视口偏移的操作。 这会将纹理坐标的高度和宽度分别移动 0.5 个像素,并且像素着色器中的 Tex 值指向像素的中心坐标。

以上解释顶点着色器中添加的移动。

顶点着色器

像素着色器

在像素着色器中实现后期效果主体的处理。

比如实现灰度。常用的灰度算法 gray=(r+b+g)/3

比如实现对比度。

绘制部分

前边是Script部分

后处理效果,technique的Script通常会执行以下步骤:

1、使用准备好的纹理更改渲染目标

2、变更或清除渲染目标自身的纹理。

执行初始化操作(使用清除颜色或清除深度)。可以使用以下命令:

Clear=Color/Depth

3、针对当前呈现目标绘制其他对象

4、将呈现目标返回到屏幕

指定要使用的深度缓冲(Z缓冲)。

RenderDepthStencilTarget=(纹理名或空白)

通常和RenderColorTarget0一起使用。参数为通过RENDERDEPTHSTENCILTARGET语义声明了的变量名。需要重置为默认深度缓冲时,参数应为空白。

5、绘制缓冲区

后期效果主体是通过创建一个着色器来处理的,该着色器绘制大小与屏幕匹配的矩形多边形。 为此需要添加pass,pass部分

写后处理难度基本都在算法上了。这个模板,大概可能基本上是这样的。写一个简单的调色器还是可以的,还有多的就是需要添加采样器。

再往后的mme编写就直接放代码、注解、参考网址了。没有那么啰嗦的了。

舞力介入P的后处理介绍,原文中还包括了一个模糊和柔光算法的例子

https://codezine.jp/article/detail/6298

标签:

相关阅读