yum/3ner
A toon shader for Unity's BIRP.
git clone https://git.yummers.dev/yum/3ner
00553b3
master
1#ifndef __VERTEX_INC 2#define __VERTEX_INC 3 4#include "globals.cginc" 5#include "vertex_deformation.hlsl" 6 7#define OPCODE_NONE 0 8#define OPCODE_TUBE_TO_PLANE 1 9#define OPCODE_PLANE_TO_TUBE 2 10#define OPCODE_POINT_ALIGN 3 11#define OPCODE_AXIS_ALIGN 4 12#define OPCODE_NORM_CONVERSION 5 13#define OPCODE_SEAL 6 14#define OPCODE_SINE_WAVES 7 15#define OPCODE_FBM 8 16#define OPCODE_PLANE_TO_HEMI_OCTAHEDRON 9 17#define OPCODE_HEMI_OCTAHEDRON_TO_PLANE 10 18#define OPCODE_SCALE 11 19#define OPCODE_TRANSLATE 12 20#define OPCODE_PLANE_TO_OCTAHEDRON 13 21#define OPCODE_OCTAHEDRON_TO_PLANE 14 22#define OPCODE_ROTATE 15 23 24#if defined(_VERTEX_DEFORMATION) 25 26void apply_tube_to_plane(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 27 float3 p = v0.xyz; 28 float3 r = v1.xyz; 29 float3 s = v2.xyz; 30 float t = f0; 31 objPos = tube_to_plane(objPos, p, r, s, t); 32} 33 34void apply_tube_to_plane_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 35 float3 p = v0.xyz; 36 float3 r = v1.xyz; 37 float3 s = v2.xyz; 38 float t = f0; 39 tube_to_plane_normal(objPos, objNorm, objTan, p, r, s, t); 40} 41 42void apply_plane_to_tube(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 43 float3 p = v0.xyz; 44 float3 r = v1.xyz; 45 float3 s = v2.xyz; 46 float t = f0; 47 objPos = plane_to_tube(objPos, p, r, s, t); 48} 49 50void apply_plane_to_tube_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 51 float3 p = v0.xyz; 52 float3 r = v1.xyz; 53 float3 s = v2.xyz; 54 float t = f0; 55 plane_to_tube_normal(objPos, objNorm, objTan, p, r, s, t); 56} 57 58void apply_point_align(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 59 float3 po = v0.xyz; 60 float3 pp = v1.xyz; 61 float3 r = v2.xyz; 62 float t = f0; 63 objPos = point_align(objPos, po, pp, r, t); 64} 65 66void apply_point_align_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 67 float3 po = v0.xyz; 68 float3 pp = v1.xyz; 69 float3 r = v2.xyz; 70 float t = f0; 71 point_align_normal(objPos, objNorm, objTan, po, pp, r, t); 72} 73 74void apply_axis_align(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 75 float3 po = v0.xyz; 76 float3 pp = v1.xyz; 77 float3 r = v2.xyz; 78 float t = f0; 79 objPos = axis_align(objPos, po, pp, r, t); 80} 81 82void apply_axis_align_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 83 float3 po = v0.xyz; 84 float3 pp = v1.xyz; 85 float3 r = v2.xyz; 86 float t = f0; 87 axis_align_normal(objPos, objNorm, objTan, po, pp, r, t); 88} 89 90void apply_norm_conversion(inout float3 objPos, float f0, float f1, float f2) { 91 float input_k = f0; 92 float output_k = f1; 93 float t = f2; 94 objPos = norm_conversion(objPos, input_k, output_k, t); 95} 96 97void apply_norm_conversion_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float f0, float f1, float f2) { 98 float input_k = f0; 99 float output_k = f1; 100 float t = f2; 101 norm_conversion_normal(objPos, objNorm, objTan, input_k, output_k, t); 102} 103 104void apply_seal(inout float3 objPos, float f0, float f1, float f2, float t) { 105 float A = f0; 106 float k = f1; 107 float st = t * f2; 108 objPos = seal(objPos, A, k, st); 109} 110 111void apply_seal_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float f0, float f1, float f2, float t) { 112 float A = f0; 113 float k = f1; 114 float st = t * f2; 115 seal_normal(objPos, objNorm, objTan, A, k, st); 116} 117 118void apply_sine_waves(inout float3 objPos, float4 v0, float4 v1, float4 v2, float4 v3, float t) { 119 float st = t * 10; 120 float3 amplitude = v0.xyz; 121 float3 direction = v1.xyz; 122 float3 k = v2.xyz; 123 float3 omega = v3.xyz; 124 objPos = sine_wave(objPos, amplitude, direction, k, omega, st); 125} 126 127void apply_sine_waves_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float4 v3, float t) { 128 float st = t * 10; 129 float3 amplitude = v0.xyz; 130 float3 direction = v1.xyz; 131 float3 k = v2.xyz; 132 float3 omega = v3.xyz; 133 sine_wave_normal(objPos, objNorm, objTan, amplitude, direction, k, omega, st); 134} 135 136void apply_fbm(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0, float f1, float f2, float t) { 137 float st = t; 138 float3 amplitude = v0.xyz; 139 float3 velocity = v1.xyz; 140 float3 period = v2.xyz; 141 float gain = f0; 142 float lacunarity = f1; 143 float octaves = f2; 144 objPos = fbm(objPos, st, amplitude, gain, lacunarity, period, octaves, velocity); 145} 146 147void apply_fbm_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0, float f1, float f2, float t) { 148 float st = t; 149 float3 amplitude = v0.xyz; 150 float3 velocity = v1.xyz; 151 float3 period = v2.xyz; 152 float gain = f0; 153 float lacunarity = f1; 154 float octaves = f2; 155 fbm_normal(objPos, objNorm, objTan, st, amplitude, gain, lacunarity, period, octaves, velocity); 156} 157 158void apply_plane_to_hemi_octahedron(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 159 float3 p = v0.xyz; 160 float3 r = v1.xyz; 161 float3 s = v2.xyz; 162 float t = f0; 163 objPos = plane_to_hemi_octahedron(objPos, p, r, s, t); 164} 165 166void apply_plane_to_hemi_octahedron_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 167 float3 p = v0.xyz; 168 float3 r = v1.xyz; 169 float3 s = v2.xyz; 170 float t = f0; 171 plane_to_hemi_octahedron_normal(objPos, objNorm, objTan, p, r, s, t); 172} 173 174void apply_hemi_octahedron_to_plane(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 175 float3 p = v0.xyz; 176 float3 r = v1.xyz; 177 float3 s = v2.xyz; 178 float t = f0; 179 objPos = hemi_octahedron_to_plane(objPos, p, r, s, t); 180} 181 182void apply_hemi_octahedron_to_plane_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 183 float3 p = v0.xyz; 184 float3 r = v1.xyz; 185 float3 s = v2.xyz; 186 float t = f0; 187 hemi_octahedron_to_plane_normal(objPos, objNorm, objTan, p, r, s, t); 188} 189 190void apply_scale(inout float3 objPos, float4 v0, float f0) { 191 float3 k = v0.xyz; 192 float t = f0; 193 objPos = scale(objPos, k, t); 194} 195 196void apply_scale_normal(inout float3 objPos, inout float3 objNorm, 197 inout float3 objTan, float4 v0, float f0) { 198 float3 k = v0.xyz; 199 float t = f0; 200 scale_normal(objPos, objNorm, objTan, k, t); 201} 202 203void apply_translate(inout float3 objPos, float4 v0, float f0) { 204 float3 offset = v0.xyz; 205 float t = f0; 206 objPos = translate(objPos, offset, t); 207} 208 209void apply_translate_normal(inout float3 objPos, inout float3 objNorm, 210 inout float3 objTan, float4 v0, float f0) { 211 float3 offset = v0.xyz; 212 float t = f0; 213 translate_normal(objPos, objNorm, objTan, offset, t); 214} 215 216void apply_plane_to_octahedron(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 217 float3 p = v0.xyz; 218 float3 r = v1.xyz; 219 float3 s = v2.xyz; 220 float t = f0; 221 objPos = plane_to_octahedron(objPos, p, r, s, t); 222} 223 224void apply_plane_to_octahedron_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 225 float3 p = v0.xyz; 226 float3 r = v1.xyz; 227 float3 s = v2.xyz; 228 float t = f0; 229 plane_to_octahedron_normal(objPos, objNorm, objTan, p, r, s, t); 230} 231 232void apply_octahedron_to_plane(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) { 233 float3 p = v0.xyz; 234 float3 r = v1.xyz; 235 float3 s = v2.xyz; 236 float t = f0; 237 objPos = octahedron_to_plane(objPos, p, r, s, t); 238} 239 240void apply_octahedron_to_plane_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) { 241 float3 p = v0.xyz; 242 float3 r = v1.xyz; 243 float3 s = v2.xyz; 244 float t = f0; 245 octahedron_to_plane_normal(objPos, objNorm, objTan, p, r, s, t); 246} 247 248void apply_rotate(inout float3 objPos, float4 v0, float4 v1, float f0, float f1) { 249 float3 p = v0.xyz; 250 float3 axis = v1.xyz; 251 float angle = f0; 252 float t = f1; 253 objPos = rotate(objPos, p, axis, angle, t); 254} 255 256void apply_rotate_normal(inout float3 objPos, inout float3 objNorm, 257 inout float3 objTan, float4 v0, float4 v1, float f0, float f1) { 258 float3 p = v0.xyz; 259 float3 axis = v1.xyz; 260 float angle = f0; 261 float t = f1; 262 rotate_normal(objPos, objNorm, objTan, p, axis, angle, t); 263} 264 265void deform(inout float3 objPos) { 266 const float t = getTime(); 267 268 [loop] 269 for (int i = 0; i < 16; i++) { 270 float enabled; 271 int opcode; 272 float f0, f1, f2, f3; 273 float4 v0, v1, v2, v3; 274 275 [forcecase] 276 switch (i) { 277 case 0: 278 enabled = _Vertex_Deformation_Slot_0_Enabled; 279 opcode = _Vertex_Deformation_Slot_0_Opcode; 280 f0 = _Vertex_Deformation_Slot_0_Float_0; 281 f1 = _Vertex_Deformation_Slot_0_Float_1; 282 f2 = _Vertex_Deformation_Slot_0_Float_2; 283 f3 = _Vertex_Deformation_Slot_0_Float_3; 284 v0 = _Vertex_Deformation_Slot_0_Vector_0; 285 v1 = _Vertex_Deformation_Slot_0_Vector_1; 286 v2 = _Vertex_Deformation_Slot_0_Vector_2; 287 v3 = _Vertex_Deformation_Slot_0_Vector_3; 288 break; 289 case 1: 290 enabled = _Vertex_Deformation_Slot_1_Enabled; 291 opcode = _Vertex_Deformation_Slot_1_Opcode; 292 f0 = _Vertex_Deformation_Slot_1_Float_0; 293 f1 = _Vertex_Deformation_Slot_1_Float_1; 294 f2 = _Vertex_Deformation_Slot_1_Float_2; 295 f3 = _Vertex_Deformation_Slot_1_Float_3; 296 v0 = _Vertex_Deformation_Slot_1_Vector_0; 297 v1 = _Vertex_Deformation_Slot_1_Vector_1; 298 v2 = _Vertex_Deformation_Slot_1_Vector_2; 299 v3 = _Vertex_Deformation_Slot_1_Vector_3; 300 break; 301 case 2: 302 enabled = _Vertex_Deformation_Slot_2_Enabled; 303 opcode = _Vertex_Deformation_Slot_2_Opcode; 304 f0 = _Vertex_Deformation_Slot_2_Float_0; 305 f1 = _Vertex_Deformation_Slot_2_Float_1; 306 f2 = _Vertex_Deformation_Slot_2_Float_2; 307 f3 = _Vertex_Deformation_Slot_2_Float_3; 308 v0 = _Vertex_Deformation_Slot_2_Vector_0; 309 v1 = _Vertex_Deformation_Slot_2_Vector_1; 310 v2 = _Vertex_Deformation_Slot_2_Vector_2; 311 v3 = _Vertex_Deformation_Slot_2_Vector_3; 312 break; 313 case 3: 314 enabled = _Vertex_Deformation_Slot_3_Enabled; 315 opcode = _Vertex_Deformation_Slot_3_Opcode; 316 f0 = _Vertex_Deformation_Slot_3_Float_0; 317 f1 = _Vertex_Deformation_Slot_3_Float_1; 318 f2 = _Vertex_Deformation_Slot_3_Float_2; 319 f3 = _Vertex_Deformation_Slot_3_Float_3; 320 v0 = _Vertex_Deformation_Slot_3_Vector_0; 321 v1 = _Vertex_Deformation_Slot_3_Vector_1; 322 v2 = _Vertex_Deformation_Slot_3_Vector_2; 323 v3 = _Vertex_Deformation_Slot_3_Vector_3; 324 break; 325 case 4: 326 enabled = _Vertex_Deformation_Slot_4_Enabled; 327 opcode = _Vertex_Deformation_Slot_4_Opcode; 328 f0 = _Vertex_Deformation_Slot_4_Float_0; 329 f1 = _Vertex_Deformation_Slot_4_Float_1; 330 f2 = _Vertex_Deformation_Slot_4_Float_2; 331 f3 = _Vertex_Deformation_Slot_4_Float_3; 332 v0 = _Vertex_Deformation_Slot_4_Vector_0; 333 v1 = _Vertex_Deformation_Slot_4_Vector_1; 334 v2 = _Vertex_Deformation_Slot_4_Vector_2; 335 v3 = _Vertex_Deformation_Slot_4_Vector_3; 336 break; 337 case 5: 338 enabled = _Vertex_Deformation_Slot_5_Enabled; 339 opcode = _Vertex_Deformation_Slot_5_Opcode; 340 f0 = _Vertex_Deformation_Slot_5_Float_0; 341 f1 = _Vertex_Deformation_Slot_5_Float_1; 342 f2 = _Vertex_Deformation_Slot_5_Float_2; 343 f3 = _Vertex_Deformation_Slot_5_Float_3; 344 v0 = _Vertex_Deformation_Slot_5_Vector_0; 345 v1 = _Vertex_Deformation_Slot_5_Vector_1; 346 v2 = _Vertex_Deformation_Slot_5_Vector_2; 347 v3 = _Vertex_Deformation_Slot_5_Vector_3; 348 break; 349 case 6: 350 enabled = _Vertex_Deformation_Slot_6_Enabled; 351 opcode = _Vertex_Deformation_Slot_6_Opcode; 352 f0 = _Vertex_Deformation_Slot_6_Float_0; 353 f1 = _Vertex_Deformation_Slot_6_Float_1; 354 f2 = _Vertex_Deformation_Slot_6_Float_2; 355 f3 = _Vertex_Deformation_Slot_6_Float_3; 356 v0 = _Vertex_Deformation_Slot_6_Vector_0; 357 v1 = _Vertex_Deformation_Slot_6_Vector_1; 358 v2 = _Vertex_Deformation_Slot_6_Vector_2; 359 v3 = _Vertex_Deformation_Slot_6_Vector_3; 360 break; 361 case 7: 362 enabled = _Vertex_Deformation_Slot_7_Enabled; 363 opcode = _Vertex_Deformation_Slot_7_Opcode; 364 f0 = _Vertex_Deformation_Slot_7_Float_0; 365 f1 = _Vertex_Deformation_Slot_7_Float_1; 366 f2 = _Vertex_Deformation_Slot_7_Float_2; 367 f3 = _Vertex_Deformation_Slot_7_Float_3; 368 v0 = _Vertex_Deformation_Slot_7_Vector_0; 369 v1 = _Vertex_Deformation_Slot_7_Vector_1; 370 v2 = _Vertex_Deformation_Slot_7_Vector_2; 371 v3 = _Vertex_Deformation_Slot_7_Vector_3; 372 break; 373 case 8: 374 enabled = _Vertex_Deformation_Slot_8_Enabled; 375 opcode = _Vertex_Deformation_Slot_8_Opcode; 376 f0 = _Vertex_Deformation_Slot_8_Float_0; 377 f1 = _Vertex_Deformation_Slot_8_Float_1; 378 f2 = _Vertex_Deformation_Slot_8_Float_2; 379 f3 = _Vertex_Deformation_Slot_8_Float_3; 380 v0 = _Vertex_Deformation_Slot_8_Vector_0; 381 v1 = _Vertex_Deformation_Slot_8_Vector_1; 382 v2 = _Vertex_Deformation_Slot_8_Vector_2; 383 v3 = _Vertex_Deformation_Slot_8_Vector_3; 384 break; 385 case 9: 386 enabled = _Vertex_Deformation_Slot_9_Enabled; 387 opcode = _Vertex_Deformation_Slot_9_Opcode; 388 f0 = _Vertex_Deformation_Slot_9_Float_0; 389 f1 = _Vertex_Deformation_Slot_9_Float_1; 390 f2 = _Vertex_Deformation_Slot_9_Float_2; 391 f3 = _Vertex_Deformation_Slot_9_Float_3; 392 v0 = _Vertex_Deformation_Slot_9_Vector_0; 393 v1 = _Vertex_Deformation_Slot_9_Vector_1; 394 v2 = _Vertex_Deformation_Slot_9_Vector_2; 395 v3 = _Vertex_Deformation_Slot_9_Vector_3; 396 break; 397 case 10: 398 enabled = _Vertex_Deformation_Slot_10_Enabled; 399 opcode = _Vertex_Deformation_Slot_10_Opcode; 400 f0 = _Vertex_Deformation_Slot_10_Float_0; 401 f1 = _Vertex_Deformation_Slot_10_Float_1; 402 f2 = _Vertex_Deformation_Slot_10_Float_2; 403 f3 = _Vertex_Deformation_Slot_10_Float_3; 404 v0 = _Vertex_Deformation_Slot_10_Vector_0; 405 v1 = _Vertex_Deformation_Slot_10_Vector_1; 406 v2 = _Vertex_Deformation_Slot_10_Vector_2; 407 v3 = _Vertex_Deformation_Slot_10_Vector_3; 408 break; 409 case 11: 410 enabled = _Vertex_Deformation_Slot_11_Enabled; 411 opcode = _Vertex_Deformation_Slot_11_Opcode; 412 f0 = _Vertex_Deformation_Slot_11_Float_0; 413 f1 = _Vertex_Deformation_Slot_11_Float_1; 414 f2 = _Vertex_Deformation_Slot_11_Float_2; 415 f3 = _Vertex_Deformation_Slot_11_Float_3; 416 v0 = _Vertex_Deformation_Slot_11_Vector_0; 417 v1 = _Vertex_Deformation_Slot_11_Vector_1; 418 v2 = _Vertex_Deformation_Slot_11_Vector_2; 419 v3 = _Vertex_Deformation_Slot_11_Vector_3; 420 break; 421 case 12: 422 enabled = _Vertex_Deformation_Slot_12_Enabled; 423 opcode = _Vertex_Deformation_Slot_12_Opcode; 424 f0 = _Vertex_Deformation_Slot_12_Float_0; 425 f1 = _Vertex_Deformation_Slot_12_Float_1; 426 f2 = _Vertex_Deformation_Slot_12_Float_2; 427 f3 = _Vertex_Deformation_Slot_12_Float_3; 428 v0 = _Vertex_Deformation_Slot_12_Vector_0; 429 v1 = _Vertex_Deformation_Slot_12_Vector_1; 430 v2 = _Vertex_Deformation_Slot_12_Vector_2; 431 v3 = _Vertex_Deformation_Slot_12_Vector_3; 432 break; 433 case 13: 434 enabled = _Vertex_Deformation_Slot_13_Enabled; 435 opcode = _Vertex_Deformation_Slot_13_Opcode; 436 f0 = _Vertex_Deformation_Slot_13_Float_0; 437 f1 = _Vertex_Deformation_Slot_13_Float_1; 438 f2 = _Vertex_Deformation_Slot_13_Float_2; 439 f3 = _Vertex_Deformation_Slot_13_Float_3; 440 v0 = _Vertex_Deformation_Slot_13_Vector_0; 441 v1 = _Vertex_Deformation_Slot_13_Vector_1; 442 v2 = _Vertex_Deformation_Slot_13_Vector_2; 443 v3 = _Vertex_Deformation_Slot_13_Vector_3; 444 break; 445 case 14: 446 enabled = _Vertex_Deformation_Slot_14_Enabled; 447 opcode = _Vertex_Deformation_Slot_14_Opcode; 448 f0 = _Vertex_Deformation_Slot_14_Float_0; 449 f1 = _Vertex_Deformation_Slot_14_Float_1; 450 f2 = _Vertex_Deformation_Slot_14_Float_2; 451 f3 = _Vertex_Deformation_Slot_14_Float_3; 452 v0 = _Vertex_Deformation_Slot_14_Vector_0; 453 v1 = _Vertex_Deformation_Slot_14_Vector_1; 454 v2 = _Vertex_Deformation_Slot_14_Vector_2; 455 v3 = _Vertex_Deformation_Slot_14_Vector_3; 456 break; 457 case 15: 458 enabled = _Vertex_Deformation_Slot_15_Enabled; 459 opcode = _Vertex_Deformation_Slot_15_Opcode; 460 f0 = _Vertex_Deformation_Slot_15_Float_0; 461 f1 = _Vertex_Deformation_Slot_15_Float_1; 462 f2 = _Vertex_Deformation_Slot_15_Float_2; 463 f3 = _Vertex_Deformation_Slot_15_Float_3; 464 v0 = _Vertex_Deformation_Slot_15_Vector_0; 465 v1 = _Vertex_Deformation_Slot_15_Vector_1; 466 v2 = _Vertex_Deformation_Slot_15_Vector_2; 467 v3 = _Vertex_Deformation_Slot_15_Vector_3; 468 break; 469 } 470 471 if (enabled > 0.5) { 472 switch (opcode) { 473 case OPCODE_TUBE_TO_PLANE: 474 apply_tube_to_plane(objPos, v0, v1, v2, f0); 475 break; 476 case OPCODE_PLANE_TO_TUBE: 477 apply_plane_to_tube(objPos, v0, v1, v2, f0); 478 break; 479 case OPCODE_POINT_ALIGN: 480 apply_point_align(objPos, v0, v1, v2, f0); 481 break; 482 case OPCODE_AXIS_ALIGN: 483 apply_axis_align(objPos, v0, v1, v2, f0); 484 break; 485 case OPCODE_NORM_CONVERSION: 486 apply_norm_conversion(objPos, f0, f1, f2); 487 break; 488 case OPCODE_SEAL: 489 apply_seal(objPos, f0, f1, f2, t); 490 break; 491 case OPCODE_SINE_WAVES: 492 apply_sine_waves(objPos, v0, v1, v2, v3, t); 493 break; 494 case OPCODE_FBM: 495 apply_fbm(objPos, v0, v1, v2, f0, f1, f2, t); 496 break; 497 case OPCODE_PLANE_TO_HEMI_OCTAHEDRON: 498 apply_plane_to_hemi_octahedron(objPos, v0, v1, v2, f0); 499 break; 500 case OPCODE_HEMI_OCTAHEDRON_TO_PLANE: 501 apply_hemi_octahedron_to_plane(objPos, v0, v1, v2, f0); 502 break; 503 case OPCODE_SCALE: 504 apply_scale(objPos, v0, f0); 505 break; 506 case OPCODE_TRANSLATE: 507 apply_translate(objPos, v0, f0); 508 break; 509 case OPCODE_PLANE_TO_OCTAHEDRON: 510 apply_plane_to_octahedron(objPos, v0, v1, v2, f0); 511 break; 512 case OPCODE_OCTAHEDRON_TO_PLANE: 513 apply_octahedron_to_plane(objPos, v0, v1, v2, f0); 514 break; 515 case OPCODE_ROTATE: 516 apply_rotate(objPos, v0, v1, f0, f1); 517 break; 518 } 519 } 520 } 521} 522 523void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) { 524 const float t = getTime(); 525 526 [loop] 527 for (int i = 0; i < 16; i++) { 528 float enabled; 529 int opcode; 530 float f0, f1, f2, f3; 531 float4 v0, v1, v2, v3; 532 533 [forcecase] 534 switch (i) { 535 case 0: 536 enabled = _Vertex_Deformation_Slot_0_Enabled; 537 opcode = _Vertex_Deformation_Slot_0_Opcode; 538 f0 = _Vertex_Deformation_Slot_0_Float_0; 539 f1 = _Vertex_Deformation_Slot_0_Float_1; 540 f2 = _Vertex_Deformation_Slot_0_Float_2; 541 f3 = _Vertex_Deformation_Slot_0_Float_3; 542 v0 = _Vertex_Deformation_Slot_0_Vector_0; 543 v1 = _Vertex_Deformation_Slot_0_Vector_1; 544 v2 = _Vertex_Deformation_Slot_0_Vector_2; 545 v3 = _Vertex_Deformation_Slot_0_Vector_3; 546 break; 547 case 1: 548 enabled = _Vertex_Deformation_Slot_1_Enabled; 549 opcode = _Vertex_Deformation_Slot_1_Opcode; 550 f0 = _Vertex_Deformation_Slot_1_Float_0; 551 f1 = _Vertex_Deformation_Slot_1_Float_1; 552 f2 = _Vertex_Deformation_Slot_1_Float_2; 553 f3 = _Vertex_Deformation_Slot_1_Float_3; 554 v0 = _Vertex_Deformation_Slot_1_Vector_0; 555 v1 = _Vertex_Deformation_Slot_1_Vector_1; 556 v2 = _Vertex_Deformation_Slot_1_Vector_2; 557 v3 = _Vertex_Deformation_Slot_1_Vector_3; 558 break; 559 case 2: 560 enabled = _Vertex_Deformation_Slot_2_Enabled; 561 opcode = _Vertex_Deformation_Slot_2_Opcode; 562 f0 = _Vertex_Deformation_Slot_2_Float_0; 563 f1 = _Vertex_Deformation_Slot_2_Float_1; 564 f2 = _Vertex_Deformation_Slot_2_Float_2; 565 f3 = _Vertex_Deformation_Slot_2_Float_3; 566 v0 = _Vertex_Deformation_Slot_2_Vector_0; 567 v1 = _Vertex_Deformation_Slot_2_Vector_1; 568 v2 = _Vertex_Deformation_Slot_2_Vector_2; 569 v3 = _Vertex_Deformation_Slot_2_Vector_3; 570 break; 571 case 3: 572 enabled = _Vertex_Deformation_Slot_3_Enabled; 573 opcode = _Vertex_Deformation_Slot_3_Opcode; 574 f0 = _Vertex_Deformation_Slot_3_Float_0; 575 f1 = _Vertex_Deformation_Slot_3_Float_1; 576 f2 = _Vertex_Deformation_Slot_3_Float_2; 577 f3 = _Vertex_Deformation_Slot_3_Float_3; 578 v0 = _Vertex_Deformation_Slot_3_Vector_0; 579 v1 = _Vertex_Deformation_Slot_3_Vector_1; 580 v2 = _Vertex_Deformation_Slot_3_Vector_2; 581 v3 = _Vertex_Deformation_Slot_3_Vector_3; 582 break; 583 case 4: 584 enabled = _Vertex_Deformation_Slot_4_Enabled; 585 opcode = _Vertex_Deformation_Slot_4_Opcode; 586 f0 = _Vertex_Deformation_Slot_4_Float_0; 587 f1 = _Vertex_Deformation_Slot_4_Float_1; 588 f2 = _Vertex_Deformation_Slot_4_Float_2; 589 f3 = _Vertex_Deformation_Slot_4_Float_3; 590 v0 = _Vertex_Deformation_Slot_4_Vector_0; 591 v1 = _Vertex_Deformation_Slot_4_Vector_1; 592 v2 = _Vertex_Deformation_Slot_4_Vector_2; 593 v3 = _Vertex_Deformation_Slot_4_Vector_3; 594 break; 595 case 5: 596 enabled = _Vertex_Deformation_Slot_5_Enabled; 597 opcode = _Vertex_Deformation_Slot_5_Opcode; 598 f0 = _Vertex_Deformation_Slot_5_Float_0; 599 f1 = _Vertex_Deformation_Slot_5_Float_1; 600 f2 = _Vertex_Deformation_Slot_5_Float_2; 601 f3 = _Vertex_Deformation_Slot_5_Float_3; 602 v0 = _Vertex_Deformation_Slot_5_Vector_0; 603 v1 = _Vertex_Deformation_Slot_5_Vector_1; 604 v2 = _Vertex_Deformation_Slot_5_Vector_2; 605 v3 = _Vertex_Deformation_Slot_5_Vector_3; 606 break; 607 case 6: 608 enabled = _Vertex_Deformation_Slot_6_Enabled; 609 opcode = _Vertex_Deformation_Slot_6_Opcode; 610 f0 = _Vertex_Deformation_Slot_6_Float_0; 611 f1 = _Vertex_Deformation_Slot_6_Float_1; 612 f2 = _Vertex_Deformation_Slot_6_Float_2; 613 f3 = _Vertex_Deformation_Slot_6_Float_3; 614 v0 = _Vertex_Deformation_Slot_6_Vector_0; 615 v1 = _Vertex_Deformation_Slot_6_Vector_1; 616 v2 = _Vertex_Deformation_Slot_6_Vector_2; 617 v3 = _Vertex_Deformation_Slot_6_Vector_3; 618 break; 619 case 7: 620 enabled = _Vertex_Deformation_Slot_7_Enabled; 621 opcode = _Vertex_Deformation_Slot_7_Opcode; 622 f0 = _Vertex_Deformation_Slot_7_Float_0; 623 f1 = _Vertex_Deformation_Slot_7_Float_1; 624 f2 = _Vertex_Deformation_Slot_7_Float_2; 625 f3 = _Vertex_Deformation_Slot_7_Float_3; 626 v0 = _Vertex_Deformation_Slot_7_Vector_0; 627 v1 = _Vertex_Deformation_Slot_7_Vector_1; 628 v2 = _Vertex_Deformation_Slot_7_Vector_2; 629 v3 = _Vertex_Deformation_Slot_7_Vector_3; 630 break; 631 case 8: 632 enabled = _Vertex_Deformation_Slot_8_Enabled; 633 opcode = _Vertex_Deformation_Slot_8_Opcode; 634 f0 = _Vertex_Deformation_Slot_8_Float_0; 635 f1 = _Vertex_Deformation_Slot_8_Float_1; 636 f2 = _Vertex_Deformation_Slot_8_Float_2; 637 f3 = _Vertex_Deformation_Slot_8_Float_3; 638 v0 = _Vertex_Deformation_Slot_8_Vector_0; 639 v1 = _Vertex_Deformation_Slot_8_Vector_1; 640 v2 = _Vertex_Deformation_Slot_8_Vector_2; 641 v3 = _Vertex_Deformation_Slot_8_Vector_3; 642 break; 643 case 9: 644 enabled = _Vertex_Deformation_Slot_9_Enabled; 645 opcode = _Vertex_Deformation_Slot_9_Opcode; 646 f0 = _Vertex_Deformation_Slot_9_Float_0; 647 f1 = _Vertex_Deformation_Slot_9_Float_1; 648 f2 = _Vertex_Deformation_Slot_9_Float_2; 649 f3 = _Vertex_Deformation_Slot_9_Float_3; 650 v0 = _Vertex_Deformation_Slot_9_Vector_0; 651 v1 = _Vertex_Deformation_Slot_9_Vector_1; 652 v2 = _Vertex_Deformation_Slot_9_Vector_2; 653 v3 = _Vertex_Deformation_Slot_9_Vector_3; 654 break; 655 case 10: 656 enabled = _Vertex_Deformation_Slot_10_Enabled; 657 opcode = _Vertex_Deformation_Slot_10_Opcode; 658 f0 = _Vertex_Deformation_Slot_10_Float_0; 659 f1 = _Vertex_Deformation_Slot_10_Float_1; 660 f2 = _Vertex_Deformation_Slot_10_Float_2; 661 f3 = _Vertex_Deformation_Slot_10_Float_3; 662 v0 = _Vertex_Deformation_Slot_10_Vector_0; 663 v1 = _Vertex_Deformation_Slot_10_Vector_1; 664 v2 = _Vertex_Deformation_Slot_10_Vector_2; 665 v3 = _Vertex_Deformation_Slot_10_Vector_3; 666 break; 667 case 11: 668 enabled = _Vertex_Deformation_Slot_11_Enabled; 669 opcode = _Vertex_Deformation_Slot_11_Opcode; 670 f0 = _Vertex_Deformation_Slot_11_Float_0; 671 f1 = _Vertex_Deformation_Slot_11_Float_1; 672 f2 = _Vertex_Deformation_Slot_11_Float_2; 673 f3 = _Vertex_Deformation_Slot_11_Float_3; 674 v0 = _Vertex_Deformation_Slot_11_Vector_0; 675 v1 = _Vertex_Deformation_Slot_11_Vector_1; 676 v2 = _Vertex_Deformation_Slot_11_Vector_2; 677 v3 = _Vertex_Deformation_Slot_11_Vector_3; 678 break; 679 case 12: 680 enabled = _Vertex_Deformation_Slot_12_Enabled; 681 opcode = _Vertex_Deformation_Slot_12_Opcode; 682 f0 = _Vertex_Deformation_Slot_12_Float_0; 683 f1 = _Vertex_Deformation_Slot_12_Float_1; 684 f2 = _Vertex_Deformation_Slot_12_Float_2; 685 f3 = _Vertex_Deformation_Slot_12_Float_3; 686 v0 = _Vertex_Deformation_Slot_12_Vector_0; 687 v1 = _Vertex_Deformation_Slot_12_Vector_1; 688 v2 = _Vertex_Deformation_Slot_12_Vector_2; 689 v3 = _Vertex_Deformation_Slot_12_Vector_3; 690 break; 691 case 13: 692 enabled = _Vertex_Deformation_Slot_13_Enabled; 693 opcode = _Vertex_Deformation_Slot_13_Opcode; 694 f0 = _Vertex_Deformation_Slot_13_Float_0; 695 f1 = _Vertex_Deformation_Slot_13_Float_1; 696 f2 = _Vertex_Deformation_Slot_13_Float_2; 697 f3 = _Vertex_Deformation_Slot_13_Float_3; 698 v0 = _Vertex_Deformation_Slot_13_Vector_0; 699 v1 = _Vertex_Deformation_Slot_13_Vector_1; 700 v2 = _Vertex_Deformation_Slot_13_Vector_2; 701 v3 = _Vertex_Deformation_Slot_13_Vector_3; 702 break; 703 case 14: 704 enabled = _Vertex_Deformation_Slot_14_Enabled; 705 opcode = _Vertex_Deformation_Slot_14_Opcode; 706 f0 = _Vertex_Deformation_Slot_14_Float_0; 707 f1 = _Vertex_Deformation_Slot_14_Float_1; 708 f2 = _Vertex_Deformation_Slot_14_Float_2; 709 f3 = _Vertex_Deformation_Slot_14_Float_3; 710 v0 = _Vertex_Deformation_Slot_14_Vector_0; 711 v1 = _Vertex_Deformation_Slot_14_Vector_1; 712 v2 = _Vertex_Deformation_Slot_14_Vector_2; 713 v3 = _Vertex_Deformation_Slot_14_Vector_3; 714 break; 715 case 15: 716 enabled = _Vertex_Deformation_Slot_15_Enabled; 717 opcode = _Vertex_Deformation_Slot_15_Opcode; 718 f0 = _Vertex_Deformation_Slot_15_Float_0; 719 f1 = _Vertex_Deformation_Slot_15_Float_1; 720 f2 = _Vertex_Deformation_Slot_15_Float_2; 721 f3 = _Vertex_Deformation_Slot_15_Float_3; 722 v0 = _Vertex_Deformation_Slot_15_Vector_0; 723 v1 = _Vertex_Deformation_Slot_15_Vector_1; 724 v2 = _Vertex_Deformation_Slot_15_Vector_2; 725 v3 = _Vertex_Deformation_Slot_15_Vector_3; 726 break; 727 } 728 729 [branch] 730 if (enabled > 0.5) { 731 [forcecase] 732 switch (opcode) { 733 case OPCODE_TUBE_TO_PLANE: 734 apply_tube_to_plane_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 735 break; 736 case OPCODE_PLANE_TO_TUBE: 737 apply_plane_to_tube_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 738 break; 739 case OPCODE_POINT_ALIGN: 740 apply_point_align_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 741 break; 742 case OPCODE_AXIS_ALIGN: 743 apply_axis_align_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 744 break; 745 case OPCODE_NORM_CONVERSION: 746 apply_norm_conversion_normal(objPos, objNorm, objTan, f0, f1, f2); 747 break; 748 case OPCODE_SEAL: 749 apply_seal_normal(objPos, objNorm, objTan, f0, f1, f2, t); 750 break; 751 case OPCODE_SINE_WAVES: 752 apply_sine_waves_normal(objPos, objNorm, objTan, v0, v1, v2, v3, t); 753 break; 754 case OPCODE_FBM: 755 apply_fbm_normal(objPos, objNorm, objTan, v0, v1, v2, f0, f1, f2, t); 756 break; 757 case OPCODE_PLANE_TO_HEMI_OCTAHEDRON: 758 apply_plane_to_hemi_octahedron_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 759 break; 760 case OPCODE_HEMI_OCTAHEDRON_TO_PLANE: 761 apply_hemi_octahedron_to_plane_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 762 break; 763 case OPCODE_SCALE: 764 apply_scale_normal(objPos, objNorm, objTan, v0, f0); 765 break; 766 case OPCODE_TRANSLATE: 767 apply_translate_normal(objPos, objNorm, objTan, v0, f0); 768 break; 769 case OPCODE_PLANE_TO_OCTAHEDRON: 770 apply_plane_to_octahedron_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 771 break; 772 case OPCODE_OCTAHEDRON_TO_PLANE: 773 apply_octahedron_to_plane_normal(objPos, objNorm, objTan, v0, v1, v2, f0); 774 break; 775 case OPCODE_ROTATE: 776 apply_rotate_normal(objPos, objNorm, objTan, v0, v1, f0, f1); 777 break; 778 } 779 } 780 } 781} 782 783#else 784 785void deform(inout float3 objPos) { 786} 787 788void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) { 789} 790 791#endif // _VERTEX_DEFORMATION 792 793void propagateObjPos(inout v2f i) { 794 i.worldPos = mul(unity_ObjectToWorld, float4(i.objPos, 1)); 795 i.pos = UnityObjectToClipPos(i.objPos); 796 i.eyeVec.xyz = i.worldPos - _WorldSpaceCameraPos; 797} 798 799#endif // __VERTEX_INC