Страница 2 из 3

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 27 окт 2010, 17:32
antonio
Решил тоже поэкспериментировать c NVIDIA Soft Shadow шейдером.
Но при попытке заграбить пасс сразу же получил "No subshaders can run on this graphics card" (
(NVIDIA GeForce 8800 GTS) Unity indie 3.0.
Пробовал с нулевого шейдера и тестировал готовые рабочие шейдеры использующие GrabPass - получил тот же ответ.
P.S. Небольшое дополнение. Насколько я понимаю глубину надо считать от источника света, а не от камеры вьюпорта.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 03:20
Fox Rex
Он на матрицы не ругается, ругается на неизвестный входной канал.
По поводу GrabPass надо попробовать. Расчет глубины и теней брал из готового шейдера.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 04:07
Fox Rex
GrabPass у меня не выдает ошибок gforce 8200.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 14:06
gnoblin
Я думаю ругаться он будет много на что).
В том числе и на матрицы.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 15:01
Fox Rex
Если будет ругаться на матрици, то это известно как решить. Заменить названия, так чтобы соответствовали документации. Интересно какую версию cg использует Юнити? И что переделано в cg?

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 15:55
gnoblin
Я бы на твоем месте заменил бы матрицы уже СЕЙЧАС.

Еще вот это, имхо, совсем лишнее

Код: Выделить всё
sampler zTextureSampler = sampler_state
      {

          Texture   = (_GrabTexture);

          MinFilter = LINEAR;

          MagFilter = LINEAR;

      };

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 15:58
gnoblin
И zTextureSampler заменить на _GrabTexture

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 16:04
Fox Rex
Сделаю.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 16:07
gnoblin
И, наверное, еще
Код: Выделить всё
sampler2D _GrabTexture;


Я не совсем понимаю откуда все эти замечательные входные параметры попадают в шейдер (нормали ребер итд) (popcorn1)

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 16:10
Fox Rex
Хотя где были мои глаза.
f you want to access different vertex data, you have to declare vertex structure yourself. The structure members must be from the following list:

float4 vertex is the vertex position
float3 normal is the vertex normal
float4 texcoord is the first UV coordinate
float4 texcoord1 is the second UV coordinate
float4 tangent is the tangent vector (used for normal mapping)
float4 color is per-vertex color

Неполучиться

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 16:18
Fox Rex
Из входных регистров карточки берутся входные данные. Т.е. Идет предварительная отработка данных картой, на определенном этапе вызывается шейдер вершинный, во входные регистры записываются входные данные, вершинный шейдер пишет данные в выходные регистры, они же являются входом для пиксельного шейдера, пиксельный шейдер выдает одну переменную , цвет точки экрана. Вершинный шейдер обрабатывает одну вершину сцены, пксельный (фрагментарный) один пиксель. Вершинный шейдер, как я понимаю, обрабатывает весь поток вершин, после этого начинает работать пиксельный шейдер.
Поправите если не прав.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 28 окт 2010, 18:33
gnoblin
Ну ты написал кусочек теории, а дальше?
На мой вопрос ответа я тут не вижу :D

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 29 окт 2010, 09:13
Fox Rex
Тогда для ответа на твой вопрос придется читать доки по графическому конвееру видиокарты. Я в эти вопросы не углублялся.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 29 окт 2010, 09:40
antonio
Fox Rex писал(а):GrabPass у меня не выдает ошибок gforce 8200.


Возможно у вас Unity Pro?
Я на free делаю (хотя может дело не в этом)

Подсмотрел такую конструкцию

Синтаксис:
Используется glsl
Shader "SoftShadows" {
        Properties {
                /////Code/////
        }
       
        Category
        {
                SubShader
                {
                        Tags                   
                        Pass {
                                        /////Code/////
                                }
                                ENDCG
                                SetTexture [depth]
                        }                      
                        Pass {
                                        /////Code/////
                                }
                                ENDCG
                        }
                }
        }
}
 


Насколько я понимаю я так могу передать текстуру в другой пасс. Такая схема работает подсмотрел в "Fur" shader. Насколько верно мое предположение. Будет время попробую еще.

Re: Где ошибка в шейдере мягких теней.

СообщениеДобавлено: 29 окт 2010, 09:45
Fox Rex
Нет у меня фри версия.