Ru/Advanced Lighting: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (Multipage removal)
 
(49 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{otherlang2
{{LanguageBar|title = Продвинутое освещение}}
|title=Продвинутое освещение
 
|en=Advanced_Lighting
 
|fr=Advanced_Lighting:fr
}}
== Энтити света ==
== Энтити света ==
=== [[light_dynamic]] ===
=== {{L|light_dynamic}} ===
Невидимый источник света, который может постоянно меняться и перемещаться. Его местоположение может определяться скриптованными двигающимися объектами. Динамическое освещение  существенно нагружает процессор, потому что рассчитывается в реальном времени, и при этом оно гораздо гибче статического освещения. Используйте данный тип освещения редко, потому что он сильно нагружает графический движок.
Невидимый источник света, который может постоянно меняться и перемещаться. Его местоположение может определяться скриптованными двигающимися объектами. Динамическое освещение  существенно нагружает процессор, потому что рассчитывается в реальном времени, и при этом оно гораздо гибче статического освещения. Используйте данный тип освещения редко, потому что он сильно нагружает графический движок.


{{note:ru|Фактически, эта сущность состоит из двух огней: светового конуса и пятна света. Некоторые их значения не всегда влияют друг на друга.}}{{clr}}
{{Note|Фактически, эта сущность состоит из двух огней: светового конуса и пятна света. Некоторые их значения не всегда влияют друг на друга.}}{{clr}}


=== [[Glowing Textures|Светящиеся текстуры]] ===
=== {{L|Glowing Textures|Светящиеся текстуры}} ===
[[Image:glow_selfillum.jpg|thumb|256px|right|Светящаяся текстура.]]
[[File:glow_selfillum.jpg|thumb|256px|right|Светящаяся текстура.]]


В определённых случаях можно создавать свои светящиеся или освещающие текстуры, но для этого нужно использовать файл .vmt или .rad, что выходит за рамки нашей статьи. Это поможет дизайнеру уровня сберечь усилия, когда он будет создавать световые эффекты для своей карты.{{clr}}
В определённых случаях можно создавать свои светящиеся или освещающие текстуры, но для этого нужно использовать файл .vmt или .rad, что выходит за рамки нашей статьи. Это поможет дизайнеру уровня сберечь усилия, когда он будет создавать световые эффекты для своей карты.{{clr}}


=== [[env_particlelight]] ===
=== {{L|env_particlelight}} ===
[[image:int_particle.jpg|thumb|150px|right|A red light.]]
[[File:int_particle.jpg|thumb|150px|right|Красный свет.]]
 
A normal light that lights only the particles created by an [[env_smokestack]] and lights nothing else. Useful for enhancing lighting in areas with steam and such but rarely used due its specific nature.{{clr}}


=== [[env_projectedtexture]] ===
Обычный свет, который освещает только частицы из {{L|env_smokestack}}, и больше ничего. Полезно для улучшения освещения помещений с паром и подобных, но редко используется из-за своей специфики.{{clr}}
[[Image:Shadowmapping_filter1_res4096.jpg|thumb|256px|right|A very small scene demonstrating a env_projectedtexture with the "framebuffer fix", "Clipping fix" and "Grain fix". The depth texture resolution is set at 4096 and the grain/filter is at 1. Created with Hammer using only stock Half-life 2 content.]]


Similar to a light_dynamic, this is an invisible projective light source that can change and move over time. Its position, field-of-view and range can change and it can be aimed at moving objects. Env_projectedtextures are unique due to the fact that they cast real dynamic shadows from any geometry (brush or model) onto both brushes and models (even themselves) unlike RenderToTexture shadows. This system is used for the players flashlight in the Half-life 2 and L4D games.
=== {{L|env_projectedtexture}} ===
[[File:Shadowmapping_filter1_res4096.jpg|thumb|256px|right|Крошечная сцена, показывающая env_projectedtexture с "framebuffer fix", "Clipping fix" и "Grain fix". Разрешение текстуры составляет 4096 с зерном/фильтром 1. Создана с помощью Hammer и содержимого Half-life 2.]]


Env_projectedtexture is the most expensive light source, none of the lighting is done during map compilation, all calculations are done real-time. Having more than one or two will drastically hurt performance on older video cards. Also note when used on Source2007 and earlier engine versions without the [[env_projectedtexture/fixes|fixes found here]] the shadows will be very "grainy", low resolution and unable to have a parent. These issues have been fixed in newer engine iterations like Source2009, however you are limited to render only one projected texture at a time (INCLUDING the players flashlight).
Аналогично light_dynamic - это невидимый прожектор, который может изменяться и двигаться. Он может менять свою позицию, поле зрения и диапазон, будучи привязан к двигающимся объектам. Env_projectedtextures уникальна тем, что отбрасывает динамические тени от любой геометрии (браша или модели) на все браши и модели (даже на себя), в отличие от теней RenderToTexture. Данная система используется для фонариков игроков в Half-life 2 и L4D.


