Фрактальное отражение

Для экспериментальных разработок и тем "я нашел чужой исходник, почему он не работает?"

Фрактальное отражение

Сообщение Ert Donuell 13 май 2016, 06:32

Пытаюсь заставить камеру отображать Render Texture, отображающий изображение с этой самой камеры.

Изображение

Как видите, бесконечный тоннель выходит не очень.
У кого-нибудь есть соображения как это реализовать?

Заранее спасибо.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Фрактальное отражение

Сообщение Ert Donuell 13 май 2016, 10:27

В общем, есть два варианта.

Первый вариант
Синтаксис:
Используется glsl
Shader "Fractal/Unlit" {
        Properties {
                _MainTex ("Texture", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
               
                CGPROGRAM
                #pragma surface surf NoLighting
               
                fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten) {
                        return fixed4(0, 0, 0, 0);
                }

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        o.Emission = tex2D(_MainTex, IN.uv_MainTex);
                }
                ENDCG
        }
}
 


Изображение

Второй вариант
Синтаксис:
Используется glsl
Shader "Fractal/Unlit" {
        Properties {
                _MainTex ("Texture", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
               
                CGPROGRAM
                #pragma surface surf NoLighting
               
                fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten) {
                        return fixed4(0, 0, 0, 0);
                }

                sampler2D _MainTex;

                struct Input {
                        float4 screenPos;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
                        o.Emission = tex2D(_MainTex, screenUV);
                }
                ENDCG
        }
}
 

Изображение

Очевидно, беда в шейдере. Как сделать и прямо, и фрактально - ума не приложу. Либо так, либо эдак :-?
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Фрактальное отражение

Сообщение IDoNotExist 13 май 2016, 13:53

По логике, вам после каждой отрисовки текстуры надо брать опять изображение с камеры и опять его отрисовывать, возможно поможет несколько камер.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Фрактальное отражение

Сообщение Tolking 13 май 2016, 16:32

Нда... Шейдеры наше все...

Cam - отдельная камера для рендертекстуры, дочерняя основной... скрипт на ГО с meshrender...

Синтаксис:
Используется csharp
public class portal : MonoBehaviour {
    public Camera Cam;

    RenderTexture rt;
    Material mat;
    Texture2D tex;
        void Start () {
        mat = GetComponent<MeshRenderer>().sharedMaterial;
        rt = new RenderTexture(256, 256, 24);
        Cam.targetTexture = rt;
        tex = new Texture2D(256, 256, TextureFormat.RGB24,false);
        mat.mainTexture = tex;
    }
       
        // Update is called once per frame
        void Update () {
        RenderTexture.active = rt;
        tex.ReadPixels(new Rect(0, 0, 255, 255), 0, 0);
        tex.Apply();
    }
}
 
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Фрактальное отражение

Сообщение waruiyume 13 май 2016, 16:37

Вот, как раз с размером 256 и будет нормально работать, а что побольше будет показывать слайдшоу :))
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Фрактальное отражение

Сообщение Tolking 13 май 2016, 17:35

Это нормально работает, а шейдер еще написать нужно... И не факт что сможешь...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Фрактальное отражение

Сообщение Ert Donuell 13 май 2016, 20:45

Спасибо доброму модеру, нашедшему glsl для форматирования. Хорошо бы его добавить в доступные теги.

Вот мои два шейдера и не пашут(
Вся разница в функции surf. По какой-то странной причине IN.screenPos.xy / IN.screenPos.w не позволяет перерисовывать изображение.
Последний раз редактировалось Ert Donuell 13 май 2016, 22:02, всего редактировалось 1 раз.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Фрактальное отражение

Сообщение DbIMok 13 май 2016, 21:54

Изображение
а правлю я потому, что мне code кодировку в rss ломает
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Фрактальное отражение

Сообщение Ert Donuell 13 май 2016, 22:12

Да, не подумал заглянуть в title тега syntax, спасибо!
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Фрактальное отражение

Сообщение Ert Donuell 14 май 2016, 02:47

Увы, обновление текстуры в Update не пашет. Шейдер отказывается показывать прошлые кадры :((
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ


Вернуться в Шейдерная кузня

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

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