Войти
Urho3DФорумURHOSHARP

Technique программно

#0
14:03, 1 сен. 2016

Скажите плиз, как создать в коде Technique, к примеру подобный этому?

            <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="IBL" psdefines="DIFFMAP PBR IBL METALLIC ROUGHNESS">
                <pass name="alpha" depthwrite="false" blend="alpha" />
                <pass name="litalpha" depthwrite="false" blend="addalpha" />
                <pass name="shadow" vs="Shadow" ps="Shadow" />
            </technique>
     

Делаю:

  
  Technique tehniq = new Technique() { };
        Pass p1 = tehniq.CreatePass("alpha");     p1.DepthWrite = false;         p1.BlendMode = BlendMode.Alpha;
        Pass p2 = tehniq.CreatePass("litalpha");  p2.DepthWrite = false;        p2.BlendMode = BlendMode.Addalpha;
        Pass p3 = tehniq.CreatePass("shadow");  p3.VertexShader = "Shadow";  p3.PixelShader="Shadow";
    

а как определять эту строку?     
    vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="IBL" psdefines="DIFFMAP PBR IBL METALLIC ROUGHNESS"
 


#1
14:18, 1 сен. 2016

vs - это вершинный шейдер, ps - это пиксельный шейдер, vsdefines - это дефайны для вершинного шйдера, psdefines - это дефайны для пиксельного шейдра

первая строка добавляется В КАЖДЫЙ ПАСС.

То есть строка

<pass name="alpha" depthwrite="false" blend="alpha" /> 
на самом деле является строкой
<pass name="alpha" depthwrite="false" blend="alpha" vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="IBL" psdefines="DIFFMAP PBR IBL METALLIC ROUGHNESS" /> 

А строка
<pass name="shadow" vs="Shadow" ps="Shadow" />
переопределяет шейдеры на другие.

Поэтому шейдер указывается в каждом пассе, также не забудь SetPixelShaderDefines, SetVertexShaderDefines  в каждом пассе

#2
14:32, 1 сен. 2016

Заработало - ты Волшебник!))

Это правило распространяется на все pass:
base, light, prepass, material, deferred, depth, shadow?

#3
14:33, 1 сен. 2016

Терпеть не могу эти xml, скрипты и все что связано с ними... вот и извращаюсь)

#4
14:36, 1 сен. 2016

да вроде, это вообще обычные пассы, только некоторые определены не в файле renderpath, а движком (shadow, litbase)

#5
14:41, 1 сен. 2016

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

#6
14:43, 1 сен. 2016

> Терпеть не могу эти xml, скрипты и все что связано с ними... вот и извращаюсь)

ну тогда тебе и renderpath надо программно создавать)

по умолчанию используется CoreData\RenderPaths\Forward.xml

#7
14:53, 1 сен. 2016

psdefines= "DIFFMAP PBR IBL METALLIC ROUGHNESS"
поменял на  psdefines= "PBR IBL METALLIC" результат не меняется, резонно что чем меньше их тем ресурсо-щадяще?)

На андроиде пытался запустить чет не робит... PBR может теоритически работать на андроиде, не в курсе?

#8
15:12, 1 сен. 2016

> На андроиде пытался запустить чет не робит... PBR может теоритически работать на андроиде, не в курсе?

официальная позиция cadaver,что не может, там требуется извлечение определенного Mip уровня из текстуры окружения

> результат не меняется, резонно что чем меньше их тем ресурсо-щадяще?)

я бы не заморачивался на счет производительности, это равноценно добавлению в исходник

#define ROUGHNESS
#define DIFFMAP 
если они не используются в шейдере, то и бог с ними (а если используются, то поведение меняется конечно)

#9
15:16, 1 сен. 2016
это равноценно добавлению в исходник

Ого, взял на заметку...

официальная позиция cadaver,что не может
печально слышать, но позиция, будем верить - еще не вердикт)

#10
15:19, 1 сен. 2016

Ну это от оборудования зависит в каждом персональном случае

Urho3DФорумURHOSHARP

Тема в архиве.