Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 7436|回复: 109

[教程] 【21w10a+】核心着色器浅析

    [复制链接]
晴路卡 当前离线
积分
5912
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-3-15
查看详细资料
发表于 2021-3-13 15:05:27 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 晴路卡 于 2021-7-10 23:51 编辑

前言
Shaders are now included for all supported render states. Any shader except for the blit shader can also be replaced in resource packs. For now replacing these shaders is not officially supported and the way it works may change in the future.
The current rendering engine uses a system similar to the post processing shader pipeline. There are some differences between both system that cater to the slightly different requirements.

      21w10a关于着色器技术性修改的说明是这么写的。挺振奋人心的,当天下载后在shader目录下的core文件夹里发现了一堆眼花缭乱的新着色器程序。但是经过一段时间的窥屏,交流和实际操作之后,还是感觉到原版着色器因为各种原因被限制地死死的。取代Optifine的说法个人感觉在现在的条件下更是天方夜谭。不过随着时间的推移社区内也确实有了一些着手在实现一些原来属于光影的功能的项目。
      不管怎么说,这会儿原版着色器能简单操作的东西确实多了很多(带来的BUG也不少,不过很多都在21w11a修复了)。在技巧版蹲点了两三天也没见着相关的讨论,我就根据这几天做的和看到的内容来讲讲一些在新的原版着色器修改下能实现的原来做不到的一些简单功能(一些翻文档就能知道同时又缺乏惊喜的就免了),看看能不能抛砖引玉吧。欢迎补充和纠错!
      ps:以下着色器程序均在21w10a中测试,涉及到纹理坐标内容的代码大概率不能在最新快照中应用。

学习资料

      开始之前还是希望读者能对原版着色器有个大致的了解,不管是新的还是旧的。
      供参考的一些已有的包的链接(如果有的话)会放在最后。
      这边直接偷一些MCC Discord里的人整理的一些资料:
      开局放张美图,咱们开始吧(虽然水反是1.16就有的东西)
file_1615568719000.jpg

评分

