[РЕШЕНО] Оружие с руками от 1 лица проходит через стену

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

[РЕШЕНО] Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 12 апр 2019, 20:02

Некоторые писали что это можно исправить через шейдеры или матрицы используемые при рендеринге меша в Unity, объясните нубу как это сделать. 2 камеры не вариант
Последний раз редактировалось Legend2856 06 май 2019, 23:12, всего редактировалось 1 раз.
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32


Re: Оружие с руками от 1 лица проходит через стену

Сообщение NAGIBATOR228pacan 12 апр 2019, 21:35

2 Камеры конечно не вариант, нужно 4 камеры! А лучше даже 8! А с 16 камерами вы сможете сделать вид своего оружия со всех возможных ракурсов, а добавив еще 256 камер то вы сможете сделать хороший аналог кухонный плиты из своей видеокарты, по-моему вы уже не первый раз этот вопрос задаете вам в прошлой теме ответили все кому не лень
NAGIBATOR228pacan
UNITрон
 
Сообщения: 318
Зарегистрирован: 15 мар 2017, 20:39

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 12 апр 2019, 23:12

А че так мало? Сразу 1024!
NAGIBATOR228pacan писал(а):2 Камеры конечно не вариант, нужно 4 камеры! А лучше даже 8! А с 16 камерами вы сможете сделать вид своего оружия со всех возможных ракурсов, а добавив еще 256 камер то вы сможете сделать хороший аналог кухонный плиты из своей видеокарты, по-моему вы уже не первый раз этот вопрос задаете вам в прошлой теме ответили все кому не лень
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Saltant 13 апр 2019, 11:32

Legend2856 писал(а):А че так мало? Сразу 1024!
NAGIBATOR228pacan писал(а):2 Камеры конечно не вариант, нужно 4 камеры! А лучше даже 8! А с 16 камерами вы сможете сделать вид своего оружия со всех возможных ракурсов, а добавив еще 256 камер то вы сможете сделать хороший аналог кухонный плиты из своей видеокарты, по-моему вы уже не первый раз этот вопрос задаете вам в прошлой теме ответили все кому не лень

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

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 14:28



Я так понял нужно создать шейдер для материала оружия c тегом? Tags { "Queue" = "Geometry+1" }
Последний раз редактировалось Legend2856 13 апр 2019, 14:58, всего редактировалось 1 раз.
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 14:37

Shader Custom/Player uses undefined Queue: 'Geometry + 1'
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 15:03

Так, с этим разобрался, а что теперь делать с материалом? После смены шейдера в нем нету карты нормалей, AO, и много чего другого
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение waruiyume 13 апр 2019, 17:18

"Queue" = "Geometry+1"

Значит, что объект будет передаваться на отрисовку после геометрии, а не то, что он будет рисоваться поверх геометрии, т.к. он не пройдёт z тест.
Нужно либо модифицировать проекционную(вроде) матрицу, либо использовать буфер трафарета.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 17:25

waruiyume писал(а):
"Queue" = "Geometry+1"

Значит, что объект будет передаваться на отрисовку после геометрии, а не то, что он будет рисоваться поверх геометрии, т.к. он не пройдёт z тест.
Нужно либо модифицировать проекционную(вроде) матрицу, либо использовать буфер трафарета.


Исправил это, добавив в шейдер

ZTest Always
ZWrite On
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 17:26

И еще. Как добавить в шейдер карты нормалей, AO, и тд? В жизни не писал шейдеры
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение waruiyume 13 апр 2019, 17:29

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

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Legend2856 13 апр 2019, 22:10

waruiyume писал(а):ZTest Always
Это вызовет косяки сортировки, на кубике работать будет, а на более-менее реалистичной форме полезут полигоны находящиеся с обратной стороны.

Решил эту проблему используя два материала, и появилось еще пару вопросов.
1) Я так понял это можно проделать и с Particle Systems. И накладно ли это по производительности?
2) Откуда мне переписать стандартный шейдер?
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Оружие с руками от 1 лица проходит через стену

Сообщение waruiyume 13 апр 2019, 23:33

Стандартный шейдер лежит тут:
https://unity3d.com/get-unity/download/ ... 1551377827
https://yadi.sk/i/z4yo4C33gW4nWA
Но он это... как бы это выразится... в общем увидите.

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

Re: Оружие с руками от 1 лица проходит через стену

Сообщение Jarico 14 апр 2019, 14:32

Если не хочешь копаться в UnityShaderVariables.cginc просто укажи Offset в своём шейдере

