首页 | 资讯 | 财经 | 公益 | 彩店 | 奇闻 | 速递 | 前瞻 | 提点 | 网站相关 | 科技 | 热点 | 关注 |
MME编写入门(一)·渲染流水线、认识HLSL|即时看

发稿时间:2023-02-28 11:31:38 来源: 哔哩哔哩

关于MME的编写K佬写了很好的教程,一共三集,每集都比较短,还有一些专栏。

https://www.bilibili.com/video/BV17W411n7g5

作为MME的入门实际上还是有一定难度的,因为有关渲染的编程的背后,不仅包含一大堆的数学原理,还包含很多方面,需要相当多的知识储备。而我本人非计算机相关专业,仅是个人自学,写这篇文章的目的,也就是做个总结的笔记吧。


【资料图】

DirectX 9与HLSL(High Level Shading Language)

MMD基于 DirectX 9开发,对于渲染的自由度非常低。 MME是在此基础上对于 MMD所进行的二次开发,并以插件的形式存在。

为了使用DirectX 9的特性,用户必须学习 HLSL,即高级着色器语言。这是一门由微软开发的、与 C语言语法颇为相似的着色器语言。 HLSL有多个版本,具体取决于可用的功能,但MME支持HLSL直到Shader Model 3.0(因为MMD在DirectX 9.0c上运行)。

DX9这个版本目前来说算是比较落后吧(2023年),没有几何着色器,也没有计算着色器,没有曲面细分等等。要学习的内容较少,所以相对来说算是比较容易。

HLSL 的基本语法

HLSL 的基本语法与 C/C++ 相同,但它具有适合编写图形程序的专用向量、矩阵类型和函数。 一些数学函数类似于 C/C++ 标准库中的函数。

编写工具

关于MME的fx文件编写,可以用记事本(但不推荐),可以使用notepad++,但是想要支持代码高亮和提示功能,需要自行配置一下语言库。也可以使用Visual Studio Code或者2019等等。fx不能自行运行,它是从DirectX调用的。FX本身并不控制绘图过程,而是主机程序(即MME)的作用命令“做这个”和“画这个”。

(另外的一些:可以使用NVIDIA FX Composer辅助学习。FX Composer是一个免费的工具,可以直接从NVIDIA的官方开发者中心下载。FX Composer的最新版本是2.5,官方已经不在提供更新。总的来说,这是一个非常过时的工具了……

作者在原书中给出的解释:NVIDIA FX Composer已经不再提供更新开发支持,并且开始变得有些老旧。它仅支持DirectX 9和DirectX 10,并不支持DirectX 11。同样,AMD提供的shader编写工具——RenderMonkey,也不再支持DirectX 11,对这个工具的开发也已经停止。)

(题外话,记不清是哪一个作者,似乎是针金,他好像使用RenderMonkey来写fx文件,因为某一次某一个fx文件里我看到过RenderMonkey的一些相关)

注意:FX Composer中编写的效果文件并不能直接在MME中实现。只能说可以用来辅助学习。

HLSL的教学视频,教程已经非常老旧,但是里面的数学原理和过程依旧值得学习和参考,通过这个可以对整个流程有很清晰的认知。

https://www.bilibili.com/video/BV1pZ4y1k7dr

当然,这一部分只是选择性地了解。

渲染流水线

渲染管线也称渲染流水线,可以将其理解为一个流程。管线的主要功能是在给定一个虚拟相机、 三维物体、光源等等的情况下生成或渲染二维图像。这个工作时CPU和GPU共同完成的。

渲染流程主要分为几个大的阶段:应用阶段,几何阶段,光栅化阶段,像素处理阶段。

这些阶段中的每个阶段本身也可以是一条管线。管线的各阶段是并行执行的,每个阶段都取决于上一阶段的结果。理想情况下,将非管线系统划分为 n 个管线阶段,可以使速度提高 n 倍。因此提升性能是使用管线的主要原因。

应用阶段(application)

渲染流水线的起点是CPU,即应用阶段。这个阶段是我们自己主导的,通常由CPU负责实现。

需要准备场景的基本数据,渲染的物体、光源的数据、摄像机的数据、一些全局性的数据,准备好这些需要渲染的场景对象之后,我们还要做一些优化,比如算法上的加速,或者说剔除。接着设置渲染状态,准备渲染参数,绘制的顺序。

设置好渲染状态和参数以后,CPU把渲染数据输出到显存去交给GPU处理。

几何阶段(geometry processing)

几何处理阶段(geometry processing),此阶段会处理变换,投影以及所有其他类型的几何处理。这一阶段在CPU上进行。可以理解为GPU的工作环节。另外,此阶段会计算所需要绘制的内容,并判断应如何绘制以及应在何处绘制。

几何阶段进一步分为以下功能阶段(functional stages):顶点着色(vertex shading),投影(projection),裁剪(clipping)和屏幕映射(screen mapping)

光栅化阶段(rasterization)

