UE4 定向光(DirectionalLight)下小物体阴影消失或不清晰问题解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 定向光(DirectionalLight)下小物体阴影消失或不清晰问题解决方案相关的知识,希望对你有一定的参考价值。
参考技术A UE4的定向光(DirectionalLight)在大氛围效果的制作中有突出的表现,但是对于体积特别小的物体却会产生许多bug,这些显示不正常在移动端尤为明显,下面分析一下定向光中影响光照阴影距离几个重要参数:Light->展开下拉
Shadow Bias:阴影偏移
Shadow Filter Sharpen:阴影波纹过滤(移动端不可用)
Contact Shadow Length:接触阴影长度(移动端不可用)
Cascaded shadow Maps->
Dynamic Shadow Distance MovableLight:移动光动态阴影距离
…………
Num Dynamic Shadow Cascades:动态阴影级联
Distribution Exponent:分布指数(移动端不可用)
Transition Fraction:转换分数(一般不用修改)
通常定向光获得小物体阴影首先调节:Dynamic Shadow Distance MovableLight 缩小该值(通常设为相机距离物体到最大距离)
如果出现波纹可增大Shadow Bias阴影偏移值,并增大Shadow Filter Sharpen阴影波纹过滤值,增大Contact Shadow Length值弥补偏移缺陷
如果阴影清晰度不够则增大Num Dynamic Shadow Cascades动态阴影级联
作者——Ivan杨杨兮
Q:523166477
LWJGL GLSL 着色器定向光出现由内向外
【中文标题】LWJGL GLSL 着色器定向光出现由内向外【英文标题】:LWJGL GLSL shader directional light appears inside out 【发布时间】:2015-01-18 00:29:09 【问题描述】:当我使用定向光着色器渲染 vbo 立方体时,光看起来“由内而外”。 (对不起,如果我不能更好地解释它)。
这是我的顶点着色器代码(我的片段着色器只是应用颜色,所有工作都在顶点着色器中完成)。
#version 150 core
in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
in vec3 in_Normal;
uniform sampler2D texture;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
uniform vec3 lDir;
out vec4 color;
void main(void)
mat3 nMat = normalMatrix;
vec3 normal = normalize(in_Normal * nMat);
vec3 dir = normalize(lDir);
float nl = max(dot(dir, normal), 0.25);
//color = NdotL * vec4(0,1,0,1);
color = vec4(0,1,0,1) * nl;
gl_Position = projection * view * model * in_Position;
lDir 统一变量存储 0,1,1 的 float[] 数组。 统一变量 normalMatrix 是这样计算的。
FloatBuffer preBuffer = BufferUtils.createFloatBuffer(16);
modelMatrix.store(preBuffer);
preBuffer.flip();
Matrix4f preMat = new Matrix4f();
preMat.load(preBuffer);
Matrix3f preModel3f;
Matrix3f normal3f = new Matrix3f();
preModel3f = Tk.to3f(preMat);
preModel3f.transpose(normal3f);
normal3f.invert();
normal3f.store(nmBuffer);
nmBuffer.flip();
glUniformMatrix3(glGetUniformLocation(ss.pId, "normalMatrix"), false, nmBuffer);
modelMatrix 变量是不言自明的,减去它是缓冲区而不是矩阵的事实。 normal3f 变量存储模型矩阵的转置逆(我很确定这是计算正常矩阵的正确方法)。我必须将 modelMatrix 缓冲区放入一个名为 preBuffer 的缓冲区中,如果由于某种原因我没有得到错误。
如果您需要任何其他帮助解决此问题,请发表评论。
【问题讨论】:
您是否启用了深度测试? 尝试反转你的法线,我认为它应该工作。 要做到这一点,我会做每一个正常的 *-1 吗? @HolyBlackCat 你可以做-normal
。
好的,谢谢@HolyBlackCat
【参考方案1】:
我发现了问题,当我将文本渲染到屏幕上时(描述立方体问题的文本),我忘记将 glBlendFunc() 设置回这个设置,
glBlendFunc(GL_ONE, GL_ZERO);
这导致了透明度问题,还修复了一些其他问题。
【讨论】:
以上是关于UE4 定向光(DirectionalLight)下小物体阴影消失或不清晰问题解决方案的主要内容,如果未能解决你的问题,请参考以下文章