Информация: Уважаемые посетители! Если вам не приходит письмо для активации учетной записи, то в первую очередь проверьте папку «Спам». Если письма нет, то пишите свой никнейм и краткое описание проблемы на e-mail: mr.angelo@railroadsim.net

Шейдеры и их практическое применение

Другие вопросы и проблемы разработки дополнений

Шейдеры и их практическое применение

Сообщение hellishfire » 15.05.2025, 21:04

Хочу собрать в одной шапке темы описание шейдеров, их поведение и настройку.
В обсуждении предлагаю вносить дополнения и делиться своим результатами комбинаций карт, комбинаций шейдеров для достижения определённых эффектов.
Лично для меня важной вехой стало осознанное использование карт бликов (спек/глоос), карты нормалей (в формате OpenGL). В комбинации с бликами нормалка работает намного эффективнее. И самое главное - имитация изображения голого металла не как мокрой поверхности, а вполне убедительного визуала (иллюстрации позже).

Итак, по списку:

TrainGlass.fx
Стёкла с отражением неба. Подходит для стёкол, смотрящих на улицу, ничем не прикрытых.

TrainGlassWeatherEffects.fx
Шейдер для отображения и правильной физики капель на окнах кабин и салонов. 4 слота. Описание и небольшой гайд в планах "на потом".


BlendATexDiff
Основное применение — стёкла внутри кабин, салонов, помещений. Не имеют встроенного отражения неба как в TrainGlass.fx. Можно использовать и для наружных стёкол, если вам не нужно отражение неба на стекле.
Также, один из вариантов для подвагонной тени. Не синит как Substract, но контур тени берётся из альфа-канала, а не из RGB.

SubstractATexDiff
(Отсутствует в файле ShaderDesc.txt)
Один из вариантов для подвагонной тени. Контур тени в RGB. Альфа-канал не нужен.

Tex
Нетемнеющий шейдер (видно ночью). Походит для индикации в кабине — мелкие лампочки, шрифты. Этот шейдер применён на блоке КЛУБ.

AddATex
Нетемнеющий шейдер (видно ночью) с прозрачностью. В отличии от Tex, получает засветы от источников света. Можно использовать для зажжённых огней, плафонов, ночных окон в зданиях и т.д.


TexDiff
Самый обычный шейдер для самых обычных объектов. Диффузная текстура, возможна однобитная прозрачность из альфа-канала.

TrainBasicObjectDiffuse.fx
Шейдер аналогичный TexDiff, только с .fx. Разницу хотелось бы выяснить.

TrainBasicObjectSpecular.fx
Самый бюджетный способ добавить бликов на модель. Использован на ЧС7 заводской ливрее и на ЭР2.
В первый слот идёт диффуз, в второй карта Gloss или Specular.
Gloss/Specular (далее спек) можно сформировать "на коленке". Берём диффуз, обесцвечиваем, усиливаем конрастность через Levels до желаемого состояния. Чем светлее, тем сильнее блик. Грязь, подвагонка, дерево и т.п. можно оставлять тёмными. Для вариативности можно сверху текстуры положить контрастную пыль. Но лучше всего будет выглядеть, если сначала эту пыль положить на диффуз и уже с ней формировать спек.
Настройки шейдера — Specular Power = 1, CustomParameter1 = 64.0. И обязательно UVMap вернуть в 1 для текстуры второго слота. Во всех шейдерах далее аналогично.
Я предпочитаю оставлять 1/64.0, а эффект бликов уже настраивать самой текстурой. 1/64.0 по моему опыту — некая золотая середина. Если у вас Макс 2010 или Блендер, Specular Power можно выкрутить и поболее.
Важная ремарка. Голого металла этим шейдером мне добиться не удалось. Об этом далее.


