Advertisement
Guest User

Untitled

a guest
Apr 28th, 2015
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.75 KB | None | 0 0
  1. "float sdPlane( vec3 p ) "
  2. "{ "
  3. " return p.y; "
  4. "} "
  5. " "
  6. "float sdSphere( vec3 p, float s ) "
  7. "{ "
  8. " return length(p)-s; "
  9. "} "
  10. " "
  11. "float sdBox( vec3 p, vec3 b ) "
  12. "{ "
  13. " vec3 d = abs(p) - b; "
  14. " return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); "
  15. "} "
  16. " "
  17. "float udRoundBox( vec3 p, vec3 b, float r ) "
  18. "{ "
  19. " return length(max(abs(p)-b,0.0))-r; "
  20. "} "
  21. " "
  22. "float sdTorus( vec3 p, vec2 t ) "
  23. "{ "
  24. " return length( vec2(length(p.xz)-t.x,p.y) )-t.y; "
  25. "} "
  26. " "
  27. "float sdHexPrism( vec3 p, vec2 h ) "
  28. "{ "
  29. " vec3 q = abs(p); "
  30. "#if 0 "
  31. " return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); "
  32. "#else "
  33. " float d1 = q.z-h.y; "
  34. " float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; "
  35. " return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); "
  36. "#endif "
  37. "} "
  38. " "
  39. "float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) "
  40. "{ "
  41. " vec3 pa = p-a, ba = b-a; "
  42. " float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); "
  43. " return length( pa - ba*h ) - r; "
  44. "} "
  45. " "
  46. "float sdTriPrism( vec3 p, vec2 h ) "
  47. "{ "
  48. " vec3 q = abs(p); "
  49. "#if 0 "
  50. " return max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5); "
  51. "#else "
  52. " float d1 = q.z-h.y; "
  53. " float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; "
  54. " return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); "
  55. "#endif "
  56. "} "
  57. " "
  58. "float sdCylinder( vec3 p, vec2 h ) "
  59. "{ "
  60. " vec2 d = abs(vec2(length(p.xz),p.y)) - h; "
  61. " return min(max(d.x,d.y),0.0) + length(max(d,0.0)); "
  62. "} "
  63. " "
  64. " "
  65. "float sdCone( in vec3 p, in vec3 c ) "
  66. "{ "
  67. " vec2 q = vec2( length(p.xz), p.y ); "
  68. "#if 0 "
  69. " return max( max( dot(q,c.xy), p.y), -p.y-c.z ); "
  70. "#else "
  71. " float d1 = -p.y-c.z; "
  72. " float d2 = max( dot(q,c.xy), p.y); "
  73. " return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); "
  74. "#endif "
  75. "} "
  76. " "
  77. "float length2( vec2 p ) "
  78. "{ "
  79. " return sqrt( p.x*p.x + p.y*p.y ); "
  80. "} "
  81. " "
  82. "float length6( vec2 p ) "
  83. "{ "
  84. " p = p*p*p; p = p*p; "
  85. " return pow( p.x + p.y, 1.0/6.0 ); "
  86. "} "
  87. " "
  88. "float length8( vec2 p ) "
  89. "{ "
  90. " p = p*p; p = p*p; p = p*p; "
  91. " return pow( p.x + p.y, 1.0/8.0 ); "
  92. "} "
  93. " "
  94. "float sdTorus82( vec3 p, vec2 t ) "
  95. "{ "
  96. " vec2 q = vec2(length2(p.xz)-t.x,p.y); "
  97. " return length8(q)-t.y; "
  98. "} "
  99. " "
  100. "float sdTorus88( vec3 p, vec2 t ) "
  101. "{ "
  102. " vec2 q = vec2(length8(p.xz)-t.x,p.y); "
  103. " return length8(q)-t.y; "
  104. "} "
  105. " "
  106. "float sdCylinder6( vec3 p, vec2 h ) "
  107. "{ "
  108. " return max( length6(p.xz)-h.x, abs(p.y)-h.y ); "
  109. "} "
  110. " "
  111. "//---------------------------------------------------------------------- "
  112. " "
  113. "float opS( float d1, float d2 ) "
  114. "{ "
  115. " return max(-d2,d1); "
  116. "} "
  117. " "
  118. "vec2 opU( vec2 d1, vec2 d2 ) "
  119. "{ "
  120. " return (d1.x<d2.x) ? d1 : d2; "
  121. "} "
  122. " "
  123. "vec3 opRep( vec3 p, vec3 c ) "
  124. "{ "
  125. " return mod(p,c)-0.5*c; "
  126. "} "
  127. " "
  128. "vec3 opTwist( vec3 p ) "
  129. "{ "
  130. " float c = cos(10.0*p.y+10.0); "
  131. " float s = sin(10.0*p.y+10.0); "
  132. " mat2 m = mat2(c,-s,s,c); "
  133. " return vec3(m*p.xz,p.y); "
  134. "} "
  135. " "
  136. "//---------------------------------------------------------------------- "
  137. " "
  138. "vec2 map( in vec3 pos ) "
  139. "{ "
  140. " vec2 res = opU( vec2( sdPlane( pos), 1.0 ), "
  141. " vec2( sdSphere( pos-vec3( 0.0,0.25, 0.0), 0.25 ), 46.9 ) ); "
  142. " res = opU( res, vec2( sdBox( pos-vec3( 1.0,0.25, 0.0), vec3(0.25) ), 3.0 ) ); "
  143. " res = opU( res, vec2( udRoundBox( pos-vec3( 1.0,0.25, 1.0), vec3(0.15), 0.1 ), 41.0 ) ); "
  144. " res = opU( res, vec2( sdTorus( pos-vec3( 0.0,0.25, 1.0), vec2(0.20,0.05) ), 25.0 ) ); "
  145. " res = opU( res, vec2( sdCapsule( pos,vec3(-1.3,0.20,-0.1), vec3(-1.0,0.20,0.2), 0.1 ), 31.9 ) ); "
  146. " res = opU( res, vec2( sdTriPrism( pos-vec3(-1.0,0.25,-1.0), vec2(0.25,0.05) ),43.5 ) ); "
  147. " res = opU( res, vec2( sdCylinder( pos-vec3( 1.0,0.30,-1.0), vec2(0.1,0.2) ), 8.0 ) ); "
  148. " res = opU( res, vec2( sdCone( pos-vec3( 0.0,0.50,-1.0), vec3(0.8,0.6,0.3) ), 55.0 ) ); "
  149. " res = opU( res, vec2( sdTorus82( pos-vec3( 0.0,0.25, 2.0), vec2(0.20,0.05) ),50.0 ) ); "
  150. " res = opU( res, vec2( sdTorus88( pos-vec3(-1.0,0.25, 2.0), vec2(0.20,0.05) ),43.0 ) ); "
  151. " res = opU( res, vec2( sdCylinder6( pos-vec3( 1.0,0.30, 2.0), vec2(0.1,0.2) ), 12.0 ) ); "
  152. " res = opU( res, vec2( sdHexPrism( pos-vec3(-1.0,0.20, 1.0), vec2(0.25,0.05) ),17.0 ) ); "
  153. " "
  154. " res = opU( res, vec2( opS( "
  155. " udRoundBox( pos-vec3(-2.0,0.2, 1.0), vec3(0.15),0.05), "
  156. " sdSphere( pos-vec3(-2.0,0.2, 1.0), 0.25)), 13.0 ) ); "
  157. " res = opU( res, vec2( opS( "
  158. " sdTorus82( pos-vec3(-2.0,0.2, 0.0), vec2(0.20,0.1)), "
  159. " sdCylinder( opRep( vec3(atan(pos.x+2.0,pos.z)/6.2831, "
  160. " pos.y, "
  161. " 0.02+0.5*length(pos-vec3(-2.0,0.2, 0.0))), "
  162. " vec3(0.05,1.0,0.05)), vec2(0.02,0.6))), 51.0 ) ); "
  163. " res = opU( res, vec2( 0.7*sdSphere( pos-vec3(-2.0,0.25,-1.0), 0.2 ) + "
  164. " 0.03*sin(50.0*pos.x)*sin(50.0*pos.y)*sin(50.0*pos.z), "
  165. " 65.0 ) ); "
  166. " res = opU( res, vec2( 0.5*sdTorus( opTwist(pos-vec3(-2.0,0.25, 2.0)),vec2(0.20,0.05)), 46.7 ) ); "
  167. " "
  168. " return res; "
  169. "} "
  170. " "
  171. "vec2 castRay( in vec3 ro, in vec3 rd ) "
  172. "{ "
  173. " float tmin = 1.0; "
  174. " float tmax = 20.0; "
  175. " "
  176. "#if 0 "
  177. " float tp1 = (0.0-ro.y)/rd.y; if( tp1>0.0 ) tmax = min( tmax, tp1 ); "
  178. " float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); "
  179. " else tmax = min( tmax, tp2 ); } "
  180. "#endif "
  181. " "
  182. " float precis = 0.002; "
  183. " float t = tmin; "
  184. " float m = -1.0; "
  185. " for( int i=0; i<50; i++ ) "
  186. " { "
  187. " vec2 res = map( ro+rd*t ); "
  188. " if( res.x<precis || t>tmax ) break; "
  189. " t += res.x; "
  190. " m = res.y; "
  191. " } "
  192. " "
  193. " if( t>tmax ) m=-1.0; "
  194. " return vec2( t, m ); "
  195. "} "
  196. " "
  197. " "
  198. "float softshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) "
  199. "{ "
  200. " float res = 1.0; "
  201. " float t = mint; "
  202. " for( int i=0; i<16; i++ ) "
  203. " { "
  204. " float h = map( ro + rd*t ).x; "
  205. " res = min( res, 8.0*h/t ); "
  206. " t += clamp( h, 0.02, 0.10 ); "
  207. " if( h<0.001 || t>tmax ) break; "
  208. " } "
  209. " return clamp( res, 0.0, 1.0 ); "
  210. " "
  211. "} "
  212. " "
  213. "vec3 calcNormal( in vec3 pos ) "
  214. "{ "
  215. " vec3 eps = vec3( 0.001, 0.0, 0.0 ); "
  216. " vec3 nor = vec3( "
  217. " map(pos+eps.xyy).x - map(pos-eps.xyy).x, "
  218. " map(pos+eps.yxy).x - map(pos-eps.yxy).x, "
  219. " map(pos+eps.yyx).x - map(pos-eps.yyx).x ); "
  220. " return normalize(nor); "
  221. "} "
  222. " "
  223. "float calcAO( in vec3 pos, in vec3 nor ) "
  224. "{ "
  225. " float occ = 0.0; "
  226. " float sca = 1.0; "
  227. " for( int i=0; i<5; i++ ) "
  228. " { "
  229. " float hr = 0.01 + 0.12*float(i)/4.0; "
  230. " vec3 aopos = nor * hr + pos; "
  231. " float dd = map( aopos ).x; "
  232. " occ += -(dd-hr)*sca; "
  233. " sca *= 0.95; "
  234. " } "
  235. " return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); "
  236. "} "
  237. " "
  238. " "
  239. " "
  240. " "
  241. "vec3 render( in vec3 ro, in vec3 rd ) "
  242. "{ "
  243. " vec3 col = vec3(0.8, 0.9, 1.0); "
  244. " vec2 res = castRay(ro,rd); "
  245. " float t = res.x; "
  246. " float m = res.y; "
  247. " if( m>-0.5 ) "
  248. " { "
  249. " vec3 pos = ro + t*rd; "
  250. " vec3 nor = calcNormal( pos ); "
  251. " vec3 ref = reflect( rd, nor ); "
  252. " "
  253. " // material "
  254. " col = 0.45 + 0.3*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); "
  255. " "
  256. " if( m<1.5 ) "
  257. " { "
  258. " "
  259. " float f = mod( floor(5.0*pos.z) + floor(5.0*pos.x), 2.0); "
  260. " col = 0.4 + 0.1*f*vec3(1.0); "
  261. " } "
  262. " "
  263. " // lighitng "
  264. " float occ = calcAO( pos, nor ); "
  265. " vec3 lig = normalize( vec3(-0.6, 0.7, -0.5) ); "
  266. " float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); "
  267. " float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); "
  268. " float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); "
  269. " float dom = smoothstep( -0.1, 0.1, ref.y ); "
  270. " float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); "
  271. " float spe = pow(clamp( dot( ref, lig ), 0.0, 1.0 ),16.0); "
  272. " "
  273. " dif *= softshadow( pos, lig, 0.02, 2.5 ); "
  274. " dom *= softshadow( pos, ref, 0.02, 2.5 ); "
  275. " "
  276. " vec3 brdf = vec3(0.0); "
  277. " brdf += 1.20*dif*vec3(1.00,0.90,0.60); "
  278. " brdf += 1.20*spe*vec3(1.00,0.90,0.60)*dif; "
  279. " brdf += 0.30*amb*vec3(0.50,0.70,1.00)*occ; "
  280. " brdf += 0.40*dom*vec3(0.50,0.70,1.00)*occ; "
  281. " brdf += 0.30*bac*vec3(0.25,0.25,0.25)*occ; "
  282. " brdf += 0.40*fre*vec3(1.00,1.00,1.00)*occ; "
  283. " brdf += 0.02; "
  284. " col = col*brdf; "
  285. " "
  286. " col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0005*t*t ) ); "
  287. " "
  288. " } "
  289. " "
  290. " return vec3( clamp(col,0.0,1.0) ); "
  291. "} "
  292. " "
  293. "mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) "
  294. "{ "
  295. " vec3 cw = normalize(ta-ro); "
  296. " vec3 cp = vec3(sin(cr), cos(cr),0.0); "
  297. " vec3 cu = normalize( cross(cw,cp) ); "
  298. " vec3 cv = normalize( cross(cu,cw) ); "
  299. " return mat3( cu, cv, cw ); "
  300. "} "
  301. " "
  302. "void mainImage( out vec4 fragColor, in vec2 fragCoord ) "
  303. "{ "
  304. " vec2 q = fragCoord.xy/iResolution.xy; "
  305. " vec2 p = -1.0+2.0*q; "
  306. " p.x *= iResolution.x/iResolution.y; "
  307. " vec2 mo = iMouse.xy/iResolution.xy; "
  308. " "
  309. " float time = 15.0 + iGlobalTime; "
  310. " "
  311. " // camera "
  312. " vec3 ro = vec3( -0.5+3.2*cos(0.1*time + 6.0*mo.x), 1.0 + 2.0*mo.y, 0.5 + 3.2*sin(0.1*time + 6.0*mo.x) ); "
  313. " vec3 ta = vec3( -0.5, -0.4, 0.5 ); "
  314. " "
  315. " // camera-to-world transformation "
  316. " mat3 ca = setCamera( ro, ta, 0.0 ); "
  317. " "
  318. " // ray direction "
  319. " vec3 rd = ca * normalize( vec3(p.xy,2.5) ); "
  320. " "
  321. " // render "
  322. " vec3 col = render( ro, rd ); "
  323. " "
  324. " col = pow( col, vec3(0.4545) ); "
  325. " "
  326. " fragColor=vec4( col, 1.0 ); "
  327. "} "
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement