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

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

СообщениеДобавлено: 12 апр 2019, 20:02
Legend2856
Некоторые писали что это можно исправить через шейдеры или матрицы используемые при рендеринге меша в Unity, объясните нубу как это сделать. 2 камеры не вариант

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

СообщениеДобавлено: 12 апр 2019, 20:37
1max1

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

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

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

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

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

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

1024 зависнит игра, меньше делай.

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

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


Я так понял нужно создать шейдер для материала оружия c тегом? Tags { "Queue" = "Geometry+1" }

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

СообщениеДобавлено: 13 апр 2019, 14:37
Legend2856
Shader Custom/Player uses undefined Queue: 'Geometry + 1'

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

СообщениеДобавлено: 13 апр 2019, 15:03
Legend2856
Так, с этим разобрался, а что теперь делать с материалом? После смены шейдера в нем нету карты нормалей, AO, и много чего другого

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

СообщениеДобавлено: 13 апр 2019, 17:18
waruiyume
"Queue" = "Geometry+1"

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

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

СообщениеДобавлено: 13 апр 2019, 17:25
Legend2856
waruiyume писал(а):
"Queue" = "Geometry+1"

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


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

ZTest Always
ZWrite On

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

СообщениеДобавлено: 13 апр 2019, 17:26
Legend2856
И еще. Как добавить в шейдер карты нормалей, AO, и тд? В жизни не писал шейдеры

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

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

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

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

Решил эту проблему используя два материала, и появилось еще пару вопросов.
1) Я так понял это можно проделать и с Particle Systems. И накладно ли это по производительности?
2) Откуда мне переписать стандартный шейдер?

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

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

Насчёт двух материалов не понял.

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

СообщениеДобавлено: 14 апр 2019, 14:32
Jarico
Если не хочешь копаться в 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), он будет рисовать черноту на месте пересечения поверхностей когда часть модели входит в стену