三个js不透明镜像
Three js Opaque mirror
我已经使用此处演示的技术实现了一个镜像:
http://threejs.org/examples/webgl_mirror.html
我想让我的倒影稍微不透明,这样 'deeper' 进入倒影的东西看起来更暗。我正在考虑劫持片段着色器,但不确定什么是最好的 属性 用来创建这种关系。
目前我的镜像片段着色器:
vec4 color = texture2DProj(mirrorSampler, mirrorCoord);
color = vec4(blendOverlay(mirrorColor.r, color.r), blendOverlay(mirrorColor.g, color.g), blendOverlay(mirrorColor.b, color.b), 1.0);
vec3 outgoingLight = color.rgb;
${THREE.ShaderChunk[ "fog_fragment" ]}
gl_FragColor = vec4(outgoingLight,1.0);
您所描述的实际上并不是镜像的工作原理。但是,只需在您的初始通道上应用黑雾。
但是,您可能会通过跳过雾并应用 dot(Normal,View)
(又名 "facing ratio")的某些函数来获得您真正想要的结果反射项的亮度。 "Schlick approximation," 是菲涅尔方程的一个常见近似值,即 (pow((1.0-abs(dot(N,V))),5.0))
——因此反射在掠射角处更强,但在 "deep" 直射角处较暗。这更像是许多真实的镜子。
我已经使用此处演示的技术实现了一个镜像: http://threejs.org/examples/webgl_mirror.html
我想让我的倒影稍微不透明,这样 'deeper' 进入倒影的东西看起来更暗。我正在考虑劫持片段着色器,但不确定什么是最好的 属性 用来创建这种关系。
目前我的镜像片段着色器:
vec4 color = texture2DProj(mirrorSampler, mirrorCoord);
color = vec4(blendOverlay(mirrorColor.r, color.r), blendOverlay(mirrorColor.g, color.g), blendOverlay(mirrorColor.b, color.b), 1.0);
vec3 outgoingLight = color.rgb;
${THREE.ShaderChunk[ "fog_fragment" ]}
gl_FragColor = vec4(outgoingLight,1.0);
您所描述的实际上并不是镜像的工作原理。但是,只需在您的初始通道上应用黑雾。
但是,您可能会通过跳过雾并应用 dot(Normal,View)
(又名 "facing ratio")的某些函数来获得您真正想要的结果反射项的亮度。 "Schlick approximation," 是菲涅尔方程的一个常见近似值,即 (pow((1.0-abs(dot(N,V))),5.0))
——因此反射在掠射角处更强,但在 "deep" 直射角处较暗。这更像是许多真实的镜子。