Синтаксис:
Используется csharp
Shader "Game/Standart_viewmodel"
{
        Properties
        {
                _Color("Color", Color) = (1,1,1,1)
                _MainTex("Albedo", 2D) = "white" {}

                _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5

                _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
                _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
                [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0

                [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
                _MetallicGlossMap("Metallic", 2D) = "white" {}

                [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
                [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0

                _BumpScale("Scale", Float) = 1.0
                _BumpMap("Normal Map", 2D) = "bump" {}

                _Parallax("Height Scale", Range(0.005, 0.08)) = 0.02
                _ParallaxMap("Height Map", 2D) = "black" {}

                _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
                _OcclusionMap("Occlusion", 2D) = "white" {}

                _EmissionColor("Color", Color) = (0,0,0)
                _EmissionMap("Emission", 2D) = "white" {}

                _DetailMask("Detail Mask", 2D) = "white" {}

                _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
                _DetailNormalMapScale("Scale", Float) = 1.0
                _DetailNormalMap("Normal Map", 2D) = "bump" {}

                [Enum(UV0,0,UV1,1)] _UVSec("UV Set for secondary textures", Float) = 0


                        // Blending state
                        [HideInInspector] _Mode("__mode", Float) = 0.0
                        [HideInInspector] _SrcBlend("__src", Float) = 1.0
                        [HideInInspector] _DstBlend("__dst", Float) = 0.0
                        [HideInInspector] _ZWrite("__zw", Float) = 1.0
        }

                CGINCLUDE
#define UNITY_SETUP_BRDF_INPUT MetallicSetup
                        ENDCG

                        SubShader
                {
                        Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" }
                        LOD 300
                        Cull Back

                        // ------------------------------------------------------------------
                        //  Base forward pass (directional light, emission, lightmaps, ...)
                        Pass
                        {
                                Name "FORWARD"
                                Tags { "LightMode" = "ForwardBase" }

                                Blend[_SrcBlend][_DstBlend]
                                ZWrite[_ZWrite]
                                Offset -400, -400    //оффсет для отрисовки сквозь стены
                                CGPROGRAM
                                #pragma target 3.0

                        // -------------------------------------

                        #pragma shader_feature _NORMALMAP
                        #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                        #pragma shader_feature _EMISSION
                        #pragma shader_feature _METALLICGLOSSMAP
                        #pragma shader_feature ___ _DETAIL_MULX2
                        #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                        #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
                        #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
                        #pragma shader_feature _PARALLAXMAP

                        #pragma multi_compile_fwdbase
                        #pragma multi_compile_fog
                        #pragma multi_compile_instancing
                        // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
                        //#pragma multi_compile _ LOD_FADE_CROSSFADE

                        #pragma vertex vertBase
                        #pragma fragment fragBase
                        #include "UnityStandardCoreForward.cginc"

                        ENDCG
                }
                        // ------------------------------------------------------------------
                        //  Additive forward pass (one light per pass)
                        Pass
                        {
                                Name "FORWARD_DELTA"
                                Tags { "LightMode" = "ForwardAdd" }
                                Blend[_SrcBlend] One
                                Fog { Color(0,0,0,0) } // in additive pass fog should be black
                                ZWrite Off
                                ZTest LEqual

                                CGPROGRAM
                                #pragma target 3.0

                        // -------------------------------------


                        #pragma shader_feature _NORMALMAP
                        #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                        #pragma shader_feature _METALLICGLOSSMAP
                        #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                        #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
                        #pragma shader_feature ___ _DETAIL_MULX2
                        #pragma shader_feature _PARALLAXMAP

                        #pragma multi_compile_fwdadd_fullshadows
                        #pragma multi_compile_fog
                        // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
                        //#pragma multi_compile _ LOD_FADE_CROSSFADE

                        #pragma vertex vertAdd
                        #pragma fragment fragAdd
                        #include "UnityStandardCoreForward.cginc"

                        ENDCG
                }
                        // ------------------------------------------------------------------
                        //  Shadow rendering pass
                        Pass {
                                Name "ShadowCaster"
                                Tags { "LightMode" = "ShadowCaster" }

                                ZWrite On ZTest LEqual

                                CGPROGRAM
                                #pragma target 3.0

                        // -------------------------------------


                        #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                        #pragma shader_feature _METALLICGLOSSMAP
                        #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                        #pragma shader_feature _PARALLAXMAP
                        #pragma multi_compile_shadowcaster
                        #pragma multi_compile_instancing
                        // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
                        //#pragma multi_compile _ LOD_FADE_CROSSFADE

                        #pragma vertex vertShadowCaster
                        #pragma fragment fragShadowCaster

                        #include "UnityStandardShadow.cginc"

                        ENDCG
                }
                        // ------------------------------------------------------------------
                        //  Deferred pass
                        Pass
                        {
                                Name "DEFERRED"
                                Tags { "LightMode" = "Deferred" }

                                CGPROGRAM
                                #pragma target 3.0
                                #pragma exclude_renderers nomrt


                        // -------------------------------------

                        #pragma shader_feature _NORMALMAP
                        #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                        #pragma shader_feature _EMISSION
                        #pragma shader_feature _METALLICGLOSSMAP
                        #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                        #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
                        #pragma shader_feature ___ _DETAIL_MULX2
                        #pragma shader_feature _PARALLAXMAP

                        #pragma multi_compile_prepassfinal
                        #pragma multi_compile_instancing
                        // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
                        //#pragma multi_compile _ LOD_FADE_CROSSFADE

                        #pragma vertex vertDeferred
                        #pragma fragment fragDeferred

                        #include "UnityStandardCore.cginc"

                        ENDCG
                }

                        // ------------------------------------------------------------------
                        // Extracts information for lightmapping, GI (emission, albedo, ...)
                        // This pass it not used during regular rendering.
                        Pass
                        {
                                Name "META"
                                Tags { "LightMode" = "Meta" }

                                Cull Off

                                CGPROGRAM
                                #pragma vertex vert_meta
                                #pragma fragment frag_meta

                                #pragma shader_feature _EMISSION
                                #pragma shader_feature _METALLICGLOSSMAP
                                #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                                #pragma shader_feature ___ _DETAIL_MULX2
                                #pragma shader_feature EDITOR_VISUALIZATION

                                #include "UnityStandardMeta.cginc"
                                ENDCG
                        }
                }

                        SubShader
                {
                        Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" }
                        LOD 150

                        // ------------------------------------------------------------------
                        //  Base forward pass (directional light, emission, lightmaps, ...)
                        Pass
                        {
                                Name "FORWARD"
                                Tags { "LightMode" = "ForwardBase" }

                                Blend[_SrcBlend][_DstBlend]
                                ZWrite[_ZWrite]

                                CGPROGRAM
                                #pragma target 2.0

                                #pragma shader_feature _NORMALMAP
                                #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                                #pragma shader_feature _EMISSION
                                #pragma shader_feature _METALLICGLOSSMAP
                                #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                                #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
                                #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
                        // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2
                        // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP

                        #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED

                        #pragma multi_compile_fwdbase
                        #pragma multi_compile_fog

                        #pragma vertex vertBase
                        #pragma fragment fragBase
                        #include "UnityStandardCoreForward.cginc"

                        ENDCG
                }
                        // ------------------------------------------------------------------
                        //  Additive forward pass (one light per pass)
                        Pass
                        {
                                Name "FORWARD_DELTA"
                                Tags { "LightMode" = "ForwardAdd" }
                                Blend[_SrcBlend] One
                                Fog { Color(0,0,0,0) } // in additive pass fog should be black
                                ZWrite Off
                                ZTest LEqual

                                CGPROGRAM
                                #pragma target 2.0

                                #pragma shader_feature _NORMALMAP
                                #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                                #pragma shader_feature _METALLICGLOSSMAP
                                #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                                #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
                                #pragma shader_feature ___ _DETAIL_MULX2
                        // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
                        #pragma skip_variants SHADOWS_SOFT

                        #pragma multi_compile_fwdadd_fullshadows
                        #pragma multi_compile_fog

                        #pragma vertex vertAdd
                        #pragma fragment fragAdd
                        #include "UnityStandardCoreForward.cginc"

                        ENDCG
                }
                        // ------------------------------------------------------------------
                        //  Shadow rendering pass
                        Pass {
                                Name "ShadowCaster"
                                Tags { "LightMode" = "ShadowCaster" }

                                ZWrite On ZTest LEqual

                                CGPROGRAM
                                #pragma target 2.0

                                #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
                                #pragma shader_feature _METALLICGLOSSMAP
                                #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                                #pragma skip_variants SHADOWS_SOFT
                                #pragma multi_compile_shadowcaster

                                #pragma vertex vertShadowCaster
                                #pragma fragment fragShadowCaster

                                #include "UnityStandardShadow.cginc"

                                ENDCG
                        }

                        // ------------------------------------------------------------------
                        // Extracts information for lightmapping, GI (emission, albedo, ...)
                        // This pass it not used during regular rendering.
                        Pass
                        {
                                Name "META"
                                Tags { "LightMode" = "Meta" }

                                Cull Off

                                CGPROGRAM
                                #pragma vertex vert_meta
                                #pragma fragment frag_meta

                                #pragma shader_feature _EMISSION
                                #pragma shader_feature _METALLICGLOSSMAP
                                #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
                                #pragma shader_feature ___ _DETAIL_MULX2
                                #pragma shader_feature EDITOR_VISUALIZATION

                                #include "UnityStandardMeta.cginc"
                                ENDCG
                        }
                }


                        FallBack "VertexLit"
                        CustomEditor "StandardShaderGUI"
}

 


Есть неприятный сюрприз, когда будет включен AO (Ambient Occulusion), он будет рисовать черноту на месте пересечения поверхностей когда часть модели входит в стену
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

След.

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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 40