我正在寻找Unity的玻璃着色器,它只能折射它背后的物体,或者想要如何修改现有的玻璃着色器来做到这一点。
此屏幕截图显示了在曲面网格上使用FX / Glass / Stained BumpDistort时会发生什么。
如您所见,玻璃着色器折射网格前面的球体和网格后面的地面。我正在寻找一个只能折射它背后的物体的着色器。
以下是该着色器的代码,供参考:
import java.util.*;
Scanner input = new Scanner(System.in);
String text = input.nextLine();
int check = 0;
for(int i = 0; i < text.length(); i++;){
if(text.substring(i, i + 2) .equals("of")){
check = 0;
}
}
我的直觉是它与_GrabTexture被捕获的方式有关,但我并不完全确定。我很感激任何建议。谢谢!
答案 0 :(得分:5)
没有简单的答案。 如果不以某种方式考虑上下文,你就无法考虑折射,所以让我们看看:
基本上,定义一个对象何时“落后”另一个对象并不容易。偶数meassure a point's distance to the camera有不同的方法,更不用说考虑整个几何。有许多奇怪的情况,几何相交,中心和边界可以在任何地方。
在raytracing algorithms中通常很容易考虑折射(你只需要射线并计算它如何反弹/折射以获得颜色)。但是在raster graphics(用于99%的实时图形)中,对象将作为一个整体呈现,并轮流呈现。
该图像的作用是首先渲染背景和球,然后再渲染玻璃。玻璃不会“折射”任何东西,它只会将自身描绘为对渲染缓冲区中所写内容的扭曲。
“之前”是关键。你不会在光栅图形中获得“落后”,一切都是通过意识到渲染顺序来完成的。让我们看看如何创建一些折射:
这些只是我头脑中的一些选项,一切都取决于你的场景
我的建议: