悲剧小白 发表于 2019-3-4 09:50:34

[光影包制作教程] 第二章———光影的初次尝试

本帖最后由 海螺螺 于 2020-1-22 21:00 编辑

索引待建立

这一章节会教大家自己动手写一个光影效果,加载后的观感并不好,所以不用过于期待。这一章的目的是简单了解一下光影文件的内容和加载顺序。看完这一章后你应该能理解光影的执行过程,编写并加载一个光影。
对上一章的解释
在上一章中,我们创建了一个空文件夹并且在游戏中加载了,但是游戏并没有什么变化,这是为什么?答案:因为光影在加载的时候拥有后备链,这使得在加载一个光影包的时候缺少某个文件可以从另一个地方获得补充。
光影包的组成
一个完整的光影包由4部分组成(按执行过程排序):阴影贴图绘制,G-Buffer绘制,后处理以及最终合成。这里先介绍一下每一部分的作用,然后开始介绍G-Buffer。注意:这里的每个部分都是可选的。
阴影贴图绘制(Shadow Map绘制):一种绘制阴影贴图的方法,在后面会介绍一点。如果没有将会自动生成一个默认的。后处理:后处理包括composite和composite1~9这10个着色器(composite视为0),当它们存在时,加载器会按照数字顺序依次调用。在这里可以渲染Bloom特效等。最终合成:此阶段的着色器名称为final,它必须根据G-Buffer信息绘制出最终图像并输出。G-Buffer绘制:将游戏中的物体绘制在G-Buffer当中。用于G-Buffer绘制的光影文件均由“gbuffers_”为前缀,具体文件名如下图(图片依据官方文档制作,制作时间为2019/03/02,源文件:):

在上图中,光影文件从右至左被加载,当遇到某个文件不存在时,就会按照连线在其左侧找到另一个文件,直到找到一个可用的文件或者因为都不存在而找到了<None>。上图中的<None>代表OpenGL默认的固定管线渲染(不明白的话可以暂时理解为OptiFine自己有一套完整的光影包,如果某个文件不存在的话就会在那个光影包里取文件。注意:这是个错误的说法,但是容易理解)。
尝试编写光影文件
先来实现第一个G-Buffer绘制着色器:gbuffers_basic。在shaders文件夹里创建两个文件,分别为gbuffers_basic.vsh和gbuffers_basic.fsh并写出代码。注意:OpenGL的保留变量都以“gl_”开头,任何尝试定义以“gl_”开头的变量都将会报错。
gbuffers_basic.vsh:#version 120

varying vec4 color;

void main()
{
    gl_Position = ftransform();
    color = gl_Color;
}
gbuffers_basic.fsh:#version 120

varying vec4 color;

void main()
{
    gl_FragData = color;
}
代码解释
OpenGL的平台差异性极强,不同的显卡甚至同一种显卡的不同版本驱动对GLSL着色器的处理方式都不尽相同。这里为了谨慎起见,在每一个文件的开头都标注了#version 120,声明了使用GLSL的1.2版本规范。光影中使用#version 120完全是为了照顾Mac电脑的用户,Mac电脑只能用1.2版本的GLSL。varying vec4 color;是声明一个能从顶点着色器传递到片段着色器的可插值变量。之后是顶点着色器中的gl_Position = ftransform();是低版本GLSL才有的一个方法,全自动MVP(Model, View, Projection)变换,因为我们目前不需要计算其他信息,所以就先用系统自带的变换了。color = gl_Color;是将顶点采样点的颜色赋值给了color。最后是片段着色器中的gl_FragData = color;,将gl_FragData按照数组的形式来操作,来向帧缓冲中的多个颜色附件输出像素颜色。这一步会把世界中的每一个像素上色。由于这里的color是从顶点着色器里传来的,所以整个代码的意思是将顶点采样点的颜色赋予给这个方块的所有像素。
效果展示
如果你的代码加载后的效果是这个样子,那么恭喜你,本章的目标你已经达成了。
代码下载

本章测验
下载光影缓冲区渲染管线图表(在上文),尝试记住每个部分是用来做什么的(用ps打开,看图层的名字)。找一些其他的光影,打开压缩包看看那些光影都拥有哪部分,没有哪部分。

xxxweb 发表于 2019-3-8 11:31:36

学习学习

猿汐 发表于 2019-3-8 17:12:26

望不要弃坑

我掉坑里了 发表于 2019-3-21 23:32:38

6666666666666{:701:}

Bad_Ceiling 发表于 2019-3-23 00:44:37

单纯为了下载{:700:}

三千日落 发表于 2019-3-23 14:41:38

还想看后面的教程

DevilDrgon 发表于 2019-3-24 02:07:58

继续更鸭

吕不才 发表于 2019-3-27 19:30:57

学习一下

616334146 发表于 2019-4-2 21:13:36

看不懂,先看效果再说

JackyXing 发表于 2019-4-3 21:54:17

66666666666666666

墨月532013 发表于 2019-4-6 12:30:50

学习中 感谢楼主

帕西 发表于 2019-4-6 14:27:53

打卡,顺便看下内容. OOOOOOO

2859286510 发表于 2019-4-6 19:59:07

回复可见

Minecraftsine 发表于 2019-4-7 13:14:29

无论如何都会支持作者大大更新下去的,已收藏

minecraft12306 发表于 2019-4-7 17:56:55

感谢楼主分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: [光影包制作教程] 第二章———光影的初次尝试