Jump to content

Система винил


Recommended Posts

Добрый день, уважаемые форумчане. Наткнулся на такой вот видеоролик, в котором наглядна показана система винил:
https://www.youtube.com/watch?v=uHA3gPApiVs
Я не прошу код или чего-то такого. Мне просто интересно, как это вообще реализовано? У меня в голове возникает лишь два сценария:
1) На текстуру "vehiclegrunge256" просто накладываются пиксели с текстура винила и просто перемещаются? Грубо говоря - наложение одних пикселей на другие. Это получается, что текстура не должна иметь разрешение большее, чем у "vehiclegrunge256", иначе вся текстура винила попросту не уместится, а изменение её размера изменяет и само качество, как это происходит в том же фотошопе при уменьшении картинки.
2) Текстура не накладывается на текстуру, а создаёт свой, новый слот в RwTexDictionary (грубо говоря, добавляется новая текстура в txd, который использует тачка), а её перемещение, поворот и масштабирование - редактирование UV карты для новой текстуры? Таким образом, можно накладывать текстуру в абсолютно любом разрешении. Но, до меня не доходит другой момент. Как это возможно, если .dff файл модели может иметь лишь одну UV карту на всю модель, которой пользуются все материалы? А тут накладывается аж несколько десятков своих кастомных текстур со своими UV картами. Быть может, это всё же возможно, просто я об этом не знаю.

Пожалуйста, помогите разобраться в этом, очень прошу. Это очень важно для меня.

Link to comment

Порылся в интернете и нашёл вариант, что это рисуется при помощи dxDrawImage. Но тут вообще не понятно. Эта функция ведь используется для рисования текстур в 2Д пространстве. Каким образом она находит координаты полигонов авто (именно самой модели, а не коллизии) и подстраивает под неё текстуру, поворачивая её на нужный ракурс от камеры, а в тех местах, где текстуры быть впринципе не должно (к примеру, на стёклах) - она не появляется. Что-то из разряда фантастики.

Мне очень интересна сама реализация. Мне не нужна готовая система с закрытым кодом, мне нужно описание самой реализации. Как это устроено.
Слышал ещё, что используется система шейдеров на HLSL. Тут тоже интересно. Если правильно понимаю, то используется тут вершинный шейдер.
В общем, надеюсь на вашу помощь.

Link to comment
3 hours ago, nonamenoname_ said:

Порылся в интернете и нашёл вариант, что это рисуется при помощи dxDrawImage. Но тут вообще не понятно. Эта функция ведь используется для рисования текстур в 2Д пространстве. Каким образом она находит координаты полигонов авто (именно самой модели, а не коллизии) и подстраивает под неё текстуру, поворачивая её на нужный ракурс от камеры, а в тех местах, где текстуры быть впринципе не должно (к примеру, на стёклах) - она не появляется. Что-то из разряда фантастики.

Мне очень интересна сама реализация. Мне не нужна готовая система с закрытым кодом, мне нужно описание самой реализации. Как это устроено.
Слышал ещё, что используется система шейдеров на HLSL. Тут тоже интересно. Если правильно понимаю, то используется тут вершинный шейдер.
В общем, надеюсь на вашу помощь.

Создается квадратный RT (dxCreateRenderTarget), 1024*1024, можно и больше 2048*2048 но тогда будет перерасход памяти. И в нем рисуются картинки или текст через dxDrawImage/dxDrawText соответственно. И потом просто шейдером наложения накладывается на машину. А шейдер обычный с заменой текстуры и слоем накладывается на машину
 

//-- Declare the texture. These are set using dxSetShaderValue( shader, "Tex0", texture )
texture Tex0;

technique simple
{
    pass P0
    {
        //-- Set up texture stage 0
        Texture[0] = Tex0;

        //-- Leave the rest of the states to the default settings
    }
}

 

  • Like 1
Link to comment
6 minutes ago, AngelAlpha said:

Создается квадратный RT (dxCreateRenderTarget), 1024*1024, можно и больше 2048*2048 но тогда будет перерасход памяти. И в нем рисуются картинки или текст через dxDrawImage/dxDrawText соответственно. И потом просто шейдером наложения накладывается на машину. А шейдер обычный с заменой текстуры и слоем накладывается на машину
 

//-- Declare the texture. These are set using dxSetShaderValue( shader, "Tex0", texture )
texture Tex0;

technique simple
{
    pass P0
    {
        //-- Set up texture stage 0
        Texture[0] = Tex0;

        //-- Leave the rest of the states to the default settings
    }
}

 

Спасибо большое за ответ!
То есть, если я правильно понял, то грубо говоря, создаётся большая текстура, на которую всё это дело наносится, а после - происходит добавление нового материала (той самой большой текстуры) - на кузов, и игра уже самостоятельно обрабатывает это, не трогая стандартную текстуру кузова, которая перекрашивается и отвечает за цвет. И, по итогу, игра обрабатывает на кузов два материала - стандартный и новый с картинками. Надеюсь, правильно понял, поправьте, если ошибаюсь.

Link to comment
12 minutes ago, nonamenoname_ said:

Спасибо большое за ответ!
То есть, если я правильно понял, то грубо говоря, создаётся большая текстура, на которую всё это дело наносится, а после - происходит добавление нового материала (той самой большой текстуры) - на кузов, и игра уже самостоятельно обрабатывает это, не трогая стандартную текстуру кузова, которая перекрашивается и отвечает за цвет. И, по итогу, игра обрабатывает на кузов два материала - стандартный и новый с картинками. Надеюсь, правильно понял, поправьте, если ошибаюсь.

Ну да, тип того

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...