很久之前的学习笔记,整理归档;
首先,基础的视差是一个求实际面和虚拟面的UV差值的问题,利用UV偏移,在实际面,按照以虚拟面偏移后的UV坐标进行Texture取样;
先用最简单的代码来理解这一过程:
float3 rayStep = viewDir * -1;
//对传入的Tex取样
float4 inputTex = Texture2DSample(texObject,
texObjectSampler,uv);//开始循环检测inputTex中的像素,每循环一次,就偏移取样一次;注意i++的逻辑是循环结束之后进行的;
for(int i = 0; i < step; i++)
{//当像素满足特定条件的时候(rgb都有>0.1的值),则该像素直接返回特定颜色if(inputTex.r > 0.1 && inputTex.g > 0.1 &&inputTex.b > 0.1){return float3(i,0,0);}//当像素不满足特定条件的时候,则按方向再次偏移UV取样 uv += rayStep * 0.15;inputTex = Texture2DSample(texObject, texObjectSampler, uv.xy);
}return inputTex;
以上代码的思路就是利用For循环对同一个Tex偏移取样,偏移取样之前对初始取样结果中像素的像素做颜色检测,只要是(近乎)有颜色信息的则替换为特定颜色的像素