我正在尝试创建一个ggx着色器,但是当我在上运行它时,主页仍然是白色的。我正在努力找出我的错误,但我做不到。有人能帮我吗?下面是我的档案
分析性
::begin parameters
float baseColor 0.001 .2 .1
float m 0.001 0.1 1.0
::end parameters
::begin shader
const float PI = 3.14;
vec3 BRDF( vec3 N, vec3 V, vec3 L, float m, float baseColor)
{
vec3 H = normalize(V+L);
float dotNL = clamp(dot(N,L), 0.0, 1.0);
float dotLH = clamp(dot(L,H), 0.0, 1.0);
float dotNH = clamp(dot(N,H), 0.0, 1.0);
float DotNH2 = dotNH * dotNH;
float m2 = m * m;
float D = m2 / (PI * pow(dotNH * dotNH * (m2 - 1) + 1, 2.0));
float Fresnel(float baseColor, float l, float h)
{
return baseColor + ( 1 - baseColor ) * pow( 1 - (dotNH), 5);
}
float F = Fresnel(baseColor, dotNH);
float ggx_visib(float dotNV, float m2)
{
return 1.0/(dotNV*(1.0-m2)+m2);
}
float g1i =ggx_visib(m, dotLH);
float g1o =ggx_visib(m, dotNV);
float G = g1i * g1o;
return D * G * F * (1.0 / (4.0 * dotNL * dotNV));
}
::end shader发布于 2018-12-18 05:58:32
在函数BRDF的中间有两个函数声明。这是不允许的。在GLSL中,函数定义必须是全局的。
请参阅GLSL - OpenGL阴影语言4.6;6.1。函数定义.第122页
正如上面的语法所指出的,有效的着色器是一系列全局声明和函数定义。
将Fresnel和ggx_visib的声明移到BRDF声明之前,以解决问题。
主要问题是,BRDF探险家需要在文件开始时使用关键字analytic来将文件识别为轻量级模型。
添加关键字后,添加重新加载的文件,应用程序将跟踪GLSL代码导致的错误。
修复错误将导致以下代码:
analytic
::begin parameters
float baseColor 0.001 .2 .1
float m 0.001 0.1 1.0
::end parameters
::begin shader
const float PI = 3.14;
float Fresnel(float baseColor, float l, float h)
{
return baseColor + ( 1 - baseColor ) * pow( 1 - (h), 5);
}
float ggx_visib(float dotNV, float m2)
{
return 1.0/(dotNV*(1.0-m2)+m2);
}
vec3 BRDF( vec3 N, vec3 V, vec3 L, vec3 X, vec3 Y)
{
vec3 H = normalize(V+L);
float dotNL = clamp(dot(N,L), 0.0, 1.0);
float dotLH = clamp(dot(L,H), 0.0, 1.0);
float dotNH = clamp(dot(N,H), 0.0, 1.0);
float DotNH2 = dotNH * dotNH;
float m2 = m * m;
float D = m2 / (PI * pow(dotNH * dotNH * (m2 - 1) + 1, 2.0));
float F = Fresnel(baseColor, dotNL, dotNH);
float g1i =ggx_visib(m, dotLH);
float g1o =ggx_visib(m, dotNH);
float G = g1i * g1o;
float k = D * G * F * (1.0 / (4.0 * dotNL * dotNH));
return vec3(k);
}
::end shaderhttps://stackoverflow.com/questions/53825287
复制相似问题