Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //This function will compute a block's UV given a block's normal in world coordinates and it's world position.
- void ComputeBlockUV(inout float3 normal, float4 worldPos, out float2 uv0, out float4 dxdy)
- {
- float3 dx = ddx(worldPos.xyz);
- float3 dy = ddy(worldPos.xyz);
- normal = normalize(cross(dy, dx));
- if(normal.x > 0.5)
- {
- uv0 = frac(float2(-worldPos.z, -worldPos.y));
- dxdy = float4(dx.zy, dy.zy);
- }
- if(normal.x < -0.5)
- {
- uv0 = frac(float2(worldPos.z, -worldPos.y));
- dxdy = float4(dx.zy, dy.zy);
- }
- //top
- if(normal.y > 0.5)
- {
- uv0 = frac(worldPos.xz);
- dxdy = float4(dx.xz, dy.xz);
- }
- //bottom
- if(normal.y < -0.5)
- {
- uv0 = frac(float2(-worldPos.x, worldPos.z));
- dxdy = float4(dx.xz, dy.xz);
- }
- if(normal.z > 0.5)
- {
- uv0 = frac(float2(worldPos.x, -worldPos.y));
- dxdy = float4(dx.xy, dy.xy);
- //uv0 = float2(In.worldPos.x, -In.worldPos.y);
- }
- if(normal.z < -0.5)
- {
- uv0 = frac(float2(-worldPos.x,-worldPos.y));
- dxdy = float4(dx.xy, dy.xy);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment