Garry's Mod
Оценок: 1,517
GShader Library
13
5
8
11
4
4
2
2
7
4
3
2
2
2
   
Наградить
В избранное
В избранном
Удалить
Тип контента: Дополнение
Тип дополнения: Инструмент
Метки дополнений: Сценическое
Размер файла
Добавлен
Изменён
238.224 KB
5 авг в 6:08
28 ноя в 16:41
Обновлений: 126 (просмотреть)

Подпишитесь, чтобы загрузить
GShader Library

Описание
GShader Library
— шейдерная библиотека, являющаяся основой для создания Deferred renderer (shading & lighting) шейдеров, выступающим удобным инструментом для создания продвинутых эффектов пост-обработки.

Краткий список текстур в аддоне:
  • _rt_WPDepth
  • _rt_NormalsTangents
  • _rt_ResolvedFullFrameDepth
  • _rt_BumpFog

Аддон включает в себя:
  • Реконструкцию WorldPos, WorldNormals и Tangents из _rt_ResolvedFullFrameDepth.
  • Сглаживание нормалей.
  • Увеличение битности буфера глубины _rt_ResolvedFullFrameDepth.
  • Матрицы вида и проекций: View, Proj, ViewProj. Для перспективной и ортогональной проекции.
  • Новые найденные форматы текстур, позволяющие гибче работать с шейдерами.
  • Кодирование Нормалей и Тангентов в одну текстуру, компоновку WorldPos и Глубины, что позволит вмещаться в лимит 4-ех текстур в screenspace_general.
  • Выбор метода реконструкции нормалей [wickedengine.net]: Простой, 3 Tap, Улучшенный, Точный[atyuwen.github.io].
  • Функцию shaderlib.DrawScreenQuad() с поддержкой Multiple Render Target.
  • Функцию shaderlib.DrawVertexScreenQuad() с вводом данных в вертексный шейдер и поддержкой MRT. Больше информации здесь: Example 6[github.com].

Кодирование Нормалей и Тангентов
Нормали и Тангенты хранятся в рендертаргете _rt_NormalsTangents, где:
  • .RG — Normals
  • .B — Tangents
  • .A — Sign: Знак в виде числа 1 или -1. Он поможет вам в освещении и создании Post-Process Parallax Mapping'a.
Нормали кодируются с помощью Octahedron normal vector encoding [knarkowicz.wordpress.com]
Декодирование Нормалей происходит через функцию:
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); }
Тангенты кодируются с помощью Diamond Encoding [www.jeremyong.com]
Декодирование Тангентов происходит через функцию:
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; }

Пример работы с _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);

Компоновка WorldPos'a и Глубины
WorldPos и Depth хранятся в рендертаргете _rt_WPDepth, где:
  • .RGB1/WorldPos: Это значит то, что WorldPos запакована в числа <1. Для распаковки так же используйте float3 worldPos = 1/tex2D(WPDepthBuffer,uv).xyz; внутри шейдера.
  • .A — Глубина

Внимание:
Буфер глубины не записывает полупрозрачные объекты, поэтому, скорее всего, вы будете рендерить шейдеры в хуке PreDrawTranslucentRenderables [wiki.facepunch.com].

Отдельное спасибо:
Meetric [github.com] — за реконструкцию WorldPos.
notunknowndude — за идею для улучшения буфера глубины.
puwada — за подсказку с совместимостью форматов текстур и DirectX.
LVutner [github.com] — создание кодирования для Velocity Buffer на основе метода CryTeck.

Ссылки:

Автор сообщения: devonium
SHADERS FOR EVERYONE!!!! i have no idea wtf is going on

P.S. Примеры шейдеров не находятся в аддоне. Скриншоты показывают, что позволяет сделать GShader library.
Популярные обсуждения Просмотреть все (18)
1
30 ноя в 7:56
Hands and weapons turning pitch black
VOLTZ3
34
16 сен в 20:05
Why is there a DMCA notice on this Addon?
CosmicInterloper
11
19 сен в 5:29
can someone send a shader from this addon if there is one?
ModestShoducks
Комментариев: 445
Baboon13 30 ноя в 3:10 
Ку Евгеха , можешь добавить настройку для serverside? А то всех уговаривать зайти в постобработка-> шейдеры - не о чем , не все увидят шейдеры из за лени и тд , типо чтобы настройки были для всего сервера :GDEasy:
tsaa 28 ноя в 8:28 
how do you keep settings like when you start a new game, the settings you have will apply?
Evgeny Akabenko  [создатель] 27 ноя в 23:08 
Thats now ok. Thanks! :HeartPix:
Tyro 27 ноя в 13:50 
Im having the same issue as below
Karroe 27 ноя в 13: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 27 ноя в 13:18 
Lastest update (this Update), gives me LUA errores!
GabrielRS 26 ноя в 17:49 
I got an issue where it makes all of a characters polygons visible it looks very blocky
PrinceJaxonHellsing™ 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 23 ноя в 20:43 
it crashes gmod when you touch water
Kona 19 ноя в 18:38 
Thats what I'm thinking because i had those two as my favs and now their gone, wtf happened?