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

CurvedWorld

СообщениеДобавлено: 10 июл 2020, 13:06
reQuem
Всем привет, есть шейдер 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"
}
 

Этот шейдер делает "рыбий глаз" - искривляет обьекты, проблема в том, что мне надо обрабатывать клики по обьектам, визуально он все делает верно, но коллайдеры остаются на старых местах как до этого шейдера и получатеся кликая по объекту я по нему не попадаю т.к колайдеры остаются на старых местах, вопрос, можно ли изгибать коллайдеры как и сами обьекты , и если да то как?)

Re: CurvedWorld

СообщениеДобавлено: 10 июл 2020, 14:08
waruiyume
Низя. Можете попробовать отклонять луч, которым тыкаете в коллайдеры.

Re: CurvedWorld

СообщениеДобавлено: 10 июл 2020, 14:59
Saltant
Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

Re: CurvedWorld

СообщениеДобавлено: 10 июл 2020, 16:31
reQuem
Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

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

Re: CurvedWorld

СообщениеДобавлено: 10 июл 2020, 16:32
reQuem
waruiyume писал(а):Низя. Можете попробовать отклонять луч, которым тыкаете в коллайдеры.

у меня OnMouseDown просто был, не подскажете как можно отклонять луч?

Re: CurvedWorld

СообщениеДобавлено: 10 июл 2020, 19:43
Saltant
reQuem писал(а):
Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

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

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

Re: CurvedWorld

СообщениеДобавлено: 11 июл 2020, 01:40
reQuem
Saltant писал(а):
reQuem писал(а):
Saltant писал(а):Вроде рыбий глаз делается в пост процессинге, видал не давно видос на эту тему.

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

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

спасибо, попробую использовать это, если возникнут проблемы напишу

Re: CurvedWorld

СообщениеДобавлено: 13 июл 2020, 12:23
reQuem
waruiyume писал(а):Низя. Можете попробовать отклонять луч, которым тыкаете в коллайдеры.

можете рассказать, как можно отклонить луч?

Re: CurvedWorld

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

Re: CurvedWorld

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

а можно ли как-то детектить клик по мешу?

Re: CurvedWorld

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

Re: CurvedWorld

СообщениеДобавлено: 14 июл 2020, 16:06
reQuem
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 );
может кто обьяснить, что тут происходит?) мне просто надо знать на сколько выгибать луч в обратную сторону, чтоб точно попадать по коллайдеру