Скажите плиз, как создать в коде 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"
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 в каждом пассе
Заработало - ты Волшебник!))
Это правило распространяется на все pass:
base, light, prepass, material, deferred, depth, shadow?
Терпеть не могу эти xml, скрипты и все что связано с ними... вот и извращаюсь)
да вроде, это вообще обычные пассы, только некоторые определены не в файле renderpath, а движком (shadow, litbase)
ну кончено если дефайны в шейдере не используются, то можно и не отправлять их туда, они все равно игнорируются
> Терпеть не могу эти xml, скрипты и все что связано с ними... вот и извращаюсь)
ну тогда тебе и renderpath надо программно создавать)
по умолчанию используется CoreData\RenderPaths\Forward.xml
psdefines= "DIFFMAP PBR IBL METALLIC ROUGHNESS"
поменял на psdefines= "PBR IBL METALLIC" результат не меняется, резонно что чем меньше их тем ресурсо-щадяще?)
На андроиде пытался запустить чет не робит... PBR может теоритически работать на андроиде, не в курсе?
> На андроиде пытался запустить чет не робит... PBR может теоритически работать на андроиде, не в курсе?
официальная позиция cadaver,что не может, там требуется извлечение определенного Mip уровня из текстуры окружения
> результат не меняется, резонно что чем меньше их тем ресурсо-щадяще?)
я бы не заморачивался на счет производительности, это равноценно добавлению в исходник
#define ROUGHNESS #define DIFFMAP
Ну это от оборудования зависит в каждом персональном случае
Тема в архиве.