Войти
UnityФорумОбщее

Unity (проблемы, решения, перспективы) (128 стр)

Страницы: 1123 124 125 126 127 128
#1905
5:13, 25 июня 2020

foxes
Мне хотелось бы посмотреть на внутренность этого компонента, как код написан. Только я не знаю, в какой из юнитивских библиотек его можно найти...


#1906
12:11, 25 июня 2020

lusyok
> Только я не знаю, в какой из юнитивских библиотек его можно найти...
Ни в какой, код закрыт.

#1907
(Правка: 12:18) 12:17, 25 июня 2020

foxes
> Ооо, это никакого отношение к ветвлениям не имеет. Скорее всего ты что-то в
> своем шейдере откуда то скопировал. В unity очень вредный компилятор, он выдает
> ошибку если в тексте появляется какой нибудь не печатаемый спец символ (обычно
> перенос строки), или ты просто последовательность обявления не очевидно
> напутал. Я обычно в таких случаях просто переписываю весь шейдер посимвольно
> вручную.

Была такая мысль, но весь шейдер написан вручную, а ошибка пропадала, если закомментировать одну из строк с max() через ~80 строк ниже по тексту. Перенёс оба max() из геометрического шейдера в вершинный, и OpenGL c Вулканом перестали ругаться.

> Мало того функция MAX/MIN - это не ветвления, они есть как команды ассемблера.

Вот фиг их знает. Где-то попадалось, что step() то ли всегда, то ли в каких-то случаях реализуется через if ― условный переход в ассемблере. Что пишешь if, что пишешь step() ― ассемблер одинаковый. А у меня как раз на step(), max() и if {} одна и та же ошибка.

#1908
15:28, 25 июня 2020

alexzzzz
> Была такая мысль, но весь шейдер написан вручную
Все равно этого не должно быть. Я в геометрическом шейдере много чего писал.

#1909
(Правка: 20:05) 20:03, 25 июня 2020

foxes
> Я в геометрическом шейдере много чего писал.
Именно в OpenGLCore/OpenGL ES 3/Vulkan? В DirectX всё работает без проблем. Я и не подозревал, что что-то не так, пока не переключил API на OpenGL.

Кстати, когда проблемный шейдер редактируешь и сохраняешь, Unity не находит в нём ошибок. Они вылезают в консоли или журнале потом, как только пытаешься этот шейдер использовать. Какая-то отложенная компиляция там происходит. Может, от драйвера видеокарты зависит, или кто там компилирует OpenGL-шейдеры уже для непосредственного использования... Хотя если в редакторе в режиме OpenGL шейдер не работает, то на Android-телефонах тоже ничего не рисуется.

#1910
(Правка: 20:34) 20:20, 25 июня 2020

alexzzzz
> Какая-то отложенная компиляция там происходит.
В GL шейдер компилируется драйвером, если приставку opengl.dll можно таковым назвать. Только DX принимает уже "скомпилированный" код, который легко конвертится в бинарник, для gl unity просто транслирует hlsl в glsl.
Там же можно посмотреть что компилирует unity для каждой платформы.
alexzzzz
> Может, от драйвера видеокарты зависит
Возможно что сама unity косячит. Новая версия?

#1911
23:17, 25 июня 2020

foxes
> В GL шейдер компилируется драйвером, если приставку opengl.dll можно таковым назвать.

А кто/где компилирует шейдеры для Андроида? GLSL компилируется в рабочий код непосредственно на устройстве или заранее при сборке билда? Потому что если в Unity режиме в OpenGL не работает, то на устройстве тоже не работает. А когда работает, то тоже и там, и там.

> Там же можно посмотреть что компилирует unity для каждой платформы.

Мало толку. Компилятор нашёл какую-то целочисленную константу/литерал там, где не ожидал:

GLSL compilation failed:
0(26) : error C0000: syntax error, unexpected integer constant, expecting reserved word or reserved word "precise" at token "<int-const>"

Вот исходный шейдер:

  struct VertexData
  {                   <---- это строка 26
    float4 start : SV_POSITION;
    float4 end : POSITION1;

Вот «скомпилированный» шейдер:

...
  //////////////////////////////////
  //                              //
  //      Compiled programs       // <---- это строка 26
  //                              //
  //////////////////////////////////
...

Когда нажимаешь кнопочку Compile and show code, показывается весьма условно скомпилированный код. Там остаётся ещё куча директив условной компиляции, и кто-то потом должен это докомпилировать до полной готовности.

> Возможно что сама unity косячит. Новая версия?

Да не, последний 2018 LTS. И в 2019 LTS то же самое.

#1912
(Правка: 26 июня 2020, 0:41) 23:45, 25 июня 2020

alexzzzz
> GLSL компилируется в рабочий код непосредственно на устройстве или заранее при
> сборке билда?
При работе приложения на устройстве.
alexzzzz
> А когда работает, то тоже и там, и там.
Ну понятно что если unity не выдаст glsl то ни фига не будет.
alexzzzz
> syntax error, unexpected integer constant, expecting reserved word or reserved
> word "precise" at token "<int-const>"
Недавно делал пример Cull face с геометрическим шейдером и такая же фигня была. Хотел спросить здесь, но вспомнил что это баян. Все исправил, помню что тривиально, но не помню как. Теперь ты на этих граблях. :)))

