Jump to content

[SOLVED] Предметы в руках проходят сквозь препятствия.


photo

Recommended Posts

Posted

Всем привет! 

Тема не новая, так что прошу прощения за повтор.

Однако из той информации что есть, я так и не победил вот это:

hand_0.jpg

Естественно, предварительно создал маску Viewport Mask для рук а так же еще одну  камеру, полностью повторяющую главную камеру, и в ней удалил всё лишнее кроме маски рук. А в главной камере удалил соответствующую маску. 

Используя этот пример, ничего не получилось:

Viewport viewport;
Texture texture;
Camera camera;

private void Init()
{

    viewport = new Viewport();

    texture = new Texture();

    // create 512 x 512 render target
    texture.Create2D(512, 512, Texture.FORMAT_RGBA8, Texture.FORMAT_USAGE_RENDER);

    camera = new Camera();

}

private void Update()
{
    // saving current render state and clearing it
    RenderState.SaveState();
    RenderState.ClearStates();
    {
        viewport.RenderTexture2D(camera, texture);
    }
    RenderState.RestoreState();

}

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

По правильности применения скрипта есть вопросы. 

В примере камера создаётся из кода. У меня же уже настроенная и готовая к работе камера. Я использовал ее  следующим образом:

public Node Camera_hand;
PlayerDummy pd;

init()

{

         pd = Camera_hand as PlayerDummy;

}

update()

{

        RenderState.SaveState();
        RenderState.ClearStates();
        {
            viewport.RenderTexture2D(pd.Camera, texture);
        }
        RenderState.RestoreState();

}

Подскажите, пожалуйста, как заставить это работать?) 

Всем спасибо за внимание!

 

Posted

Добрый день, silent!

Я ожидал этого вопроса). Судя по мануалу, у меня должно быть вот такое:

hand_2.jpg.ecefce69763d419dd71de9defbce0297.jpg

У меня же вот такая грустная картинка:

hand_1.thumb.jpg.8117e6d12e1527affaf5c0b3a82614c0.jpg

Я честно, пытался добраться до демо кода, но, видимо, что-то не уяснил... 

Подскажите как сюда добавить то что на первом скрине? 

Спасибо!

Posted

Добрый день!

@Yurickon На прикрепленном изображении в SDK Browser выбрана устаревшая версия SDK для которой уже недоступна загрузка демо проектов. На данный момент актуальной версией является 2.17.0.1. Чтобы демонстрационные проекты стали доступны, необходимо скачать актуальную версию на вкладке "SDKs" и переключить "Default SDK" на 2.17.0.1 в меню, как показано на изображении ниже:

image.png

Спасибо!

  • Like 1
Posted

bmyagkov, приветствую!

Все сделал как вы сказали, использовал скрипт из примера выше. Обрезка работает, но, немного снизился fps и получил вот это:

hand_3.thumb.jpg.35761569ba516423309bf11ab6efc145.jpg

Везде где можно включил маску оружия - и на камере и на солнце и в материалах. Масштаб 1. В чём может быть проблема?

Спасибо!

 

 

Posted

Добрый день, Yurickon!

Подскажите, пожалуйта, Вы меняли что-нибудь в скрипте? В самом скрипте из примера проблем быть не должно, у меня получилось успешно применить его на другом проекте.

Вариант как на Вашем скриншоте удаётся воспроизвести, если отключить маску вьюпорта с оружием в ноде солнца. Не могли бы Вы, пожалуйста, скинуть сюда Viewport Mask со следующих нод: обеих камер, оружия (с вкладки Surface->Rendering и вкладки Surface Material->Base options) и солнца? Давайте, на всякий случай ещё раз перепроверим всё вместе :)

Также на всякий случай скажу, что для удобства Вы можете сразу проверять отображение с определенной камеры прямо в редакторе, выбрав вид с нужной камеры вот здесь:

Screenshot.png

  • Thanks 1
Posted

Приветствую, moody_pooch!

Все что вы сказали я сделал. Код не модифицировал!)

Итак, в качестве доказательств привожу следующее:

1. Вид из редактора камеры для рук - прекрасно работает!

camera_hand_editor.thumb.jpg.7b86cfa00f00de5c0e977a169698f225.jpg

На этом всё заканчивается(

2. Главная камера:

camera_main.thumb.jpg.8cd9a10a7db55d11dbec86c43cb7d3c3.jpg

3. Камера с руками (оружием):

camera_hand.thumb.jpg.9d1c4275dee3aa48ee15096ab997981c.jpg

4. Меш рук:

axe_hand.thumb.jpg.b983d85b0479ad101192fec1109f4c2b.jpg

5. Материал рук:

mat_axe_hand.thumb.jpg.0ee4b7af83e0afa74f240f7a91a8e586.jpg

Вот как-то так.  Правда к руке привязана дочерним объектом нода WorldTransformBone (с масштабом отличным от 1), а уже дочкой к ней наручные часы. Но я это все это отключал в иерархии без какого-либо прогресса... 

Спасибо за любую помощь!)

Posted

Добрый день!

@Yurickon Может быть, у вас есть возможность в рамках нового проекта созданного в SDK Browser изолированно воспроизвести проблему и прислать нам архив? Это бы сильно помогло ускорить процесс поиска причины такого поведения.