TrainBumpSpecMask.fx
Один из шейдеров, который даёт возможность использовать в РВ покраску из Substance Painter (далее SP).
Всего два слота: 1.Диффуз со спеком в альфе 2.Карта нормалей
Настройки шейдера аналогичны предыдущему.
Но из SP я экспорчу через свой пресет сразу несколько карт и комбинирую их в диффуз и спек.
1.Base color (_bc) – просто карта цвета
2.Normal map сразу с РВшным суффиксом _nm для предотвращения компрессии (для РВ нужен формат карты нормалей - OpenGL).
3.Ambient Occlusion (далее AO) – кладём отдельным слоем над всеми с режимом свешивания Multiply (Умножение)
4.Gloss (_gloss) — карта, которую я использую как спек почти без изменений, т.е. сразу идёт в альфа-канал к бейс колору
Также, её можно положить над base color с режимом смешивания Soft Light или Overlay для подчёркивания несовершенств материала.
5.Metal — в этом шейдере нам нужен только, если у нас есть побитые края, где выступает голый металл. Можно добавить в спек, чтобы сделать силу блика максимальной. Но если куски голого металла большие, то в диффузе надо будет что-то выдумывать. Иначе в РВ это не будет похоже на металл.
6.Height — карта высот, вообще в принципе используется для более существенных перепадов высот на поверхности. Normal map для рельефа и неровностей, Height – для форм. Например, если у вас в SP нарисованы дверцы шкафов, двери в принципе, или окна, то можно использовать Height, опять же, с режимом смешивания Soft Light или Overlay. На диффузе это подчеркнёт форму дверей и немного изменит то их цвета. В итоге получим цветовую вариативность и хороший визуал.