Добавил лишь этот код и также на структуру ругаться начал.

+ Показать

Ради теста сейчас в уже рабочем поменял на это, но проблем нет.

+ Показать

alexzzzz
> float4 start : SV_POSITION;
> float4 end : POSITION1;
Вот эти вот POSITION1, SV_POSITION и прочие директивы на самом деле очень конфликтуют между собой.
У меня только что gl ругнулся на FOG директиву, что TEXCOORD1 и TEXCOORD2 уже используется.

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

alexzzzz
> Мало толку.
У тебя на стрелочке должны выбираться платформы.
unity_shader_cod0001 | Unity (проблемы, решения, перспективы)

alexzzzz
> Когда нажимаешь кнопочку Compile and show code,
Должен получиться огромный исходник с ключевыми словами

-- Vertex shader for "glcore":
...
-- Geometry shader for "d3d11":
...

После чего можно найти один из вариантов скомпилированного кода OpenGl для glsl. Который можно будет прямо в стандартном OpenGL приложении на С++ или еще чем-то использовать.

+ Показать

Для DX будет ассемблер

+ Показать

Вот эта шляпа уже во время работы приложения компилируется "драйверами". И в этом же тексте может быть пустой код или код с ошибками. Прямо тут в тексте сообщение об ошибке может быть написано.

#1913
(Правка: 1:50) 1:21, 26 июня 2020

Пока загадка. Если COLOR3 из сообщения об ошибке поменять на что-то другое, ругается точно так же, но уже на это другое.

GLSL compilation failed:
0(19) : error C0000: syntax error, unexpected integer constant, expecting reserved word or reserved word "precise" at token "<int-const>"
0(34) : error C1503: undefined variable "vs_COLOR3"
0(34) : error C1066: invalid type in type constructor

Если считать первое упоминание vs_COLOR3 в шейдере строкой 34, то получается так:

+ Показать

Единственное, что связывает этот vs_COLOR3 с функцией max(), это что значение из этого поля vs_COLOR3 читается в геометрическом шейдере в локальную переменную, над которой и выполняется max(). Но со значением из vs_COLOR2 выполняется абсолютно точно такая же операция и в коде она происходит раньше, но к нему почему-то претензий нет. Т.е. один раз сделать max, if или step можно, а два раза уже нельзя.

#1914
1:28, 26 июня 2020

alexzzzz
> Пока загадка.
Просто матом готов ругаться, а не помню что за фигня была. Что то вот в этих строчках исправил и все заработало.

CGPROGRAM
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
     
#include "UnityCG.cginc"
#1915
1:53, 26 июня 2020

Пока проблему обошёл, не особо актуально, но надо будет порезать всё лишнее и сделать воспроизводящий проблему минимальный шейдер. Может тогда прояснится.

#1916
13:13, 25 авг. 2020

куда конкретно писать не понял но вроде заголовок данного раздела подходит к моей проблеме. Как все знают, кто компилирует apk для Google Play, то что Googl выкатил требование поддержки 10 андроида для своих приложений иначе обновления и новые приложения нельзя будет заливать на их ресурс.

А теперь немного чудес с Unity. Я тут же попытался обновить sdk, но не вышло, в итоге удалил Unity полностью и установил по новой, скачал sdk, ndk, jdk. Тут же проверил как все встало и проверил есть ли поддержка 10 андроида и да все получилось, скомпилировал все было хорошо.

И вот самое интересное.....
Примерно неделю не заходил в приложение и вот запустил, решил скомпилировать и выложить обновление, а там такая интересная информация в консоли о том что в приложении поддержка только до 9 андроида. Тут же проверил и правда поддержка 10 андроида пропала. Может кто сталкивался с этим? как исправить? Так как каждый раз переустанавливать Unity как то не охота да и не правильно это, должно быть какое то другое решение этой проблемы. Помогите кто может.

#1917
19:24, 26 авг. 2020

GamePrograms
> Googl выкатил требование поддержки 10 андроида
Это Target API Level?

GamePrograms
> Тут же проверил и правда поддержка 10 андроида пропала
Это где?

#1918
14:31, 30 авг. 2020

Все исправил сам.

Страницы: 1123 124 125 126 127 128
UnityФорумОбщее