CurvedWorld

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

CurvedWorld

Сообщение reQuem 10 июл 2020, 13:06

Всем привет, есть шейдер CurvedWorld
Синтаксис:
Используется csharp
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "Custom/CurvedWorld" {
        Properties {
                _Color ("Color", Color) = (1,1,1,1)
                _MainTex ("Albedo (RGB)", 2D) = "white" {}
                _BumpMap ("Normalmap", 2D) = "bump" {}
                _Glossiness ("Smoothness", Range(0,1)) = 0.5
                _Metallic ("Metallic", Range(0,1)) = 0.0
        _Curvature ("Curvature", Float) = 0.001
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                // Physically based Standard lighting model, and enable shadows on all light types
                #pragma surface surf Standard vertex:vert fullforwardshadows

                // Use shader model 3.0 target, to get nicer looking lighting
                #pragma target 3.0

                sampler2D _MainTex;
                sampler2D _BumpMap;
            float _Curvature;

                struct Input {
                        float2 uv_MainTex;
                        float2 uv_BumpMap;
                };

                half _Glossiness;
                half _Metallic;
                fixed4 _Color;
               
                 void vert( inout appdata_full v)
        {            
            float4 vv = mul( unity_ObjectToWorld, v.vertex );
            vv.xyz -= _WorldSpaceCameraPos.xyz;
            vv = float4( 0.0f, ((vv.z * vv.z) + (vv.x * vv.x)) * - _Curvature, 0.0f, 0.0f );
            v.vertex += mul(unity_WorldToObject, vv);
        }

                void surf (Input IN, inout SurfaceOutputStandard o) {
                        // Albedo comes from a texture tinted by color
                        fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
                        o.Albedo = c.rgb;
                        o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
                        // Metallic and smoothness come from slider variables
                        o.Metallic = _Metallic;
                        o.Smoothness = _Glossiness;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}
 

Этот шейдер делает "рыбий глаз" - искривляет обьекты, проблема в том, что мне надо обрабатывать клики по обьектам, визуально он все делает верно, но коллайдеры остаются на старых местах как до этого шейдера и получатеся кликая по объекту я по нему не попадаю т.к колайдеры остаются на старых местах, вопрос, можно ли изгибать коллайдеры как и сами обьекты , и если да то как?)
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение waruiyume 10 июл 2020, 14:08

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

Re: CurvedWorld

Сообщение Saltant 10 июл 2020, 14:59

Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: CurvedWorld

Сообщение reQuem 10 июл 2020, 16:31

Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

можете скинуть что-то подобное?
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение reQuem 10 июл 2020, 16:32

waruiyume писал(а):Низя. Можете попробовать отклонять луч, которым тыкаете в коллайдеры.

у меня OnMouseDown просто был, не подскажете как можно отклонять луч?
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение Saltant 10 июл 2020, 19:43

reQuem писал(а):
Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

можете скинуть что-то подобное?

Lens Distortion начало с 11:14
https://youtu.be/9tjYz6Ab0oc?t=674
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: CurvedWorld

Сообщение reQuem 11 июл 2020, 01:40

Saltant писал(а):
reQuem писал(а):
Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

можете скинуть что-то подобное?

Lens Distortion начало с 11:14
https://youtu.be/9tjYz6Ab0oc?t=674

спасибо, попробую использовать это, если возникнут проблемы напишу
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение reQuem 13 июл 2020, 12:23

waruiyume писал(а):Низя. Можете попробовать отклонять луч, которым тыкаете в коллайдеры.

можете рассказать, как можно отклонить луч?
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение waruiyume 13 июл 2020, 13:09

В случае с вертексным шейдером хз. Я почему-то подумал, что используется пост-эффект, в этом случае можно было бы использовать ту же, что в шейдере или обратную функцию.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: CurvedWorld

Сообщение reQuem 14 июл 2020, 10:58

waruiyume писал(а):В случае с вертексным шейдером хз. Я почему-то подумал, что используется пост-эффект, в этом случае можно было бы использовать ту же, что в шейдере или обратную функцию.

а можно ли как-то детектить клик по мешу?
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38

Re: CurvedWorld

Сообщение waruiyume 14 июл 2020, 11:07

Можно, но обновлять мешколлайдеры очень дорого. Если хотите попробовать, то вам нужно, каждый кадр, пересчитывать позиции вершин, применяя к ним функцию скопированную из шейдера, а затем назначать этот меш в мешколлайдер.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: CurvedWorld

Сообщение reQuem 14 июл 2020, 16:06

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

Синтаксис:
Используется csharp
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "Custom/CurvedWorld" {
        Properties {
                _Color ("Color", Color) = (1,1,1,1)
                _MainTex ("Albedo (RGB)", 2D) = "white" {}
                _BumpMap ("Normalmap", 2D) = "bump" {}
                _Glossiness ("Smoothness", Range(0,1)) = 0.5
                _Metallic ("Metallic", Range(0,1)) = 0.0
        _Curvature ("Curvature", Float) = 0.001
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                // Physically based Standard lighting model, and enable shadows on all light types
                #pragma surface surf Standard vertex:vert fullforwardshadows

                // Use shader model 3.0 target, to get nicer looking lighting
                #pragma target 3.0

                sampler2D _MainTex;
                sampler2D _BumpMap;
            float _Curvature;

                struct Input {
                        float2 uv_MainTex;
                        float2 uv_BumpMap;
                };

                half _Glossiness;
                half _Metallic;
                fixed4 _Color;
               
                 void vert( inout appdata_full v)
        {            
            float4 vv = mul( unity_ObjectToWorld, v.vertex );
            vv.xyz -= _WorldSpaceCameraPos.xyz;
            vv = float4( 0.0f, ((vv.z * vv.z) + (vv.x * vv.x)) * - _Curvature, 0.0f, 0.0f );
            v.vertex += mul(unity_WorldToObject, vv);
        }

                void surf (Input IN, inout SurfaceOutputStandard o) {
                        // Albedo comes from a texture tinted by color
                        fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
                        o.Albedo = c.rgb;
                        o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
                        // Metallic and smoothness come from slider variables
                        o.Metallic = _Metallic;
                        o.Smoothness = _Glossiness;
                        o.Alpha = c.a;
                }
                ENDCG
        }
        FallBack "Diffuse"
}
 

вот сам шейдер, я изгибаю луч чтоб клики попадали по коллайдеру, вопрос,
Синтаксис:
Используется csharp
 vv = float4( 0.0f, ((vv.z * vv.z) + (vv.x * vv.x)) * - _Curvature, 0.0f, 0.0f );
может кто обьяснить, что тут происходит?) мне просто надо знать на сколько выгибать луч в обратную сторону, чтоб точно попадать по коллайдеру
reQuem
UNITрон
 
Сообщения: 197
Зарегистрирован: 28 июн 2017, 18:38


Вернуться в Почемучка

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

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