@Just_Graf

Как сделать тёмные стороны полигона видимыми в Unity?

Т. е. нужно сделать так, чтобы текстура отображалась во внутренней части модели. Я знаю способ, позволяющий достичь этого (нужно выбрать шейдер "Alpha Blended" в списке "Mobile" шейдеров), однако он не полностью удовлетворяет моим требованиям, а именно сквозь текстуру, где нет альфа-канала видны места, где есть альфа-канал. Надеюсь, смог объяснить ситуацию. В общем, если кто не понял, нужен шейдер, который делает прозрачными места, где есть альфа-канал, чтобы это прозрачное место, не просвечивалось сквозь текстуру, если смотреть с разных ракурсов, т. е. это прозрачное место должно быть видно непосредственно если смотреть именно на неё, чего как раз таки и нет у шейдера "Alpha Blended" и этот шейдер должен отображать текстуру на двух сторонах одного полигона. Да, скорее всего, по умолчанию в Unity нет всех желаемых шейдеров и нужно будет самому написать... Тогда, если это так, если нет такого шейдера по умолчанию, жду от вас подсказок по написанию именно такого шейдера или статьи на эту тему. Шейдерных языков не знаю, если что. Знаю очень такие базовые вещи C#. Воот.
  • Вопрос задан
  • 1532 просмотра
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Вообще это не проблема шейдера, это кривая модель. Если вам нужно смотреть изнутри, то и внутренняя поверхность должна быть в ней создана.
Ответ написан
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Двусторонний шейдер делается легко, за это отвечает инструкция Cull Off, подробнее про куллинг можно почитать здесь. Нужную вам прозрачность можно получить с помощью alpha:fade, если говорить про surface-шейдеры, с другими шейдерами будет немного сложнее. Ниже обычный шаблон шейдера, который я немного подчистил и добавил две недостающие инструкции.
Shader "Custom/NewSurfaceShader"
{
    Properties
    {
        _Color("Color", Color) = (1,1,1,1)
        _MainTex("Albedo (RGB)", 2D) = "white" {}
        _Glossiness("Smoothness", Range(0,1)) = 0.5
        _Metallic("Metallic", Range(0,1)) = 0.0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200
        // Выключаем куллинг, чтобы меш рисовался с двух сторон
        Cull Off

        CGPROGRAM
        // По с равнению со стандартным шаблоном в конце добавилось "alpha:fade" для получения прозрачности
        #pragma surface surf Standard fullforwardshadows alpha:fade
        #pragma target 3.0

        struct Input
        {
            float2 uv_MainTex;
        };

        fixed4 _Color;
        sampler2D _MainTex;
        half _Glossiness;
        half _Metallic;

        void surf(Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 color = tex2D (_MainTex, IN.uv_MainTex)*_Color;
            o.Albedo = color.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = color.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

Если хотите побольше узнать про шейдеры, то можете почитать The Book of Shaders и соответствующий раздел мануала. Ещё есть хорошая серия туториалов на эту тему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы