nonamenoname_ Posted July 9, 2022 Share Posted July 9, 2022 Добрый день, уважаемые форумчане. Наткнулся на такой вот видеоролик, в котором наглядна показана система винил: https://www.youtube.com/watch?v=uHA3gPApiVs Я не прошу код или чего-то такого. Мне просто интересно, как это вообще реализовано? У меня в голове возникает лишь два сценария: 1) На текстуру "vehiclegrunge256" просто накладываются пиксели с текстура винила и просто перемещаются? Грубо говоря - наложение одних пикселей на другие. Это получается, что текстура не должна иметь разрешение большее, чем у "vehiclegrunge256", иначе вся текстура винила попросту не уместится, а изменение её размера изменяет и само качество, как это происходит в том же фотошопе при уменьшении картинки. 2) Текстура не накладывается на текстуру, а создаёт свой, новый слот в RwTexDictionary (грубо говоря, добавляется новая текстура в txd, который использует тачка), а её перемещение, поворот и масштабирование - редактирование UV карты для новой текстуры? Таким образом, можно накладывать текстуру в абсолютно любом разрешении. Но, до меня не доходит другой момент. Как это возможно, если .dff файл модели может иметь лишь одну UV карту на всю модель, которой пользуются все материалы? А тут накладывается аж несколько десятков своих кастомных текстур со своими UV картами. Быть может, это всё же возможно, просто я об этом не знаю. Пожалуйста, помогите разобраться в этом, очень прошу. Это очень важно для меня. Link to comment
nonamenoname_ Posted July 10, 2022 Author Share Posted July 10, 2022 Порылся в интернете и нашёл вариант, что это рисуется при помощи dxDrawImage. Но тут вообще не понятно. Эта функция ведь используется для рисования текстур в 2Д пространстве. Каким образом она находит координаты полигонов авто (именно самой модели, а не коллизии) и подстраивает под неё текстуру, поворачивая её на нужный ракурс от камеры, а в тех местах, где текстуры быть впринципе не должно (к примеру, на стёклах) - она не появляется. Что-то из разряда фантастики. Мне очень интересна сама реализация. Мне не нужна готовая система с закрытым кодом, мне нужно описание самой реализации. Как это устроено. Слышал ещё, что используется система шейдеров на HLSL. Тут тоже интересно. Если правильно понимаю, то используется тут вершинный шейдер. В общем, надеюсь на вашу помощь. Link to comment
AngelAlpha Posted July 10, 2022 Share Posted July 10, 2022 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 } } 1 Link to comment
nonamenoname_ Posted July 10, 2022 Author Share Posted July 10, 2022 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
AngelAlpha Posted July 10, 2022 Share Posted July 10, 2022 12 minutes ago, nonamenoname_ said: Спасибо большое за ответ! То есть, если я правильно понял, то грубо говоря, создаётся большая текстура, на которую всё это дело наносится, а после - происходит добавление нового материала (той самой большой текстуры) - на кузов, и игра уже самостоятельно обрабатывает это, не трогая стандартную текстуру кузова, которая перекрашивается и отвечает за цвет. И, по итогу, игра обрабатывает на кузов два материала - стандартный и новый с картинками. Надеюсь, правильно понял, поправьте, если ошибаюсь. Ну да, тип того Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now