|
459 | 459 | <input name="mix" type="float" interfacename="base_metalness" /> |
460 | 460 | </mix> |
461 | 461 |
|
462 | | - <!-- Coat darkening calculation --> |
| 462 | + <!-- Coat Layer --> |
| 463 | + |
| 464 | + <!-- Coat inter-reflection darkening darkening calculation --> |
463 | 465 | <!-- approximate Kcoat, "internal diffuse reflection coefficient" of coat --> |
464 | 466 | <subtract name="one_minus_coat_F0" type="float"> |
465 | 467 | <input name="in1" type="float" value="1.0" /> |
|
494 | 496 | <input name="bg" type="color3" nodename="Edielectric" /> |
495 | 497 | <input name="mix" type="float" interfacename="base_metalness" /> |
496 | 498 | </mix> |
497 | | - <!-- final base darkening factor due to coat: base_darkening = (1 - Kcoat) / (1 - Ebase*Kcoat) --> |
| 499 | + <!-- final base inter-reflection darkening darkening factor due to coat, |
| 500 | + where Tcoat2 = coat_color: |
| 501 | + base_darkening = (1 - Kcoat) / (1 - Ebase*Kcoat*Tcoat2) --> |
498 | 502 | <multiply name="Ebase_Kcoat" type="color3"> |
499 | 503 | <input name="in1" type="color3" nodename="Ebase" /> |
500 | 504 | <input name="in2" type="float" nodename="Kcoat" /> |
501 | 505 | </multiply> |
502 | | - <multiply name="Ebase_Kcoat_T2" type="color3"> |
| 506 | + <multiply name="Ebase_Kcoat_Tcoat2" type="color3"> |
503 | 507 | <input name="in1" type="color3" nodename="Ebase_Kcoat" /> |
504 | 508 | <input name="in2" type="color3" interfacename="coat_color" /> |
505 | 509 | </multiply> |
506 | 510 | <subtract name="one_minus_Kcoat" type="float"> |
507 | 511 | <input name="in1" type="float" value="1.0" /> |
508 | 512 | <input name="in2" type="float" nodename="Kcoat" /> |
509 | 513 | </subtract> |
510 | | - <subtract name="one_minus_Ebase_Kcoat_T2" type="color3"> |
| 514 | + <subtract name="one_minus_Ebase_Kcoat_Tcoat2" type="color3"> |
511 | 515 | <input name="in1" type="color3" value="1.0, 1.0, 1.0" /> |
512 | | - <input name="in2" type="color3" nodename="Ebase_Kcoat_T2" /> |
| 516 | + <input name="in2" type="color3" nodename="Ebase_Kcoat_Tcoat2" /> |
513 | 517 | </subtract> |
514 | 518 | <convert name="one_minus_Kcoat_color" type="color3"> |
515 | 519 | <input name="in" type="float" nodename="one_minus_Kcoat" /> |
516 | 520 | </convert> |
517 | 521 | <divide name="base_darkening" type="color3"> |
518 | 522 | <input name="in1" type="color3" nodename="one_minus_Kcoat_color" /> |
519 | | - <input name="in2" type="color3" nodename="one_minus_Ebase_Kcoat" /> |
| 523 | + <input name="in2" type="color3" nodename="one_minus_Ebase_Kcoat_Tcoat2" /> |
520 | 524 | </divide> |
| 525 | + |
| 526 | + <!-- inter-reflection darkening, modulated by coat_darkening --> |
521 | 527 | <mix name="modulated_base_darkening" type="color3"> |
522 | 528 | <input name="fg" type="color3" nodename="base_darkening" /> |
523 | 529 | <input name="bg" type="color3" value="1.0, 1.0, 1.0" /> |
524 | 530 | <input name="mix" type="float" interfacename="coat_darkening" /> |
525 | 531 | </mix> |
526 | | - <mix name="coat_modulated_base_darkening" type="color3"> |
527 | | - <input name="fg" type="color3" nodename="modulated_base_darkening" /> |
528 | | - <input name="bg" type="color3" value="1.0, 1.0, 1.0" /> |
529 | | - <input name="mix" type="float" interfacename="coat_weight" /> |
530 | | - </mix> |
531 | 532 | <multiply name="darkened_base_substrate" type="BSDF"> |
532 | 533 | <input name="in1" type="BSDF" nodename="base_substrate" /> |
533 | | - <input name="in2" type="color3" nodename="coat_modulated_base_darkening" /> |
| 534 | + <input name="in2" type="color3" nodename="modulated_base_darkening" /> |
534 | 535 | </multiply> |
535 | | - |
536 | | - <!-- Coat Layer --> |
537 | | - <mix name="coat_attenuation" type="color3"> |
538 | | - <input name="fg" type="color3" interfacename="coat_color" /> |
539 | | - <input name="bg" type="color3" value="1.0, 1.0, 1.0" /> |
540 | | - <input name="mix" type="float" interfacename="coat_weight" /> |
541 | | - </mix> |
542 | | - <multiply name="coat_substrate_attenuated" type="BSDF"> |
| 536 | + <!-- base_substrate, attenuated due to absorption color, and inter-reflection darkening --> |
| 537 | + <multiply name="base_substrate_attenuated" type="BSDF"> |
543 | 538 | <input name="in1" type="BSDF" nodename="darkened_base_substrate" /> |
544 | | - <input name="in2" type="color3" nodename="coat_attenuation" /> |
| 539 | + <input name="in2" type="color3" nodename="coat_color" /> |
545 | 540 | </multiply> |
546 | | - |
| 541 | + <!-- coat BSDF --> |
547 | 542 | <open_pbr_anisotropy name="coat_roughness_vector" type="vector2"> |
548 | 543 | <input name="roughness" type="float" interfacename="coat_roughness" /> |
549 | 544 | <input name="anisotropy" type="float" interfacename="coat_roughness_anisotropy" /> |
550 | 545 | </open_pbr_anisotropy> |
551 | 546 | <dielectric_bsdf name="coat_bsdf" type="BSDF"> |
552 | | - <input name="weight" type="float" interfacename="coat_weight" /> |
| 547 | + <input name="weight" type="float" value="1.0" /> |
553 | 548 | <input name="ior" type="float" interfacename="coat_ior" /> |
554 | 549 | <input name="roughness" type="vector2" nodename="coat_roughness_vector" /> |
555 | 550 | <input name="normal" type="vector3" interfacename="geometry_coat_normal" /> |
556 | 551 | <input name="tangent" type="vector3" interfacename="geometry_coat_tangent" /> |
557 | 552 | <input name="scatter_mode" type="string" value="R" /> |
558 | 553 | </dielectric_bsdf> |
559 | | - <layer name="coat_layer" type="BSDF"> |
| 554 | + <!-- coated base --> |
| 555 | + <layer name="coated_base_substrate" type="BSDF"> |
560 | 556 | <input name="top" type="BSDF" nodename="coat_bsdf" /> |
561 | | - <input name="base" type="BSDF" nodename="coat_substrate_attenuated" /> |
| 557 | + <input name="base" type="BSDF" nodename="base_substrate_attenuated" /> |
562 | 558 | </layer> |
| 559 | + <!-- statistical mix of coated and uncoated base --> |
| 560 | + <mix name="partially_coated_base" type="color3"> |
| 561 | + <input name="fg" type="BSDF" nodename="coated_base_substrate" /> |
| 562 | + <input name="bg" type="BSDF" nodename="base_substrate" /> |
| 563 | + <input name="mix" type="float" interfacename="coat_weight" /> |
| 564 | + </mix> |
| 565 | + |
563 | 566 |
|
564 | | - <!-- Fuzz Layer --> |
| 567 | + <!-- Fuzz Layer --> |
565 | 568 | <sheen_bsdf name="fuzz_bsdf" type="BSDF"> |
566 | 569 | <input name="weight" type="float" interfacename="fuzz_weight" /> |
567 | 570 | <input name="color" type="color3" interfacename="fuzz_color" /> |
|
571 | 574 | </sheen_bsdf> |
572 | 575 | <layer name="fuzz_layer" type="BSDF"> |
573 | 576 | <input name="top" type="BSDF" nodename="fuzz_bsdf" /> |
574 | | - <input name="base" type="BSDF" nodename="coat_layer" /> |
| 577 | + <input name="base" type="BSDF" nodename="partially_coated_base" /> |
575 | 578 | </layer> |
576 | 579 |
|
577 | 580 | <!-- Emission Layer --> |
|
0 commit comments