Двухсторонний материал.

Шейдеры и все-все-все.

Двухсторонний материал.

Сообщение Skinner2170 08 ноя 2012, 10:52

Ситуация такая - требуется создать большой прямоугольник и наложить на него текстуры с двух сторон. Я нигде не нашел информации о том, как накладывать текстуры как с внешней, так и с внутренней стороны объекта. Заранее благодарю за ответ, хоть и понимаю, что вопрос в общем-то глупый :).

з.ы. Зачем такой куб? У игрока есть возможность свободно и без гравитации летать по сцене и создан под землей своеобразный демонстрационный куб, внутри которого надо еще расположить некоторые элементы, на которые можно поглядеть.
Последний раз редактировалось Skinner2170 11 ноя 2012, 18:34, всего редактировалось 1 раз.
Skinner2170
UNец
 
Сообщения: 8
Зарегистрирован: 08 ноя 2012, 10:46

Re: Наложение текстуры.

Сообщение waruiyume 08 ноя 2012, 13:28

Рисуем переднюю сторону (Cull Back); Рисуем заднюю сторону (Cull Front), вывернув нормали.

Синтаксис:
Используется glsl
Shader "Custom/TwoSide" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                Cull Back

                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 c = tex2D (_MainTex, IN.uv_MainTex);
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG

                Cull Front

                CGPROGRAM
                #pragma surface surf Lambert vertex:vert

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                };

                void vert (inout appdata_full v)
                {
          v.normal.xyz *= -1;
                }

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 c = tex2D (_MainTex, IN.uv_MainTex);
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}

 


Или рисуем обе (Cull Off), с неправильным освещением.

Синтаксис:
Используется glsl
Shader "Custom/TwoSide" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                Cull Off

                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 c = tex2D (_MainTex, IN.uv_MainTex);
                        o.Albedo = c.rgb;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}

 


Переименуйте тему, отредактировав заголовок 1 сообщения, во что-то похоже на "Двухсторонний материал".
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Двухсторонний материал.

Сообщение Skinner2170 12 ноя 2012, 10:23

Большое спасибо за помощь!
Skinner2170
UNец
 
Сообщения: 8
Зарегистрирован: 08 ноя 2012, 10:46


Вернуться в Shader Lab

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

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