TrainBumpSpecEnvMask.fx
Вот этим шейдером я добился наиболее убедительного изображения голого металла в РВ.
Первый слот диффуз со спеком в альфе (как и в предыдущем), второй слот — нормалка, третий — кубик энвайрнмент (я сюда подложил вертикальную текстуру металла, но не факт, что так было задумано. Поправьте меня, если я не прав.
Первые два слота так же, как и в предыдущем шейдере.
Там где металл, диффузу лучше быть потемнее, а в спеке почти 100% белое, но сверху желательно наложить кусок gloss map, чтобы была неравнометность бликов на поверхности.
Этот шейдер я попробовал буквально за вечер до написания поста, поэтому информация сыровата, но результат есть. Металл выглядит похожим на металл в рамках того, что нам может предложить графический движок РВ.

TrainLightBumpSpecMask.fx
Шейдер аналогичен TrainBumpSpecMask.fx, но спек кладётся в альфу нормал мапы (второй слот), а в третий слот устанавливается карта теней (в подписи к релизу шейдера было указано, что надо использовать AO в третий слот).


TrainUberShader.fx
Судя по названию, должен быть некой ультой среди шейдеров, но, по моему опыту, достаточно бесполезен.
Все предыдущие шейдеры обладают аналогичными возможностями, кроме карты Emissive.
В первом слоте диффуз
Во втором бамп/карта нормалей
Третий слот — комплексная карта с разбивкой по всем четырём каналам (rgba => AO, Emissive, Env, Specular соответственно)
Я честно не понимаю, для чего здесь Emissive (карта свечения). Фонари делать? Но зачем в составе сложного убер шейдера. Для этого есть TrainEmissiveGlow.fx Если вы поняли его предназначение, поделитесь, пожалуйста.
Использование остальных карт мы уже рассмотрели в предыдущих шейдерах.

Далее под спойлером шейдеры из файла ShaderDesc.txt, которые я либо не успеваю за один заход описать, либо никогда ими не пользовался, либо в принципе нет понимания, как ими пользоваться при всём желании.

Сразу за один заход всё описать невозможно, а тем более предоставить иллюстрации. Но начало хотелось положить и вот оно.

Diffuse
No texture, just diffuse colour
BlendAlphaDiff
No texture, vertex alpha blending with diffuse colour
AddAlphaDiff
No texture, additive vertex alpha with diffuse colour
AddTexAlphaDiff
Texture mapped, with diffuse colour, with additive vertex alpha
BlendATex
Texture mapped, no lighting applied, using alpha blending from texture's alpha channel


BlendATexDiffTrans
Texture mapped, diffuse colour, alpha blending from texture's alpha channel, pixels with alpha=0 are transparent (e.g. alphaed fences).
AddATexDiff
Texture mapped, with diffuse colour, using additive alpha from texture's alpha channel
BlendATexAlphaDiff
Texture mapped, with diffuse colour, using alpha blending from texture's alpha channel combined with vertex alpha
AddATexAlphaDiff
Texture mapped, with diffuse colour, using additive alpha from texture's alpha channel combined with vertex alpha
AddDiffuse
No texture, with diffuse colour, using additive alpha
AddTex
Texture mapped, no lighting applied, using additive alpha
AddTexDiff
Texture mapped, with diffuse colour, using additive alpha
DualTexDiffVAlpha
Dual textured, with diffuse colour, using vertex alpha to blend between textures
DualTexDiffTAlpha
Dual textured, with diffuse colour, using second texture's alpha channel to blend between textures
DualTexDiffTrans
Dual textured, with diffuse colour, using second texture's transparency
DualTexDiffAdd
Dual textured, with diffuse colour, using additive alpha for second texture
DualBlendATexDiffAdd
Dual textured, with diffuse colour, using alpha blending for first pass and additive alpha for second pass
Invisible
Nothing is drawn - use for invisible collision barriers
DualTexDiffStencilAdd
Dual textured, with diffuse colour, using additive alpha for second texture only where first texture has solid alpha
DualTexDiffStencilBlend
Dual textured, with diffuse colour, using blended alpha for second texture only where first texture has solid alpha
DualAddATexDiffDestBlend
Dual textured, diffuse colour, first pass additive, and second pass blended alpha with the alpha of the first texture (e.g. puddles).
BridgeSplit
Not drawn. Use to define areas where track crosses over itself.
EmbossBumpmap
Bumpmap for Train 2 prototype or something like that
TripleTexDiffAddAdd
Triple textured, 2nd and 3rd passes are drawn additively
TripleGlossMap
Triple texture, 2nd pass contains gloss map in alpha channel, 3rd pass (reflection) texture drawn additively
TripleGlossMapWithLightIntens
Triple texture, 2nd pass alpha channel gloss map, 3rd pass drawn additively affected by lightmaps if used
TripleGlossMapWithoutLightIntens
Triple texture, 2nd pass alpha channel gloss map, 3rd pass drawn additively not affected by lightmaps if used
DualTexDiffAddWithLightIntens
Add second pass to first pass, brightness of second pass affected by lightmaps if used
DualTexDiffAddWithoutLightIntens
Add second pass to first pass, brightness of second pass not affected by lightmaps if used
TripleTexDiffTAlpha
Triple textured, with diffuse colour, using each texture's alpha channels to blend between each pair of passes
TripleTexDiffVAlpha
Triple textured, with diffuse colour, using same vertex alpha to blend between each pair of passes
TripleTexDiffTAlphaVAlpha
Triple textured, with diffuse colour, pass 2 uses texture alpha for blending, pass 3 uses vertex alpha for blending
TripleTexDiffVAlphaTAlpha
Triple textured, with diffuse colour, pass 2 uses vertex alpha for blending, pass 3 uses texture alpha for blending
DualTexDiffInvisibleStencilBlend
Dual textured, with diffuse colour, first pass invisible, second pass alphaed using alpha of first pass texture



TrainBumpEnv.fx
Textured, normal mapped, environment mapped. TEX1 RGB Diffuse, TEX2 RGB Normal map, TEX3 Cubic environment
TrainBumpEnvMask.fx
Textured, normal mapped, masked environment map. TEX1 RGB Diffuse A Env mask, TEX2 RGB Normal map, TEX3 Cubic environment
TrainBumpSpec.fx
Textured, normal mapped, specular. TEX1 RGB Diffuse, TEX2 RGB Normal map
TrainBumpSpecEnv.fx
Textured, normal mapped, environment map and specular. TEX1 RGB Diffuse, TEX2 RGB Normal map, TEX3 Cubic environment
TrainFlora.fx
Ambient lighting, single texture. TEX1 RGB Diffuse

TrainLightMapWithDiffuse.fx
Diffuse tex, lightmap, dynamic lighting. TEX1 RGB Diffuse, TEX2 RGB Lightmap
TrainVertexLit.fx
Diffuse tex, vertex lighting only. TEX1 RGB Diffuse
TrainVertexLitWithDiffuse.fx
Diffuse tex, vertex lighting, dynamic lighting. TEX1 RGB Diffuse
TrainSkyDome.fx
Skydome
SkinAmbient.fx
Single colour skinned
SkinDiffuse.fx
Textured skinned. TEX1 RGB Diffuse
SkinSpecular.fx
Textured, specular and skinned. TEX1 RGB Diffuse
SkinNormal.fx
Textured, normal mapped, specular and skinned. TEX1 RGB Diffuse, TEX2 RGB Normal map
SkinGloss.fx
Textured, normal mapped, specular with gloss map, and skinned. TEX1 RGB Diffuse, TEX2 RGB Normal map, TEX3 RGB Gloss map
SkinRESERVED1.fx
RESERVED FOR FUTURE USE
SkinRESERVED2.fx
RESERVED FOR FUTURE USE
SkinRESERVED3.fx
RESERVED FOR FUTURE USE
StencilShadow.fx
Stencil shadow objects, material must begin with shadow_ to be detected
TrainBumpEnv.fx
Textured, vertex environment mapped. TEX1 RGB Diffuse, TEX2 Cubic environment
TrainBumpEnvMask.fx
Textured, masked vertex environment map. TEX1 RGB Diffuse A Env mask, TEX2 Cubic environment

LoftBump.fx
Diffuse texture and normal map
LoftBumpAlpha.fx
Diffuse texure with alpha and normal map
LoftBumpTrans.fx
Diffuse texture with 1-bit alpha and normal map

TrainViewFacingFlora.fx
Single texture, globally lit, view facing
TrainUprightViewFacingFlora.fx
Single texture, globally lit, upright view facing
WaterCubeMap.fx
Splish
TrainSpecEnv.fx
Textured, vertex environment mapped with specular. TEX1 RGB Diffuse, TEX2 Cubic environment
TrainSpecEnvMask.fx
Textured, masked vertex environment mapped with specular. TEX1 RGB Diffuse A Env & Spec mask, TEX2 Cubic environment
WaterScenery.fx
Water with normal map, diffuse and cubic reflection map. TEX1 Normal Map TEX2 RGB Diffuse A Translucency, TEX3 Cubic environment map
TrainEmissiveGlow.fx
Textured, with emmisive glow. TEX1 diffuse, TEX2 emissive mask

LoftTexDiffSpec.fx
Diffuse texture, fixed specular for lofts
Stars.fx
Sky Dome specific star layer shader
Clouds.fx
Sky dome specific cloud layer shader

TrainDecal.fx
Special shader for rendering decals
TrainShadowOnly.fx
Special shader that doesn't render anything, but casts shadows
TrainPostDPPObjectDiffuse.fx
Diffuse shader used to draw geometry after deferred post processing. Use for thin geometry such as wires for better anti-aliasing
LoftPostDPPTexDiffSpec.fx
Diffuse shader used to draw lofts after deferred post processing. Use for thin geometry such as wires for better anti-aliasing
LoftTunnelTexDiff.fx
Tunnel loft shader
LoftTunnelTexDiffTrans.fx
Tunnel loft shader with transparency channel
LoftTunnelBumpSpec.fx
Tunnel loft shader with bump and specular
TrainViewFacingUnlit.fx
Unlit view facing shader
TrainShadowOnlyDiffuse.fx
Special shader that doesn't render anything, but casts shadows. TEX1 A Transparency

WaterFlow.fx
Flowing version of WaterCubeMap for flowing river lofts
SkinDiffusePallete2.fx
Palletised version of SkinDiffuse.fx. TEX1 rg - masks, b - ignored, a - lum. TEX2 and TEX3 pallete textures
Аватара пользователя
hellishfire
 
Сообщения: 816
Зарегистрирован: 14.12.2012, 20:50
Благодарил (а): 1059 раз.
Поблагодарили: 1290 раз.
Блог: Просмотр блога (4)
Роль: Разработчик
Имя: Игорь

Вернуться в [RW] Другие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2