光栅化阶段(rasterization)通常会依次将三个顶点输入,形成三角形,然后找到该三角形内所有需要计算的像素,将它们发送到下一个阶段。(光栅化阶段好像是不可编程,但可配置的,在此并不多赘述)关于光栅化阶段,我们以后可能要去解决锯齿相关的问题。

像素处理阶段(pixel processing)

像素处理阶段的目标是计算每个可见图元中每个像素的颜色与隐藏面剔除。

怎么感觉写了很长时间了却还没写到入门,本篇若是再塞入语法和范例恐怕就会变得太长了……所以,本文都是些大的概述,算是理论基础的小铺垫吧。在后续的几篇,我们细化深入了解。我们需要了解更多详细的过程,才能去写代码。

我们实际上去编写的,是几何阶段的顶点着色器和光栅化阶段后的像素着色器。(像素着色器也可以成为片段着色器,有些地方会翻译为片段)

顶点着色器:顶点着色器计算对象每个顶点的屏幕坐标。顶点着色器基于每个顶点执行,输入是对象的顶点信息(通过骨骼变形转换后),输出是传递给顶点屏幕坐标 + 像素着色器的顶点信息。

像素着色器:像素着色器计算屏幕上展开的对象的每个像素的颜色。像素着色器基于每个像素运行,其中输入是从顶点着色器传递的顶点信息,输出是像素的颜色信息。

本文至此仅是一些简单认识,作为开篇,并不急于直接入手写代码,主要是树立大的框架,列举了一些可供学习的文章地址。另外,推荐观看图形学GAMES101的课程,闫令琪老师的课,可以在哔哩哔哩上免费看。

附上舞力介入和光束人p的文章地址和另一篇mme介绍博客,作为mme的学习非常有帮助

MikuMikuEffectで学ぶHLSL入門(日文,需注册才能看)

https://codezine.jp/article/corner/426

mme初级介绍(日文)

https://higeninjin.blog.fc2.com/blog-entry-5.html

推荐一个hlsl的基础学习,虽然文章作者是在ue4中实现的,但其逻辑运算等实际上是相通的

HLSL语言基础  https://zhuanlan.zhihu.com/p/52845899

还有就是微软官方的HLSL学习文档,我这里放的是中文版的地址,机器翻译有很多地方不对,所以建议还是看英文版的。

https://learn.microsoft.com/zh-cn/windows/win32/direct3dhlsl/dx-graphics-hlsl?redirectedfrom=MSDN

英文版

https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-pguide

ビームマンP和MME

実は著者は、MMEに触れるまでHLSLに関してほとんど素人でした。ニコニコ動画でMMEを使った動画を見て、「これを使えばカッコいいミサイルやビームが出せるのでは!?」と手を出したのがきっかけです。

好きこそ物の上手なれ、とことわざにもあるように、何事も嫌々では上達は望めません。本来MMDは動画を書き出すことを目的としたソフトなので、せっかく使うのならば動画を書き出して動画サイトに投稿してみましょう。新しい楽しみが発見できるかもしれません。

实际上,作者在接触MME之前几乎是HLSL的业余爱好者。 当我在Nico Nico 上看到使用MME的视频时,我想,“也许我可以用它来生产很酷的导弹和光束!?

俗话说,喜欢就擅长,什么都做不了就不能指望进步。 最初,MMD是用于导出视频的软件,因此如果您想使用它,请导出视频并将其发布在视频网站上。 您可能会发现新的乐趣。

参考

MME中文参考手册   译者  不吃鱼的喵酱

【中文字幕】HLSL着色器入门  https://www.bilibili.com/video/BV1pZ4y1k7dr

实时渲染(第四版)Real-Time Rendering (Fourth Edition)第2章 图形渲染管线https://blog.csdn.net/qq_27534999/article/details/103148234

【DirectX11】第三篇 编写Shader?——还是先了解下工具吧https://blog.csdn.net/xueyedie1234/article/details/51354458

TA成长之路https://www.yuque.com/u12120868/md8ze7/ovoxxl

HLSL参考 https://docs.microsoft.com/zh-cn/windows/win32/direct3dhlsl/dx-graphics-hlsl-reference

从零开始学习MME的HLSL编程(1)https://www.bilibili.com/read/cv263176

关于MMD的各种光照的基础原理  https://www.bilibili.com/read/cv308272

标签: SHADER 实时渲染 机器翻译 非计算机 HTTPS 绘图过程 DIRECTX 基础学习 Visual Studio Code 书き出す NVIDIA 成长之路 业余爱好 中文字幕 最新版本 教学视频 哔哩哔哩 从零开始 总的来说 视频网站

责任编辑:mb01

网站首页 | 关于我们 | 免责声明 | 联系我们

生活晚报网版权所有

Copyright @ 1999-2017 www.news2.com.cn All Rights Reserved豫ICP备20022870号-23

联系邮箱:553 138 779@qq.com