IOS metal 編輯器 玻璃材質,iosmetal
IOS metal 編輯器 玻璃材質
#includefloat4 zfs(float zsl,float3 surfaceNormal,float3 surfaceView,texturecube cubeTexture,sampler cubeSampler){ float4 finalColorZS=float4(1.0,1.0,1.0,0.0); float4 finalColorFS=float4(1.0,1.0,1.0,0.0); float4 finalColor=float4(1.0,1.0,1.0,0.0); float3 vTextureCoord=float3(1.0,1.0,1.0); //texturecube cubeTexture; const float maxH=0.7; const float minH=0.2; float sizeH=maxH-minH; float3 eyeDirection=normalize(-surfaceView); float testValue=abs(dot(eyeDirection,surfaceNormal)); if(testValue>maxH) { vTextureCoord=refract(-eyeDirection,surfaceNormal,zsl); finalColor=cubeTexture.sample(cubeSampler,vTextureCoord); }else if(testValue<=maxH&&testValue>=minH) { vTextureCoord=reflect(-eyeDirection,surfaceNormal); finalColorFS=cubeTexture.sample(cubeSampler,vTextureCoord); vTextureCoord=refract(-eyeDirection,surfaceNormal,zsl); finalColorZS=cubeTexture.sample(cubeSampler,vTextureCoord); float ratio=(testValue-minH)/sizeH; finalColor=finalColorZS*ratio+(1.0-ratio)*finalColorFS; }else { vTextureCoord=reflect(-eyeDirection,surfaceNormal); finalColorFS=cubeTexture.sample(cubeSampler,vTextureCoord); } return finalColor;}#pragma argumentstexturecube cubeTexture;#pragma transparent#pragma bodyconstexpr sampler s(filter::linear,mip_filter::linear);_output.color.r=zfs(0.97,_surface.normal,_surface.view,cubeTexture,s).r;_output.color.g=zfs(0.955,_surface.normal,_surface.view,cubeTexture,s).g;_output.color.b=zfs(0.94,_surface.normal,_surface.view,cubeTexture,s).b;