以下の内容は通常、GLSL 300 以降に基づいています。
以下のコード行の一部は「疑似コード」であり、そのほとんどは renderDoc のリバース エンジニアリングされた標準コードです。
私には OpenlGL の基礎がまったくないので、もう一度勉強するつもりはありません。
目次
Clip() 削除関数の破棄;
_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 モジュールの色出力と最終的な色加算式
#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 は拡散または周囲波である可能性があります。
方程式の前半にはドット積 (ドットの方向) が乗算されるため、前半は拡散している可能性があります。
したがって、周囲光は必要ないため、_28 は周囲光 (ambient) として推論されます。
_26 = dot(_27, _19);
_28 = _29 * _33._m1.xyz;// _33.m1 是很奇怪的传入(binding==1)
_29 *= _33._m2.xyz;//虽然_33.m2也很奇怪
参考資料 - 追加:
レイアウト修飾子 (GLSL) - OpenGL Wiki (khronos.org)
opengl – GLSL均一レイアウトバインディングとテクスチャ - コードログ
上記のリンクには、Wiki、技術フォーラムのディスカッション、中国のフォーラムなどの情報が含まれていますが、いずれも貴重な一次情報です (実際、かなりひどいものです。ネットで検索するとたくさん見つかります)。