Garry's Mod

Garry's Mod

1,576 个评价
GShader Library
13
5
8
11
4
4
2
2
7
4
3
2
2
2
   
奖励
收藏
已收藏
取消收藏
素材类型: 插件
插件类型: 工具
插件标签: 风景
文件大小
发表于
更新日期
241.026 KB
8 月 5 日 上午 6:08
12 月 10 日 上午 7:47
128 项改动说明 ( 查看 )

订阅以下载
GShader Library

描述
GShader Library
— a shader library that serves as the foundation for creating Deferred Renderer (shading & lighting) shaders, acting as a convenient tool for creating advanced post-processing effects.

Brief list of textures in the addon:
  • _rt_WPDepth
  • _rt_NormalsTangents
  • _rt_ResolvedFullFrameDepth
  • _rt_BumpFog

The addon includes:
  • Reconstruction of WorldPos, WorldNormals and Tangents from _rt_ResolvedFullFrameDepth.
  • Normal smoothing.
  • Increasing the bit depth of the depth buffer _rt_ResolvedFullFrameDepth.
  • View and projection matrices: View, Proj, ViewProj. For perspective and orthogonal projection.
  • Newly discovered texture formats that allow more flexible work with shaders.
  • Encoding Normals and Tangents into a single texture, packing WorldPos and Depth, which will fit within the 4-texture limit in screenspace_general.
  • Choice of normal reconstruction method[wickedengine.net]: Simple, 3 Tap, Improved, Accurate[atyuwen.github.io].
  • Function shaderlib.DrawScreenQuad() with Multiple Render Target support.
  • Function shaderlib.DrawVertexScreenQuad() with input data to vertex shader and MRT support. More info here: Example 6[github.com].

Encoding Normals and Tangents
Normals and Tangents are stored in the render target _rt_NormalsTangents, where:
  • .RG — Normals
  • .B — Tangents
  • .A — Sign: A value of 1 or -1. It will help you with lighting and creating Post-Process Parallax Mapping.
Normals are encoded using Octahedron normal vector encoding [knarkowicz.wordpress.com]
Normal decoding is done via the function:
float3 Decode(float2 f) { f = f * 2.0 - 1.0; // https://twitter.com/Stubbesaurus/status/937994790553227264 float3 n = float3(f.x, f.y, 1.0 - abs(f.x) - abs(f.y)); float t = saturate(-n.z); n.xy += n.xy >= 0.0 ? -t : t; return normalize(n); }
Tangents are encoded using Diamond Encoding [www.jeremyong.com]
Tangent decoding is done via the function:
float2 decode_diamond(float p) { float2 v; // Remap p to the appropriate segment on the diamond float p_sign = sign(p - 0.5f); v.x = -p_sign * 4.f * p + 1.f + p_sign * 2.f; v.y = p_sign * (1.f - abs(v.x)); // Normalization extends the point on the diamond back to the unit circle return normalize(v); } float3 decode_tangent(float3 normal, float diamond_tangent) { // As in the encode step, find our canonical tangent basis span(t1, t2) float3 t1; if (abs(normal.y) > abs(normal.z)) { t1 = float3(normal.y, -normal.x, 0.f); } else { t1 = float3(normal.z, 0.f, -normal.x); } t1 = normalize(t1); float3 t2 = cross(t1, normal); // Recover the coordinates used with t1 and t2 float2 packed_tangent = decode_diamond(diamond_tangent); return packed_tangent.x * t1 + packed_tangent.y * t2; }

Example of working with _rt_NormalsTangents:
float4 normals_tangets = tex2D(NormalTangentBuffer,uv); float flipSign = normals_tangets.a; float3 worldNormal = Decode(normals_tangets.xy); float3 tangents = decode_tangent(worldNormal, normals_tangets.z); float3 binormals = normalize(cross(worldNormal,tangents))* flipSign; float3x3 TBN = float3x3(tangents, binormals, worldNormal);

Packing WorldPos and Depth
WorldPos and Depth are stored in the render target _rt_WPDepth, where:
  • .RGB1/WorldPos: This means that WorldPos is packed into values <1. To unpack, use float3 worldPos = 1/tex2D(WPDepthBuffer,uv).xyz; in the shader.
  • .A — Depth

NOTE:
The depth buffer does not write translucent objects, so you will most likely render shaders in the PreDrawTranslucentRenderables [wiki.facepunch.com] hook.

Special thanks to:
Meetric [github.com] — WorldPos reconstruction.
notunknowndude— the idea to improve the depth buffer.
puwada — the tip about texture format compatibility and DirectX.
LVutner [github.com] — implementation Velocity Buffer encoding of CryTeck method.
Zaurzo [gist.github.com] — DynamicLight Wrapper.

Links:

引用自 devonium
SHADERS FOR EVERYONE!!!! i have no idea wtf is going on

P.S. Shader examples are not in the addon. Screenshots show what the GShader library allows you to do.
热门讨论 查看全部(18)
34
9 月 16 日 下午 8:05
Why is there a DMCA notice on this Addon?
CosmicInterloper
11
9 月 19 日 上午 5:29
can someone send a shader from this addon if there is one?
ModestShoducks
1
11 月 30 日 上午 7:56
Hands and weapons turning pitch black
VOLTZ3
457 条留言
^4sonny 5 小时以前 
makes mwb weapons invisible
VSK.Slimy 15 小时以前 
damn this update ruined mwbase
Adam :D 12 月 12 日 上午 4:06 
@leonhart48 it did work but it broke my shaders
leonhart48 12 月 11 日 下午 1:17 
From what i've seen, the "enable resolvedfullframedepth" option seems to be making MW Base weapons dissapear, disabling this should resolve the issue.
Possiblyshrub 12 月 11 日 上午 5:38 
My viewmodel dissapear when using MW Base after this update. Bummer
Project-R8 12 月 10 日 下午 6:12 
My MW Base weapons disappear from this too...
[SourceBro] 12 月 10 日 下午 12:33 
Makes MW Base weapons disappear :(
objir 12 月 10 日 上午 8:13 
Latest update makes MW weapons c_model invisible.
Baboon13 12 月 10 日 上午 4:54 
@Evgeny ку, я имею в виду чтобы просто с друзьями поиграть при заходе на сервер у всех были шейдеры как у хоста , я не разбираюсь в модинге :rjumendoka2:
Evgeny Akabenko  [作者] 12 月 10 日 上午 4:21 
@Baboon13 привет. А ты же можешь в клиентских файлах вызывать код на включение шейдера, а так же сделать свои настройки, если ты разрабатываешь главное меню для своего режима