{{note|The farther you cast the shadow, the less detailed the shadow map will be due to the perspective projection. Lower FOV, higher NearZ and closer proximity to the shadow casters (as it's not wasting any space rendering nothing) often give best results. When shadows start to lose detail, the most obvious defect is light bleeding, the shadow will "be pulled" away from the caster(s).}}{{clr}}
Env_projectedtexture - самый тяжелый источник света, он не компилируется, и все расчёты происходят в реальном времени. Более одной или двух таких энтить резко снизят производительность на старых видеокартах. Также обратите внимание, что на Source2007 и более ранних версиях движка без {{L|env_projectedtexture/fixes|исправлений}} тени будут сильно "зернистыми", иметь низкое разрешение и без родителя. Эти проблемы были исправлены в новых итерациях движка Source2009, тем не менее вы ограничены только одной текстурой-прожектором (ВКЛЮЧАЯ фонарики игроков).


== Related entities ==
{{Note|Чем дальше отбрасываемая тень, тем меньше её детализация. Низкий FOV, высокий NearZ и приближение теней (поскольку они не визуализируют пространство) дают лучшие результаты. Когда тени начинают терять детализацию и очевидна утечка, то они будут "вытягиваться".}}{{clr}}
=== [[info_lighting]] ===
[[Image:info_lighting.png|left]]


This is an entity used to specify the origin from which another entity is lit. Sometimes due to drastic changes in light over short distances or complex shadows a model can appear to be lit incorrectly. By using this entity the model will be lit as though it were stationed at this location.
== Связанные энтити ==
=== {{L|info_lighting}} ===
[[File:info_lighting.png|left]]


One common example is the HL2 static Ladder props; when used in dark areas they may appear to glow, which can be corrected by inserting an info_lighting, naming it and specifying that name in the properties for the Ladder prop.{{clr}}
Эта энтитя используется в качестве источника, от которого светится другая сущность. Иногда, при резких перепадах света на коротких расстояниях или сложных теней, модель может неправильно отсвечивать. С помощью этой энтити модель будет светить так, будто она на своём месте.


=== [[env_lightglow]] ===
Одним из распространённых примеров являются статичные модели лестниц в HL2; в тёмных зонах они будут светиться, если в их свойствах правильно прописать info_lighting, задав последнему имя.{{clr}}
[[image:env_lightglow.jpg|thumb|150|right|the light glow effect]]


Used to create a bright almost flare that will fade out at specified distances. Generally used to transition dark tunnels to bright outsides. Used as a precursor to the [[HDR]] effect to fake a change in exposure of the light. Some [[Team Fortress 2]] maps use this to simulate bloom from regular light sources as well, but it is recommended that you use [[env_sprite]] instead.{{clr}}
=== {{L|env_lightglow}} ===
[[File:env_lightglow.jpg|thumb|150|right|глоу-эффект]]


=== [[info_no_dynamic_shadow]] ===
Используется для создания ярких огней, похожих на вспышку, и затухающих на определённом расстоянии. Как правило, ставится в конце тёмных тоннелей. Является предшественником {{L|HDR}}-эффекта, подделывая экспозицию света. Некоторые карты {{L|Team Fortress 2}} используют этот эффект, чтобы имитировать пушок от обычных источников света, но лучше использовать {{L|env_sprite}}.{{clr}}
[[image:int_nody.jpg|thumb|225px|right|An example in use]]


This forces a particular brush face to not receive any of the dynamic shadows created by physics entities or NPC’s. It’s used rarely but may be needed to hide incorrect or bad shadows that create an artificial look.{{clr}}
=== {{L|info_no_dynamic_shadow}} ===
[[File:int_nody.jpg|thumb|225px|right|Пример использования]]


=== [[env_tonemap_controller]] ===
Заставляет конкретную брашевую поверхность не создавать динамические тени, отбрасываемые физическими сущностями или NPC. Используется редко, но может потребоваться, чтобы скрыть неправильные или кривые тени, выглядящие искусственно.{{clr}}
Used to control the exposure of the [[HDR]] lighting effects. Unless used with fully implemented HDR it has little/no effect.{{clr}}


=== [[Hammer Smoothing Groups Dialog|Smoothing groups]] ===
=== {{L|env_tonemap_controller}} ===
[[Image:Smoothing groups smoothing example.jpg|thumb|400px|right|The cylinder on the left is not smoothed.<br> The cylinder in the middle is smoothed with a light map of 16.<br> The cylinder on the right is smoothed with a light map of 8.]]
Управляет экспозицией световых {{L|HDR}}-эффектов. Если нет полностью реализованного HDR, то не оказывает влияния.{{clr}}


Used to smooth lighting between faces. Found in the [[Hammer_Face_Edit_Dialog|face edit dialog]], the groups allow the lighting of a face to be smoothed between other faces, to produce rounded effects with lighting. A classic example is when making a cylinder: If no smoothing groups are set, each face on the brush will catch light separately and will be lit separately. This will create a very obvious effect of separate each face. If they are all placed in the same smoothing group the light will be blurred between the faces creating a much smoother rounder look on the pillar.  
=== {{L|Hammer Smoothing Groups Dialog|Группы сглаживания}} ===
[[File:Smoothing groups smoothing example.jpg|thumb|400px|right|Цилиндр слева не сглажен.<br> Цилиндр в середине имеет сглаживание освещённости 16.<br> Цилиндр справа имеет сглаживание освещённости 8.]]
Сглаживают освещение между гранями. Параметр находится в {{L|Hammer_Face_Edit_Dialog|диалоге редактирования поверхности}}, сглаживает освещение группы граней, создавая эффект закруглённого света. Классическим примером является цилиндр: если сглаживание группы не задано, каждая грань браша будет получать свет и освещаться отдельно. Это создаст эффект раздельных граней. Если все они будут помещены в одну группу сглаживания, свет станет рассеиваться между гранями, создавая вид округлой колонны.  


{{tip|Smoothing groups have no effect on performance, apart from adding extra time for VRAD to compile, so use them on your final compile.}}{{clr}}
{{tip|Группы сглаживания не оказывают влияния на производительность, лишь добавляя время компиляции VRAD, так что используйте их на финальной компиляции.}}{{clr}}


=== [[Lightmap|Lightmaps]] ===
=== {{L|Lightmap|Lightmaps}} ===
A lightmap is the lighting data of each face. The stored light is then added to the face giving it brightness. The lightmap's scale refers to the number of texture pixels per light pixel (luxel). Smaller values mean more luxels, thus a better quality but larger BSP size and compile times.
Карта освещённости - это данные освещённости каждой грани. Сохранённый свет впоследствии добавляется к грани, заставляя её отсвечивать. Шкала карты освещённости - это количество пикселей текстуры на пиксель света (люксел). Чем больше значение люксел, тем выше качество, но больше размер BSP и время компиляции.


[[image:intlight_lmap4.jpg|thumb|135px|left|A lightmap scale of 4]]
[[File:intlight_lmap4.jpg|thumb|135px|left|Масштаб карты освещённости 4]]
[[image:intlight_lmap16.jpg|thumb|135px|left|A lightmap scale of 16]]
[[File:intlight_lmap16.jpg|thumb|135px|left|Масштаб карты освещённости 16]]
[[image:intlight_lmap64.jpg|thumb|135px|left|A lightmap scale of 64]]{{clr}}
[[File:intlight_lmap64.jpg|thumb|135px|left|Масштаб карты освещённости 64]]{{clr}}


== Compile Options ==
== Опции компилирования ==
The Orange Box engine (Source 2007) added three additional options you can use when compiling to improve the realism during compile. To access these, open Expert mode in the Run Map dialog and select "HDR Full compile -final (slow!)"; then, select the "$light_exe" line in the list below that. In the Parameters field, append the options you wish to use, as shown below.
Движок Orange Box (Source 2007) добавил три новых опции, которые повышают реализм во время компиляции. Чтобы получить к ним доступ, в диалоговом окне Run Map выберите режим Expert, и затем "HDR Full compile -final (slow!)"; далее, в списке ниже, выберите строку "$light_exe". В поле Parameters введите необходимые параметры, описанные ниже.


'''NOTE:''' These considerably increase compile time, so it is recommended that you save them for the last few stages of your map!
'''ПРИМЕЧАНИЕ:''' Это значительно увеличит время компиляции, так что рекомендуется использовать на последних стадиях создания карты!


=== -staticproppolys ===
=== -staticproppolys ===
Normally, VRAD creates shadows under static props based on the collision mesh, since collision meshes are usually much simpler but still close enough to the prop's shape. This is usually sufficient, but some props may have oversimplified collision meshes or none at all causing VRAD to create unnatural shadows. This option allows you to override this for certain props and force VRAD to use the polygon mesh instead. This is also necessary if you need to use -textureshadows (see below).
Как правило, VRAD создаёт тени под статичными пропами на основе сетки столкновений, потому что это проще, поскольку сетка столкновений близка к форме пропов. Обычно этого достаточно, но некоторые пропы могут иметь упрощенную сетку или вообще её не иметь вынуждая VRAD создавать неестественные тени. Данная опция позволяет обходить это для некоторых пропов, заставляя  VRAD использовать полигональную сетку. Также, это необходимо, если вы используете -textureshadows (см. ниже).


Simply append ''-staticproppolys'' to the $light_exe Parameters list (see above).
Просто добавьте ''-staticproppolys'' в список параметров $light_exe (см. ниже).


=== -textureshadows ===
=== -textureshadows ===
Not all props have their "holes" defined solely by geometry. Mesh fences, for example, use textures with alpha channels. These are not normally recognized by VRAD, so if you use them you will have to either disable shadows from them (which sometimes produces decent results) or add this option, which forces VRAD to take alpha channels into account as well, just like with brushes.
Не все пропы имеют геометрические "дырки". Сетчатые заборы, например, используют текстуры с альфа-каналами. Обычно они не распознаются VRAD, поэтому при их использовании отключите тени от них (что иногда приводит к приличным результатам), или добавьте эту опцию, которая заставит VRAD обрабатывать альфа-каналы также, как и браши.


To make -textureshadows work, you need to create a custom RAD file for your map listing which props you want this option to affect. Extract the lights.rad file from the game in question using [[GCFScape]] or Crafty, place it in the game folder, and give it a new name. Then, open it in any text editor and append the line ''forcetextureshadow [full path of prop]'' to the file for each model you want this to affect. You will also need to have 'staticproppolys enabled for this to work. Finally, append ''-lights [name of your custom RAD file] -textureshadows'' to the $light_exe Parameters list (see above).
Чтобы команда  -textureshadows работала, вам нужно создать пользовательский файл RAD со списком пропов, к которым будет применяться данная опция. Извлеките из игры файл lights.rad с помощью  {{L|GCFScape}} или Crafty, поместите его в папку с игрой и дайте ему новое имя. Затем, откройте его в любом текстовом редакторе, и добавьте строку ''forcetextureshadow [полный путь к пропу]'',  чтобы файл применился к каждой модели. Также необходимо активировать 'staticproppolys'. Наконец, добавьте ''-lights [название вашего файла RAD] -textureshadows'' в список  Parameters $light_exe (см. ниже).


=== -staticproplighting ===
=== -staticproplighting ===
Unlike the other two, this option affects the lighting ''received'' by props. Props are generally lit based on the lighting levels at their origin (see [[info_lighting]] above), which can lead to unnatural lighting if a light source is aimed at only one side of the prop or if the prop is half in shadow and halfway in light. This option forces VRAD to calculate the lighting level at each vertex instead. Of these three options, this one will probably affect compile time the most, but is usually a necessary step in making the map's props look convincing.
В отличие от двух других, этот параметр влияет на свет, ''отбрасываемый'' пропами. Пропы, как правило, отсвечивают в зависимости от места размещения (см. {{L|info_lighting}} выше), что приводит к неестественному освещению, когда свет падает только на одну сторону пропа, или проп находится наполовину в тени. Эта опция заставляет VRAD рассчитывать уровень света каждой вершины независимо. Из всех трёх опций, эта, пожалуй, сильнее всего влияет на время компиляции, но, как правило, является необходимым шагом в деле создания убедительно выглядящих моделей.


Simply append ''-staticproplighting'' to the $light_exe Parameters list (see above).
Просто добавьте ''-staticproplighting'' в список $light_exe Parameters (см. выше).


{{warning|This will disable [[info_lighting]] entities on static props that don't use [[bump map]]s!}}
{{warning|Параметр отключает энтити {{L|info_lighting}} в статических пропах, не использующих {{L|bump map|рельеф карты}}!}}
{{note|[[light_spot]] will cause vertex lighting even without this parameter.}}
{{Note|{{L|light_spot}} будет освещать вершины независимо от этого параметра.}}
{{note|This will cause some props, such as pine trees, to try to cast shadows on ''themselves'', creating an unrealistic look. To fix this, under the prop's properties, set the value for ''Disable Self-Shadowing with vertex lighting'' to "Yes."}}
{{Note|Параметр подталкивает некоторые пропы (например сосны) отбрасывать тени на ''себя'', создавая неестественный вид. Чтобы избежать этого, в свойствах пропов установите значение для  ''Disable Self-Shadowing with vertex lighting'' на "Yes."}}
{{note|Props that use [[bump map]]s or [[phong materials]] cannot be vertex-lit.}}
{{Note|Пропы, использующие {{L|bump map|карты рельефа}} или {{L|phong materials|фонг-материалы}}, не будут отсвечивать вертексами.}}


== Techniques ==
== Методы ==
=== Lightmap optimization ===
=== Оптимизация карты освещённости ===
Lightmaps store nearly all the lighting information in Source [[BSP]]s, and their efficient use equates directly to efficient lighting. They are the key contributor to BSP file size: efficient usage is a must for anyone wanting their map to be downloaded off the cuff, and preferable for everybody.
Практически всю свою информацию карты освещённости хранят в файлах Source {{L|BSP}}, поэтому их эффективное использование является эквивалентом хорошего освещения. Они вносят ключевой вклад в размер файла BSP: эффективное использование имеет преимущество в загрузке карты для любого желающего поиграть.


Lightmap scale is the basic component of optimization. It determines how detailed lighting information will be for a given face (you can see the effects [[#Lightmaps|above]]). The more information stored, the bigger the file size. Small lightmap scales allow for fine details but come at the cost of a bigger file (performance is unchanged). Large lightmap scales create fuzzier lighting but lead to smaller files. Determining when a face needs a detailed lightmap and when it doesn't is therefore the task.
Масштаб карты освещённости - основной момент оптимизации. Он определяет, насколько детальна будет информация об освещении для данной грани ([[#Lightmaps|выше]] вы можете посмотреть эффекты). Чем больше хранится информации, тем больше размер файла. Меньший масштаб карты освещённости даёт отличную детализацию, но ценой распухшего файла (производительность останется без изменений). Больший масштаб создаёт размытое освещение, но уменьшает размер файлов. Поэтому, нуждается ли грань в детализированной карте освещенности - является определённой задачей.


This can mostly be done by eye from a compiled map. Look for the faces that receive high contrast shadows or specific details, as they are often the best candidates for low (i.e. detailed) lightmap scales. Faces with slow blends or lighting that only slightly differs across them on the other hand can safely have their scale raised.
В основном, это может быть сделано на глазок после компилирования карты. Посмотрите на грани с высоко-контрастными тенями или конкретными деталями, поскольку они первые кандидаты на низкий (т.е. детализированный) масштаб карты освещённости. У граней с мягкими тенями и освещением, когда они мало отличаются друг от друга, можно смело поднимать масштаб.


{{note|Remember to take into account the size of a face, too. Moving a large face even one point up or down can have very large effects. Don't be afraid to split the face into segments if you need to.}}{{clr}}
{{Note|Не забывайте также учитывать размер грани. Если большую поверхность переместить всего лишь на одну точку вверх или вниз, это может иметь большие последствия. Если необходимо, не бойтесь разделять грань на сегменты.}}{{clr}}


==== Example ====
==== Пример ====
[[Image:intlight_lightmaps.jpg|thumb|250px|right|A working example.]]
[[File:intlight_lightmaps.jpg|thumb|250px|right|Рабочий пример.]]


For a working example look to the hallway shown on the right. One side shows the in-game compiled version and the other side shows the lightmaps as displayed in Hammer. The lightmap view is easy to access: left click on the word Camera in the top left of your 3D view, and from the drop down select 3D Lightmap Grid. In this view, yellow faces have smaller than default scales, white faces are at the default, and blue are larger.
Рассмотрим рабочий пример коридора, который изображён справа. Одна картинка показывает вид в игре, другая отображает карты освещенности в редакторе Hammer. Карту освещённости легко посмотреть: в окне 3D-вида щелкните левой кнопкой мыши по слову Camera, и в выпавшем меню выберите 3D Lightmap Grid. И так, жёлтые грани показывают меньший масштаб относительно масштаба по-умолчанию, белые грани - масштаб по-умолчанию, и синие - большой масштаб.


The hallway we are looking at has wall mounted lights and a few ceiling lights as well. In the picture it's clear to see where the lightmap scale has been increased and decreased. The front of the pillar has an increased lightmap because of the light source on its face, to catch all the detail. This is not such a major problem as the pillar is a small thin face and the only area with a lower scale. The floor and a few of the walls along the edge have been scaled up, as looking at the in-game rendering little to no detail or change is seen in the lightmap; they are excellent candidates, the floor especially so with its large size. The other faces have been left at the default resolution as they all have some play of shadows or changes in brightness. While not detailed or essential enough to warrant a smaller scale, increasing the scale would only serve to create poor looking lighting as the lack of detail would show.
В коридоре видим светильники на стенах и потолке. На снимке видно, где масштаб освещения выше, а где ниже. Передняя сторона колонны имеет повышенную карту освещённости, чтобы поймать все нюансы, т.к. на ней висит источник света. Это не такая большая проблема, ведь колонна - суть маленькая тонкая грань с малым масштабом. Пол и стены вдоль края имеют увеличенный масштаб освещённости, поскольку в игре их детализация интереса не представляет, особенно пол. У остальных граней оставлен масштаб по-умолчанию, поскольку там есть некоторая игра теней и перепады яркости. Увеличение масштаба в них приведёт к плохой освещённости и потере детализации.


While technically possible to decrease the entire scales across the entire map for crisp shadows, the compile time and filesize expense almost always outweighs the benefit. Finding the balance between increasing and decreasing the lightmaps may take a few lighting compiles and some guesswork, but performed correctly can both enhance your map and reduce its file size.{{clr}}
Хотя, с технической точки зрения, для улучшения чёткости теней можно уменьшить масштаб на всей карте, однако затянутая компиляция и раздутый размер файла перевешивают эту плюшку. Поиск баланса между большим и малым масштабами карты освещённости может отнять у вас несколько компиляций и привести к некоторым догадкам, которые позволят найти оптимальный размер файла карты.{{clr}}


=== Shadow creation ===
=== Создание теней ===
Some props appear to allow static light to pass through it, but have a [[collision mesh]] that swallows the prop whole (most, if not all{{confirm}}, fence props in the [[Half-Life 2]] series is a good example of this.) This results in a large, unrealistic shadow. A workaround for this is to create a func_brush from the material, disable the shadows, and utilize the [[Tool_textures#blocklight|block_light]] tool texture. This can be easy or difficult, depending on the size of the prop. Basically you must draw brushes of block_light where light would normally be blocked on the brush/prop.
Некоторые пропы пропускают сквозь себя статичный свет, но имеют {{L|collision mesh|сетку столкновений}}, которая полностью их покрывает (большинство, если не все{{confirm}}, чему хороший  пример - модель забора в серии игр {{L|Half-Life 2}}). Как результат - большие, неестественные тени. Обойти это можно, создав func_brush, отключив в нём тени и покрыв текстурой  [[Tool_textures#blocklight|block_light]]. Насколько это будет трудно, зависит от размеров пропа. Обычно, браши с block_light рисуются там, где свет не должен проходить сквозь браши/пропы.
[[Image:blocklight_1.jpg|thumb|400px|left|In this example, the material ''metaltruss024a'' is used without block_light.]] [[Image:blocklight_3.jpg|thumb|400px|right|In-game. The material casts no shadow, even though realistically only the truss should be hindering the light.]]{{clr}}
[[File:blocklight_1.jpg|thumb|400px|left|В этом примере материал ''metaltruss024a'' используется без block_light.]] [[File:blocklight_3.jpg|thumb|400px|right|В игре. Материал не отбрасывает тени, хотя балка реально загораживает свет.]]{{clr}}
Upon creating the trusses out of block_light material, you can 'fake' the shadows.
Покрыв балку материалом block_light, вы создадите 'фиктивные' тени.
[[Image:blocklight_2.jpg|thumb|400px|left|This time, block_light is used over the actual trusses.]]
[[File:blocklight_2.jpg|thumb|400px|left| Здесь же, block_light покрывает балку по контуру текстуры.]]
[[Image:blocklight_4.jpg|thumb|400px|right|In-game.]]{{clr}}
[[File:blocklight_4.jpg|thumb|400px|right|В игре.]]{{clr}}


=== Shadow creation: Alternative method ===
=== Создание теней: альтернативный метод ===


[http://www.interlopers.net/tutorials/27738 Creating Shadows with -TextureShadows] (External Link)
[http://www.interlopers.net/tutorials/27738 Creating Shadows with -TextureShadows] (внешняя ссылка)


== See also ==
== См. также ==
* [[Lighting]]
* {{L|Lighting}}
* [[Intermediate Lighting]]
* {{L|Intermediate Lighting}}
* [[Info_lighting_relative]]
* {{L|Info_lighting_relative}}


[[Category:Level Design]]
[[Category:Lighting]]


== External Links ==
== External links ==


* [http://www.interlopers.net/tutorials/27738 Creating Shadows with -TextureShadows]
* [http://www.interlopers.net/tutorials/27738 Creating Shadows with -TextureShadows]
* [https://www.youtube.com/watch?v=2jEuuvSevi0 Advanced lighting Video Tutorial]
* [https://www.youtube.com/watch?v=2jEuuvSevi0 Advanced lighting Video Tutorial]
{{ACategory|Level Design}}
{{ACategory|Lighting}}

Latest revision as of 04:07, 12 July 2024

English (en)Français (fr)Русский (ru)中文 (zh)Translate (Translate)


Энтити света

light_dynamic(en)

Невидимый источник света, который может постоянно меняться и перемещаться. Его местоположение может определяться скриптованными двигающимися объектами. Динамическое освещение существенно нагружает процессор, потому что рассчитывается в реальном времени, и при этом оно гораздо гибче статического освещения. Используйте данный тип освещения редко, потому что он сильно нагружает графический движок.

Note.pngПримечание:Фактически, эта сущность состоит из двух огней: светового конуса и пятна света. Некоторые их значения не всегда влияют друг на друга.

Светящиеся текстуры(en)

Светящаяся текстура.

В определённых случаях можно создавать свои светящиеся или освещающие текстуры, но для этого нужно использовать файл .vmt или .rad, что выходит за рамки нашей статьи. Это поможет дизайнеру уровня сберечь усилия, когда он будет создавать световые эффекты для своей карты.

env_particlelight(en)

Красный свет.

Обычный свет, который освещает только частицы из env_smokestack(en), и больше ничего. Полезно для улучшения освещения помещений с паром и подобных, но редко используется из-за своей специфики.

env_projectedtexture(en)

Крошечная сцена, показывающая env_projectedtexture с "framebuffer fix", "Clipping fix" и "Grain fix". Разрешение текстуры составляет 4096 с зерном/фильтром 1. Создана с помощью Hammer и содержимого Half-life 2.

Аналогично light_dynamic - это невидимый прожектор, который может изменяться и двигаться. Он может менять свою позицию, поле зрения и диапазон, будучи привязан к двигающимся объектам. Env_projectedtextures уникальна тем, что отбрасывает динамические тени от любой геометрии (браша или модели) на все браши и модели (даже на себя), в отличие от теней RenderToTexture. Данная система используется для фонариков игроков в Half-life 2 и L4D.

Env_projectedtexture - самый тяжелый источник света, он не компилируется, и все расчёты происходят в реальном времени. Более одной или двух таких энтить резко снизят производительность на старых видеокартах. Также обратите внимание, что на Source2007 и более ранних версиях движка без исправлений(en) тени будут сильно "зернистыми", иметь низкое разрешение и без родителя. Эти проблемы были исправлены в новых итерациях движка Source2009, тем не менее вы ограничены только одной текстурой-прожектором (ВКЛЮЧАЯ фонарики игроков).

Note.pngПримечание:Чем дальше отбрасываемая тень, тем меньше её детализация. Низкий FOV, высокий NearZ и приближение теней (поскольку они не визуализируют пространство) дают лучшие результаты. Когда тени начинают терять детализацию и очевидна утечка, то они будут "вытягиваться".

Связанные энтити

info_lighting(en)

Info lighting.png

Эта энтитя используется в качестве источника, от которого светится другая сущность. Иногда, при резких перепадах света на коротких расстояниях или сложных теней, модель может неправильно отсвечивать. С помощью этой энтити модель будет светить так, будто она на своём месте.

Одним из распространённых примеров являются статичные модели лестниц в HL2; в тёмных зонах они будут светиться, если в их свойствах правильно прописать info_lighting, задав последнему имя.

env_lightglow(en)

глоу-эффект

Используется для создания ярких огней, похожих на вспышку, и затухающих на определённом расстоянии. Как правило, ставится в конце тёмных тоннелей. Является предшественником HDR(en)-эффекта, подделывая экспозицию света. Некоторые карты Team Fortress 2(en) используют этот эффект, чтобы имитировать пушок от обычных источников света, но лучше использовать env_sprite(en).

info_no_dynamic_shadow(en)

Пример использования

Заставляет конкретную брашевую поверхность не создавать динамические тени, отбрасываемые физическими сущностями или NPC. Используется редко, но может потребоваться, чтобы скрыть неправильные или кривые тени, выглядящие искусственно.

env_tonemap_controller(en)

Управляет экспозицией световых HDR(en)-эффектов. Если нет полностью реализованного HDR, то не оказывает влияния.

Группы сглаживания(en)

Цилиндр слева не сглажен.
Цилиндр в середине имеет сглаживание освещённости 16.
Цилиндр справа имеет сглаживание освещённости 8.

Сглаживают освещение между гранями. Параметр находится в диалоге редактирования поверхности(en), сглаживает освещение группы граней, создавая эффект закруглённого света. Классическим примером является цилиндр: если сглаживание группы не задано, каждая грань браша будет получать свет и освещаться отдельно. Это создаст эффект раздельных граней. Если все они будут помещены в одну группу сглаживания, свет станет рассеиваться между гранями, создавая вид округлой колонны.

Tip.pngСовет:Группы сглаживания не оказывают влияния на производительность, лишь добавляя время компиляции VRAD, так что используйте их на финальной компиляции.

Lightmaps(en)

Карта освещённости - это данные освещённости каждой грани. Сохранённый свет впоследствии добавляется к грани, заставляя её отсвечивать. Шкала карты освещённости - это количество пикселей текстуры на пиксель света (люксел). Чем больше значение люксел, тем выше качество, но больше размер BSP и время компиляции.

Масштаб карты освещённости 4
Масштаб карты освещённости 16
Масштаб карты освещённости 64

Опции компилирования

Движок Orange Box (Source 2007) добавил три новых опции, которые повышают реализм во время компиляции. Чтобы получить к ним доступ, в диалоговом окне Run Map выберите режим Expert, и затем "HDR Full compile -final (slow!)"; далее, в списке ниже, выберите строку "$light_exe". В поле Parameters введите необходимые параметры, описанные ниже.

ПРИМЕЧАНИЕ: Это значительно увеличит время компиляции, так что рекомендуется использовать на последних стадиях создания карты!

-staticproppolys

Как правило, VRAD создаёт тени под статичными пропами на основе сетки столкновений, потому что это проще, поскольку сетка столкновений близка к форме пропов. Обычно этого достаточно, но некоторые пропы могут иметь упрощенную сетку — или вообще её не иметь — вынуждая VRAD создавать неестественные тени. Данная опция позволяет обходить это для некоторых пропов, заставляя VRAD использовать полигональную сетку. Также, это необходимо, если вы используете -textureshadows (см. ниже).

Просто добавьте -staticproppolys в список параметров $light_exe (см. ниже).

-textureshadows

Не все пропы имеют геометрические "дырки". Сетчатые заборы, например, используют текстуры с альфа-каналами. Обычно они не распознаются VRAD, поэтому при их использовании отключите тени от них (что иногда приводит к приличным результатам), или добавьте эту опцию, которая заставит VRAD обрабатывать альфа-каналы также, как и браши.

Чтобы команда -textureshadows работала, вам нужно создать пользовательский файл RAD со списком пропов, к которым будет применяться данная опция. Извлеките из игры файл lights.rad с помощью GCFScape(en) или Crafty, поместите его в папку с игрой и дайте ему новое имя. Затем, откройте его в любом текстовом редакторе, и добавьте строку forcetextureshadow [полный путь к пропу], чтобы файл применился к каждой модели. Также необходимо активировать 'staticproppolys'. Наконец, добавьте -lights [название вашего файла RAD] -textureshadows в список Parameters $light_exe (см. ниже).

-staticproplighting

В отличие от двух других, этот параметр влияет на свет, отбрасываемый пропами. Пропы, как правило, отсвечивают в зависимости от места размещения (см. info_lighting(en) выше), что приводит к неестественному освещению, когда свет падает только на одну сторону пропа, или проп находится наполовину в тени. Эта опция заставляет VRAD рассчитывать уровень света каждой вершины независимо. Из всех трёх опций, эта, пожалуй, сильнее всего влияет на время компиляции, но, как правило, является необходимым шагом в деле создания убедительно выглядящих моделей.

Просто добавьте -staticproplighting в список $light_exe Parameters (см. выше).

Warning.pngПредупреждение:Параметр отключает энтити info_lighting(en) в статических пропах, не использующих рельеф карты(en)!
Note.pngПримечание:light_spot(en) будет освещать вершины независимо от этого параметра.
Note.pngПримечание:Параметр подталкивает некоторые пропы (например сосны) отбрасывать тени на себя, создавая неестественный вид. Чтобы избежать этого, в свойствах пропов установите значение для Disable Self-Shadowing with vertex lighting на "Yes."
Note.pngПримечание:Пропы, использующие карты рельефа(en) или фонг-материалы(en), не будут отсвечивать вертексами.

Методы

Оптимизация карты освещённости

Практически всю свою информацию карты освещённости хранят в файлах Source BSP(en), поэтому их эффективное использование является эквивалентом хорошего освещения. Они вносят ключевой вклад в размер файла BSP: эффективное использование имеет преимущество в загрузке карты для любого желающего поиграть.

Масштаб карты освещённости - основной момент оптимизации. Он определяет, насколько детальна будет информация об освещении для данной грани (выше вы можете посмотреть эффекты). Чем больше хранится информации, тем больше размер файла. Меньший масштаб карты освещённости даёт отличную детализацию, но ценой распухшего файла (производительность останется без изменений). Больший масштаб создаёт размытое освещение, но уменьшает размер файлов. Поэтому, нуждается ли грань в детализированной карте освещенности - является определённой задачей.

В основном, это может быть сделано на глазок после компилирования карты. Посмотрите на грани с высоко-контрастными тенями или конкретными деталями, поскольку они первые кандидаты на низкий (т.е. детализированный) масштаб карты освещённости. У граней с мягкими тенями и освещением, когда они мало отличаются друг от друга, можно смело поднимать масштаб.

Note.pngПримечание:Не забывайте также учитывать размер грани. Если большую поверхность переместить всего лишь на одну точку вверх или вниз, это может иметь большие последствия. Если необходимо, не бойтесь разделять грань на сегменты.

Пример

Рабочий пример.

Рассмотрим рабочий пример коридора, который изображён справа. Одна картинка показывает вид в игре, другая отображает карты освещенности в редакторе Hammer. Карту освещённости легко посмотреть: в окне 3D-вида щелкните левой кнопкой мыши по слову Camera, и в выпавшем меню выберите 3D Lightmap Grid. И так, жёлтые грани показывают меньший масштаб относительно масштаба по-умолчанию, белые грани - масштаб по-умолчанию, и синие - большой масштаб.

В коридоре видим светильники на стенах и потолке. На снимке видно, где масштаб освещения выше, а где ниже. Передняя сторона колонны имеет повышенную карту освещённости, чтобы поймать все нюансы, т.к. на ней висит источник света. Это не такая большая проблема, ведь колонна - суть маленькая тонкая грань с малым масштабом. Пол и стены вдоль края имеют увеличенный масштаб освещённости, поскольку в игре их детализация интереса не представляет, особенно пол. У остальных граней оставлен масштаб по-умолчанию, поскольку там есть некоторая игра теней и перепады яркости. Увеличение масштаба в них приведёт к плохой освещённости и потере детализации.

Хотя, с технической точки зрения, для улучшения чёткости теней можно уменьшить масштаб на всей карте, однако затянутая компиляция и раздутый размер файла перевешивают эту плюшку. Поиск баланса между большим и малым масштабами карты освещённости может отнять у вас несколько компиляций и привести к некоторым догадкам, которые позволят найти оптимальный размер файла карты.

Создание теней

Некоторые пропы пропускают сквозь себя статичный свет, но имеют сетку столкновений(en), которая полностью их покрывает (большинство, если не все[подтвердить], чему хороший пример - модель забора в серии игр Half-Life 2(en)). Как результат - большие, неестественные тени. Обойти это можно, создав func_brush, отключив в нём тени и покрыв текстурой block_light. Насколько это будет трудно, зависит от размеров пропа. Обычно, браши с block_light рисуются там, где свет не должен проходить сквозь браши/пропы.

В этом примере материал metaltruss024a используется без block_light.
В игре. Материал не отбрасывает тени, хотя балка реально загораживает свет.

Покрыв балку материалом block_light, вы создадите 'фиктивные' тени.

Здесь же, block_light покрывает балку по контуру текстуры.
В игре.

Создание теней: альтернативный метод

Creating Shadows with -TextureShadows (внешняя ссылка)

См. также


External links