Garry's Mod

Garry's Mod

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

订阅以下载
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.

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.
热门讨论 查看全部(17)
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
7
8 月 28 日 上午 11:12
How this works как это работает?
Tixon-11
444 条留言
tsaa 10 小时以前 
how do you keep settings like when you start a new game, the settings you have will apply?
Evgeny Akabenko  [作者] 19 小时以前 
Thats now ok. Thanks! :HeartPix:
Tyro 11 月 27 日 下午 1:50 
Im having the same issue as below
Karroe 11 月 27 日 下午 1:26 
After recent update, this error is being spammed in the console:

[GShader Library] lua/autorun/client/worldpos.lua:178: attempt to index global 'old_ViewProj' (a nil value)
1. DrawReconstruction - lua/autorun/client/worldpos.lua:178
2. fn - lua/postprocess/shader_lib.lua:261
3. unknown - lua/ulib/shared/hook.lua:115 (x3069)
Emica5 11 月 27 日 下午 1:18 
Lastest update (this Update), gives me LUA errores!
GabrielRS 11 月 26 日 下午 5:49 
I got an issue where it makes all of a characters polygons visible it looks very blocky
PrinceJaxonHellsing™ 11 月 24 日 下午 12:25 
Hey, so I have a weird issue when this mod is enabled, where in third person, there's like, some weird duplicate stretched out version of my player model, and with the physgun equipped, my camera is inside my player models head some reason I don't know how to fix it. I also have a general issue where weapons I have, specifically many of the vanilla half life 2 weapons, I can see my arms and my camera is clipping through them, I know that's not an issue with this mod, but I was wondering if anyone has a solution for that too?
chicken nugget 11 月 23 日 下午 8:43 
it crashes gmod when you touch water
Kona 11 月 19 日 下午 6:38 
Thats what I'm thinking because i had those two as my favs and now their gone, wtf happened?
Jonathan Shoots'em 11 月 19 日 下午 3:23 
So what happened to the CSM and Volumetric shaders? they got taken down