Страница 1 из 1

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

СообщениеДобавлено: 13 май 2016, 06:32
Ert Donuell
Пытаюсь заставить камеру отображать Render Texture, отображающий изображение с этой самой камеры.

Изображение

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

Заранее спасибо.

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

СообщениеДобавлено: 13 май 2016, 10:27
Ert Donuell
В общем, есть два варианта.

Первый вариант
Синтаксис:
Используется 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
        }
}
 

Изображение

Очевидно, беда в шейдере. Как сделать и прямо, и фрактально - ума не приложу. Либо так, либо эдак :-?

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

СообщениеДобавлено: 13 май 2016, 13:53
IDoNotExist
По логике, вам после каждой отрисовки текстуры надо брать опять изображение с камеры и опять его отрисовывать, возможно поможет несколько камер.

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

СообщениеДобавлено: 13 май 2016, 16:32
Tolking
Нда... Шейдеры наше все...

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();
    }
}
 

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

СообщениеДобавлено: 13 май 2016, 16:37
waruiyume
Вот, как раз с размером 256 и будет нормально работать, а что побольше будет показывать слайдшоу :))

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

СообщениеДобавлено: 13 май 2016, 17:35
Tolking
Это нормально работает, а шейдер еще написать нужно... И не факт что сможешь...

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

СообщениеДобавлено: 13 май 2016, 20:45
Ert Donuell
Спасибо доброму модеру, нашедшему glsl для форматирования. Хорошо бы его добавить в доступные теги.

Вот мои два шейдера и не пашут(
Вся разница в функции surf. По какой-то странной причине IN.screenPos.xy / IN.screenPos.w не позволяет перерисовывать изображение.

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

СообщениеДобавлено: 13 май 2016, 21:54
DbIMok
Изображение
а правлю я потому, что мне code кодировку в rss ломает

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

СообщениеДобавлено: 13 май 2016, 22:12
Ert Donuell
Да, не подумал заглянуть в title тега syntax, спасибо!

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

СообщениеДобавлено: 14 май 2016, 02:47
Ert Donuell
Увы, обновление текстуры в Update не пашет. Шейдер отказывается показывать прошлые кадры :((