以下内容一般基于 GLSL 300 之后
以下某些代码行,是“伪代码“,绝大部分是renderDoc 逆向产生标准代码
本人OpenlGL零基础,也不打算重头学
目录
Clip() 剔除函数 discard;
FS最终颜色输出 out 和最终颜色相加方程
Clip() 剔除函数 discard;
_21 = texture(_7, _14);
//.................
_26 = _21.w + (-_33._m4);
_29 = _21.xyz * _33._m3.xyz;
_24 = _26 < 0.0;
if (_24)
{
discard;
}
从 discard; 命令可得知,一般通过透明度剔除, _26 == color.a
_21.w 刚好对应color.a
显而易见:_21 == _color; 就是v2f 的颜色
再往上推,得知,_14 == uv
FS模块颜色输出 out 和最终颜色相加方程
#if FS
layout(location = 0) out vec4 _17;
//因为 —17为最终输出,所以通过逆向如下
//关键在于下面的方程式 _125 = XXXXXX + _XX;
main(){
vec3 _125 = (_29 * vec3(_26)) + _28;
_17 = vec4(_125.x, _125.y, _125.z, _17.w);
_17.w = 1.0;//这行代码,不重要
}
对于,这个方程式(求——_125颜色)
vec3 _125 = (_29 * vec3(_26)) + _28;
我们假设是漫反射(diffuse)+环境光(ambient)
所以,_28 可能是 diffuse 或者 ambient
因为方程式的前半部分,有乘以一个点积(dot方向),所以前半部分很可能是漫反射
所以,_28推断为环境光(ambient),因为环境光是不需要
_26 = dot(_27, _19);
_28 = _29 * _33._m1.xyz;// _33.m1 是很奇怪的传入(binding==1)
_29 *= _33._m2.xyz;//虽然_33.m2也很奇怪
参考资料-额外:
Layout Qualifier (GLSL) - OpenGL Wiki (khronos.org)
opengl - GLSL Uniform layout binding and textures - Stack Overflow
高级GLSL - LearnOpenGL-CN文章来源:https://www.toymoban.com/news/detail-726655.html
以上链接分别有wiki,技术论坛讨论,中文论坛等等资料,都是不可多得的一手资料(其实也挺烂大街的,网上一搜索,多如牛毛) 文章来源地址https://www.toymoban.com/news/detail-726655.html
到了这里,关于Unity记录一些glsl和hlsl的着色器Shader逆向代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!