参与人数 28人气 +58 金粒 +659 贡献 +4 收起 理由
chyx + 3 MCBBS有你更精彩~
敏克吃肉肉 + 1 + 20 强!
Ghost_Last + 2 + 30 qlk 强啊
Vandarkblue + 2 + 5 Ssssssssssssssssssss
Argon_gas + 2 火星人送来评分
△@← + 1 + 20 神乎其技!6的飞起!
brooke_zb + 3 + 25 + 1 MCBBS有你更精彩~
TD_Monsteric + 1 + 15 MCBBS有你更精彩~
SQwatermark + 3 + 20 MCBBS有你更精彩~
Y制杖杖 + 1 + 8 MCBBS有你更精彩~
繁琐Fansuo + 3 + 25 MCBBS有你更精彩~
ruhuasiyu + 1 MCBBS有你更精彩~
玄素 + 4 + 50 + 1 MCBBS有你更精彩~
沉默的秋水 + 1 + 20 学习学习
Chelover_C60 + 2 + 50 神乎其技!6的飞起!
Jokey_钥匙 + 2 + 40 不行 要睡着了(
SPGoding + 1 神乎其技,不服不行
迷茫_ + 2 MCBBS有你更精彩~
空辰KC + 2 + 39 MCBBS有你更精彩~
洞穴夜莺 + 2 Ssssssssssssssssssss

查看全部评分

GeForceLegend 当前离线
积分
4562
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-7-7
查看详细资料
发表于 2021-5-21 10:56:02 | 显示全部楼层
本帖最后由 GeForceLegend 于 2021-5-21 11:01 编辑

顺便说一句那个原版路径追踪的原理:先设定一个存储体素图的分辨率(可以手动在文件内改,默认是1024x705,窗口化的736P分辨率),然后获取顶点的位置,根据gl_VertexID位移之后,判断出这个方块所在的世界空间位置,然后按照一个像素一个方块的对应关系将顶点位置拉至体素图对应像素的角落(所以在老版本内关闭 极佳!图像设置后可以看到屏幕上是白色底色然后一堆红色像素),同时有一小块特殊空间存储 gbuffer 处理时独有的一些信息,例如 gbuffer 内的 ModelView 矩阵和 Projection 矩阵,以及 chunkOffset 等。所有的信息都会在 极佳!图像设置对应的后处理程序中读取,并进行路径追踪。

因为如上原因,这个 shader 要求玩家的游戏窗口分辨率至少有 1024x705 ,不然体素图会读取错误。不过更高的分辨率一般不会导致什么bug,因为每次读取体素图时的位置都被设置在了这个像素的正中间

方块材质的获取来自 assets/minecraft/textures/effect/atlas.png ,左上角是原版生成的 atlas 图,其余三个角则存储了其他的信息(例如发光强度、金属性、粗糙度等)。由于每个方块的信息都存储在一个像素里面,只能存储一组材质UV位置,每个方块都只能使用一张贴图。

上面的内容和 PTGI 的路径追踪实现方案几乎如出一辙,区别在于 PTGI 使用 shadowcolor 存储体素数据,而这个原版 shader 用屏幕 buffer 存储;PTGI使用 Optifine 的功能获取游戏生成的动态 atlas 贴图,而这个 shader 使用存储在 textures/effect 的自己生成的静态atlas贴图

另外从这个shader似乎能看出在 textures/effect 里面存储贴图之后,可以在后处理里面获取到。例如这个 shader 的该目录下存放了 atlas.png 和 steve.png ,然后 shaders/post/transparency.json 里面存在以下数据:
  1. {
  2.     "name": "AtlasSampler",
  3.     "id": "atlas",
  4.     "width": 1,
  5.     "height": 1,
  6. "bilinear": false
  7. },
  8. {
  9.     "name": "SteveSampler",
  10.     "id": "steve",
  11.     "width": 1,
  12.     "height": 1,
  13.     "bilinear": false
  14. }
复制代码

没事的话可以来我的Fork看看,虽然说没啥好康的

评分

参与人数 3人气 +7 金粒 +62 收起 理由
chyx + 3 MCBBS有你更精彩~
1041159637 + 2 + 12 神乎其技!6的飞起!
晴路卡 + 2 + 50 神乎其技!6的飞起!

查看全部评分

回复

使用道具 举报

chyx 当前离线
积分
18600
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-3-20
查看详细资料
发表于 2021-7-19 23:31:38 | 显示全部楼层
本帖最后由 chyx 于 2021-7-19 23:36 编辑

谢谢你这个帖子。我之前一直在写这堆东西,但是一直不知道这里的这个讨论区。

我最近是使用类似这样的东西textureLod(Sampler0,  UV0+vec2(0.5,0.5)/textureSize(Sampler0,0),0).xyz==vec3(0.0)
来检查贴图冗余区域的信息。来知道这个shader处理的是什么东西的。

gold_block.png
比如这里,金块的材质被我改成了这样。通过设置方块模型里的uv,看起来和原来没差异了。但是在着色器里判断四个marker,我能知道顶点是金块的一部分,和它是贴图的哪个角。这样能省去一大堆很难看的莫名其妙的1024什么的。

右侧的区域被我放了一些视差贴图什么的东西。因为位置关系是固定的,可以在shader里轻易获取到。
==============================
而在这之前我做的https://www.mcbbs.net/thread-1219326-1-1.htmlhttps://www.mcbbs.net/thread-1219793-1-1.html使用的是另一种方案。
这里的方块模型处,特殊平面的y是3.721。通过对顶点坐标取小数部分并判断即可知道这个是特殊的面。

评分

参与人数 1人气 +2 收起 理由
晴路卡 + 2 Ssssssssssssssssssss

查看全部评分

回复

使用道具 举报

Ghast... 当前离线
积分
2153
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-1-2
查看详细资料
发表于 2021-3-13 16:28:12 | 显示全部楼层
配合指令看来可以做热变形效果了。震荡波也可以,爽的啊。

找时间学学着色器这东西吧。

SPECIAL EFFECTS EVERYWHERE
回复

使用道具 举报

kstm 当前离线
积分
27
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-9-4
查看详细资料
发表于 2021-3-13 16:37:43 | 显示全部楼层
完成任务

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

kstm 当前离线
积分
27
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-9-4
查看详细资料
发表于 2021-3-13 16:38:06 | 显示全部楼层
完成任务

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

lzwx 当前离线
积分
77
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-1-27
查看详细资料
发表于 2021-3-13 23:05:19 | 显示全部楼层
只是本着“看贴(虽然看不懂)回贴,

利人利己的中华民族优秀传统美德”,顺便赚点积分。

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

lin3760 当前离线
积分
748
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-3-4
查看详细资料
发表于 2021-3-31 19:07:10 来自手机 | 显示全部楼层
什么是着色器,,,?
回复

使用道具 举报

高胜寒 当前离线
积分
544
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-7-10
查看详细资料
头像被屏蔽
发表于 2021-3-31 19:43:33 | 显示全部楼层
汪汪汪汪汪汪汪汪汪汪汪汪

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

Apple1234.. 当前离线
积分
123
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-4-19
查看详细资料
头像被屏蔽
发表于 2021-4-1 18:37:03 | 显示全部楼层

完成任务!!

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

执光 当前离线
积分
532
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-3-2
查看详细资料
发表于 2021-4-3 01:51:41 | 显示全部楼层
虽然看不懂 但是作者有心了 赞!

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

执光 当前离线
积分
532
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-3-2
查看详细资料
发表于 2021-4-3 11:36:56 | 显示全部楼层
虽然看不到 但是感觉很牛

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

执光 当前离线
积分
532
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-3-2
查看详细资料
发表于 2021-4-3 12:28:32 | 显示全部楼层
非常不错的知识 赞

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

followspot 当前离线
积分
212
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-4-4
查看详细资料
发表于 2021-4-4 00:45:22 | 显示全部楼层
看了下 作者用心了 对我之后的理解十分有帮助 赞!

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

1901393637 当前离线
积分
48
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-4-5
查看详细资料
发表于 2021-4-5 17:37:01 | 显示全部楼层
as 安达市阿萨德爱上的打啥

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

followspot 当前离线
积分
212
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-4-4
查看详细资料
发表于 2021-4-5 22:10:52 | 显示全部楼层
我能说我不知道什么是着色器嘛
回复

使用道具 举报

aa89908352 当前离线
积分
164
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-10-2
查看详细资料
发表于 2021-4-10 23:28:36 来自手机 | 显示全部楼层
啥玩意看不懂

评分

参与人数 1人气 -1 金粒 -10 收起 理由
SHEEP_REALMS -1 -10 请仔细阅读版规,本版严禁灌水!.

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2021-7-30 16:25 , Processed in 0.082384 second(s), Total 40, Slave 34 queries, Release: Build.2021.07.28 1652, Gzip On, Redis On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2020 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表