Загрузить проект можно на любой удобный для вас файлообменник или на наш собственный FTP-сервер, используя следующие учетные данные для входа:

Спасибо!

Posted

Приветствую, bmyagkov!

Хорошо, создам чистый проект и реализую вырезку оружия по вашему скрипту.

О результатах отпишусь уже завтра - сейчас в Сибири ночь уже, пора отдохнуть от программирования... 

Posted (edited)

Итак, я продолжаю) 

Создал чистый проект, настроил маски, назначил ноды скрипту, создал материал оружия и... оно вообще пропало (даже нет чёрной тени как раньше в моём проекте).

Загрузил архив чуть меньше 400 MB на свой яндекс диск.  Ссылку прилагаю. 

https://disk.yandex.ru/d/ZOcRj9F8M8w4tg

Но проблема видимо всё же у меня, так как почему-то не компилируются проекты из csharp_component_samples, в консоле куча абракадабры...

Спасибо!

Edited by Yurickon
  • Like 1
Posted

Добрый день! Большое спасибо за архив!

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

image.png

Это происходит из-за того, что у нод внутри нод референсов происходит перегенерация их ID:

image.png

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

Чтобы избежать такой ситуации, Вы можете либо распаковать содержимое нод референса и после этого уже добавлять камеры и оружие в компоненту, либо наоброт добавить компоненту внутрь нод референса, тогда свазя теряться не будет:

image.png

Если последовать одной из инструкций выше, проблем с отображением быть не должно, все маски действительно настроены верно:

image.png

Можете, пожалуйста, посмотреть и отправить, как у Вас в итоге отображается оружие после того, как поправить связь нод и компоненты?

Спасибо!

Posted

Приветствую, moody_pooch

Да, всё верно, добавил скрипт в нодереференс и заработало! Как я это просмотрел... Но от этого не легче) 

В моём проекте изначально так и было сделано - компонент добавлен в нодереференс, ничего не теряется, а изображения по-прежнему нет(

hand_4.jpg.ec118cf9bcc545a5c39b14077691b58a.jpg 

hand_5.thumb.jpg.66a2dc08a2d7604ff73eb597e1e68e01.jpg

Posted

А можете, пожалуйста, посмотреть, какое будет поведение, если в чистый проект вместо Box добавить Вашу нод рефку с руками и топором? 

  • Like 1
Posted

Хорошая мысль! Непременно попробую!)

Posted

Эксперимент провёл. Перенёс руки в новый проект, что на яндекс-диске, там обрезка работает.

В своём проекте, создал вытянутый кубик из редактора, всё ему назначил - черная текстура. Что-то видимо поломалось в моём проекте, хотя версия 2.17.0.1 недавно обновил.

И еще заметил, что в консоли стало вот так. Раньше этого не было.

hand_6.thumb.jpg.904770122cf7998e2a73b7122f5559ed.jpg

Я просто убрал точку с запятой из кода что бы вызвать ошибку.

Кстати в билде таже картина  что и при запуске из редактора..

Будут ли какие-нибудь  предложения уважаемые разработчики?))

Спасибо!

 

Posted

Чтобы не было кракозябр надо включить английский язык для dotnet. Сделать это можно несколькими способами:

Самый простой это задать в переменную окружения DOTNET_CLI_UI_LANGUAGE значение en.

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Posted

silent,

Да, всё верно! Задал переменную, перезагрузил ПК и вуаля! Одну проблему решил...

Спасибо!

Posted

Ну всё, разобрался с чёрным силуэтом рук))

Оказалось (это было давно и я уже успел забыть!) я отключал маской солнце что бы в подземелье не было световых артефактов... А когда выходишь из подземелья ставил маску равной 1, что включало нулевую битовую маску. Только сейчас я допёр, что если хочешь включить 0 и 1 маски, то надо писать следующий код:

public Node sun;

private LightWorld _lw;

private void Init()
    {
        _lw = sun as LightWorld;    
    }

private void Update()
    { 

    //if(какое-то условие...)

        _lw.ViewportMask = 3;  //будут включены маски 0 и 1  //код ViewportMask можно увидеть в окне назначения битовых масок в самом верху

    }

Вот так бывает) 

Правда у меня еще один вопрос: есть ли способ сделать тени на руках от объектов мира - домов, деревьев и т.д.? Я поигрался с масками, но видимо что-то недогоняю...

 hand_7.thumb.jpg.263244c962010eeb27565d90d9128881.jpg

Большое спасибо за помощь!

Posted

Добрый день! Хорошо, что удалось разобраться :)

Чтобы получить тени от объектов мира на руках, можете в компоненте WeaponClipping в методе Update вместо команды:

weaponViewport.RenderNode(weaponPlayer.Camera, weapon);

воспользоваться следующей:

weaponViewport.Render(weaponPlayer.Camera);

Спасибо!

  • Like 1
Posted

moody_pooch, приветствую!

Спасибо! Всё отлично работает! Тему можно закрывать.

Еще раз Большое спасибо всем разработчикам за такую поддержку!!! 

 

  • Like 1
  • bmyagkov changed the title to [SOLVED] Предметы в руках проходят сквозь препятствия.
×
×
  • Create New...