├── .gitattributes ├── LICENSE ├── README.md ├── bonus ├── PBR-Material-F0-Quick-Reference-Chart.png └── [PBR-White-Paper] PBR-Material-F0-Quick-Reference-Chart.pdf ├── content ├── part 1 │ ├── README.md │ └── media │ │ ├── 0f3c00735859275a4fa201b4e4561037.png │ │ ├── 104ed41592ecd970652b25a6ee7d7979.png │ │ ├── 15ff7d98da115cda7a62350ab82f1299.png │ │ ├── 172b5ad422241aa48bee1581a7996d3f.png │ │ ├── 19b7b473c5258ca21d9bf3ee9d115076.png │ │ ├── 1f4a62024744adeecaee447a5779e0a3.png │ │ ├── 264ef1cae566b55219f2957090803eee.png │ │ ├── 2bd7dd943a4049058e2bb9252ce35aab.png │ │ ├── 3bd5aa554bfd06b27c66abd6a7a52a50.png │ │ ├── 3c41bf5fab9d7a49351f0ba2f6561ded.png │ │ ├── 41c027f83e91e911e6bcc195d14d1a82.png │ │ ├── 46.png │ │ ├── 4747c17311dca6610243229defd4241f.png │ │ ├── 4ecee15f93c7406a0ef72b8ea3121baf.png │ │ ├── 5b9800151da9a819e4d21e38bcb4770f.png │ │ ├── 720b0dd40607c2c0c836f4d8ab85a3ed.png │ │ ├── 723cefbe5630048b318ba9e244d52ded.jpg │ │ ├── 74b23c3d9bd86c2c7da747ae5fc924b5.png │ │ ├── 7841dfa7d76eb7e831b0d2f5bc2e3bd6.png │ │ ├── 85995c017ecf1b866b10d6845f276067.png │ │ ├── 861df89ef290547a3835ec267275d7f8.png │ │ ├── 866277fbe5822ef0a9c42024d23eeee7.png │ │ ├── 8c145484bc6c975b4fbbfe7b27e8df45.png │ │ ├── 8c60f94b8b6f430fc5dcb41068770454.png │ │ ├── 92a417475714f76c07399a2f62c2ec52.png │ │ ├── 94cbce1349b7b2206c044b690dffff99.png │ │ ├── 96cfde9628680bc6d9b5934b5a804316.png │ │ ├── 982e3672c32998079331a1186dc61e77.png │ │ ├── 9e2bf14832ca069f3e0b2fb919bd6041.png │ │ ├── 9ef1db813c87f1f491f7c9dda39c031c.png │ │ ├── PBR-White-Paper-Knowledge-Architecture-1.0.png │ │ ├── a18e6e86e8ab561037718d63ae71cfa6.png │ │ ├── ac5b6abf417748f5193aae92472b174a.png │ │ ├── aebea189abd3731e95d48e7d8bf5e795.png │ │ ├── babc8a53fde56ce9e03ec6e98e95e76b.png │ │ ├── bd62917668f7fed0d467aa17e37f6355.png │ │ ├── bd7390108d6233ec9b7f175cb88a1a43.png │ │ ├── be92e9284cff9234a7b4892856f99775.png │ │ ├── bea70c7262222d1e1fa2ca2334b5a92d.png │ │ ├── c21268b086035b8ff1a211d66d40f408.png │ │ ├── c7e25bc74fdc95edc1bfc0ce45d7945a.png │ │ ├── cf4c2d3b087e21e868366f8af8ba2e921.png │ │ ├── d5a14ad4b88d3da2ba3730bcad3c705d.png │ │ ├── d9b94cd41cd6cea5cfe6c13c93784b69.png │ │ ├── dc5ac029d2ea421e140124755e00b12a.png │ │ ├── e0bf53b4788df665db68b7d9e3bd6584.png │ │ ├── e81277e4a9883842f68dadbce1692715.jpg │ │ ├── e8d17495bbb483606ae1e6e6afa38b35.png │ │ ├── f1ee93037fd153c8168c452b3005e0e6.png │ │ ├── f33d80daaf5e1f38eb754dae5c516a50.png │ │ ├── f3b2624505b670b1243fdab515e98295.png │ │ ├── f8c1171eebd942ff19535c514262ae4d.png │ │ ├── f8cec1e4db969871187f07604782a92e.jpg │ │ ├── fb76f44f2b28dffbec7780fd07a552c6.png │ │ └── fbb26eee8d649077b3bc0129288b7e34.png ├── part 2 │ ├── README.md │ └── media │ │ ├── 001.jpg │ │ ├── 002.jpg │ │ ├── 03a946dee6f45cdce342cd5644a73b93.jpg │ │ ├── 1b7437728d0cd8e24c77cbd214682dbf.png │ │ ├── 22e89378daab68e11dd741798c579f7e.png │ │ ├── 26d662c7c421f60da0ba9e05752a5d58.jpg │ │ ├── 27.png │ │ ├── 28cd3f1e2b521d8d476d30cd51e00a5f.png │ │ ├── 2a206b66cb90c99d9d7918f32275d86e.jpg │ │ ├── 32c4f9f3bef394e7ac3779cead18ac0f.png │ │ ├── 3f59a90ca4d2aebec28df861fb0e2c4b.png │ │ ├── 3fb55a3525c6008fefa2bdde561f761b.png │ │ ├── 4c2940621fcc17a4252268a5d0d42b37.png │ │ ├── 4e088c00d8ed6e7c082562de91f93e50.png │ │ ├── 5ad4543f21a80516b3a760a29b83458d.png │ │ ├── 6cf586ffef9b492903591ee6f0e6f677.jpg │ │ ├── 74c5ee3b78db7d8cc86b9deda924eba8.jpg │ │ ├── 753fd5598412674312cac0fce0587021.jpg │ │ ├── 7df705605f2691a6cf25eb2ace7cd14c.png │ │ ├── 7f1f49beeca7b3dc4403bd6fdef05972.png │ │ ├── 8b345de63adce8e1d4c9fbb8776efb44.jpg │ │ ├── 949befd4d37129c6701a743392dc2b5a.png │ │ ├── 957e0bcc0e3319cda5d47bbff81f2086.png │ │ ├── 98f67563389b329834fcff4c7e27ad57.png │ │ ├── 9d3012e9d9141a81b80052f4a0759369.jpg │ │ ├── a18e6e86e8ab561037718d63ae71cfa6.png │ │ ├── a4a53a714915e51f67d86df0559f5830.png │ │ ├── a531e77cc2765b3c77ac31ab39da494f.png │ │ ├── b29afb845308d90aaeb379a11b609225.jpg │ │ ├── c9c27edc27b88355947bc4882b3e3f13.png │ │ ├── caed5dd64637dc2e2cfb185a8e537147.png │ │ ├── cc7ba09a72f71e2d6ae02bd69b79081b.jpg │ │ ├── d4d3f73ed9bf3ac77e0b0a9b9bddc790.png │ │ ├── db572e0923acd8d22e67a4e1875fb206.png │ │ ├── df5d430bdbb85be5f55e94af661a1a42.png │ │ ├── e3863efd88c9286f7c3eb78e25b98583.png │ │ ├── e8d17495bbb483606ae1e6e6afa38b35.png │ │ ├── ee32291996fb8ce5b2dfcfee4f7ac947.png │ │ ├── endpic.jpg │ │ ├── f2e5df06cf5ea9c6f1b7b033bf5386cf.jpg │ │ ├── f666a719d3cc9d1785c04d2824232e92.jpg │ │ ├── faa31b20c807cd58c5e73bee73a4c1a9.png │ │ └── title.jpg ├── part 3 │ ├── README.md │ └── media │ │ ├── 0138e3d33d920148a6a652f2f47158d3.png │ │ ├── 071dcb665386a2a56f1cb84352dc60ce.png │ │ ├── 0ad6564a495cd588a1b8574b35a46a57.png │ │ ├── 0cbe51fa24d47bffbecd3ae513fac8ba.png │ │ ├── 0ec5617fc39027630e17685e7eb076e0.png │ │ ├── 11fd09fe8053bc5883bcb016196d0d9b.png │ │ ├── 2f8476c7f254d547b0b3799d92b3963b.png │ │ ├── 323070b8aeb7ed80b6a7d54fc125856a.jpg │ │ ├── 3c0e1a83631f7cac58a1f3e9cd08ec89.png │ │ ├── 4747c17311dca6610243229defd4241f.png │ │ ├── 4c80d76a6a27620093d45e179533a506.png │ │ ├── 5336bcb848115d87c783424111bcf204.png │ │ ├── 5bedec7e9fd8594bb6ffcbff3aaeb9ad.png │ │ ├── 5da5401739ea707110ad5dc81ec4dccb.png │ │ ├── 5e2747f029d59b61ef5679111441d9f9.png │ │ ├── 622608171636a9037067b25cf12705d8.png │ │ ├── 64c31945914440261b6cb043f65ef314.png │ │ ├── 67c8b523ac8b06b694441c1702516ce9.png │ │ ├── 6fb3430619d35fecc4267b24f0edf6cd.png │ │ ├── 7e1c50f8956fc87ee61fda566f09c5f8.png │ │ ├── 8b535f71d0c840167cf2a882b955b01d.jpg │ │ ├── 8c18a8760406f32ff5a66be9aed14e91.png │ │ ├── 8c2a369a71823ccc85df0aced1b46131.png │ │ ├── 9c611a836080f04d7c064b0e52930398.png │ │ ├── a49a4c5075a08c4e5d2b98fb9c4a9a23.png │ │ ├── b4b78d318fffffa1d4a34238f838cfaa.jpg │ │ ├── b5b38788d5067a00c7e957791394692b.png │ │ ├── b6ab34debdd0317c0308751a307118cf.png │ │ ├── becba69c354266eb02e9ec41bafed88d.png │ │ ├── c1b2fc1ec5d1e5c6380ffacfb31cff28.png │ │ ├── cab428cf33e54a71d70cc9fc05c856c3.png │ │ ├── cb40bb5b457d25f410ed23820bab6135.png │ │ ├── ce169fd7f8b4b9eb1ac8f68d35e3a570.png │ │ ├── ce9a54817238b292f9c6d4b001ce5096.jpg │ │ ├── d14f3ca5eaacb5257aabf828e0b41c86.png │ │ ├── d3c9e65c45ecfc8b65e3a328b5c500de.png │ │ ├── d51eb799258c0c639e2f5350f8ce24fc.png │ │ ├── d614155fb47253a0ee9e4a4ef2ac1126.png │ │ ├── d9a44d23769175e75a0b768d1a73bf30.png │ │ ├── da734f49bb6c39761b60a5e655caeecd.png │ │ ├── e747c131163d0a2f3476d8483e0f4b3d.jpg │ │ ├── e7f8349e326040400f36d6de724d1871.png │ │ └── f98c4db0e139f70918098b8075a4a98e.png ├── part 4 │ ├── README.md │ └── media │ │ ├── 095a45e8f23445af3972e83fd7f44f2e.png │ │ ├── 1115872096ef1ef2b2183fa73728d9d9.png │ │ ├── 114d4ea1b14c7046a8a79fced705346b.png │ │ ├── 13314b886dd537cf8751192404bb0737.png │ │ ├── 144e1c903c72b63bd13ac790781a397d.png │ │ ├── 149da3a02441727ca067c8e096c65432.png │ │ ├── 17cae6f22b66b9ae231c991298d234ae.png │ │ ├── 1922402f33d58220c8759b93c44d791d.png │ │ ├── 24404380aa0494eb462b18a20a9bc9da.jpg │ │ ├── 24a90bab8564b57770b042030909bd3d.png │ │ ├── 254319e5df9f46d20c6f22e274ba0a01.png │ │ ├── 27838985083a7ad0d27e10957ea27dad.png │ │ ├── 2d6ab4c1432bec1539d4fd5941ba13e0.png │ │ ├── 2f1cc5427fbda5ed55c46ddde836b982.png │ │ ├── 36bd80224cd22376a215c3571cdb34db.png │ │ ├── 36f5fdc6deeed190682e936b3af105cc.jpg │ │ ├── 3c17ccb94346e3c1f05d48c399c13135.png │ │ ├── 3c87d9808b9979b7a94360d5b0b040b5.png │ │ ├── 3ea6d5d943135c43e1ac1263cbea0596.png │ │ ├── 412751ef2bd1a069fd1a7e62d3d9cb13.png │ │ ├── 5014f22fe57bd5759d518fcfea82a702.png │ │ ├── 57f577ef5254474624eb5b764dff801a.png │ │ ├── 59ab02da40cef22dced04ea27286b21f.png │ │ ├── 5a3723bf4f3d937028e2c2e48e27e2d4.jpg │ │ ├── 62897a12b6720be9f8e1dae88ba61679.png │ │ ├── 66a5b06ece63afc6318f4954c7fbd570.png │ │ ├── 71b6479206efb0d0adf0bd41f78bac0a.jpg │ │ ├── 81ef59221428713a415eb6baf07785ec.png │ │ ├── 8607e94794adfbb9609e55939d118628.jpg │ │ ├── 899c522b364f9e5fd3b979024af18b66.png │ │ ├── 95128d435001df4c866cb8655186d844.png │ │ ├── 96cfde9628680bc6d9b5934b5a804316.png │ │ ├── 97153e46022402eae28c35cff2115560.png │ │ ├── 9d47949153104746535bfae0cc104856.png │ │ ├── a37df8beacef3ac35412950464b3e051.png │ │ ├── af556c96fad50d619cd333de3ef99649.png │ │ ├── b2629e0d92a57838fc460817500f60bb.png │ │ ├── b2896135ea6c44e8d003a3994e6a9978.png │ │ ├── b6a70732fd616c56ad51468b2d5630cc.png │ │ ├── ba6a65435aaf4a40ef8b15f06751f49f.png │ │ ├── bbdad3dd39ac9893992b3181457454fe.png │ │ ├── c18c1570c624fe787a90b20f54b4d2f8.png │ │ ├── c84bd49deac90adca3e4de59c925c56b.png │ │ ├── c987a44799425ef32e8bc5f7c91b5e90.png │ │ ├── cacf5f5ed2c03c26264584c4489a8e38.png │ │ ├── cd0a575e04fa663d5f8eb136c63c4ca2.png │ │ ├── d91df4cfd42b0c74184cc4b788135893.png │ │ ├── dbaf951c7d11c0e96218a508f77feff5.png │ │ ├── e03ebc1188cdbae484ab01ec48a2f838.png │ │ ├── e154b08649b46b118f6fd65ffc32f742.png │ │ ├── eb4e252e203e5dbeacba42e3a9d70c70.jpg │ │ ├── ee5db5d3e940d75ce024fb5041caa1e6.png │ │ ├── eedbcb7b8e49ef5ad09f0c8bd8e001ee.jpg │ │ ├── f20190617091939.png │ │ ├── f5fa35dcb31a083990c8e037f66097a2.png │ │ ├── f5fcb39583ae41e90aa577ec11a531df.jpg │ │ ├── f64e74a70d320b2a0144dd67ee06a499.png │ │ ├── f85cad285577173cfacfbb341aac7b59.png │ │ └── fabf5085896395a2aa5010c1c60ca23a.png └── part 5 │ ├── README.md │ └── media │ ├── 01a8a1d6669af50097f7e392e6196e06.png │ ├── 08ba8c587b69d1d4c78bd0d0e2404c4d.png │ ├── 0ca448a5d7b9a7d5fb237cca1a311e55.png │ ├── 0d1d1778e2527fd1da0a5e4231aedbae.png │ ├── 0ded91dcd6abad112f15eafa63512a36.png │ ├── 10f722446ced22ec649e65a9641bcabb.png │ ├── 1115872096ef1ef2b2183fa73728d9d9.png │ ├── 161b0caae09c258a64dccfadbda6b62d.png │ ├── 17e47c4a8d38caf5eb9746123317ee4e.png │ ├── 1c69324b9bccde57fe48776e21728833.png │ ├── 1ce971169127255d925251e0fc44cafa.png │ ├── 1e12b8fa8f3f7b3088c127c7952a16bb.png │ ├── 20459061ec81d1ef8ebfb1f417852045.png │ ├── 2acc4c4315241e2213e4cd37636b7185.png │ ├── 2b06ef1685e6df43021b423980b93d48.jpg │ ├── 2e80630608297d9328d0561b507bbefc.png │ ├── 2f562488048892e6747a2965b67a25d8.png │ ├── 3262c1635fb17d7a60e12ff5882ca3cc.png │ ├── 3bc3edc1eb122f07d910907a1f3d8336.png │ ├── 3dc9d15f986d71b8dc739b242f09302a.png │ ├── 40518e0fb158d755d23e5cbabf10a41a.png │ ├── 416c42413c063fcaf8d730deb543e916.png │ ├── 45eee9845aa940ab19b5c467c3a10462.png │ ├── 48276e2b4ffdc7d2572b3ec5f184fbb8.png │ ├── 4aa3efe02540cb54a6866226e97220ab.png │ ├── 4e12503e69717887547c2afaab348a52.png │ ├── 4f40c0ebc4718baeac07348b8d4240a6.png │ ├── 53d113963044bd1e8a8908c0b1dec0b4.png │ ├── 5655445200dfccdbb4a1bccb6b54991c.png │ ├── 566a04f49f1efbf6912b05047d8b1a74.png │ ├── 58c40ea15cdebebbcae2042c779b7f28.png │ ├── 5c9fb838c042314971d323de811ff431.png │ ├── 5dbee4a8d68561d61c726d925eb6084d.png │ ├── 62d1799f476094490925e6fd1d0f31b7.png │ ├── 663beeeae84b200c36c6309d44945015.png │ ├── 6ae3a91e739a5ba62cb7c3c4830e3eb6.png │ ├── 72a36cc312878ceffc9c67199a25e673.png │ ├── 77ac214f5a4f615a65d09e576d0230d4.png │ ├── 79ec3dcce92fbd439b533a6d9dc68f39.png │ ├── 79fc3da5e278aac26866b728eb17351a.png │ ├── 818d632360b2960edd42579b0dd96621.png │ ├── 85b98bad3af89f555f687b05c3d888d8.png │ ├── 8b8f0ff7a30c1e3288cb1c72a17006e0.png │ ├── 905d804603235594b4a930479943f359.png │ ├── 9294022b2fc76e73163cc85424e3bb15.png │ ├── 9497aca5b2f105c11f46144c4389268f.png │ ├── 94e36a9dc49a1b4297703d7a805b64b2.png │ ├── 96cfde9628680bc6d9b5934b5a804316.png │ ├── 97619cda5b984d54d02e2a3fdad85ff9.png │ ├── 982e3672c32998079331a1186dc61e77.png │ ├── 982e3672c32998079331a1186dc61e77111.png │ ├── 994c0a59072f0b0b228fb52a49caf261.png │ ├── 9eaa4556d5beae73b22fba780791b548.png │ ├── a4cba0214565f4928e8b793b0ee4f6b1.png │ ├── a8214a5984a80de8f3dfde1cf9de4941.png │ ├── a86ecb7ba6bf1fdea6ce1541ad6d034e.png │ ├── aba1577114eefcd2f27dbceca5315485.png │ ├── ae5e69d7d0ebb20dcf15fd46832ca4c0.jpg │ ├── b59b08616b23ebbf44460fd8e94acc6a.jpg │ ├── bb45dc7379db0ec3834025b741647f5b.png │ ├── bd15454f3ae41288230778d489802b09.png │ ├── c31e7e28b7c69f0978c1ee140bb8a64b.png │ ├── c4248dbc5f76cf88458fa01b90bf1dc3.png │ ├── c5ffe7b536cf62e6247c546e577824e9.png │ ├── c654f777e7eb79e3a19ea8a371cfa904.png │ ├── cf5196dc3e1df843a9895279cc8e45b6.png │ ├── cf91540798512916297e8ff29d2daeb0.png │ ├── ddad80315ee2d5266556f35cea64bc11.png │ ├── e12d888024f898f0f269532e5f28eed0.png │ ├── e24f10abd36c00821d421eb9d99b5c64.png │ ├── e2aaf9d6c96b1a523342dd006bfe3114.png │ ├── e40ac370b65fcc6e47db51ebe4a1934e.png │ ├── e9704bb54e9ac08859dfeab6709a0e5c.png │ ├── eaf7e5178449352eb816e9f4f5d3fcec.png │ ├── ec9afdc4d80dbace6a7b5dac37ff1cdb.png │ ├── f2048f675c3dbdd5d5d250c92b5663fa.png │ ├── f5507496e6ccb676adea455919b6367f.png │ ├── fce3e995db0385149e4baa1d757f4982.png │ └── fd86da1bb84c510ca0454473f97964d4.png ├── media ├── 2-PBR-Core-Theory-and-Rendering-Principle-Knowledge-Architecture.png ├── 3-PBR-Disney-Principled-BRDF-BSDF-Knowledge-Architecture.png ├── 4-PBR-The-NDF.png ├── 5-PBR-The-Geometry-Function.png ├── PBR-White-Paper-Knowledge-Architecture-1.0.png └── title.jpg └── process.dct /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 浅墨 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![](media/title.jpg) 4 | 5 | # 基于物理的渲染(PBR)白皮书 | PBR White Paper 6 | ## 目录 7 | 8 | - **[ 【第一章】 开篇:PBR核心知识体系总结与概览](https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%201/README.md)** 9 | 10 | - **[ 【第二章】 PBR核心理论与渲染光学原理总结](https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%202/README.md)** 11 | 12 | - **[ 【第三章】 迪士尼原则的BRDF与BSDF相关总结](https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%203/README.md)** 13 | - **[ 【第四章】 法线分布函数相关总结](https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%204/README.md)** 14 | - **[ 【第五章】 几何函数相关总结](https://github.com/QianMo/PBR-White-Paper/blob/master/content/part%205/README.md)** 15 | 16 | - 后续章节持续更新中 17 | 18 | 19 |
20 | 21 | # PBR知识体系架构图 22 | - **[PBR知识体系架构图1.0] 高清大图: 23 | [【下载地址】](https://github.com/QianMo/PBR-White-Paper/raw/master/media/PBR-White-Paper-Knowledge-Architecture-1.0.png)** 24 | 25 | 26 | ![](media/PBR-White-Paper-Knowledge-Architecture-1.0.png) 27 | 28 | 29 |
30 | 31 | 32 | 33 | # 常见材质F0参考速查图表PDF下载 34 | 35 | - **常见材质F0参考速查图表PDF: [【下载地址】](https://github.com/QianMo/PBR-White-Paper/raw/master/bonus/%5BPBR-White-Paper%5D%20PBR-Material-F0-Quick-Reference-Chart.pdf)** 36 | 37 | ![](bonus/PBR-Material-F0-Quick-Reference-Chart.png) 38 | 39 |
40 | 41 | # 【第二章】PBR核心理论与渲染光学原理知识架构图 42 | - **[PBR核心理论与渲染光学原理知识架构] 高清大图: 43 | [【下载地址】](https://github.com/QianMo/PBR-White-Paper/raw/master/media/2-PBR-Core-Theory-and-Rendering-Principle-Knowledge-Architecture.png)** 44 | 45 | ![](media/2-PBR-Core-Theory-and-Rendering-Principle-Knowledge-Architecture.png) 46 | 47 | # 【第三章】迪士尼原则的BRDF与BSDF总结架构图 48 | - **[迪士尼原则的BRDF与BSDF总结知识架构图] 高清大图: 49 | [【下载地址】](https://raw.githubusercontent.com/QianMo/PBR-White-Paper/master/media/3-PBR-Disney-Principled-BRDF-BSDF-Knowledge-Architecture.png)** 50 | 51 | ![](media/3-PBR-Disney-Principled-BRDF-BSDF-Knowledge-Architecture.png) 52 | 53 | 54 | # 【第四章】法线分布函数相关总结架构图 55 | - **[法线分布函数相关总结架构图知识架构图] 高清大图: 56 | [【下载地址】](https://raw.githubusercontent.com/QianMo/PBR-White-Paper/master/media/4-PBR-The-NDF.png)** 57 | 58 | ![](media/4-PBR-The-NDF.png) 59 | 60 | # 【第五章】几何函数相关总结架构图 61 | - **[几何函数相关总结架构图知识架构图] 高清大图: 62 | [【下载地址】](https://raw.githubusercontent.com/QianMo/PBR-White-Paper/master/media/5-PBR-The-Geometry-Function.png)** 63 | 64 | ![](media/5-PBR-The-Geometry-Function.png) 65 | 66 | -------------------------------------------------------------------------------- /bonus/PBR-Material-F0-Quick-Reference-Chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/bonus/PBR-Material-F0-Quick-Reference-Chart.png -------------------------------------------------------------------------------- /bonus/[PBR-White-Paper] PBR-Material-F0-Quick-Reference-Chart.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/bonus/[PBR-White-Paper] PBR-Material-F0-Quick-Reference-Chart.pdf -------------------------------------------------------------------------------- /content/part 1/README.md: -------------------------------------------------------------------------------- 1 | ![](media/f8cec1e4db969871187f07604782a92e.jpg) 2 | 3 | # 【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览 4 | 5 | 本文的知乎专栏版本:https://zhuanlan.zhihu.com/p/53086060 6 | 7 | 先放出PBR知识体系的架构图: 8 | 9 | ![](media/5b9800151da9a819e4d21e38bcb4770f.png) 10 | 11 | 图很大,建议下载到本地放大查看。原图下载地址: 12 | 13 | 14 | 15 | 这张架构图是这个系列文章的内容框架,而且会随着内容的深入,不断更新。目前是1.0版。 16 | 17 |
18 | 19 | # 系列文章前言 20 | 21 | 22 | 基于物理的渲染(Physically Based Rendering , PBR)技术,自迪士尼在SIGGRAPH 2012上提出了著名的“迪士尼原则的BRDF(Disney Principled BRDF)”之后,由于其高度的易用性以及方便的工作流,已经被电影和游戏业界广泛使用。 23 | 24 | 个人了解和研究基于物理的渲染,也已经有一段时间了。 25 | 26 | 期间看了大量的资料,基本刷完了《SIGGRAPH Course: Physically Based Shading in 27 | Theory and Practice》系列2010年到2017年的几十篇talk和note(可惜这个course 28 | 2018年没有开设),这边是整理好的链接,包含了PPT和note的下载: 29 | 30 | - 【SIGGRAPH 2010 Course】Physically-Based Shading Models in Film and Game 31 | Production 32 | 33 | - 【SIGGRAPH 2012 Course】Practical Physically Based Shading in Film and Game 34 | Production 35 | 36 | - 【SIGGRAPH 2013 Course】Physically Based Shading in Theory and Practice 37 | 38 | 39 | - 【SIGGRAPH 2014 Course】Physically Based Shading in Theory and Practice 40 | 41 | 42 | - 【SIGGRAPH 2015 Course】Physically Based Shading in Theory and Practice 43 | 44 | 45 | - 【SIGGRAPH 2016 Course】Physically Based Shading in Theory and Practice 46 | 47 | 48 | - 【SIGGRAPH 2017 Course】Physically Based Shading in Theory and Practice 49 | 50 | 51 | 也看了一些相关的著作。目前了解到的PBR相关的著作,主要有三本: 52 | 53 | - 《Physically Based Rendering: From Theory to Implementation, Third 54 | Edition》这本书主要专注离线渲染,实时渲染只能用到里面很少的一部分。PBRT3现已开放Web版全文免费阅读,非常良心:。 55 | 56 | - 《Real-Time Rendering 4th》中PBR的相关章节,个人认为是非常不错的资料。 57 | 58 | - 《Physically Based Shader Development for 59 | Unity》,主要是PBR在Unity引擎中的使用,而且是以Surface 60 | Shader的方式,准入门级,比较浅。 61 | 62 | 期间也记过一些笔记,已经有不少的篇幅,但内容始终比较零散。所以有了萌生将这些笔记整理成更系统的系列文章的念头。 63 | 64 | 通过将零散的笔记进行总结,集结成文章,并发布出来,既对想更系统而深入地了解PBR和实时渲染相关技术的朋友们所有帮助,对我自己而言,在总结的过程中,也应该会收获颇丰。正如已经完结的【《Real-Time Rendering 3rd》 提炼总结】系列,以及还未完结的【GPU精粹】系列一样。 65 | 66 | 而目前,国内似乎确实缺少一个较为系统、全面、深入介绍基于物理的实时渲染的系列文章。 67 | 68 | 另外,类似之前【《Real-Time Rendering 3rd》提炼总结】的方式,在这个系列完结后,会进行整理,集结成册,成为一本电子书,暂定书名为《基于物理的渲染(PBR)白皮书》。所以此系列目前便直接命名为了【基于物理的渲染(PBR)白皮书】,便于整体认知的延续。 69 | 70 | 希望这个新的系列,能对大家有所帮助。 71 | 72 |
73 | 74 | # PBR知识体系概览 75 | 76 | 这篇文章接下来的部分,是这个系列文章PBR知识体系的精华浓缩版。涉及八个部分的内容: 77 | 78 | - 一、核心PBR理论 79 | 80 | - 二、渲染方程与BxDF 81 | 82 | - 三、迪士尼原则的BxDF(Disney Principled BxDF) 83 | 84 | - 四、漫反射BRDF模型(Diffuse BRDF) 85 | 86 | - 五、镜面反射BRDF模型(Specular BRDF) 87 | 88 | - 六、基于物理的环境光照(Physically Based Environment Lighting ) 89 | 90 | - 七、离线渲染相关(Offline Rendering Related) 91 | 92 | - 八、进阶渲染主题(Advanced Rendering Topics) 93 | 94 | 通过接下来的概览,希望能在后续的具体章节展开前,让大家对PBR的整体知识体系,有一个全面的认知,所谓的大局观的建立。 95 | 96 |
97 | 98 | # 一、PBR核心理论与渲染原理 99 | 100 | PBR核心知识体系的第一部分自然是PBR的核心理论以及相关的渲染原理。比较老生常谈,但作为基础理论,是入门级知识,还是需要仔细交代。 101 | 102 | ![](media/92a417475714f76c07399a2f62c2ec52.png) 103 | 104 | 基于物理的渲染(Physically Based 105 | Rendering,PBR)是指使用基于物理原理和微平面理论建模的着色/光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 106 | 107 | ![](media/a18e6e86e8ab561037718d63ae71cfa6.png) 108 | 109 | 以下是对PBR基础理念的概括: 110 | 111 | - **微平面理论(Microfacet Theory)**。微平面理论是将物体表面建模成做无数微观尺度上有随机朝向的理想镜面反射的小平面(microfacet)的理论。在实际的PBR 112 | 工作流中,这种物体表面的不规则性用粗糙度贴图或者高光度贴图来表示。 113 | 114 | - **能量守恒 (Energy Conservation)**。出射光线的能量永远不能超过入射光线的能量。随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。 115 | 116 | - **菲涅尔反射(Fresnel Reflectance)**。光线以不同角度入射会有不同的反射率。相同的入射角度,不同的物质也会有不同的反射率。万物皆有菲涅尔反射。F0是即0度角入射的菲涅尔反射值。大多数非金属的F0范围是0.02\~0.04,大多数金属的F0范围是0.7\~1.0。 117 | 118 | - **线性空间(Linear Space)**。光照计算必须在线性空间完成,shader 中输入的gamma空间的贴图比如漫反射贴图需要被转成线性空间,在具体操作时需要根据不同引擎和渲染器的不同做不同的操作。而描述物体表面属性的贴图如粗糙度,高光贴图,金属贴图等必须保证是线性空间。 119 | 120 | - **色调映射(Tone Mapping)**。也称色调复制(tone reproduction),是将宽范围的照明级别拟合到屏幕有限色域内的过程。因为基于HDR渲染出来的亮度值会超过显示器能够显示最大亮度,所以需要使用色调映射,将光照结果从HDR转换为显示器能够正常显示的LDR。 121 | 122 | - **物质的光学特性(Substance Optical Properties)** 。现实世界中有不同类型的物质可分为三大类:绝缘体(Insulators),半导体(semi-conductors)和导体(conductors)。在渲染和游戏领域,我们一般只对其中的两个感兴趣:导体(金属)和绝缘体(电解质,非金属)。其中非金属具有单色/灰色镜面反射颜色。而金属具有彩色的镜面反射颜色。即非金属的F0是一个float。而金属的F0是一个float3,如下图。 123 | 124 | ![](media/c21268b086035b8ff1a211d66d40f408.png) 125 | 126 | 图 金属和非金属材质的F0范围 127 | 128 | 除了PBR的基础理论,光与非光学平坦表面的交互对理解微平面理论(Microfacet 129 | Theory)至关重要。下面进行一些说明。 130 | 131 |
132 | 133 | ## 1.1 光与非光学平坦表面的交互原理 134 | 135 | 光在与非光学平坦表面(Non-Optically-Flat 136 | Surfaces)的交互时,非光学平坦表面表现得像一个微小的光学平面表面的大集合。表面上的每个点都会以略微不同的方向对入射光反射,而最终的表面外观是许多具有不同表面取向的点的聚合结果。 137 | 138 | ![](media/e8d17495bbb483606ae1e6e6afa38b35.png) 139 | 140 | 图:来自非光学平坦表面的可见光反射是来自具有不同方向的许多表面点的反射的总体结果 141 | 142 | 在微观尺度上,表面越粗糙,反射越模糊,因为表面取向与整个宏观表面取向的偏离更强。 143 | 144 | ![](media/19b7b473c5258ca21d9bf3ee9d115076.png) 145 | 146 | 图 图片顶部所示的表面,表面相对光滑; 147 | 表面取向仅略有变化,导致反射光方向的微小变化,从而产生更清晰的反射。 148 | 图片底部所示的的表面较粗糙; 149 | 表面上的不同点具有广泛变化的方向取向,导致反射光方向的高度变化,并因此导致模糊的反射。 150 | 注意,两个表面在肉眼可见尺度下看起来都是光滑的,粗糙度差异仅在微观尺度上。 151 | 152 | 出于着色的目的,我们通常会去用统计方法处理这种微观几何现象,并将表面视为在每个点处在多个方向上反射(和折射)光。 153 | 154 | ![](media/264ef1cae566b55219f2957090803eee.png) 155 | 156 | 图 从宏观上看,非光学平面可以被视为在多个方向上反射(和折射)光 157 | 158 | 从表面反射出的光的行为很好理解,那么,从表面折射的光会发生什么变化? 159 | 这取决于对象本身的特性: 160 | 161 | - 对于金属,折射光会立刻被吸收 - 能量被自由电子立即吸收。 162 | 163 | - 对于非金属(也称为电介质或绝缘体),一旦光在其内部折射,就表现为常规的参与介质,表现出吸收和散射两种行为。 164 | 165 | ![](media/babc8a53fde56ce9e03ec6e98e95e76b.png) 166 | 167 | 图 在金属中,所有折射的光能立即被自由电子吸收; 168 | 169 | ![](media/f33d80daaf5e1f38eb754dae5c516a50.png) 170 | 171 | 图 172 | 在非金属中,折射的光会进行散射,直到从表面重新射出,而这通常会在经过部分吸收之后 173 | 174 |
175 | 176 | ## 1.2 漫反射和次表面散射本质相同 177 | 178 | 另外,漫反射和次表面散射其实是相同物理现象,本质都是折射光的次表面散射的结果。唯一的区别是相对于观察尺度的散射距离。散射距离相较于像素来说微不足道,次表面散射便可以近似为漫反射。也就是说,光的折射现象,建模为漫反射还是次表面散射,取决于观察的尺度,如下图。 179 | 180 | ![](media/3c41bf5fab9d7a49351f0ba2f6561ded.png) 181 | 182 | 图 在左上角,像素(带有红色边框的绿色圆形)大于光线离开表面之前所经过的距离。 183 | 在这种情况下,可以假设出射光从入口点(右上)射出,可以当做漫反射,用局部着色模型处理。 184 | 在底部,像素小于散射距离; 185 | 如果需要更真实的着色效果,则不能忽略这些距离的存在,需当做次表面散射现象进行处理。 186 | 187 |
188 | 189 | ## 1.3 PBR的范畴(Scope of PBR) 190 | 191 | 寒霜(Frostbite)引擎在SIGGRAPH 2014的分享《Moving Frostbite to 192 | PBR》中提出,基于物理的渲染的范畴,由三部分组成: 193 | 194 | - 基于物理的材质(Material) 195 | 196 | - 基于物理的光照(Lighting) 197 | 198 | - 基于物理适配的摄像机(Camera) 199 | 200 | ![](media/9e2bf14832ca069f3e0b2fb919bd6041.png) 201 | 202 | 完整的这三者,才是真正完整的基于物理的渲染系统。而很多同学一提到PBR,就说PBR就是镜面反射采用微平面Cook-Torrance模型,其实是不太严谨的。 203 | 204 | 205 |
206 | 207 | 208 | # 二、渲染方程与BxDF 209 | 210 | 211 | PBR核心知识体系的第二部分是渲染方程与BxDF。渲染方程作为渲染领域中的重要理论,将BxDF代入渲染方程是求解渲染问题的一般方法。 212 | 213 | ![](media/104ed41592ecd970652b25a6ee7d7979.png) 214 | 215 |
216 | 217 | ## 2.1 渲染方程与反射方程 218 | 219 | 渲染方程(The Rendering 220 | Equation)作为渲染领域中的重要理论,其描述了光能在场景中的流动,是渲染中不可感知方面的最抽象的正式表示。根据光学的物理学原理,渲染方程在理论上给出了一个完美的结果,而各种各样的渲染技术,只是这个理想结果的一个近似。 221 | 222 | 渲染方程的物理基础是能量守恒定律。在一个特定的位置和方向,出射光 Lo 是自发光 Le 223 | 与反射光线之和,反射光线本身是各个方向的入射光 Li 之和乘以表面反射率及入射角。 224 | 225 | 这个方程经过交叉点将出射光线与入射光线联系在一起,它代表了场景中全部的'光线传输。所有更加完善的算法都可以看作是这个方程的特殊形式的解。 226 | 227 | 某一点p的渲染方程,可以表示为: 228 | 229 | ![](media/2bd7dd943a4049058e2bb9252ce35aab.png) 230 | 231 | 其中: 232 | 233 | - Lo是p点的出射光亮度。 234 | 235 | - Le是p点发出的光亮度。 236 | 237 | - fr是p点入射方向到出射方向光的反射比例,即BxDF,一般为BRDF。 238 | 239 | - Li是p点入射光亮度。 240 | 241 | - ![](media/41c027f83e91e911e6bcc195d14d1a82.png)是入射角带来的入射光衰减 242 | 243 | - ![](media/85995c017ecf1b866b10d6845f276067.png)是入射方向半球的积分(可以理解为无穷小的累加和)。 244 | 245 | ![](media/0f3c00735859275a4fa201b4e4561037.png) 246 | 247 | 而在实时渲染中,我们常用的反射方程(The Reflectance Equation),则是渲染方程的简化的版本,或者说是一个特例: 248 | 249 | ![](media/15ff7d98da115cda7a62350ab82f1299.png) 250 | 251 | 252 | 其中: 253 | 254 | - Lo是p点的出射光亮度。 255 | 256 | - fr是p点入射方向到出射方向光的反射比例,即BxDF,一般为BRDF。 257 | 258 | - Li是p点入射光亮度。 259 | 260 | - ![](media/41c027f83e91e911e6bcc195d14d1a82.png)是入射角带来的入射光衰减 261 | 262 | - ![](media/85995c017ecf1b866b10d6845f276067.png)是入射方向半球的积分(可以理解为无穷小的累加和)。 263 | 264 |
265 | 266 | ## 2.2 BxDF 267 | 268 | BxDF一般而言是对BRDF、BTDF、BSDF、BSSRDF等几种双向分布函数的一个统一的表示。 269 | 270 | 其中,BSDF可以看做BRDF和BTDF更一般的形式,而且BSDF = BRDF + BTDF。 271 | 272 | 而BSSRDF和BRDF的不同之处在于,BSSRDF可以指定不同的光线入射位置和出射位置。 273 | 274 | 在上述这些BxDF中,BRDF最为简单,也最为常用。因为游戏和电影中的大多数物体都是不透明的,用BRDF就完全足够。而BSDF、BTDF、BSSRDF往往更多用于半透明材质和次表面散射材质。 275 | 276 | ![](media/8c60f94b8b6f430fc5dcb41068770454.png) 277 | 278 | 图 BSDF:BRDF + BTDF 279 | 280 | 我们时常讨论的PBR中的BxDF,一般都为BRDF,对于进阶的一些材质的渲染,才会讨论BSDF等其他三种BxDF。 281 | 282 | 另外,BxDF即上文所示渲染方程以及反射方程中的fr项。 283 | 284 | 2.3 BRDF的分类 285 | -------------- 286 | 287 | ![](media/c7e25bc74fdc95edc1bfc0ce45d7945a.png) 288 | 289 | 图 BRDF的分类,来自[Montes R, Ureña C. An overview of BRDF models[J]. 2012] 290 | 291 | 292 |
293 | 294 | # 三、迪士尼原则的BxDF(Disney Principled BxDF) 295 | 296 | 297 | PBR核心知识体系的第三部分是迪士尼原则的BxDF。迪士尼动画工作室在SIGGRAPH 2012上著名的talk《Physically-based shading at Disney》中提出了迪士尼原则的BRDF(Disney Principled BRDF),奠定了后续游戏行业和电影行业PBR的方向和标准。了解Disney Principled BxDF,是深入理解PBR的重要一环。 298 | 299 | ![](media/3bd5aa554bfd06b27c66abd6a7a52a50.png) 300 | 301 | 基于物理的渲染,其实早在20世纪就已经在图形学业界有了一些讨论,2010年在SIGGRAPH上就已经有公开讨论的Course 302 | 《SIGGRAPH 2010 Course: Physically-Based Shading Models in Film and Game 303 | Production》,而直到2012~2013年,才正式进入大众的视野,渐渐被电影和游戏业界广泛使用。 304 | 305 | 迪士尼动画工作室则是这次PBR革命的重要推动者。迪士尼的Brent Burley于SIGGRAPH 306 | 2012上进行了著名的talk《Physically-based shading at 307 | Disney》,提出了迪士尼原则的BRDF(Disney Principled BRDF), 308 | 由于其高度的通用性,将材质复杂的物理属性,用非常直观的少量变量表达了出来(如金属度metallic和粗糙度roughness),在电影业界和游戏业界引起了不小的轰动。从此,基于物理的渲染正式进入大众的视野。 309 | 310 | ![](media/4747c17311dca6610243229defd4241f.png) 311 | 312 | 图 SIGGRAPH 2012《Physically-based shading at Disney》 313 | 314 | 在2012年受到Disney的启发后,以下是主流游戏引擎从传统渲染转移到基于物理的渲染时间节点: 315 | 316 | - 【SIGGRAPH 2013】 UE4 :《Real shading in unreal engine 4》 317 | 318 | - 【SIGGRAPH 2014】 Frostbite(寒霜): 《Moving Frostbite to PBR》 319 | 320 | - 【GDC 2014】 Unity:Physically Based Shading in Unity 321 | 322 | 323 |
324 | 325 | ## 3.1 迪士尼原则的BRDF(Disney Principled BRDF) 326 | 327 |
328 | 329 | 330 | ### 3.1.1 Disney Principled BRDF核心理念 331 | 332 | 在2012年迪士尼原则的BRDF被提出之前,基于物理的渲染都需要大量复杂而不直观的参数,此时PBR的优势,并没有那么明显。 333 | 334 | 在2012年迪士尼提出,他们的**着色模型是艺术导向(Art Directable)的,而不一定要是完全物理正确(physically correct)** 的,并且对微平面BRDF的各项都进行了严谨的调查,并提出了清晰明确而简单的解决方案。 335 | 336 | 迪士尼的理念是开发一种“原则性”的易用模型,而不是严格的物理模型。正因为这种艺术导向的易用性,能让美术同学用非常直观的少量参数,以及非常标准化的工作流,就能快速实现涉及大量不同材质的真实感的渲染工作。而这对于传统的着色模型来说,是不可能完成的任务。 337 | 338 | 迪士尼原则的BRDF(Disney Principled BRDF)核心理念如下: 339 | 340 | 1. 应使用直观的参数,而不是物理类的晦涩参数。 341 | 342 | 2. 参数应尽可能少。 343 | 344 | 3. 参数在其合理范围内应该为0到1。 345 | 346 | 4. 允许参数在有意义时超出正常的合理范围。 347 | 348 | 5. 所有参数组合应尽可能健壮和合理。 349 | 350 | 以上五条原则,很好地保证了迪士尼原则的BRDF的易用性。 351 | 352 |
353 | 354 | ### 3.1.2 Disney Principled BRDF参数 355 | 356 | 以上述理念为基础,迪士尼动画工作室对每个参数的添加进行了把关,最终得到了一个颜色参数(baseColor)和下面描述的十个标量参数: 357 | 358 | - **baseColor(基础色)**:表面颜色,通常由纹理贴图提供。 359 | 360 | - **subsurface(次表面)**:使用次表面近似控制漫反射形状。 361 | 362 | - **metallic(金属度)**:金属(0 =电介质,1 363 | =金属)。这是两种不同模型之间的线性混合。金属模型没有漫反射成分,并且还具有等于基础色的着色入射镜面反射。 364 | 365 | - **specular(镜面反射强度)**:入射镜面反射量。用于取代折射率。 366 | 367 | - **specularTint(镜面反射颜色)**:对美术控制的让步,用于对基础色(base 368 | color)的入射镜面反射进行颜色控制。掠射镜面反射仍然是非彩色的。 369 | 370 | - **roughness(粗糙度)**:表面粗糙度,控制漫反射和镜面反射。 371 | 372 | - **anisotropic(各向异性强度)**:各向异性程度。用于控制镜面反射高光的纵横比。 373 | (0 =各向同性,1 =最大各向异性。) 374 | 375 | - **sheen(光泽度)**:一种额外的掠射分量(grazing component),主要用于布料。 376 | 377 | - **sheenTint(光泽颜色)**:对sheen(光泽度)的颜色控制。 378 | 379 | - **clearcoat(清漆强度)**:有特殊用途的第二个镜面波瓣(specular lobe)。 380 | 381 | - **clearcoatGloss(清漆光泽度)**:控制透明涂层光泽度,0 =“缎面(satin)”外观,1 382 | =“光泽(gloss)”外观。 383 | 384 | 每个参数的效果的渲染示例如下图所示。 385 | 386 | ![](media/f3b2624505b670b1243fdab515e98295.png) 387 | 388 | 图 Disney Principled BRDF。 每行的参数从0到1变化,其他参数保持不变 389 | 390 |
391 | 392 | ## 3.2 迪士尼原则的BSDF(Disney Principled BSDF) 393 | 394 | 395 | 随后的2015年,迪士尼动画工作室在Disney Principled BRDF的基础上进行了修订,提出了Disney Principled BSDF [Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering, 2015]。 396 | 397 | 以下是开源三维动画软件Blender实现的Disney Principled BSDF的图示: 398 | 399 | ![](media/e81277e4a9883842f68dadbce1692715.jpg) 400 | 图 Disney Principled BSDF 401 | 402 |
403 | 404 | # 四、漫反射BRDF模型(Diffuse BRDF) 405 | 406 | 407 | 为了求解渲染方程,需要分别求解Diffuse BRDF和Specular 408 | BRDF。所以PBR核心知识体系的第四部分是Diffuse BRDF。 409 | 410 | ![](media/4ecee15f93c7406a0ef72b8ea3121baf.png) 411 | 412 | Diffuse BRDF可以分为传统型和基于物理型两大类。其中,传统型主要是众所周知的Lambert。 413 | 414 | 而基于物理型,从1994年的Oren Nayar开始,这里一直统计到今年(2018年)。 415 | 416 | 其中较新的有GDC 2017上提出的适用于GGX+Smith的基于物理的漫反射模型(PBR diffuse for GGX+Smith),也包含了最近在SIGGRAPH2018上提出的,来自《使命召唤:二战》的多散射漫反射BRDF(MultiScattrering Diffuse 417 | BRDF): 418 | 419 | - Oren Nayar[1994] 420 | 421 | - Simplified Oren-Nayar [2012] 422 | 423 | - Disney Diffuse[2012] 424 | 425 | - Renormalized Disney Diffuse[2014] 426 | 427 | - Gotanda Diffuse [2014] 428 | 429 | - PBR diffuse for GGX+Smith [2017] 430 | 431 | - MultiScattrering Diffuse BRDF [2018] 432 | 433 |
434 | 435 | ## 五、镜面反射BRDF模型(Specular BRDF) 436 | 437 | PBR核心知识体系的第五部分是Specular BRDF。这也是基于物理的渲染领域中最活跃,最主要的部分。 438 | 439 | ![](media/720b0dd40607c2c0c836f4d8ab85a3ed.png) 440 | 441 | 上图加粗部分为目前业界较为主流的模型。 442 | 443 | 游戏业界目前最主流的基于物理的镜面反射BRDF模型是基于微平面理论(microfacet theory)的Microfacet Cook-Torrance BRDF。 444 | 445 | 而微平面理论(microfacet theory)源自将微观几何(microgeometry)建模为微平面(microfacets)的集合的思想,一般用于描述来自非光学平坦(non-optically flat)表面的表面反射。 446 | 447 | 微平面理论的基本假设是微观几何(microgeometry)的存在,微观几何的尺度小于观察尺度(例如着色分辨率),但大于可见光波长的尺度(因此应用几何光学和如衍射一样的波效应等可以忽略)。且微平面理论在2013年和以前时仅用于推导单反射(single-bounce)表面反射的表达式; 448 | 而随着领域的深入,最近几年也出现了使用microfacet理论对多次反弹表面反射的一些探讨。 449 | 450 | 由于假设微观几何尺度明显大于可见光波长,因此可以将每个表面点视为光学平坦的。 451 | 如上文所述,光学平坦表面将光线分成两个方向:反射和折射。 452 | 453 | 每个表面点将来自给定进入方向的光反射到单个出射方向,该方向取决于微观几何法线(microgeometry normal)m的方向。 在计算BRDF项时,指定光方向l和视图方向v。 454 | 这意味着所有表面点,只有那些恰好正确朝向可以将l反射到v的那些小平面可能有助于BRDF值(其他方向有正有负,积分之后,相互抵消)。 455 | 456 | 在下图中,我们可以看到这些“正确朝向”的表面点的表面法线m正好位于l和v之间的中间位置。l和v之间的矢量称为半矢量(half-vector)或半角矢量(half-angle vector); 我们将其表示为h。 457 | 458 | ![](media/96cfde9628680bc6d9b5934b5a804316.png) 459 | 460 | 图 仅m = h的表面点的朝向才会将光线l反射到视线v的方向,其他表面点对BRDF没有贡献。 461 | 462 | 并非所有m = h的表面点都会积极地对反射做出贡献;一些被l方向(阴影shadowing),v方向(掩蔽masking)或两者的其他表面区域阻挡。Microfacet理论假设所有被遮蔽的光(shadowed light)都从镜面反射项中消失;实际上,由于多次表面反射,其中一些最终将是可见的,但这在目前常见的微平面理论中一般并未去考虑,各种类型的光表面相互作用如下图所示。 463 | 464 | ![](media/74b23c3d9bd86c2c7da747ae5fc924b5.png) 465 | 466 | 图 在左侧,我们看到一些表面点从l的方向被遮挡,因此它们被遮挡并且不接收光(因此它们不能做出任何反射)。在中间,我们看到从视图方向v看不到一些表面点,因此当然不会看到从它们反射的任何光。在这两种情况下,这些表面点对BRDF没有贡献。实际上,虽然阴影区域没有从l接收任何直射光,但它们确实接收(并因此反射)从其他表面区域反射的光(如右图所示)。microfacet理论忽略了这些相互反射。 467 | 468 |
469 | 470 | 471 | ## 5.1 从物理现象到BRDF 472 | 473 | 474 | 利用这些假设(局部光学平坦表面,没有相互反射),可以很容易推导出一个被称为Microfacet 475 | Cook-Torrance BRDF的一般形式的Specular BRDF项。此Specular BRDF具有以下形式: 476 | 477 | ![](media/cf4c2d3b087e21e868366f8af8ba2e921.png) 478 | 479 | 其中: 480 | 481 | - **D(h)**:法线分布函数 (Normal Distribution 482 | Function),描述微面元法线分布的概率,即正确朝向的法线的浓度。即具有正确朝向,能够将来自l的光反射到v的表面点的相对于表面面积的浓度。 483 | 484 | - **F(l,h)**: 菲涅尔方程(Fresnel 485 | Equation),描述不同的表面角下表面所反射的光线所占的比率。 486 | 487 | - **G(l,v,h)**: 几何函数(Geometry Function):描述微平面自成阴影的属性,即m = 488 | h的未被遮蔽的表面点的百分比。 489 | 490 | - **分母 4(n·l)(n·v)** :校正因子(correctionfactor),作为微观几何的局部空间和整个宏观表面的局部空间之间变换的微平面量的校正。 491 | 492 | 关于Cook-Torrance BRDF,需要强调的两点注意事项: 493 | 494 | - 对于分母中的点积,仅仅避免负值是不够的 - 也必须避免零值。通常通过在常规的clamp或绝对值操作之后添加非常小的正值来完成。 495 | 496 | - Microfacet Cook-Torrance BRDF是实践中使用最广泛的模型,实际上也是人们可以想到的最简单的微平面模型。它仅对几何光学系统中的单层微表面上的单个散射进行建模,没有考虑多次散射,分层材质,以及衍射。Microfacet模型,实际上还有很长的路要走。 497 | 498 | 下面对Microfacet Cook-Torrance BRDF中的D、F、G项分别进行简要说明。 499 | 500 | 501 |
502 | 503 | ## 5.2 Specular D 504 | 505 | 506 | 法线分布函数(Normal Distribution Function, NDF)D的常见模型可以总结如下: 507 | 508 | - Beckmann[1963] 509 | 510 | - Blinn-Phong[1977] 511 | 512 | - GGX [2007] / Trowbridge-Reitz[1975] 513 | 514 | - Generalized-Trowbridge-Reitz(GTR) [2012] 515 | 516 | - Anisotropic Beckmann[2012] 517 | 518 | - Anisotropic GGX [2015] 519 | 520 | 其中,业界较为主流的法线分布函数是GGX(Trowbridge-Reitz),因为具有更好的高光长尾: 521 | 522 | ![](media/d5a14ad4b88d3da2ba3730bcad3c705d.png) 523 | 524 | 525 | ![](media/d9b94cd41cd6cea5cfe6c13c93784b69.png) 526 | 527 | 另外,需要强调一点。**Normal Distribution 528 | Function正确的翻译是法线分布函数,而不是正态分布函数。** google翻译等翻译软件会将Normal Distribution Function翻译成正态分布函数,而不少中文资料就跟着翻译成了正态分布函数,这是错误的。其实,一些参考文献会使用术语“法线分布(distribution 529 | of normals)”来避免与高斯正态分布(Gaussian normal distribution)混淆。 530 | 531 |
532 | 533 | ## 5.3 Specular F 534 | 535 | 536 | 对于菲涅尔(Fresnel)项,业界方案一般都采用Schlick的Fresnel近似,因为计算成本低廉,而且精度足够: 537 | 538 | ![](media/8c145484bc6c975b4fbbfe7b27e8df45.png) 539 | 540 | 541 | 菲涅尔项的常见模型可以总结如下: 542 | 543 | - Cook-Torrance [1982] 544 | 545 | - Schlick [1994] 546 | 547 | - Gotanta [2014] 548 | 549 |
550 | 551 | ## 5.4 Specular G 552 | 553 | 554 | 几何项G的常见模型可以总结如下: 555 | 556 | - Smith [1967] 557 | 558 | - Cook-Torrance [1982] 559 | 560 | - Neumann [1999] 561 | 562 | - Kelemen [2001] 563 | 564 | - Implicit [2013] 565 | 566 | 另外,Eric Heitz在[Heitz14]中展示了Smith几何阴影函数是正确且更准确的G项,并将其拓展为Smith联合遮蔽阴影函数(Smith Joint Masking-Shadowing Function),该函数具有四种形式: 567 | 568 | - 分离遮蔽阴影型(Separable Masking and Shadowing) 569 | 570 | - 高度相关掩蔽阴影型(Height-Correlated Masking and Shadowing) 571 | 572 | - 方向相关掩蔽阴影型(Direction-Correlated Masking and Shadowing) 573 | 574 | - 高度-方向相关掩蔽阴影型(Height-Direction-Correlated Masking and Shadowing) 575 | 576 | 目前较为常用的是其中最为简单的形式,分离遮蔽阴影(Separable Masking and Shadowing Function)。 577 | 578 | 该形式将几何项G分为两个独立的部分:光线方向(light)和视线方向(view),并对两者用相同的分布函数来描述。根据这种思想,结合法线分布函数(NDF)与Smith几何阴影函数,于是有了以下新的Smith几何项: 579 | 580 | - Smith-GGX 581 | 582 | - Smith-Beckmann 583 | 584 | - Smith-Schlick 585 | 586 | - Schlick-Beckmann 587 | 588 | - Schlick-GGX 589 | 590 | 其中UE4的方案是上面列举中的“Schlick-GGX”,即基于Schlick近似,将k映射为k=a/2,去匹配GGX Smith方程: 591 | 592 | ![](media/1f4a62024744adeecaee447a5779e0a3.png) 593 | 594 | ![](media/dc5ac029d2ea421e140124755e00b12a.png) 595 | 596 | ![](media/ac5b6abf417748f5193aae92472b174a.png) 597 | 598 | ![](media/982e3672c32998079331a1186dc61e77.png) 599 | 600 | 601 |
602 | 603 | 604 | # 六、基于物理的环境光照(Physically Based Environment Lighting ) 605 | 606 | 607 | 有了直接光部分,我们也需要环境光。所以PBR核心知识体系的第六部分是基于物理的环境光照,一般大家也直接默认环境光照的技术方案是基于图像的光照(Image Based Lighting, IBL)。这也是真正让基于物理的渲染画质提升的主要贡献者。 608 | 609 | ![](media/172b5ad422241aa48bee1581a7996d3f.png) 610 | 611 | 漫反射环境光照部分一般采用传统IBL中辉度环境映射(Irradiance Environment Mapping)技术,并不是基于物理的特有方案,这里暂不讨论。 612 | 613 | 而基于物理的镜面反射(Specular)环境光照,业界中一般会采用基于图像的光照(IBL)的方案。要将基于物理的BRDF模型与基于图像的光照(IBL)一起使用,需要求解光亮度积分(Radiance Integral),而求解光亮度积分通常会使用重要性采样(Importance Sample)。 614 | 615 | 重要性采样(Importance Sample)即通过现有的一些已知条件(分布函数),想办法集中于被积函数分布可能性较高的区域(重要的区域)进行采样,进而可高效地计算准确的估算结果的的一种策略。 616 | 617 |
618 | 619 | ## 6.1 分解求和近似(Split Sum Approximation) 620 | 621 | 622 | 基于重要性采样的思路,将蒙特卡洛积分公式代入渲染方程可得: 623 | 624 | ![](media/861df89ef290547a3835ec267275d7f8.png) 625 | 626 | 上式的直接求解较为复杂,进行完全的实时渲染不太现实。 627 | 628 | 目前游戏业界的主流做法是,是基于分解求和近似(Split Sum Approximation)的思路,将上式中的![](media/aebea189abd3731e95d48e7d8bf5e795.png)拆分为光亮度的均值![](media/be92e9284cff9234a7b4892856f99775.png)和环境BRDF![](media/7841dfa7d76eb7e831b0d2f5bc2e3bd6.png)两项。即: 629 | 630 | ![](media/f1ee93037fd153c8168c452b3005e0e6.png) 631 | 632 | 完成拆分后,分别对两项进行离线预计算,去匹配离线渲染参考值的渲染结果。 633 | 634 | 而在实时渲染中,分别计算分解求和近似(Split Sum Approximation)方案中几乎已经预计算好的两项,再进行组合,作为实时的IBL物理环境光照部分的渲染结果。下面分别对两项进行简单概括。 635 | 636 |
637 | 638 | 639 | ## 6.2 第一项 预过滤环境贴图(Pre-filtered environment map) 640 | 641 | 642 | 第一项为![](media/be92e9284cff9234a7b4892856f99775.png),可以理解为对光亮度![](media/fbb26eee8d649077b3bc0129288b7e34.png)求均值。经过**n**= **v**= **r**的假设,仅取决于表面粗糙度(surface roughness)和反射矢量(reflection vector)。这一项,业界的做法比较统一(包括UE4和COD:Black Ops 2等),采用的方案主要借助预过滤环境贴图,用多级模糊的mipmap来存储模糊的环境高光: 643 | 644 | ![](media/f8c1171eebd942ff19535c514262ae4d.png) 645 | 646 | 也就是说,第一项直接使用cubemap 的mip级别采样输入即可。 647 | 648 |
649 | 650 | ## 6.3 第二项 环境BRDF (Environment BRDF) 651 | 652 | 653 | 第二项为![](media/7841dfa7d76eb7e831b0d2f5bc2e3bd6.png),即镜面反射项的半球方向反射率(hemispherical-directional reflectance),可以理解为环境BRDF (Environment BRDF)。其取决于仰角θ,粗糙度α和菲涅耳项F。 通常使用Schlick近似来近似F,其仅在单个值F0上参数化,从而使Rspec成为三个参数(仰角θ(NdotV),粗糙度α、F0)的函数。 654 | 655 | 这一项的主要流派有两个,UE4的2D LUT,以及COD:OP2的解析拟合。 656 | 657 |
658 | 659 | ### 6.3.1 流派1:2D LUT 660 | 661 | UE4在[[Real Shading in Unreal Engine 4, 2013]]中提出,第二个求和项 ,使用Schlick近似后, F0可以从积分中分出来: 662 | 663 | ![](media/46.png) 664 | 665 | 上式留下了两个输入(Roughness 和 cos θv)和两个输出(缩放和向F0的偏差(a scale and bias to F0)),即把上述方程看成是F0 * Scale + Offset的形式。 666 | 我们预先计算此函数的结果并将其存储在2D查找纹理(LUT,look-up texture)中。 667 | 668 | ![](media/bea70c7262222d1e1fa2ca2334b5a92d.png) 669 | 670 | 这张红绿色的贴图,输入roughness、cosθ,输出环境BRDF镜面反射的强度。是关于roughness、cosθ与环境BRDF镜面反射强度的固有映射关系。可以离线预计算。 671 | 672 | 具体的取出方式为:![](media/9ef1db813c87f1f491f7c9dda39c031c.png) 673 | 674 | 675 | 即UE4是通过把Fresnel公式的F0提出来,组成F0 * Scale +Offset的方式,再将Scale和Offset的索引存到一张2D LUT上。靠roughness和 676 | NdotV进行查找。 677 | 678 |
679 | 680 | ### 6.3.2 流派2:解析拟合 681 | 682 | COD:Black Ops 2的做法,是通过数学工具Mathematica(http://www.wolfram.com/mathematica/) 中的数值积分拟合出曲线,即将UE4离线计算的这张2D 683 | LUT用如下函数进行了拟合: 684 | 685 | float3 EnvironmentBRDF( float g, float NoV, float3 rf0 ) 686 | { 687 | float4 t = float4( 1/0.96, 0.475, (0.0275 - 0.25 * 0.04)/0.96, 0.25 ); 688 | t *= float4( g, g, g, g ); 689 | t += float4( 0, 0, (0.015 - 0.75 * 0.04)/0.96, 0.75 ); 690 | float a0 = t.x * min( t.y, exp2( -9.28 * NoV ) ) + t.z; float a1 = t.w; 691 | return saturate( a0 + rf0 * ( a1 - a0 ) ); 692 | } 693 | 694 | 需要注意的是,上面的方程是基于Blinn-Phong分布的结果,https://knarkowicz.wordpress.com/2014/12/27/analytical-dfg-term-for-ibl/ 一文中提出了基于GGX分布的EnvironmentBRDF解析版本: 695 | 696 | float3 EnvDFGLazarov( float3 specularColor, float gloss, float ndotv ) 697 | { 698 | float4 p0 = float4( 0.5745, 1.548, -0.02397, 1.301 ); 699 | float4 p1 = float4( 0.5753, -0.2511, -0.02066, 0.4755 ); 700 | float4 t = gloss * p0 + p1; 701 | float bias = saturate( t.x * min( t.y, exp2( -7.672 * ndotv ) ) + t.z ); 702 | float delta = saturate( t.w ); 703 | float scale = delta - bias; 704 | bias *= saturate( 50.0 * specularColor.y ); 705 | return specularColor * scale + bias; 706 | } 707 | 708 | 上式中的specularColor即F0。 709 | 710 | EnvironmentBRDF函数的输入参数分别为光泽度gloss,NdotV,F0。和UE4的做法有异曲同工之妙,但COD:Black Ops 2的做法不需要额外的贴图采样,这在进行移动端优化时,是不错的选择。 711 | 712 |
713 | 714 | ### 6.3.3 其他流派 715 | 716 | Gotanda在SIGGRAPH 2010提出使用3D LUT[Practical Implementation of Physically-Based Shading Models at tri-Ace,2010]来存放环境BRDF,之后Drobot将其优化为2D LUT[Lighting Killzone:Shadow Fall , 2013]。 717 | 718 | 719 |
720 | 721 | # 七、离线渲染相关(Offline Rendering Related) 722 | 723 | 724 | 虽然我们目前主要关注的是实时渲染(实时光栅图形学相关,暂时不关注实时光线追踪)领域,但很多时候,实时渲染也需要涉及到预计算,尤其是IBL相关的预计算,所以或多或少会用到离线渲染相关的知识。所以PBR核心知识体系的第七部分是离线渲染相关的主题。 725 | 726 | ![](media/bd7390108d6233ec9b7f175cb88a1a43.png) 727 | 728 | 以下是与实时渲染结合相对紧密的离线渲染相关的核心主题以及概括总结(主要是统计学与概率相关): 729 | 730 | - **重要性采样( Importance Sample)**:蒙特卡洛积分的一种采样策略。思路是基于分布函数,尽量对被积函数分布可能性较高的区域进行采样。 731 | 732 | - **多重要性采样(Muti Importance Sampling, MIS)** :估算某一积分时,基于多个分布函数获取采样,并期望至少某一分布与被积函数形状适配。即根据各种技术对采样进行加权计算,进而消除源自被积函数值与采样密度不匹配造成的较大反差。 733 | 734 | - **大数定律(Law of Large Numbers)** :在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。即偶然中包含着某种必然。 735 | 736 | - **蒙特卡洛方法(Monte Carlo Methods)** :一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。 737 | 738 | - **低偏差序列(Low-discrepancy sequence)** :一种确定生成的超均匀分布列,也称为拟随机列、次随机列,常见低偏差序列有Hammersley,Halton等。 739 | 740 | - **拟蒙特卡罗方法(Quasi-Monte Carlo Method)** :使用低差异列来进行数值积分和研究其它一些数值问题的方法。 741 | 742 | - 等 743 | 744 | 与实时渲染结合相对紧密的离线渲染相关的内容,后续文章会以专题的形式详细探讨。 745 | 746 | 747 |
748 | 749 | 750 | # 八、进阶渲染主题(Advanced Rendering Topics) 751 | 752 | 前面的核心PBR主题都讨论完成后,会有更多进阶的内容浮出水面,他们共同组成了PBR核心知识体系的第八部分。 753 | 754 | ![](media/fb76f44f2b28dffbec7780fd07a552c6.png) 755 | 756 | 以下是一个列举: 757 | 758 | - 进阶着色模型(Advanced Shading Model) 759 | 760 | - 布料BRDF(Cloth BRDF) 761 | 762 | - 清漆着色模型(Clear Coat Model) 763 | 764 | - 次表面散射BRDF模型(Subsurface Scattering BRDF Model) 765 | 766 | - 进阶材质功能 767 | 768 | - 全能材质(Uber Shader) 769 | 770 | - 分层材质(Layered Materials) 771 | 772 | - 分层全能材质(Layered Uber Shader) 773 | 774 | - 混合材质(Blending Materials) 775 | 776 | - 过滤材质(Filtering Materials) 777 | 778 | - 进阶理论 779 | 780 | - 物理光学(Physics of Light) 781 | 782 | - 波动光学(Wave Optics) 783 | 784 | - 微观几何(Microgeometry) 785 | 786 | - 基于物理的摄像机( Physical Based Camera) 787 | 788 | - 基于物理的光源(Physical Based Light) 789 | 790 | - 白炉测试(White Furnace Test) 791 | 792 | - 进阶BxDF 793 | 794 | - BSDF 795 | 796 | - BTDF 797 | 798 | - BSSRDF 799 | 800 | - 进阶材质渲染 801 | 802 | - 皮肤渲染(Skin Rendering) 803 | 804 | - 布料渲染(Cloth Rendering) 805 | 806 | - 半透明表面渲染(Translucent Surfaces Rendering) 807 | 808 | - 头发渲染(Hair Rendering) 809 | 810 | - 毛发渲染(Fur Rendering) 811 | 812 | - 车漆渲染(Car Paint Rendering) 813 | 814 | - 水体渲染(Water Rendering) 815 | 816 | - 湿润表面渲染(Wet Surface Rendering) 817 | 818 | - 天空与大气渲染(Sky and Atmosphere Rendering) 819 | 820 | - 薄表面材质渲染(Thin Surface Rendering) 821 | 822 | - 体积渲染(Volumetric Rendering) 823 | 824 | - 等 825 | 826 | 以上这些内容,作为进阶的主题,随便选取其中的一个展开来讨论,几乎都会有不小的篇幅。目前的计划是,是在前七章基础PBR内容讨论完成后,再在这些主题中选取新的内容,进行更深入的讨论。 827 | 828 |
829 | 830 | 831 | # 结语 832 | 833 | 834 | OK,这篇文章作为这个系列的开篇,是对PBR知识体系的一个概览,相当于开了一个头,给全新的篇章描绘出了大致的轮廓。 835 | 836 | 后续的文章,会对PBR知识体系的各个章节,进行更系统深入的论述。 837 | 838 | 敬请期待。 839 | 840 | ![](media/723cefbe5630048b318ba9e244d52ded.jpg) 841 | 842 |
843 | 844 | 845 | # Reference 846 | 847 | 848 | [1] Burley B, Studios W D A. Physically-based shading at disney[C]//ACM 849 | SIGGRAPH. 2012 850 | 851 | [2] Montes R, Ureña C. An overview of BRDF models[J]. 2012. 852 | 853 | [3] 854 | 855 | [4] Karis B, Games E. Real shading in unreal engine 4[J]. Proc. Physically Based 856 | Shading Theory Practice, 2013 857 | 858 | [5] Lazarov D. Getting more physical in call of duty: Black ops ii[J]. SIGGRAPH 859 | Course Notes: Physically Based Shading in Theory and Practice, 2013. 860 | 861 | [6] Hoffman N. Background: physics and math of shading[J]. Physically Based 862 | Shading in Theory and Practice, 2013 863 | 864 | [7] Neubelt D, Pettineo M, Studios R A D. Crafting a Next-Gen Material Pipeline 865 | for The Order: 1886[J]. Physically Based Shading in Theory and Practice, 866 | SIGGRAPH, 2013. 867 | 868 | [8] Pharr M, Jakob W, Humphreys G. Physically based rendering: From theory to 869 | implementation[M]. Morgan Kaufmann, 2016. 870 | 871 | [9] Akenine-Moller T, Haines E, Hoffman N. Real-time rendering[M]. AK Peters/CRC 872 | Press, 2018. 873 | 874 | [10] Heitz E. Understanding the masking-shadowing function in microfacet-based 875 | BRDFs[J]. Journal of Computer Graphics Techniques, 2014, 3(2): 32-91. 876 | 877 | [11] Gotanda Y. Designing Reflectance Models for New Consoles[J], 2014 878 | 879 | [12] Lagarde S, De Rousiers C. Moving Frostbite to PBR[J]. Proc. Physically 880 | Based Shading Theory Practice, 2014. 881 | 882 | [13] Langlands A. Physically based shader design in arnold[J]. Physically Based 883 | Shading in Theory and Practice-SIGGRAPH Courses, 2014. 884 | 885 | [14] Burley B. Extending the Disney BRDF to a BSDF with integrated subsurface 886 | scattering[J]. Physically Based Shading in Theory and Practice'SIGGRAPH Course, 887 | 2015. 888 | 889 | [15] Drobot M. Practical Multilayered Materials in Call of Duty: Infinite 890 | Warfare[J]. Physically Based Shading Theory Practice-SIGGRAPH Courses, 2017. 891 | 892 | [16] Oren M, Nayar S K. Generalization of Lambert's reflectance model[C],1994 893 | 894 | [17] Gotanda Y. Beyond a simple physically based Blinn-Phong model in 895 | real-time[M]//SIGGRAPH 2012 course. 2012. 896 | 897 | [18] Gotanda Y. Practical Implementation of Physically-Based Shading Models at 898 | tri-Ace[J]. part of “Physically Based Shading Models in Film and Game 899 | Production,” SIGGRAPH, 2010. 900 | 901 | [19] Hammon Jr E. PBR Diffuse Lighting for GGX+ Smith Microsurfaces[J]. 2017. 902 | 903 | [20] 904 | 905 | [21] Drobot M. Lighting of Killzone: Shadow Fall[J]. Digital Dragons European 906 | Games Festival, 2013. 907 | 908 | [22] Material Advances in Call of Duty: WWII, Activision Community , Advances in 909 | Real-Time Rendering , SIGGRAPH 2018 910 | 911 | [23] 题图来自《Assassin's Creed Odyssey》 912 | 913 | -------------------------------------------------------------------------------- /content/part 1/media/0f3c00735859275a4fa201b4e4561037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/0f3c00735859275a4fa201b4e4561037.png -------------------------------------------------------------------------------- /content/part 1/media/104ed41592ecd970652b25a6ee7d7979.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/104ed41592ecd970652b25a6ee7d7979.png -------------------------------------------------------------------------------- /content/part 1/media/15ff7d98da115cda7a62350ab82f1299.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/15ff7d98da115cda7a62350ab82f1299.png -------------------------------------------------------------------------------- /content/part 1/media/172b5ad422241aa48bee1581a7996d3f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/172b5ad422241aa48bee1581a7996d3f.png -------------------------------------------------------------------------------- /content/part 1/media/19b7b473c5258ca21d9bf3ee9d115076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/19b7b473c5258ca21d9bf3ee9d115076.png -------------------------------------------------------------------------------- /content/part 1/media/1f4a62024744adeecaee447a5779e0a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/1f4a62024744adeecaee447a5779e0a3.png -------------------------------------------------------------------------------- /content/part 1/media/264ef1cae566b55219f2957090803eee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/264ef1cae566b55219f2957090803eee.png -------------------------------------------------------------------------------- /content/part 1/media/2bd7dd943a4049058e2bb9252ce35aab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/2bd7dd943a4049058e2bb9252ce35aab.png -------------------------------------------------------------------------------- /content/part 1/media/3bd5aa554bfd06b27c66abd6a7a52a50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/3bd5aa554bfd06b27c66abd6a7a52a50.png -------------------------------------------------------------------------------- /content/part 1/media/3c41bf5fab9d7a49351f0ba2f6561ded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/3c41bf5fab9d7a49351f0ba2f6561ded.png -------------------------------------------------------------------------------- /content/part 1/media/41c027f83e91e911e6bcc195d14d1a82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/41c027f83e91e911e6bcc195d14d1a82.png -------------------------------------------------------------------------------- /content/part 1/media/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/46.png -------------------------------------------------------------------------------- /content/part 1/media/4747c17311dca6610243229defd4241f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/4747c17311dca6610243229defd4241f.png -------------------------------------------------------------------------------- /content/part 1/media/4ecee15f93c7406a0ef72b8ea3121baf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/4ecee15f93c7406a0ef72b8ea3121baf.png -------------------------------------------------------------------------------- /content/part 1/media/5b9800151da9a819e4d21e38bcb4770f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/5b9800151da9a819e4d21e38bcb4770f.png -------------------------------------------------------------------------------- /content/part 1/media/720b0dd40607c2c0c836f4d8ab85a3ed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/720b0dd40607c2c0c836f4d8ab85a3ed.png -------------------------------------------------------------------------------- /content/part 1/media/723cefbe5630048b318ba9e244d52ded.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/723cefbe5630048b318ba9e244d52ded.jpg -------------------------------------------------------------------------------- /content/part 1/media/74b23c3d9bd86c2c7da747ae5fc924b5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/74b23c3d9bd86c2c7da747ae5fc924b5.png -------------------------------------------------------------------------------- /content/part 1/media/7841dfa7d76eb7e831b0d2f5bc2e3bd6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/7841dfa7d76eb7e831b0d2f5bc2e3bd6.png -------------------------------------------------------------------------------- /content/part 1/media/85995c017ecf1b866b10d6845f276067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/85995c017ecf1b866b10d6845f276067.png -------------------------------------------------------------------------------- /content/part 1/media/861df89ef290547a3835ec267275d7f8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/861df89ef290547a3835ec267275d7f8.png -------------------------------------------------------------------------------- /content/part 1/media/866277fbe5822ef0a9c42024d23eeee7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/866277fbe5822ef0a9c42024d23eeee7.png -------------------------------------------------------------------------------- /content/part 1/media/8c145484bc6c975b4fbbfe7b27e8df45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/8c145484bc6c975b4fbbfe7b27e8df45.png -------------------------------------------------------------------------------- /content/part 1/media/8c60f94b8b6f430fc5dcb41068770454.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/8c60f94b8b6f430fc5dcb41068770454.png -------------------------------------------------------------------------------- /content/part 1/media/92a417475714f76c07399a2f62c2ec52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/92a417475714f76c07399a2f62c2ec52.png -------------------------------------------------------------------------------- /content/part 1/media/94cbce1349b7b2206c044b690dffff99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/94cbce1349b7b2206c044b690dffff99.png -------------------------------------------------------------------------------- /content/part 1/media/96cfde9628680bc6d9b5934b5a804316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/96cfde9628680bc6d9b5934b5a804316.png -------------------------------------------------------------------------------- /content/part 1/media/982e3672c32998079331a1186dc61e77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/982e3672c32998079331a1186dc61e77.png -------------------------------------------------------------------------------- /content/part 1/media/9e2bf14832ca069f3e0b2fb919bd6041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/9e2bf14832ca069f3e0b2fb919bd6041.png -------------------------------------------------------------------------------- /content/part 1/media/9ef1db813c87f1f491f7c9dda39c031c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/9ef1db813c87f1f491f7c9dda39c031c.png -------------------------------------------------------------------------------- /content/part 1/media/PBR-White-Paper-Knowledge-Architecture-1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/PBR-White-Paper-Knowledge-Architecture-1.0.png -------------------------------------------------------------------------------- /content/part 1/media/a18e6e86e8ab561037718d63ae71cfa6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/a18e6e86e8ab561037718d63ae71cfa6.png -------------------------------------------------------------------------------- /content/part 1/media/ac5b6abf417748f5193aae92472b174a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/ac5b6abf417748f5193aae92472b174a.png -------------------------------------------------------------------------------- /content/part 1/media/aebea189abd3731e95d48e7d8bf5e795.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/aebea189abd3731e95d48e7d8bf5e795.png -------------------------------------------------------------------------------- /content/part 1/media/babc8a53fde56ce9e03ec6e98e95e76b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/babc8a53fde56ce9e03ec6e98e95e76b.png -------------------------------------------------------------------------------- /content/part 1/media/bd62917668f7fed0d467aa17e37f6355.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/bd62917668f7fed0d467aa17e37f6355.png -------------------------------------------------------------------------------- /content/part 1/media/bd7390108d6233ec9b7f175cb88a1a43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/bd7390108d6233ec9b7f175cb88a1a43.png -------------------------------------------------------------------------------- /content/part 1/media/be92e9284cff9234a7b4892856f99775.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/be92e9284cff9234a7b4892856f99775.png -------------------------------------------------------------------------------- /content/part 1/media/bea70c7262222d1e1fa2ca2334b5a92d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/bea70c7262222d1e1fa2ca2334b5a92d.png -------------------------------------------------------------------------------- /content/part 1/media/c21268b086035b8ff1a211d66d40f408.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/c21268b086035b8ff1a211d66d40f408.png -------------------------------------------------------------------------------- /content/part 1/media/c7e25bc74fdc95edc1bfc0ce45d7945a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/c7e25bc74fdc95edc1bfc0ce45d7945a.png -------------------------------------------------------------------------------- /content/part 1/media/cf4c2d3b087e21e868366f8af8ba2e921.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/cf4c2d3b087e21e868366f8af8ba2e921.png -------------------------------------------------------------------------------- /content/part 1/media/d5a14ad4b88d3da2ba3730bcad3c705d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/d5a14ad4b88d3da2ba3730bcad3c705d.png -------------------------------------------------------------------------------- /content/part 1/media/d9b94cd41cd6cea5cfe6c13c93784b69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/d9b94cd41cd6cea5cfe6c13c93784b69.png -------------------------------------------------------------------------------- /content/part 1/media/dc5ac029d2ea421e140124755e00b12a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/dc5ac029d2ea421e140124755e00b12a.png -------------------------------------------------------------------------------- /content/part 1/media/e0bf53b4788df665db68b7d9e3bd6584.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/e0bf53b4788df665db68b7d9e3bd6584.png -------------------------------------------------------------------------------- /content/part 1/media/e81277e4a9883842f68dadbce1692715.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/e81277e4a9883842f68dadbce1692715.jpg -------------------------------------------------------------------------------- /content/part 1/media/e8d17495bbb483606ae1e6e6afa38b35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/e8d17495bbb483606ae1e6e6afa38b35.png -------------------------------------------------------------------------------- /content/part 1/media/f1ee93037fd153c8168c452b3005e0e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/f1ee93037fd153c8168c452b3005e0e6.png -------------------------------------------------------------------------------- /content/part 1/media/f33d80daaf5e1f38eb754dae5c516a50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/f33d80daaf5e1f38eb754dae5c516a50.png -------------------------------------------------------------------------------- /content/part 1/media/f3b2624505b670b1243fdab515e98295.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/f3b2624505b670b1243fdab515e98295.png -------------------------------------------------------------------------------- /content/part 1/media/f8c1171eebd942ff19535c514262ae4d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/f8c1171eebd942ff19535c514262ae4d.png -------------------------------------------------------------------------------- /content/part 1/media/f8cec1e4db969871187f07604782a92e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/f8cec1e4db969871187f07604782a92e.jpg -------------------------------------------------------------------------------- /content/part 1/media/fb76f44f2b28dffbec7780fd07a552c6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/fb76f44f2b28dffbec7780fd07a552c6.png -------------------------------------------------------------------------------- /content/part 1/media/fbb26eee8d649077b3bc0129288b7e34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 1/media/fbb26eee8d649077b3bc0129288b7e34.png -------------------------------------------------------------------------------- /content/part 2/README.md: -------------------------------------------------------------------------------- 1 | 2 | ![](media/title.jpg) 3 | 4 | 5 | # 【基于物理的渲染(PBR)白皮书】(二) PBR核心理论与渲染光学原理总结 6 | 7 | 本文的知乎专栏版本:https://zhuanlan.zhihu.com/p/56967462 8 | 9 |
10 | 11 | 这是【基于物理的渲染(PBR)白皮书】系列的第二篇文章。按照既定规划,本文将主要关注基于物理的渲染的核心理论与渲染的光学原理,以在整个系列中起到理论支柱的作用。 12 | 13 | 从本文内容而言,只有透过渲染现象看到光与真实世界交互的本质,才能真正理解近年来基于物理的渲染成为电影和游戏业界主流渲染解决方案背后的必然性。 14 | 15 | 首先放出本文主要内容提炼出的思维导图,即基于物理的渲染的核心理论与渲染光学原理的知识脉络: 16 | 17 | ![](media/d4d3f73ed9bf3ac77e0b0a9b9bddc790.png) 18 | 19 | 当然,本文的内容并不局限于上述思维导图。内容方面,本文将从以下几个方面,分别对PBR核心理论与渲染光学原理进行阐述: 20 | 21 | - 基于物理的渲染的核心理论 22 | 23 | - 渲染与人眼视觉 24 | 25 | - 渲染与物理光学(波动光学) 26 | 27 | - 渲染与几何光学 28 | 29 | - 真实世界材质的渲染属性总结 30 | 31 | 首先,是基于物理的渲染核心理论的总结。 32 | 33 |
34 | 35 | # 一、基于物理的渲染核心理论总结 36 | 37 | 38 | 在上篇系列内容前瞻与总结式的文章的开头中已经放出了PBR核心理念的1.0版,经过一段时间的打磨,以下是PBR核心理念的2.0版: 39 | 40 | - **微平面理论(Microfacet Theory)**。微平面理论是将物体表面建模成无数微观尺度上有随机朝向的理想镜面反射的小平面(microfacet)的理论。微观几何(microgeometry)的效果是在表面上的不同点处改变微平面的法线,从而改变反射和折射的光方向。出于着色的目的,通常会用统计方法处理这种微观几何现象,将表面视为具有微观结构法线的随机分布,并将宏观表面视为在每个点处多个方向上反射(和折射)光的集合。在微观尺度上,表面越粗糙,反射越模糊,表面越光滑,反射越集中。 41 | 42 | - **能量守恒 (Energy Conservation)**。出射光线的能量永远不能大于入射光线的能量。随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。 43 | 44 | - **基于F0建模的菲涅尔反射(Fresnel Reflection)**。菲涅尔效应表示观察看到的反射光线的量与视角相关的现象,且掠射角度(90度)下反射率最大。万物皆有菲涅尔效应。在宏观层面看到的实际上是微观层面微平面菲涅尔效应的平均值,即影响菲涅尔效应的关键参数在于每个微平面的法向量和入射光线的角度,而不是宏观平面的法向量和入射光线的角度。F0即0度角入射的菲涅尔反射率。任意角度的菲涅尔反射率可由F0和入射角度计算得出。 45 | 46 | - **线性空间光照(Linear Space Lighting)**。线性空间渲染为光照计算提供了正确的数学运算。在线性空间中,能够还原现实世界方式的光与物质的交互的方式。所以颜色值的计算和颜色操作必须在线性空间中执行。而为了将渲染图像正确地呈现给观看者,需要将图像编码为伽马空间,所以基于物理的渲染会往往会涉及到线性空间和伽马空间之间的相互转换。 47 | 48 | - **色调映射(Tone Mapping)**。也称色调复制(Tone Reproduction),在图形学中,表示以感知上令人信服的方式将HDR场景的强度值转换为显示强度的过程,也可以理解为将宽范围的光照级别拟合到屏幕有限色域内的过程。通常,由于通过HDR渲染出来的亮度值会超过显示器能够显示最大亮度,所以需要结合色调映射(Tone Mapping),将光照结果从HDR转换为显示器能够正常显示的LDR。 49 | 50 | - **基于真实世界测量的材质参数(Real-World Measurement Based Substance Properties)** 。PBR的正统材质参数往往都基于真实世界测量。真实世界中的物质可分为三大类:绝缘体(Insulators),半导体(semiconductors)和导体(conductors)。在渲染和游戏领域,我们一般只对其中的两个感兴趣:导体(金属)和绝缘体(电解质,非金属)。菲涅尔反射率代表材质的镜面反射颜色与强度,是真实世界材质的核心测量数值。其中非金属具有非彩色的镜面反射颜色,而金属具有彩色的镜面反射颜色,即非金属的F0是一个float,金属的F0是一个float3。 51 | 52 | - **光照与材质解耦(Decoupling of Lighting and Material)**。基于物理的渲染的核心原则之一便是材质和光照信息的解耦,以模拟真实世界的光照现象,保证场景中所有对象之间具有视觉一致性。通过这种理念,相同的光照可以应用于所有物体和材质,无需传统光照模型所需的额外调整和hack,就能直接得到预期而自然的渲染表现,以提升美术同学的工作效率。 53 | 54 | 55 |
56 | 57 | 58 | 要真正理解基于物理的渲染,首先需要了解真实世界中光,材质,人眼三者之间的交互原理。下面我们从人眼视觉开始,重新认识渲染。 59 | 60 | 61 |
62 | 63 | # 二、渲染与人眼视觉:我们是如何看到周围的事物的? 64 | 65 | 66 | 首先需要注意的是,我们在现实生活中看到某一物体的颜色其实并不是这个物体本身的真实颜色,而是其反射和散射得到的颜色。换句话说,**那些不能被物体吸收(Absorb)的颜色,即被反射或散射到我们人眼中的可见光波长代表的颜色,就是我们能够感知到的物体的颜色。** 67 | 68 | 例如,苹果的表面主要反射和散射红色光线。只有红色的波长能从苹果表面散射或反射回来,而其他部分则被吸收,转化为其他其他形式的能量,如下图。 69 | 70 | ![](media/ee32291996fb8ce5b2dfcfee4f7ac947.png) 71 | 72 | 图 人眼接收到苹果反射和散射的红色光线 (图片来自Arnold Renderer Docs) 73 | 74 | 被反射或散射的光线进入人眼后,首先穿过角膜(cornea), 然后进入瞳孔(pupil)。 75 | 随后,光被晶状体(lens)折射并撞击视网膜(retina)中的两种类型的感光细胞(photoreceptors),视锥细胞(cones)和视杆细胞(rods)。这些感光细胞从视野范围内吸收光子,然后经一系列特殊复杂的生物化学通路,根据光线中的不同的波长产生不同颜色的视觉信号,波长越高的光偏红,波长越低的光偏蓝。视觉信号通过视神经(optical 76 | nerve)传递到视觉皮层(visual 77 | cortex),而视觉皮层作为处理视觉信号的大脑区域,用于产生最终的感知图像。上述负责整体人类视觉功能的完整系统被称为**人类视觉系统(Human 78 | Visual System,HVS)**,如下图。 79 | 80 | ![](media/4e088c00d8ed6e7c082562de91f93e50.png) 81 | 82 | 图 部分人眼视觉系统 83 | 84 | ![](media/9d3012e9d9141a81b80052f4a0759369.jpg) 85 | 86 | 图 不同感光细胞对不同波长的感知敏感度 87 | 88 | 只有可见光才能被人眼感知并处理,而可见光仅覆盖完整电磁波谱在400nm和700nm之间非常有限的光谱区间。如下图。 89 | 90 | ![](media/f666a719d3cc9d1785c04d2824232e92.jpg) 91 | 92 | 图 电磁波谱。可见光仅覆盖完整电磁波谱在400nm和700nm之间非常有限的光谱区间 93 | 94 | 如果要给可见光波长一个度量上的感知,400nm到700nm大约是单根蜘蛛丝的一半到三分之一的宽度,而单个蜘蛛丝本身不到人类头发宽度的五十分之一 95 | 96 | ![](media/3fb55a3525c6008fefa2bdde561f761b.png) 97 | 98 | 图 左侧可见光波长相对于单根蜘蛛丝线显示,单根蜘蛛丝宽度略大于1微米。 99 | 在右侧,可以看到该蜘蛛丝线大约为人类头发宽度的五十分之一(图片来自URnano/University 100 | of Rochester) 101 | 102 | 103 | 104 |
105 |
106 | 107 | # 三、渲染与物理光学 Rendering and Physical Optics 108 | 109 |
110 | 111 | ## 3.1 相速度与折射率 112 | 113 | 114 | 波动光学(wave optics)又称物理光学(physical optics)。在波动光学中,光被建模为一种电磁横波(transverse wave),即使电场和磁场垂直于其传播方向振荡的波。 115 | 116 | ![](media/5ad4543f21a80516b3a760a29b83458d.png) 117 | 118 | 图 光是一种电磁横波。 电场和磁场矢量以90°相互振荡并同时向传播方向振荡。图中所示的波是最简单的光波。它既是单色的(具有单一波长λ)又是线性极化的(电场和磁场各自沿单向振荡)。(图片来自Real-Time Rendering 4th) 119 | 120 | 光波的磁场和电场的振荡相互耦合,且磁场矢量和电场矢量相互垂直,两者长度之比固定,该比率等于**相速度(Phase Velocity)。** 121 | 122 | 而光在传播到两种不同介质交界处时,原始光波和新的光波的相速度(Phase Velocity)的比率定义了介质的光学性质,就是**折射率(Index Of Refraction,IOR)**,由字母**n**表示。 123 | 124 |
125 | 126 | ## 3.2 复折射率 127 | 128 | 129 | 除了代表光的相速度的实部n之外,还用希腊字母κ(kappa)表示介质将光能转为为其他形式能量的吸收性。n和κ通常都随波长而变化,两者组合成复数n 130 | +iκ,称为**复折射率(complex index of refraction)**。 131 | 132 | 也就是说,折射率IOR是一个复数(complex number),其分为实部和虚部两部分: 133 | 134 | - **折射率的实部(real part)度量了物质如何影响光速**,即相对于光在真空中传播速度减慢的度量。 135 | 136 | - **折射率的虚部(imaginary part)确定了光在传播时是否被吸收**,转换成其他形式的能量,通常是热能。非吸收性介质虚部为零。 137 | 138 | 其中,特定材质对光的选择性吸收是因为所选择的**光波频率与该材质原子中的电子振动的频率相匹配**。由于不同的原子和分子具有不同的固有振动频率,其将选择性地吸收不同频率的可见光。 139 | 140 | 光的吸收对视觉效果有直接影响,因为会降低光的强度,并且如果吸收对某些可见波长具有选择性,也会改变光的颜色。如下图。 141 | 142 | ![](media/957e0bcc0e3319cda5d47bbff81f2086.png) 143 | 144 | 图 光的吸收导致透明介质的不同颜色外观。 145 | 146 | ![](media/b29afb845308d90aaeb379a11b609225.jpg) 147 | 148 | 图 四个小容器的液体具有不同的吸收属性。 从左到右:清水,石榴糖浆,茶和咖啡。 149 | (图片来自Real-Time Rendering 4th) 150 | 151 |
152 | 153 | ## 3.3 折射的发生条件 154 | 155 | 156 | **光在表面的折射条件是需要在小于单一波长的距离内发生折射率的突然变化。** 157 | 158 | ![](media/1b7437728d0cd8e24c77cbd214682dbf.png) 159 | 160 | 图 光的折射 161 | 162 | **另外,折射率缓慢的逐渐变化不会导致光线的分离,而是导致其传播路径的弯曲。** 当空气密度因温度而变化时,通常可以看到这种效果,例如海市蜃楼(mirages)和热形变(heat distortion)。见下图。 163 | 164 | ![](media/f2e5df06cf5ea9c6f1b7b033bf5386cf.jpg) 165 | 166 | 图 热形变(heat distortion)图示 167 | 168 |
169 | 170 | ## 3.4 物质对吸收和散射的特性组合决定其外观 171 | 172 | 如上文所说到的,光与物质之间的两种相互作用模式为散射(scattering)和吸收(absorption),如下图: 173 | 174 | ![](media/e3863efd88c9286f7c3eb78e25b98583.png) 175 | 176 | 图 光与物质之间的两种相互作用模式:吸收absorption(左),散射 scattering(右) 177 | (图片来自Hoffman N. Background: Physics and Math of Shading) 178 | 179 | 其中: 180 | 181 | - **散射(scattering)决定介质的浑浊程度。** 大多数情况下,固体和液体介质中的颗粒都比光的波长更大,并且倾向于均匀地散射所有可见波长的光。高散射会产生不透明的外观。 182 | 183 | - **吸收(absorption)决定材质的外观颜色。** 几乎任何材质的外观颜色通常都是由其吸收的波长相关性引起的。 184 | 185 | 而每种介质的外观是散射和吸收两种现象的综合结果: 186 | 187 | ![](media/949befd4d37129c6701a743392dc2b5a.png) 188 | 189 | 图:具有不同光的吸收量和散射量的介质。 外观取决于散射和吸收两个属性; 190 | 例如,白色外观(右下)是高散射和低吸收的结果。(图片来自Hoffman N. Background: 191 | Physics and Math of Shading) 192 | 193 | ![](media/32c4f9f3bef394e7ac3779cead18ac0f.png) 194 | 195 | 图 具有不同吸收和散射组合的液体容器 (图片来自Real-Time Rendering 4th) 196 | 197 | 当然,除了折射的光线,材质的外观还与反射有关,所以,可以理解为材质的最终外观由镜面反射以及物质对折射光线的吸收和散射的特性组合综合决定。 198 | 199 |
200 | 201 | ## 3.5 散射和吸收现象与观察尺度有关 202 | 203 | 另外, 散射(Scattering)和吸收(absorption)都与观察尺度有关。 204 | 在小场景中不产生任何明显散射的介质在较大尺度上可能具有非常明显的散射。 205 | 例如,当观察房间中的一杯水时,在空气中的光的散射和在光在水中的吸收都是不可见的。 206 | 但是,在宽阔的环境中,两种效果都很重要,如下图所示。 207 | 208 | ![](media/001.jpg) 209 | 210 | 图 水在数米的距离内对光线进行吸收,特别是对于红色波长对应的光的吸收非常强烈。 211 | 212 | ![](media/002.jpg) 213 | 图 在多英里的空气中有明显的光的散射,即使在没有重污染或雾的情况下也是如此。 214 | 215 |
216 | 217 |
218 | 219 | # 四、渲染与几何光学 Rendering and Geometrical Optics 220 | 221 | 222 | 关于光与非光学平坦表面的交互原理,在这个系列的第一篇文章中已经有相关总结,本文不应再赘述。这一节中,将首先对“光与介质边界的交互类型”和“不同物质与光的交互”分别做出提炼总结。然后仅重提一下PBR理论中最核心的微平面理论,随后便主要于关注菲涅尔反射相关的讨论。 223 | 224 |
225 | 226 | ## 4.1 光与介质边界的交互类型总结 227 | 228 | 229 | 为了便于下面总结的理解,先提供一张经典的光与表面的交互图示。 230 | 231 | ![](media/db572e0923acd8d22e67a4e1875fb206.png) 232 | 233 | 图 光与物体表面的交互图示。(来自GDC 2016,An End-to-End Approach to Physically 234 | Based Rendering) 235 | 236 | 当一束光线入射到物体表面时,由于物体表面与空气两种介质之间折射率的快速变化,光线会发生反射和折射: 237 | 238 | - **反射(Reflection)。**光线在两种介质交界处的直接反射即**镜面反射(Specular)**。金属的镜面反射颜色为三通道的彩色,而非金属的镜面反射颜色为单通道的单色。 239 | 240 | - **折射(Refraction)。** 从表面折射入介质的光,会发生吸收(absorption)和散射(scattering),而介质的整体外观由其散射和吸收特性的组合决定,其中: 241 | 242 | - **散射(Scattering)。** 折射率的快速变化引起散射,光的方向会改变(分裂成多个方向),但是光的总量或光谱分布不会改变。散射最终被视作的类型与观察尺度有关: 243 | 244 | - **次表面散射(Subsurface 245 | Scattering)。**观察像素小于散射距离,散射被视作次表面散射**。** 246 | 247 | - **漫反射(Diffuse)。**观察像素大于散射距离,散射被视作漫反射**。** 248 | 249 | - **透射(Transmission)**。入射光经过折射穿过物体后的出射现象。透射为次表面散射的特例。 250 | 251 | - **吸收(Absorption)。** 具有复折射率的物质区域会引起吸收,具体原理是光波频率与该材质原子中的电子振动的频率相匹配。复折射率(complex 252 | number)的虚部(imaginary 253 | part)确定了光在传播时是否被吸收(转换成其他形式的能量)。发生吸收的介质的光量会随传播的距离而减小(如果吸收优先发生于某些波长,则可能也会改变光的颜色),而光的方向不会因为吸收而改变。任何颜色色调通常都是由吸收的波长相关性引起的。 254 | 255 | 如下是光与介质边界的交互类型思维导图版的总结: 256 | 257 | ![](media/7f1f49beeca7b3dc4403bd6fdef05972.png) 258 | 259 |
260 | 261 | ## 4.2 不同物质与光的交互总结 262 | 263 | 上文已经提到,光线入射到两种介质之间平面边界时,会发生反射和折射,而根据材质光学性质的不同,具有不同的行为表现,从而得到不同的材质外观。可以将材质根据光学特性,分为金属和非金属两大类,具体行为可以总结如下: 264 | 265 | - **金属(Metal)**。金属的外观主要取决于光线在两种介质的交界面上的直接反射(即镜面反射)。金属的镜面反射颜色为三通道的彩色,R、G、B各不相同。而折射入金属内部的光线几乎立即全部被自由电子吸收,且折射入金属的光不存在散射。 266 | 267 | - **非金属(No-Metal)**。非金属即电介质,其的整体外观主要由其吸收和散射的特性组合决定。同样,非金属与光的交互分为反射和折射两部分。而折射按介质类型的散射和吸收特性,分为多类: 268 | 269 | - **反射(Reflection)**。非金属的镜面反射颜色为单通道单色,即R=G=B。 270 | 271 | - **折射(Refraction)**。光从表面折射入非金属介质,则介质的整体外观由其散射和吸收的特性组合决定。不同的介质类型的散射和吸收特性不一: 272 | 273 | - **均匀介质(Homogeneous Media)**。主要为透明介质,无折射率变化。不存在散射,光总以直线传播并且不会改变方向。存在吸收,光的强度会通过吸收减少,传播距离越远,吸收量越高。 274 | 275 | - **非均匀介质(Nonhomogeneous Media)**。通常可以建模为具有嵌入散射粒子的均匀介质。具有折射率变化,分为几类。 276 | 277 | - **混浊介质(Cloudy Media)**。混浊介质具有弱散射,散射方向略微随机化。根据组成的不同,具有复数折射率的物质区域引起吸收。 278 | 279 | - **半透明介质(Translucent Media)**。半透明介质具有强散射,散射方向完全随机化。根据组成的不同,具有复数折射率的物质区域引起吸收。 280 | 281 | - **不透明介质(Opaque Media)**。不透明介质和半透明介质一致。具有强散射,散射方向完全随机化。根据组成的不同,具有复数折射率的物质区域引起吸收。 282 | 283 | 如下是不同物质与光的交互类型思维导图版的总结: 284 | 285 | ![](media/a4a53a714915e51f67d86df0559f5830.png) 286 | 287 |
288 | 289 | ## 4.3 微平面理论 Microfacet Theory 290 | 291 | 大多数真实世界的表面不是光学上光滑的,但是具有比光波长大得多但比像素小的尺度的不规则性。 292 | 这种微观几何(microgeometry)变化导致每个表面点反射(和折射)不同方向的光:材质的部分外观组成是这些反射和折射方向的聚合结果。 293 | 294 | ![](media/a18e6e86e8ab561037718d63ae71cfa6.png) 295 | 296 | 图 微平面理论(图片来自The PBR Guide by allegorithmic- Vol. 1) 297 | 298 | 光在与非光学平坦表面(Non-Optically-Flat 299 | Surfaces)的交互时,非光学平坦表面表现得像一个微小的光学平面表面的大集合。表面上的每个点都会以略微不同的方向对入射光反射,而最终的表面外观是许多具有不同表面取向的点的聚合结果。 300 | 301 | ![](media/e8d17495bbb483606ae1e6e6afa38b35.png) 302 | 303 | 图 来自非光学平坦表面的可见光反射是来自具有不同方向的许多表面点的反射的总体结果 304 | 305 | 在微观尺度上,表面越粗糙,反射越模糊,因为表面取向与整个宏观表面取向的偏离更强。(图片来自Real-Time Rendering 4th) 306 | 307 | ![](media/caed5dd64637dc2e2cfb185a8e537147.png) 308 | 309 | 图 微平面粗糙度对材质外观的影响。(图片来自Moving Frostbite to PBR,SIGGRAPH 2014) 310 | 311 | ![](media/22e89378daab68e11dd741798c579f7e.png) 312 | 313 | 图 微平面粗糙度对材质外观的影响,从左到右粗糙度越来越大 (图片来自Arnold Renderer 314 | Docs) 315 |
316 | 317 | ## 4.4 菲涅尔反射 Fresnel Reflectance 318 | 319 |
320 | 321 | ### 4.4.1 菲涅尔效应 Fresnel Effect 322 | 323 | 菲涅尔效应(Fresnel effect)作为基于物理的渲染理念中的核心理念之一,表示的是看到的光线的反射率与视角相关的现象,由法国物理学家奥古斯丁.菲涅尔率先发现。其具体表现是在掠射角(与法线呈接近90度)下光的反射率会增加。而上述的反射率,便被称为菲涅尔反射率。如下图。 324 | 325 | ![](media/26d662c7c421f60da0ba9e05752a5d58.jpg) 326 | 327 | 图 菲涅尔效应图示 328 | 329 | ![](media/03a946dee6f45cdce342cd5644a73b93.jpg) 330 | 331 | 图 菲涅尔效应图示 332 | 333 | 简单来说,菲涅尔效应即描述视线垂直于表面时反射较弱,而当视线非垂直表面时,夹角越小,反射越明显的一种现象。比如说,当我们站在湖边低头看脚下的湖水,会发现水是透明的,反射不会特别强烈;而如果我们看远处的湖面时,会发现水并不透明,而且反射非常强烈。 334 | 335 | ![](media/6cf586ffef9b492903591ee6f0e6f677.jpg) 336 | 337 | 图 菲涅尔效应图示 338 | 339 | 需要注意的是,**我们在宏观层面看到的菲涅尔效应实际上是微观层面微平面菲涅尔效应的平均值。** 340 | 341 | 也就是说,影响菲涅尔效应的关键参数在于每个微平面的法向量和入射光线的角度,而不是宏观平面的法向量和入射光线的角度。即: 342 | 343 | - 当从接近平行于表面的视线方向进行观察,所有光滑表面都会变得100%的反射性。 344 | 345 | - 对于粗糙表面来说,在接近平行方向的高光反射也会增强,但不够达到100%的强度。 346 | 347 | 不同材质的菲涅尔效应的强弱是不同的,导体(如金属)的菲涅尔效应一般很弱,主要是因为导体本身的反射率就已经很强。就拿铝来说,其反射率在所有角度下几乎都保持86%以上,随角度变化很小,而绝缘体材质的菲涅尔效应就很明显,比如折射率为1.5的玻璃,在表面法向量方向的反射率仅为4%,但当视线与表面法向量夹角很大的时候,反射率可以接近100%,这一现象也导致了金属与非金属外观上的不同。 348 | 349 |
350 | 351 | ### 4.4.2 菲涅尔方程 Fresnel Equations 352 | 353 | 菲涅尔方程(Fresnel 354 | Equations),同样是法国物理学家奥古斯丁·菲涅耳最先推导出,用来描述光在不同折射率的介质之间的行为的方程。菲涅尔方程描述的光的反射现象便被称之为菲涅尔反射。菲涅尔方程能解释反射光的强度、折射光的强度、相位与入射光的强度的关系。 355 | 356 | 另外,菲涅尔方程其实和**麦克斯韦方程组(Maxwell’s equations)** 有很深的渊源。 357 | 358 | 根据物理学,麦克斯韦方程组可以在折射率变化时计算光的行为。对于空气中通常的物体表面而言,物体的表面便是空气折射率和物体折射率的交界面,对此特殊的折射率交界面而言,麦克斯韦方程组的解被我们称为菲涅尔方程(Fresnel equations)**。** 359 | 360 | 即**菲涅尔反射的方程可以通过麦克斯韦电磁学方程组推导出来**,因为本质上讲菲涅尔反射其实是使用的波动理论来解释光的反射现象。 361 | 362 | 完整的菲涅尔方程有点复杂,至少可以说艺术家所需的材质参数(在可见光谱上密集采样的复折射率)并不方便,随后的文章会专门讨论。 363 | 364 | 而通过完整的菲涅尔方程,我们可以拟合出更简化的近似表达式(如Schlick[1994]的Fresnel近似),以及抽象出描述物体表面属性的菲涅尔反射率F0。先观察下图。 365 | 366 | ![](media/df5d430bdbb85be5f55e94af661a1a42.png) 367 | 368 | 图 各种物质的菲涅尔反射率(y轴)作为入射角(x轴)的函数。 369 | 由于铜和铝在可见光谱上的反射率有明显变化,因此它们的反射率显示为R,G和B的三条独立曲线。铜的R曲线最高,其次是G,最后是B(因此它的红色)。铝的B曲线最高,其次是G,最后是R。上图选择的材质代表了各种各样的材质。 尽管如此,可以看到一些共同的地方。对于0°和45°之间的入射角,反射率几乎是恒定的。在45°和75°之间,反射率变化更为显着(通常但不总是有所增加)。最后,在75°和90°之间,反射率总是迅速变为1(白色,如果被视为一种颜色)。(图片来自Hoffman 370 | N. Background: Physics and Math of Shading) 371 | 372 | 由此,我们可以将F0,即0度角入射时的菲涅尔反射率,作为材质的特征反射率,帮助我们对该材质的反射属性进行建模。 373 | 374 |
375 | 376 | ### 4.4.3 F0 : 0度角入射时的菲涅尔反射率 377 | 378 | 上文已经提到,当光线垂直(以0度角)撞击表面时,该光线被反射(Reflected)为镜面反射光的比率被称为F0。即F0为0度角入射时的菲涅尔反射率。而折射(refracted)到表面中的光量则为为1-F0。如下图。 379 | 380 | ![](media/27.png) 381 | 382 | 图 对于光滑的电介质表面,在0度角入射(F0)将反射2-5%的光,在掠射角入射下将反射100%的光(图片来自The PBR Guide by allegorithmic- Vol. 1) 383 | 384 | 大多数常见电介质的F0范围为0.02-0.05(线性值)。 对于导体,F0范围为0.5-1.0。 385 | 386 | 关于常见物质F0的相关内容下文会做一个更系统的讨论,这里我们先了解F0与折射率的关系。 387 | 388 |
389 | 390 | ### 4.4.4 从折射率求解F0 391 | 392 | 通用的折射率与F0的关系式如下: 393 | 394 | ![](media/3f59a90ca4d2aebec28df861fb0e2c4b.png) 395 | 396 | 其中,n1和n2分别为两种介质的折射率。通常假设n1=1近似于空气的折射率,并用n替换n2,于是,上式可以简化为: 397 | 398 | ![](media/28cd3f1e2b521d8d476d30cd51e00a5f.png) 399 | 400 | 这就是我们通常看到的F0和折射率之间的转换公式。 401 | 402 | 另外,这里有一个各种物质实数折射率数值的查询汇总表: 403 | 404 | ,对于一般仅有实数折射率的非金属而言,可以通过查询到的物质的折射率和上面的公式,计算出F0。 405 | 406 | 在有些渲染器中,会直接采用折射率IOR来表示材质的属性,以下是一张渲染器中实数折射率、粗糙度二维材质的渲染对照图: 407 | 408 | ![](media/2a206b66cb90c99d9d7918f32275d86e.jpg) 409 | 410 | 图 实数折射率、粗糙度二维材质对照图 411 | 412 |
413 | 414 |
415 | 416 | # 五、真实世界材质的渲染属性总结 417 | 418 | 基于物理的渲染的核心理念之一是采用基于真实世界测量的材质光学参数。 419 | 420 | 由于光由电磁波组成,因此,物质的光学特性与其导电特性密切相关。我们通常把导电性较差的材质,如煤、人工晶体、琥珀、陶瓷等称为绝缘体。而把导电性比较好的金属如金、银、铜、铁、锡、铝等称为导体。以及将导电性质介于导体和绝缘体之间的材质称为半导体。 421 | 422 | 即根据导电特性,可将现实生活中的物质分为三个主要光学类别: 423 | 424 | - **电介质(dielectrics)**,又称绝缘体(Insulators),非金属(no-metal) 425 | 426 | - **半导体(semiconductors)** 427 | 428 | - **金属(metals)**,又称导体(conductors) 429 | 430 | 这里,也放出基于物理的渲染材质分类的思维导图: 431 | 432 | ![](media/faa31b20c807cd58c5e73bee73a4c1a9.png) 433 | 434 |
435 | 436 | ## 5.1 常见材质F0参考速查图表 437 | 438 | 本文在创作期间,参考了《Real-Time Rendering 4th》等文献,总结和制作了如下的PBR材质F0反射率速查图表,其中分别对常见材质的线性值,sRGB值和参考颜色进行了列举,以方便PBR材质的创作: 439 | 440 | ![](media/7df705605f2691a6cf25eb2ace7cd14c.png) 441 | 442 | 图 【PBR白皮书】常见材质F0参考速查图表 443 | 444 | 另外,上述的PBR材质F0反射率速查表本文还提供了单页的PDF。有需要此文字版PDF的朋友,可以从这里下载: 445 | 446 | **[【PBR白皮书】[PBR Material F0 Quick Reference Chart.PDF] 下载](https://github.com/QianMo/PBR-White-Paper/raw/master/bonus/%5BPBR-White-Paper%5D%20PBR-Material-F0-Quick-Reference-Chart.pdf)** 447 | 448 | 需要注意,我们一般使用的F0,都是空气对于材质的F0。假如材质位于水中或其他折射率不等于1的介质中,F0会发生变化,则需要使用本文第四部分的公式通过折射率重新计算F0。 449 | 450 | 接着是对于金属,电介质和半导体的相关特性的分类总结。 451 | 452 |
453 | 454 | ## 5.2 金属 Metal 455 | 456 | ![](media/8b345de63adce8e1d4c9fbb8776efb44.jpg) 457 | 458 | 图 金属渲染图 @Vray 459 | 460 | - 金属具有高的F0值 - 几乎总是0.5或更高。一些金属具有在可见光谱范围内变化的光学性质,导致了这些金属有色的菲涅尔反射率。 461 | 462 | - 黄金有一个不寻常的F0值,是最亮的金属之一。其红色通道值略高于1,而且具有特别低的蓝色通道值(低于0.5)。黄金的明亮和强烈的颜色反射可能有助于其历史上独特的文化和经济意义。 463 | 464 | - 金属会立即吸收任何透射光,因此它们不会出现任何次表面散射或透明感。 465 | 466 | - 金属的所有可见颜色都来自镜面反射。 467 | 468 | ![](media/c9c27edc27b88355947bc4882b3e3f13.png) 469 | 470 | 图 常见金属F0速查表 471 | 472 |
473 | 474 | 475 | # 5.3 电介质 Dielectrics 476 | 477 | 478 | ![](media/74c5ee3b78db7d8cc86b9deda924eba8.jpg) 479 | 480 | 图 电介质:塑料渲染图示 @Vray 481 | 482 | - 日常生活中遇到的大多数材质都是电介质 -玻璃,皮肤,木头,头发,皮革,塑料,石头和混凝土(concrete)等等。 483 | 484 | - **水其实也是电介质(绝缘体)。** 水是绝缘体这个事实可能会令人惊讶,因为在日常生活中众所周知,水是导电的。但其实,水的导电性是由于水中的各种杂质造成的,水本身并不导电。 485 | 486 | - 电介质具有相当低的F0值 - 通常为0.06或更低。在垂直入射时的这种低反射率使得菲涅尔效应对于电介质尤其明显。电介质的光学性质在可见光谱上很少变化很大,导致无色反射率值。 487 | 488 | - 另外需要注意的是,生活中看到的各种水晶和宝石,其实大多数情况下组成成分是石英(Quartz),而石英的主要化学成分为SiO2,也是电介质(绝缘体)。石英根据颜色,可以分为:紫水晶、黄水晶、粉晶、烟水晶、乳石英、白水晶等。这边一个是紫水晶的材质特性拆解: 489 | 490 | ![](media/cc7ba09a72f71e2d6ae02bd69b79081b.jpg) 491 | 492 | 图 紫水晶的材质特性拆解 493 | 494 | 另外,为方便查阅,这里也附上常见电介质的F0速查表 495 | 496 | ![](media/4c2940621fcc17a4252268a5d0d42b37.png) 497 | 498 | 图 常见电介质F0速查表 499 | 500 |
501 | 502 | ## 5.4 半导体 Semiconductor 503 | 504 | ![](media/753fd5598412674312cac0fce0587021.jpg) 505 | 506 | 图 最常见的半导体:硅 507 | 508 | - 半导体(Semiconductor)的电导率在绝缘体和导体之间。常见的半导体材质有硅、锗、砷化镓等,而硅是各种半导体材质中,在商业应用上最具有影响力的一种。 509 | 510 | - 正如半导体电导率位于绝缘体至导体之间一样,其F0值也位于最亮的电介质和最暗的金属之间。 511 | 512 | - 即是是最常见的半导体硅,在大多数场景渲染中也十分少见。出于实用性,PBR工作流一般不考虑半导体,即因避免在0.2和0.45之间的F0值。当然,故意尝试非真实感材质或外星场景中的材质时是例外。 513 | 514 | ![](media/98f67563389b329834fcff4c7e27ad57.png) 515 | 516 | 图 常见半导体F0速查表 517 | 518 |
519 | 520 |
521 | 522 | # 六、本文内容要点总结 523 | 524 | 525 | 正文到这里已经结束。以下是本文具有代表性知识点的提炼总结: 526 | 527 | - 麦克斯韦方程组在材质表面处的特殊解就是菲涅尔方程。 528 | 529 | - 影响菲涅尔效应的关键参数在于每个微平面的法向量和入射光线的角度。 530 | 531 | - 折射率是一个复数(complex number),实部(real part)度量了物质如何影响光速,虚部(imaginary part)确定了光在传播时是否被吸收。 532 | 533 | - 具有复数折射率的物质区域引起吸收 - 光量随距离减小(并且如果吸收对某些可见波长具有选择性,则也会改变光的颜色),但光的方向不会改变。 534 | 535 | - 折射率的快速变化引起散射。散射最终被视作的类型与观察尺度有关:次表面散射。观察像素小于散射距离,散射被视作次表面散射(Subsurface Scattering)。观察像素大于散射距离,散射被视作漫反射(Diffuse)。 536 | 537 | - 物质对折射光线的吸收和散射的特性组合,以及对光线的反射特性共同决定了该材质的整体外观。 538 | 539 | 其余的总结性的内容包括4.1节的“光与介质边界的交互类型总结”、4.2节的“不同物质与光的交互总结”,这边就不再赘述。 540 | 541 | 作为全文的最终总结,自然也需要再次贴出文章开头已经贴出的,本文主要内容提炼出的思维导图: 542 | 543 | ![](media/d4d3f73ed9bf3ac77e0b0a9b9bddc790.png) 544 | 545 | 另外,本文本来也会聊到线性空间渲染与Tone Mapping的更多内容,但加上后篇幅已经远远超出了字数限制。没事,我们不妨在随后的文章中再聊。 546 | 547 | 以上。 548 | 549 |
550 | 551 |
552 | 553 | # Reference 554 | 555 | [1] Akenine-Moller T, Haines E, Hoffman N. Real-time rendering 4th[M]. AKPeters/CRC Press, 2018. 556 | 557 | [2] Hoffman N. Background: Physics and Math of Shading[J]. 558 | 559 | [3] Lagarde S, De Rousiers C. Moving Frostbite to PBR[J]. Proc. Physically Based Shading Theory Practice, 2014. 560 | 561 | [4] 562 | 563 | [5] 564 | 565 | [6] 566 | 567 | [7] 568 | 569 | [8] 570 | 571 | [9] 572 | 573 | [10] 574 | 575 | [11] 576 | 577 | [12] 578 | 579 | [13] Ratković J. Physically based rendering[D]. Fakultet elektrotehnike iračunarstva, Sveučilište u Zagrebu, 2017. 580 | 581 | [14] 题图来自FarCry 5 582 | 583 | ![](media/endpic.jpg) -------------------------------------------------------------------------------- /content/part 2/media/001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/001.jpg -------------------------------------------------------------------------------- /content/part 2/media/002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/002.jpg -------------------------------------------------------------------------------- /content/part 2/media/03a946dee6f45cdce342cd5644a73b93.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/03a946dee6f45cdce342cd5644a73b93.jpg -------------------------------------------------------------------------------- /content/part 2/media/1b7437728d0cd8e24c77cbd214682dbf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/1b7437728d0cd8e24c77cbd214682dbf.png -------------------------------------------------------------------------------- /content/part 2/media/22e89378daab68e11dd741798c579f7e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/22e89378daab68e11dd741798c579f7e.png -------------------------------------------------------------------------------- /content/part 2/media/26d662c7c421f60da0ba9e05752a5d58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/26d662c7c421f60da0ba9e05752a5d58.jpg -------------------------------------------------------------------------------- /content/part 2/media/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/27.png -------------------------------------------------------------------------------- /content/part 2/media/28cd3f1e2b521d8d476d30cd51e00a5f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/28cd3f1e2b521d8d476d30cd51e00a5f.png -------------------------------------------------------------------------------- /content/part 2/media/2a206b66cb90c99d9d7918f32275d86e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/2a206b66cb90c99d9d7918f32275d86e.jpg -------------------------------------------------------------------------------- /content/part 2/media/32c4f9f3bef394e7ac3779cead18ac0f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/32c4f9f3bef394e7ac3779cead18ac0f.png -------------------------------------------------------------------------------- /content/part 2/media/3f59a90ca4d2aebec28df861fb0e2c4b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/3f59a90ca4d2aebec28df861fb0e2c4b.png -------------------------------------------------------------------------------- /content/part 2/media/3fb55a3525c6008fefa2bdde561f761b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/3fb55a3525c6008fefa2bdde561f761b.png -------------------------------------------------------------------------------- /content/part 2/media/4c2940621fcc17a4252268a5d0d42b37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/4c2940621fcc17a4252268a5d0d42b37.png -------------------------------------------------------------------------------- /content/part 2/media/4e088c00d8ed6e7c082562de91f93e50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/4e088c00d8ed6e7c082562de91f93e50.png -------------------------------------------------------------------------------- /content/part 2/media/5ad4543f21a80516b3a760a29b83458d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/5ad4543f21a80516b3a760a29b83458d.png -------------------------------------------------------------------------------- /content/part 2/media/6cf586ffef9b492903591ee6f0e6f677.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/6cf586ffef9b492903591ee6f0e6f677.jpg -------------------------------------------------------------------------------- /content/part 2/media/74c5ee3b78db7d8cc86b9deda924eba8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/74c5ee3b78db7d8cc86b9deda924eba8.jpg -------------------------------------------------------------------------------- /content/part 2/media/753fd5598412674312cac0fce0587021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/753fd5598412674312cac0fce0587021.jpg -------------------------------------------------------------------------------- /content/part 2/media/7df705605f2691a6cf25eb2ace7cd14c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/7df705605f2691a6cf25eb2ace7cd14c.png -------------------------------------------------------------------------------- /content/part 2/media/7f1f49beeca7b3dc4403bd6fdef05972.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/7f1f49beeca7b3dc4403bd6fdef05972.png -------------------------------------------------------------------------------- /content/part 2/media/8b345de63adce8e1d4c9fbb8776efb44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/8b345de63adce8e1d4c9fbb8776efb44.jpg -------------------------------------------------------------------------------- /content/part 2/media/949befd4d37129c6701a743392dc2b5a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/949befd4d37129c6701a743392dc2b5a.png -------------------------------------------------------------------------------- /content/part 2/media/957e0bcc0e3319cda5d47bbff81f2086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/957e0bcc0e3319cda5d47bbff81f2086.png -------------------------------------------------------------------------------- /content/part 2/media/98f67563389b329834fcff4c7e27ad57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/98f67563389b329834fcff4c7e27ad57.png -------------------------------------------------------------------------------- /content/part 2/media/9d3012e9d9141a81b80052f4a0759369.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/9d3012e9d9141a81b80052f4a0759369.jpg -------------------------------------------------------------------------------- /content/part 2/media/a18e6e86e8ab561037718d63ae71cfa6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/a18e6e86e8ab561037718d63ae71cfa6.png -------------------------------------------------------------------------------- /content/part 2/media/a4a53a714915e51f67d86df0559f5830.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/a4a53a714915e51f67d86df0559f5830.png -------------------------------------------------------------------------------- /content/part 2/media/a531e77cc2765b3c77ac31ab39da494f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/a531e77cc2765b3c77ac31ab39da494f.png -------------------------------------------------------------------------------- /content/part 2/media/b29afb845308d90aaeb379a11b609225.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/b29afb845308d90aaeb379a11b609225.jpg -------------------------------------------------------------------------------- /content/part 2/media/c9c27edc27b88355947bc4882b3e3f13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/c9c27edc27b88355947bc4882b3e3f13.png -------------------------------------------------------------------------------- /content/part 2/media/caed5dd64637dc2e2cfb185a8e537147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/caed5dd64637dc2e2cfb185a8e537147.png -------------------------------------------------------------------------------- /content/part 2/media/cc7ba09a72f71e2d6ae02bd69b79081b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/cc7ba09a72f71e2d6ae02bd69b79081b.jpg -------------------------------------------------------------------------------- /content/part 2/media/d4d3f73ed9bf3ac77e0b0a9b9bddc790.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/d4d3f73ed9bf3ac77e0b0a9b9bddc790.png -------------------------------------------------------------------------------- /content/part 2/media/db572e0923acd8d22e67a4e1875fb206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/db572e0923acd8d22e67a4e1875fb206.png -------------------------------------------------------------------------------- /content/part 2/media/df5d430bdbb85be5f55e94af661a1a42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/df5d430bdbb85be5f55e94af661a1a42.png -------------------------------------------------------------------------------- /content/part 2/media/e3863efd88c9286f7c3eb78e25b98583.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/e3863efd88c9286f7c3eb78e25b98583.png -------------------------------------------------------------------------------- /content/part 2/media/e8d17495bbb483606ae1e6e6afa38b35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/e8d17495bbb483606ae1e6e6afa38b35.png -------------------------------------------------------------------------------- /content/part 2/media/ee32291996fb8ce5b2dfcfee4f7ac947.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/ee32291996fb8ce5b2dfcfee4f7ac947.png -------------------------------------------------------------------------------- /content/part 2/media/endpic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/endpic.jpg -------------------------------------------------------------------------------- /content/part 2/media/f2e5df06cf5ea9c6f1b7b033bf5386cf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/f2e5df06cf5ea9c6f1b7b033bf5386cf.jpg -------------------------------------------------------------------------------- /content/part 2/media/f666a719d3cc9d1785c04d2824232e92.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/f666a719d3cc9d1785c04d2824232e92.jpg -------------------------------------------------------------------------------- /content/part 2/media/faa31b20c807cd58c5e73bee73a4c1a9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/faa31b20c807cd58c5e73bee73a4c1a9.png -------------------------------------------------------------------------------- /content/part 2/media/title.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 2/media/title.jpg -------------------------------------------------------------------------------- /content/part 3/README.md: -------------------------------------------------------------------------------- 1 | ![](media/ce9a54817238b292f9c6d4b001ce5096.jpg) 2 | 3 | # 【基于物理的渲染(PBR)白皮书】(三) 迪士尼原则的BRDF与BSDF相关总结 4 | 5 | 本文的知乎专栏版本:https://zhuanlan.zhihu.com/p/60977923 6 | 7 |
8 | 9 | 基于物理的渲染(Physically Based Rendering , PBR)技术,自迪士尼在SIGGRAPH 2012上提出了著名的“迪士尼原则的BRDF(Disney Principled BRDF)”之后,由于其高度的易用性以及方便的工作流,已经被电影和游戏业界广泛使用,并成为了次时代高品质渲染技术的代名词。 10 | 11 | 本文的主要内容,便是对推动了这次基于物理的渲染革命的“迪士尼原则的BRDF(Disney Principled BRDF)”,以及随后2015年提出的“迪士尼BSDF(Disney BSDF)”进行深入的探讨、总结与提炼。 12 | 13 | 全文主要内容脉络如下: 14 | 15 | - 迪士尼与基于物理的渲染的发展 16 | 17 | - 迪士尼采用的BRDF可视化方案与工具 18 | 19 | - 迪士尼对测量材质数据库的观察结论 20 | 21 | - Diffuse项的观察结论 22 | 23 | - Specular D 项的观察结论 24 | 25 | - Specular F 项的观察结论 26 | 27 | - Specular G 项的观察结论 28 | 29 | - 布料(Fabric)材质的观察结论 30 | 31 | - 彩虹色(Iridescence)的观察结论 32 | 33 | - 迪士尼原则的BRDF(Disney Principled BRDF) 34 | 35 | - Disney Principled BRDF的理念 36 | 37 | - Disney Principled BRDF的参数 38 | 39 | - Disney Principled BRDF的着色模型 40 | 41 | - 核心BRDF模型 42 | 43 | - 漫反射项(Diffuse):Disney Diffuse 44 | 45 | - 法线分布项(Specular D):GTR 46 | 47 | - 菲涅尔项(Specular F):Schlick Fresnel 48 | 49 | - 几何项(Specular G):Smith-GGX 50 | 51 | - 迪士尼原则的分层材质(Disney Principled Layers Material) 52 | 53 | - Disney Principled BRDF的实现代码 54 | 55 | - 迪士尼BSDF(Disney BSDF) 56 | 57 | 在文章开头,依然是首先放出总结了本文核心内容脉络的两张思维导图: 58 | 59 | ![](media/d14f3ca5eaacb5257aabf828e0b41c86.png) 60 | 61 | ![](media/8c2a369a71823ccc85df0aced1b46131.png) 62 | 63 | OK,让我们直接开始正文。 64 | 65 |
66 | 67 | # 一、迪士尼与基于物理的渲染的发展 68 | 69 | 70 | 正如这个系列前文已经提到的,基于物理的渲染其实早在20世纪就已经在图形学业界有了一些萌芽,2010年在SIGGRAPH上就已经有公开讨论的Course《SIGGRAPH 2010 Course: Physically-Based Shading Models in Film and Game Production》,而直到2012~2013年,才正式进入大众的视野,渐渐被电影和游戏业界广泛使用。 71 | 72 | 究其原因,一方面是因为硬件性能的限制,另一方面,则是因为早期的基于物理的渲染模型包含大量复杂而晦涩的物理参数,不利于美术人员的理解、使用和快速产出。 73 | 74 | 迪士尼则是这次PBR革命的重要推动者。在创作电影《无敌破坏王(Wreck-It Ralph)》期间,迪士尼动画工作室对基于物理的渲染进行了系统的研究,最终开发出了一种几乎可以用于电影的每个表面新的BRDF模型(头发除外),即迪士尼原则的BRDF(Disney Principled BRDF)。 75 | 76 | ![](media/b4b78d318fffffa1d4a34238f838cfaa.jpg) 77 | 78 | 图 迪士尼动画电影《无敌破坏王》(2012) 79 | 80 | 随后,迪士尼动画工作室的Brent Burley于SIGGRAPH 2012上进行了著名的talk《Physically-based shading at Disney》,正式提出了迪士尼原则的BRDF(Disney Principled BRDF),由于其高度的通用性,将材质复杂的物理属性,用非常直观的少量变量表达了出来(如金属度metallic和粗糙度roughness),在电影业界和游戏业界引起了不小的轰动。从此,基于物理的渲染正式进入大众的视野。 81 | 82 | ![](media/4747c17311dca6610243229defd4241f.png) 83 | 84 | 图 SIGGRAPH 2012《Physically-based shading at Disney》 85 | 86 | 在2012年受到Disney Principled BRDF的启发后,主流游戏引擎都开始从传统的渲染工作流转移到基于物理的渲染工作流。 87 | 88 | 以下是主流游戏引擎转移到基于物理的渲染的时间节点: 89 | 90 | - 【SIGGRAPH 2013】 UE4 :《Real Shading in Unreal Engine 4》 91 | 92 | - 【SIGGRAPH 2014】 Frostbite(寒霜): 《Moving Frostbite to PBR》 93 | 94 | - 【GDC 2014】 Unity:《Physically Based Shading in Unity》 95 | 96 | 下面,让我们正式开始分析、提炼和总结SIGGRAPH 2012上迪士尼进行的talk《Physically-based shading at Disney》,深入了解其能让基于物理的渲染技术普及于游戏和电影工业的背后原因。 97 | 98 | 99 | 100 | 101 | 102 |
103 | 104 | 105 | # 二、迪士尼采用的BRDF可视化方案与工具 106 | 107 | 在BRDF可视化方面,迪士尼在分享中提出了三个方面的工具与资源,可以总结如下: 108 | 109 | - **MERL 100 BRDF材质库**。Matusik等人[Matusik et al.2003]捕获的一组100个各向同性BRDF材质样本库。涵盖了各种材质,包括油漆,木材,金属,织物,石材,橡胶,塑料和其他合成材质。对学术与研究免费授权。 110 | 111 | - MERL BRDF主站 : 112 | 113 | - Database地址: 114 | 115 | - **BRDF Explorer**。迪士尼为分析、比较和新开发BRDF模型而开发的可视化工具。该工具在分析测量材质,比较现有模型,以及开发新模型方面具有无可估量的价值。 116 | 117 | - 官方主页: 118 | 119 | - GitHub地址: 120 | 121 | - **BRDF Image Slice切片**。将θh与θd作为横轴和纵轴,对观察到的材质的BRDF进行建模的2D图像切片。 122 | 123 | ![](media/8b535f71d0c840167cf2a882b955b01d.jpg) 124 | 125 | 图 “MERL 100”BRDF数据库 126 | 127 | ![](media/d3c9e65c45ecfc8b65e3a328b5c500de.png) 128 | 129 | 图 BRDF Explorer 130 | 131 | ![](media/cb40bb5b457d25f410ed23820bab6135.png) 132 | 133 | 图:红色塑料(red-plastic)和镜面红色塑料(specular-red-plastic)的BRDF图像切片以及“切片空间(Slice Space)”示意图。 134 | 135 | ![](media/d9a44d23769175e75a0b768d1a73bf30.png) 136 | 137 | 图 MERL 100 BRDF数据库的图像切片(Image Slice) 138 | 139 | 140 |
141 | 142 | # 三、迪士尼对MERL材质数据库的观察结论 143 | 144 | 145 | 在提出Disney Principled 146 | BRDF之前,Disney已经做了大量的前置工作,其中,最主要的工作便是对材质数据库的观察与进行理论分析。按照不同项的分类,可以总结为如下6个部分: 147 | 148 | - Diffuse项的观察结论 149 | 150 | - Specular D 项的观察结论 151 | 152 | - Specular F 项的观察结论 153 | 154 | - Specular G 项的观察结论 155 | 156 | - 布料(Fabric)材质的观察结论 157 | 158 | - 彩虹色(Iridescence)的观察结论 159 | 160 | 下文将对其分别进行相关总结。 161 | 162 |
163 | 164 | ## 3.1 Diffuse项的观察结论 165 | 166 | - 漫反射(Diffuse)表示折射(refracted)到表面,经过散射(scattered)和部分吸收(partially absorbed),最终重新出表面出射的光。 167 | 168 | - 被着色的非金属材质的任意出射部分都可以视为漫反射。 169 | 170 | - 通过观察得出,很少有材质的漫反射表现和Lambert反射模型相吻合。即需要更准确的漫反射模型。 171 | 172 | - 通过观察得出掠射逆反射(grazing retroreflection)有明显的着色现象,即可以将掠射逆反射(grazing retroreflection)也看做一种漫反射现象。 173 | 174 | - 粗糙度会对菲涅尔折射造成影响,而一般的漫反射模型如Lmabert忽略了这种影响。 175 | 176 | ![](media/a49a4c5075a08c4e5d2b98fb9c4a9a23.png) 177 | 178 | 图 表现出漫反射颜色变化的材质。 上:渲染球体上的点光源响应; 下:BRDF图像切片。 179 | 180 | ![](media/b6ab34debdd0317c0308751a307118cf.png) 181 | 182 | 图 红色塑料,镜面红色塑料和Lambert漫反射的点光源响应 183 | 184 | - Oren-Nayar模型(1995)预测粗糙漫反射表面逆向反射的增加会使漫反射形状变平。然而,其逆向反射波峰不像测量数据那样强,并且粗糙测量的材质通常不显示漫反射的平坦化。 185 | 186 | - Hanrahan-Krueger模型(1993),源自次表面散射理论,也预测了漫反射形状的平坦化,但在边缘处没有足够强的峰值。与Oren-Nayar相比,该模型呈现出完美光滑的表面。下图中比较了Oren-Nayar、Hanrahan-Krueger和Lambert模型。 187 | 188 | ![](media/622608171636a9037067b25cf12705d8.png) 189 | 190 | 图 Lambert,Oren-Nayar和Hanrahan-Krueger漫反射模型的BRDF切片和点光源响应。 191 | 192 |
193 | 194 | ## 3.2 Specular D 项的观察结论 195 | 196 | - 微观分布函数D(θh)可以从测量材质的逆反射(retroreflective)响应观察得到。 197 | 198 | - 绝大多数MERL材质都有镜面波瓣(specular lobes),且尾部比传统的镜面模型长得多。 即反射分布项需要更宽的尾部。 199 | 200 | - GGX比其他分布具有更长的尾部,但仍然无法捕捉到铬金属(chrome)样本的闪亮亮点。 201 | 202 | ![](media/64c31945914440261b6cb043f65ef314.png) 203 | 204 | 图 MERL 铬金属(chrome)与几个镜面分布的比较。 左:镜面波峰的对数比例图); 黑色曲线表示MERL 铬金属(chrome),红色曲线表示 GGX分布(*α*= 0.006),绿色曲线表示Beckmann分布(*m* = 0.013),蓝色曲线表示 Blinn Phong(*n* = 12000),其中,绿色曲线和蓝色曲线基本重合。 右: chrome 、GGX和Beckmann分布的点光源响应。 205 | 206 |
207 | 208 | ## 3.3 Specular F 项的观察结论 209 | 210 | - 菲涅尔反射系数F(θd)表示了当光和视图矢量分开时镜面反射的增加。 211 | 212 | - 光滑表面在切线入射时有将接近100%的镜面反射。 213 | 214 | - 对于粗糙表面,无法实现100%的镜面反射,但反射率仍会将变得越来越高。 215 | 216 | - 每种材质在掠射角附近都显示出一些反射率的增加。 217 | 218 | - 掠射角入射附近的许多曲线的陡度已经大于菲涅尔效应的预测值。 219 | 220 |
221 | 222 | ## 3.4 Specular G 项的观察结论 223 | 224 | - 几何项的影响可以间接地看作其对方向反射率(directional albedo)的影响 225 | 226 | - 大多数材质的方向反射率(directional albedo)对于前70度是相对平坦的,并且切线入射处的反射率与表面粗糙度密切相关。 227 | 228 | - 几何项的选择会对反射率产生影响,反过来又会对表面外观产生影响。 229 | 230 | - 完全省略G项和1/cosθl cosθv项的模型,被称为“No G”模型,会导致在掠射角处过暗的响应。 231 | 232 | ![](media/3c0e1a83631f7cac58a1f3e9cd08ec89.png) 233 | 234 | 图 几种镜面反射几何模型的反射率图示。 所有图中都使用相同的D(GGX / TR)项和F项。 左图:光滑表面(α= 0.02); 右图:粗糙表面(α= 0.5)。 其中,“No G”模型已去除G和1/cosθl cosθv项的计算。 235 | 236 |
237 | 238 | ## 3.5 布料(Fabric)材质的观察结论 239 | 240 | - 许多布料样本在掠射角处呈现出镜面反射的色调,并且还具有比具有十分粗糙的材质更强的菲涅尔波峰。 241 | 242 | - 布料具有有色的掠射反射,可以理解为是其轮廓附近获取到材质颜色的透射纤维(transmissive fibers)造成的。 243 | 244 | - 布料在掠射角处的额外光泽增加,超出了普通微平面模型的预测范围。 245 | 246 | ![](media/f98c4db0e139f70918098b8075a4a98e.png) 247 | 248 | 图 各种布料样本的BRDF图像切片 249 | 250 |
251 | 252 | ## 3.6 彩虹色(Iridescence)的观察结论 253 | 254 | - 变色涂料(color-changing-paint)在(θh,θd)空间上显示出连续的色块,切对φd的依赖性最小。 255 | 256 | - 彩虹色远离镜面峰值的反射率非常小,所以可以将彩虹色理解为一种镜面反射现象。 257 | 258 | - 可以将镜面色调调制为θh和θd的函数,配合小尺寸纹理贴图对彩虹色进行建模。 259 | 260 | ![](media/67c8b523ac8b06b694441c1702516ce9.png) 261 | 262 | 图 3种变色涂料(color-changing-paint)的BRDF图像切片。上图:原始数据; 下图:通过每像素缩放1/ max(r, g, b)生成的相应色度图像。 263 | 264 | 265 |
266 | 267 | # 四、迪士尼原则的BRDF(Disney Principled BRDF) 268 | 269 | 270 | ## 4.1 Disney Principled BRDF的理念 271 | 272 | 在2012年迪士尼原则的BRDF被提出之前,基于物理的渲染都需要大量复杂而不直观的参数,此时PBR的优势,并没有那么明显。 273 | 274 | 在2012年迪士尼提出,他们的着色模型是艺术导向(Art Directable)的,而不一定要是完全物理正确(physically correct) 的,并且对微平面BRDF的各项都进行了严谨的调查,并提出了清晰明确而简单的解决方案。 275 | 276 | 迪士尼的理念是开发一种“原则性”的易用模型,而不是严格的物理模型。正因为这种艺术导向的易用性,能让美术同学用非常直观的少量参数,以及非常标准化的工作流,就能快速实现涉及大量不同材质的真实感的渲染工作。而这对于传统的着色模型来说,是不可能完成的任务。 277 | 278 | 279 | 迪士尼原则的BRDF(Disney Principled BRDF)核心理念如下: 280 | 281 | - 应使用直观的参数,而不是物理类的晦涩参数。 282 | 283 | - 参数应尽可能少。 284 | 285 | - 参数在其合理范围内应该为0到1。 286 | 287 | - 允许参数在有意义时超出正常的合理范围。 288 | 289 | - 所有参数组合应尽可能健壮和合理。 290 | 291 |
292 | 293 | 而从本质上而言,Disney Principled BRDF模型是金属和非金属的混合型模型,最终结果是基于金属度(metallice)在金属BRDF和非金属BRDF之间进行线性插值。 294 | 295 | ![](media/b5b38788d5067a00c7e957791394692b.png) 296 | 297 | 图 Disney BRDF模型是金属和非金属基于金属度(metallic)的线性混合模型 298 | 299 | 正因为这套新的渲染理念统一了金属和非金属的材质表述,可以仅通过少量的参数来涵盖自然界中绝大多数的材质,并可以得到非常逼真的渲染品质。 300 | 301 | 也正因如此,在PBR的金属/粗糙度工作流中,固有色(baseColor)贴图才会同时包含金属和非金属的材质数据: 302 | 303 | - 金属的反射率值 304 | 305 | - 非金属的漫反射颜色 306 | 307 |
308 | 309 | ## 4.2 Disney Principled BRDF的参数 310 | 311 | 以上述理念为基础,迪士尼动画工作室对每个参数的添加进行了把关,最终得到了一个颜色参数(baseColor)和下面描述的十个标量参数: 312 | 313 | 314 | - baseColor(固有色):表面颜色,通常由纹理贴图提供。 315 | 316 | - subsurface(次表面):使用次表面近似控制漫反射形状。 317 | 318 | - metallic(金属度):金属(0 = 电介质,1 =金属)。这是两种不同模型之间的线性混合。金属模型没有漫反射成分,并且还具有等于基础色的着色入射镜面反射。 319 | 320 | - specular(镜面反射强度):入射镜面反射量。用于取代折射率。 321 | 322 | - specularTint(镜面反射颜色):对美术控制的让步,用于对基础色(basecolor)的入射镜面反射进行颜色控制。掠射镜面反射仍然是非彩色的。 323 | 324 | - roughness(粗糙度):表面粗糙度,控制漫反射和镜面反射。 325 | 326 | - anisotropic(各向异性强度):各向异性程度。用于控制镜面反射高光的纵横比。(0 =各向同性,1 =最大各向异性。) 327 | 328 | - sheen(光泽度):一种额外的掠射分量(grazing component),主要用于布料。 329 | 330 | - sheenTint(光泽颜色):对sheen(光泽度)的颜色控制。 331 | 332 | - clearcoat(清漆强度):有特殊用途的第二个镜面波瓣(specular lobe)。 333 | 334 | - clearcoatGloss(清漆光泽度):控制透明涂层光泽度,0 = “缎面(satin)”外观,1 = “光泽(gloss)”外观。 335 | 336 | ![](media/8c18a8760406f32ff5a66be9aed14e91.png) 337 | 338 | 图 Disney Principled BRDF的参数 339 | 340 | 341 |
342 | 343 | ## 4.3 Disney Principled BRDF的着色模型 344 | 345 | ### 4.3.1 核心BRDF 模型 346 | 347 | 核心BRDF模型方面,Disney采用了通用的microfacet Cook-Torrance BRDF着色模型: 348 | 349 | ![](media/ce169fd7f8b4b9eb1ac8f68d35e3a570.png) 350 | 351 | 352 | 其中: 353 | 354 | - Diffuse为漫反射项 355 | 356 | - ![](media/c1b2fc1ec5d1e5c6380ffacfb31cff28.png)为镜面反射项,其中: 357 | 358 | - D为微平面分布函数,主要负责镜面反射波峰(specular peak)的形状。 359 | 360 | - F为菲涅尔反射系数(Fresnel reflection coefficient) 361 | 362 | - G为几何衰减(geometric attenuation)/ 阴影项(shadowing factor)。 363 | 364 | 365 | 下面对这些项分别进行说明。 366 | 367 | 368 |
369 | 370 | ### 4.3.2 漫反射项(Diffuse):Disney Diffuse 371 | 372 | Disney表示,Lambert漫反射模型在边缘上通常太暗,而通过尝试添加菲涅尔因子以使其在物理上更合理,但会导致其更暗。 373 | 374 | 所以,根据对Merl 100材质库的观察,Disney开发了一种用于漫反射的新的经验模型,以在光滑表面的漫反射菲涅尔阴影和粗糙表面之间进行平滑过渡。 375 | 376 | 思路方面,Disney使用了Schlick Fresnel近似,并修改掠射逆反射(grazing retroreflection response)以达到其特定值由粗糙度值确定,而不是简单为0。 377 | 378 | Disney Diffuse漫反射模型的公式为: 379 | 380 | ![](media/5bedec7e9fd8594bb6ffcbff3aaeb9ad.png) 381 | 382 | 383 | 其中, 384 | 385 | ![](media/5da5401739ea707110ad5dc81ec4dccb.png) 386 | 387 | 388 | 以下为上述Disney Diffuse的Shader实现代码: 389 | 390 | 391 | // [Burley 2012, "Physically-Based Shading at Disney"] 392 | float3 Diffuse_Burley_Disney( float3 DiffuseColor, float Roughness, float NoV, float NoL, float VoH ) 393 | { 394 | float FD90 = 0.5 + 2 * VoH * VoH * Roughness; 395 | float FdV = 1 + (FD90 - 1) * Pow5( 1 - NoV ); 396 | float FdL = 1 + (FD90 - 1) * Pow5( 1 - NoL ); 397 | return DiffuseColor * ( (1 / PI) * FdV * FdL ); 398 | } 399 | 400 | 401 | 402 |
403 | 404 | ### 4.3.3 法线分布项(Specular D):GTR 405 | 406 | 在流行的模型中,GGX拥有最长的尾部。而GGX其实与Blinn (1977)推崇的Trowbridge-Reitz(TR)(1975)分布等同。然而,对于许多材质而言,即便是GGX分布,仍然没有足够长的尾部。 407 | 408 | Trowbridge-Reitz(TR)的公式为: 409 | 410 | 411 | ![](media/da734f49bb6c39761b60a5e655caeecd.png) 412 | 413 | 其中: 414 | 415 | - c为缩放常数(scaling constant) 416 | 417 | - α为粗糙度参数(roughness parameter),其值在0和1之间;α=0产生完全平滑的分布(即*θh* = 0时的delta函数),α=1产生完全粗糙或均匀的分布。 418 | 419 | 来自Berry(1923)的分布函数和Trowbridge-Reitz分布具有非常相似的形式,但指数为1而不是2,从而导致了更长的尾部: 420 | 421 | 422 | ![](media/11fd09fe8053bc5883bcb016196d0d9b.png) 423 | 424 | 通过,Trowbridge-Reitz和Berry的形式的对比,Disney发现其具有相似的形式,只是幂次不同,于是,Disney将Trowbridge-Reitz进行了N次幂的推广,并将其取名为Generalized-Trowbridge-Reitz,GTR: 425 | 426 | 427 | ![](media/6fb3430619d35fecc4267b24f0edf6cd.png) 428 | 429 | 可以发现,上式中: 430 | 431 | - γ=1时,GTR即Berry分布 432 | 433 | - γ=2时,GTR即Trowbridge-Reitz分布 434 | 435 | 以下为各种γ值的GTR分布曲线与θh的关系图示: 436 | 437 | ![](media/becba69c354266eb02e9ec41bafed88d.png) 438 | 439 | 图 各种γ值的GTR分布曲线与*θh*的关系 440 | 441 | 另外,Disney Principled BRDF中使用了两个固定的镜面反射波瓣(specular lobe),且都使用GTR模型,可以总结如下: 442 | 443 | - 主波瓣(primary lobe) 444 | 445 | - 使用γ= 2的GTR(即GGX分布) 446 | 447 | - 代表基础底层材质(Base Material)的反射 448 | 449 | - 可为各项异性(anisotropic) 或各项同性(isotropic)的金属或非金属 450 | 451 | - 次级波瓣(secondary lobe) 452 | 453 | - 使用γ= 1的GTR(即Berry分布) 454 | 455 | - 代表基础材质上的清漆层(ClearCoat Layer)的反射 456 | 457 | - 一般为各项同性(isotropic)的非金属材质,即清漆层(ClearCoat Layer) 458 | 459 | 以下是γ= 1和γ= 2时GTR分布的Shader实现代码: 460 | 461 | 462 | // Generalized-Trowbridge-Reitz distribution 463 | float D_GTR1(float alpha, float dotNH) 464 | { 465 | float a2 = alpha * alpha; 466 | float cos2th = dotNH * dotNH; 467 | float den = (1.0 + (a2 - 1.0) * cos2th); 468 | 469 | return (a2 - 1.0) / (PI * log(a2) * den); 470 | } 471 | 472 | float D_GTR2(float alpha, float dotNH) 473 | { 474 | float a2 = alpha * alpha; 475 | float cos2th = dotNH * dotNH; 476 | float den = (1.0 + (a2 - 1.0) * cos2th); 477 | 478 | return a2 / (PI * den * den); 479 | } 480 | 481 | 482 | 以及各项异性的版本: 483 | 484 | 485 | float D_GTR2_aniso(float dotHX, float dotHY, float dotNH, float ax, float ay) 486 | { 487 | float deno = dotHX * dotHX / (ax * ax) + dotHY * dotHY / (ay * ay) + dotNH * dotNH; 488 | return 1.0 / (PI * ax * ay * deno * deno); 489 | 490 | } 491 | 492 | 493 | 494 | 495 |
496 | 497 | ### 4.3.4 菲涅尔项(Specular F):Schlick Fresnel 498 | 499 | 菲涅尔项(Specular F)方面,Disney表示Schlick Fresnel近似已经足够精确,且比完整的菲涅尔方程简单得多; 而由于其他因素,Schlick Fresne近似引入的误差明显小于其他因素产生的误差。Schlick Fresnel 近似公式如下: 500 | 501 | ![](media/071dcb665386a2a56f1cb84352dc60ce.png) 502 | 503 | 其中: 504 | 505 | - 常数F0表示垂直入射时的镜面反射率。 506 | 507 | - θd为半矢量h和视线矢量v之间的夹角 508 | 509 | 以下为Schlick Fresnel的Shader实现代码: 510 | 511 | ``` 512 | // [Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering"] 513 | float3 F_Schlick(float HdotV, float3 F0) 514 | { 515 | return F0 + (1 - F0) * pow(1 - HdotV , 5.0)); 516 | } 517 | ``` 518 | 519 | 520 | 一般建议实现一个自定义的Pow5工具函数替换pow(xx, 5.0)的调用,以省去pow函数带来的稍昂贵的性能开销。 521 | 522 | Pow5函数实现很简单,如下所示: 523 | ``` 524 | half Pow5(half v) 525 | { 526 | return v * v * v * v * v; 527 | } 528 | ``` 529 | 530 | 另外,Disney在SIGGRAPH 2015上对此项进行了修订,提出在介质间相对IOR接近1时,Schlick近似误差较大,这时可以直接用精确的菲涅尔方程: 531 | 532 | ![](media/9c611a836080f04d7c064b0e52930398.png) 533 | 534 | 535 |
536 | 537 | ### 4.3.5 几何项(Specular G):Smith-GGX 538 | 539 | 几何项(Specular G)方面,对于主镜面波瓣(primary specular lobe),Disney参考了 Walter的近似方法,使用Smith GGX导出的G项,并将粗糙度参数进行重映射以减少光泽表面的极端增益,即将α 从[0, 1]重映射到[0.5, 1],α的值为(0.5 + roughness/2)^2。从而使几何项的粗糙度变化更加平滑,更便于美术人员的使用。 540 | 541 | 以下为Smith GGX的几何项的表达式: 542 | 543 | ![](media/0138e3d33d920148a6a652f2f47158d3.png) 544 | 545 | ![](media/cab428cf33e54a71d70cc9fc05c856c3.png) 546 | 547 | ![](media/5336bcb848115d87c783424111bcf204.png) 548 | 549 | 550 | 另外,对于对清漆层进行处理的次级波瓣(secondary lobe),Disney没有使用Smith G推导,而是直接使用固定粗糙度为0.25的GGX的 G项,便可以得到合理且很好的视觉效果。 551 | 552 | 几何项的Shader实现代码如下: 553 | 554 | ``` 555 | // Smith GGX G项,各项同性版本 556 | float smithG_GGX(float NdotV, float alphaG) 557 | { 558 | float a = alphaG * alphaG; 559 | float b = NdotV * NdotV; 560 | return 1 / (NdotV + sqrt(a + b - a * b)); 561 | } 562 | 563 | // Smith GGX G项,各项异性版本 564 | // Derived G function for GGX 565 | float smithG_GGX_aniso(float dotVN, float dotVX, float dotVY, float ax, float ay) 566 | { 567 | return 1.0 / (dotVN + sqrt(pow(dotVX * ax, 2.0) + pow(dotVY * ay, 2.0) + pow(dotVN, 2.0))); 568 | } 569 | 570 | 571 | // GGX清漆几何项 572 | // G GGX function for clearcoat 573 | float G_GGX(float dotVN, float alphag) 574 | { 575 | float a = alphag * alphag; 576 | float b = dotVN * dotVN; 577 | return 1.0 / (dotVN + sqrt(a + b - a * b)); 578 | } 579 | ``` 580 | 581 | 同样,Disney在SIGGRAPH 2015上也对G项进行了修订,他们基于Heitz的分析[Heitz 2014],淘汰了对于主镜面波瓣的Smith G粗糙度的特殊重映射,采用了Heitz各向异性的G,后文会对这次修订做更深入的探讨。 582 | 583 | 584 |
585 | 586 | # 五、迪士尼原则的分层材质(Disney Principled Layers Material) 587 | 588 | 589 | 迪士尼原则的分层材质(Disney Principled Layers Material)的核心设计原则是,所有参数需允许健壮地插值,以基于纹理Mask在不同材质之间进行线性混合,实现复杂的材质外观。 590 | 591 | 这样的好处是使所有参数是归一化的并且至少是感知线性的,材质通常以非常直观的方式插值。如下图,所有10个参数都是线性插值的。 592 | 593 | ![](media/5e2747f029d59b61ef5679111441d9f9.png) 594 | 595 | 图 使用Disney Principled Shading Model在闪亮的金属金色和蓝色橡胶之间线性插值 596 | 597 | 在创作过程中,美术人员通常会从一个材质预设列表中进行选择,然后使用纹理遮罩简单地在其之间进行混合。实时证明,这套方案非常成功的,大大简化了工作流程,提高了材质的一致性,并使着色器计算非常高效。迪士尼使用的对应的分层着色器的UI如下图所示。 598 | 599 | ![](media/0cbe51fa24d47bffbecd3ae513fac8ba.png) 600 | 601 | 图 显示材质图层的着色器编辑器的屏幕截图。mask表达式中的变量指的是空间变化的着色器模块,通常是mask纹理贴图。 602 | 603 |
604 | 605 | # 六、Disney Principled BRDF的实现代码 606 | 607 | 608 | Disney在2012年Disney Principled BRDF提出时,已经在GitHub上开源了BRDF Explorer,以及Disney Principled BRDF的实现源码,其GitHub链接为: 609 | 610 | 611 | 612 | 需要注意的是,这段源码使用的是特有的着色语言,但其实和一般的CG着色语言非常相似。 613 | 614 | 为了配合与本文内容结合阅读与理解,这里也将这段经典的Shader代码引用到本文中来: 615 | 616 | 617 | ``` 618 | ::begin parameters 619 | color baseColor .82 .67 .16 620 | float metallic 0 1 0 621 | float subsurface 0 1 0 622 | float specular 0 1 .5 623 | float roughness 0 1 .5 624 | float specularTint 0 1 0 625 | float anisotropic 0 1 0 626 | float sheen 0 1 0 627 | float sheenTint 0 1 .5 628 | float clearcoat 0 1 0 629 | float clearcoatGloss 0 1 1 630 | ::end parameters 631 | 632 | 633 | ::begin shader 634 | 635 | const float PI = 3.14159265358979323846; 636 | 637 | float sqr(float x) { return x*x; } 638 | 639 | float SchlickFresnel(float u) 640 | { 641 | float m = clamp(1-u, 0, 1); 642 | float m2 = m*m; 643 | return m2*m2*m; // pow(m,5) 644 | } 645 | 646 | float GTR1(float NdotH, float a) 647 | { 648 | if (a >= 1) return 1/PI; 649 | float a2 = a*a; 650 | float t = 1 + (a2-1)*NdotH*NdotH; 651 | return (a2-1) / (PI*log(a2)*t); 652 | } 653 | 654 | float GTR2(float NdotH, float a) 655 | { 656 | float a2 = a*a; 657 | float t = 1 + (a2-1)*NdotH*NdotH; 658 | return a2 / (PI * t*t); 659 | } 660 | 661 | float GTR2_aniso(float NdotH, float HdotX, float HdotY, float ax, float ay) 662 | { 663 | return 1 / (PI * ax*ay * sqr( sqr(HdotX/ax) + sqr(HdotY/ay) + NdotH*NdotH )); 664 | } 665 | 666 | float smithG_GGX(float NdotV, float alphaG) 667 | { 668 | float a = alphaG*alphaG; 669 | float b = NdotV*NdotV; 670 | return 1 / (NdotV + sqrt(a + b - a*b)); 671 | } 672 | 673 | float smithG_GGX_aniso(float NdotV, float VdotX, float VdotY, float ax, float ay) 674 | { 675 | return 1 / (NdotV + sqrt( sqr(VdotX*ax) + sqr(VdotY*ay) + sqr(NdotV) )); 676 | } 677 | 678 | vec3 mon2lin(vec3 x) 679 | { 680 | return vec3(pow(x[0], 2.2), pow(x[1], 2.2), pow(x[2], 2.2)); 681 | } 682 | 683 | 684 | vec3 BRDF( vec3 L, vec3 V, vec3 N, vec3 X, vec3 Y ) 685 | { 686 | float NdotL = dot(N,L); 687 | float NdotV = dot(N,V); 688 | if (NdotL < 0 || NdotV < 0) return vec3(0); 689 | 690 | vec3 H = normalize(L+V); 691 | float NdotH = dot(N,H); 692 | float LdotH = dot(L,H); 693 | 694 | vec3 Cdlin = mon2lin(baseColor); 695 | float Cdlum = .3*Cdlin[0] + .6*Cdlin[1] + .1*Cdlin[2]; // luminance approx. 696 | 697 | vec3 Ctint = Cdlum > 0 ? Cdlin/Cdlum : vec3(1); // normalize lum. to isolate hue+sat 698 | vec3 Cspec0 = mix(specular*.08*mix(vec3(1), Ctint, specularTint), Cdlin, metallic); 699 | vec3 Csheen = mix(vec3(1), Ctint, sheenTint); 700 | 701 | // Diffuse fresnel - go from 1 at normal incidence to .5 at grazing 702 | // and mix in diffuse retro-reflection based on roughness 703 | float FL = SchlickFresnel(NdotL), FV = SchlickFresnel(NdotV); 704 | float Fd90 = 0.5 + 2 * LdotH*LdotH * roughness; 705 | float Fd = mix(1.0, Fd90, FL) * mix(1.0, Fd90, FV); 706 | 707 | // Based on Hanrahan-Krueger brdf approximation of isotropic bssrdf 708 | // 1.25 scale is used to (roughly) preserve albedo 709 | // Fss90 used to "flatten" retroreflection based on roughness 710 | float Fss90 = LdotH*LdotH*roughness; 711 | float Fss = mix(1.0, Fss90, FL) * mix(1.0, Fss90, FV); 712 | float ss = 1.25 * (Fss * (1 / (NdotL + NdotV) - .5) + .5); 713 | 714 | // specular 715 | float aspect = sqrt(1-anisotropic*.9); 716 | float ax = max(.001, sqr(roughness)/aspect); 717 | float ay = max(.001, sqr(roughness)*aspect); 718 | float Ds = GTR2_aniso(NdotH, dot(H, X), dot(H, Y), ax, ay); 719 | float FH = SchlickFresnel(LdotH); 720 | vec3 Fs = mix(Cspec0, vec3(1), FH); 721 | float Gs; 722 | Gs = smithG_GGX_aniso(NdotL, dot(L, X), dot(L, Y), ax, ay); 723 | Gs *= smithG_GGX_aniso(NdotV, dot(V, X), dot(V, Y), ax, ay); 724 | 725 | // sheen 726 | vec3 Fsheen = FH * sheen * Csheen; 727 | 728 | // clearcoat (ior = 1.5 -> F0 = 0.04) 729 | float Dr = GTR1(NdotH, mix(.1,.001,clearcoatGloss)); 730 | float Fr = mix(.04, 1.0, FH); 731 | float Gr = smithG_GGX(NdotL, .25) * smithG_GGX(NdotV, .25); 732 | 733 | return ((1/PI) * mix(Fd, ss, subsurface)*Cdlin + Fsheen) 734 | * (1-metallic) 735 | + Gs*Fs*Ds + .25*clearcoat*Gr*Fr*Dr; 736 | } 737 | 738 | ::end shader 739 | 740 | ``` 741 | 742 |
743 | 744 | # 七、迪士尼BSDF(Disney BSDF) 745 | 746 | 747 | PS: 由于Disney BSDF天生适合离线渲染器使用,对游戏引擎和实时渲染的参考意义比较有限,加上篇幅原因,所以这里仅对Disney BSDF做一个大致的总结,后续有机会再展开进行进一步分析。 748 | 749 |
750 | 751 | 在2013年上映的动画电影《冰雪奇缘》中,迪士尼继续沿用了之前开发的Disney Principled BRDF基于物理的着色系统,但对于折射和次表面散射等效果而言,需要与BRDF分开计算,且间接光照使用点云(point clouds)进行了近似。 752 | 753 | 而从2014年的《超能陆战队(Big Hero 6)》开始,迪士尼开始采用路径追踪全局光照(path-traced global illumination)进行新电影的制作。所以,原本的BRDF模型已经无法满足需求,于是迪士尼在之前的Disney Principled BRDF的基础上进行了改进,新开发出了Disney BSDF,并于SIGGPRAPH 2015上,通过talk《Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering》正式提出。 754 | 755 | ![](media/0ad6564a495cd588a1b8574b35a46a57.png) 756 | 757 | 图 SIGGPRAPH 2015《Extending the Disney BRDF to a BSDF with Integrated Subsurface Scattering》 758 | 759 | ![](media/4c80d76a6a27620093d45e179533a506.png) 760 | 761 | 图 迪士尼动画电影《超能陆战队(Big Hero 6)》 762 | 763 | ![](media/2f8476c7f254d547b0b3799d92b3963b.png) 764 | 765 | 图 基于Disney BSDF的渲染的示例 766 | 767 | 前文提到,Disney BRDF模型本质上是金属和非金属的混合型模型,对于Disney BSDF,Disney仍然延续了之前的设计理念,采用了混合的方式并结合已有的Disney BRDF模型进行实现。如下图,Disney新增了⼀个参数specTrans(镜面反射透明度)来控制BRDF 和BSDF的混合。基于specTrans完成混合后,再使用和Disney BRDF类似的方式,基于metallic再进行一次混合。 768 | 769 | 即Disney BRDF模型的本质是金属BRDF、非金属BRDF、与Specular BSDF三者的混合型模型。 770 | 771 | ![](media/e7f8349e326040400f36d6de724d1871.png) 772 | 773 | 图 Disney BSDF设计思路 774 | 775 | 参数方面,Disney BSDF按普通表面和薄表面各有不同: 776 | 777 | - 对于普通表面,Disney BSDF在Disney BRDF的基础上新增specTrans(镜面反射透明度)和scatterDistance(散射距离)两个参数,共12个。 778 | 779 | - 对于薄表面(Thin-surface),Disney BSDF在Disney BRDF的基础上新增specTrans(镜面反射透明度)、scatterDistance(散射距离)和flatness(平坦度)三个参数,共13个。 780 | 781 | 以下是开源三维动画软件Blender实现的Disney 782 | BSDF的图示(根据实际使用情况,Blender对Disney BSDF的实现有相应的修改): 783 | 784 | ![](media/323070b8aeb7ed80b6a7d54fc125856a.jpg) 785 | 786 | 图 Disney Principled BSDF @Blender 787 | 788 | 除了新增的Specular BSDF模型,Disney还提出了新的次表面散射模型,以及针对薄表面的折射处理,可以总结如下: 789 | 790 | - **在Disney BRDF中加入次表面散射模型**。具体思路是首先将漫射波瓣重构为两部分:方向性的微表面效应(microsurface effect),主要为逆反射(retroreflection);非方向性的次表面效应(subsurface effect),即Lambertian。然后,用散射模型(diffusion model)或体积散射模型(volumetric scattering model)替换漫反射波瓣中的Lambert部分。这样,便能保留微表面效应(microsurface effect),让散射模型在散射距离较小时收敛到与漫反射BRDF相同的结果。 791 | 792 | - **提出基于两个指数项总和的次表⾯漫射(Subsurface diffusion)模拟模型。** 次表⾯漫射(Subsurface diffusion)。Disney通过蒙特卡洛模拟(Monte Carlo simulation),观察到对于典型的散射参数,包括单次散射的扩散剖面(diffusion profile),使用两个指数项的总和(a sum of two exponentials)便可以很好地进行模拟,且得到了比偶极子剖面(dipole diffusion)更好的渲染结果。如下图所示。 793 | 794 | - **薄表⾯BSDF(Thin-surface BSDF)**。对于薄的半透明表⾯,Disney选择在单个着色点处模拟入射和出射散射事件,作为镜面反射和漫反射传输的组合,由specTrans和diffTrans参数控制,并用各向同性的波瓣近似薄表面漫反射传输。如下图所示。 795 | 796 | ![](media/d614155fb47253a0ee9e4a4ef2ac1126.png) 797 | 798 | 图 蒙特卡洛散射(Monte Carlo diffusion)模拟,指数拟合与偶极子数据的对比。 799 | 800 | ![](media/7e1c50f8956fc87ee61fda566f09c5f8.png) 801 | 802 | 图 以阴影边界处的蒙特卡洛散射(Monte Carlo diffusion)渲染作为参考,与指数拟合(exponential fit),以及偶极子剖面(dipole diffusion)的对比。指数拟合与蒙特卡罗散射的参考看不出区别,而偶极子模型有明显的模糊,还有青色条带,这两种现象都是美术人员经常会抱怨的。 803 | 804 | ![](media/e747c131163d0a2f3476d8483e0f4b3d.jpg) 805 | 806 | 图 使用归一化扩散次表面(normalized diffusion subsurface)模型渲染出的《超能陆战队》人物图片。 807 | 808 | ![](media/0ec5617fc39027630e17685e7eb076e0.png) 809 | 810 | 图 《超能陆战队》中基于薄表面(Thin-surface)渲染技术渲染出的Baybax 811 | 812 | 八、本文内容要点总结 813 | ==================== 814 | 815 | 正文到这里已经结束。不妨使用本文主要内容提炼出的思维导图作为全文的内容总结: 816 | 817 | ![](media/d51eb799258c0c639e2f5350f8ce24fc.png) 818 | 819 | 820 | 821 | 822 | # Reference 823 | 824 | 825 | [1] Burley B, Studios W D A. Physically-based shading at disney[C]//ACM 826 | SIGGRAPH. 2012, 2012: 1-7. 827 | 828 | [2] Burley B. Extending the Disney BRDF to a BSDF with integrated subsurface 829 | scattering[J]. the Physically Based Shading in Theory and Practice SIGGRAPH 830 | Course, 2015. 831 | 832 | [3] Matusik W, Pfister H, Brand M, et al. Efficient isotropic BRDF 833 | measurement[J]. 2003. 834 | 835 | [4] Heitz E. Understanding the masking-shadowing function in microfacet-based 836 | BRDFs[J]. Journal of Computer Graphics Techniques, 2014, 3(2): 32-91. 837 | 838 | [5] 题图来自迪士尼电影《无敌破坏王2:大闹互联网》 839 | -------------------------------------------------------------------------------- /content/part 3/media/0138e3d33d920148a6a652f2f47158d3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/0138e3d33d920148a6a652f2f47158d3.png -------------------------------------------------------------------------------- /content/part 3/media/071dcb665386a2a56f1cb84352dc60ce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/071dcb665386a2a56f1cb84352dc60ce.png -------------------------------------------------------------------------------- /content/part 3/media/0ad6564a495cd588a1b8574b35a46a57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/0ad6564a495cd588a1b8574b35a46a57.png -------------------------------------------------------------------------------- /content/part 3/media/0cbe51fa24d47bffbecd3ae513fac8ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/0cbe51fa24d47bffbecd3ae513fac8ba.png -------------------------------------------------------------------------------- /content/part 3/media/0ec5617fc39027630e17685e7eb076e0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/0ec5617fc39027630e17685e7eb076e0.png -------------------------------------------------------------------------------- /content/part 3/media/11fd09fe8053bc5883bcb016196d0d9b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/11fd09fe8053bc5883bcb016196d0d9b.png -------------------------------------------------------------------------------- /content/part 3/media/2f8476c7f254d547b0b3799d92b3963b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/2f8476c7f254d547b0b3799d92b3963b.png -------------------------------------------------------------------------------- /content/part 3/media/323070b8aeb7ed80b6a7d54fc125856a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/323070b8aeb7ed80b6a7d54fc125856a.jpg -------------------------------------------------------------------------------- /content/part 3/media/3c0e1a83631f7cac58a1f3e9cd08ec89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/3c0e1a83631f7cac58a1f3e9cd08ec89.png -------------------------------------------------------------------------------- /content/part 3/media/4747c17311dca6610243229defd4241f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/4747c17311dca6610243229defd4241f.png -------------------------------------------------------------------------------- /content/part 3/media/4c80d76a6a27620093d45e179533a506.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/4c80d76a6a27620093d45e179533a506.png -------------------------------------------------------------------------------- /content/part 3/media/5336bcb848115d87c783424111bcf204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/5336bcb848115d87c783424111bcf204.png -------------------------------------------------------------------------------- /content/part 3/media/5bedec7e9fd8594bb6ffcbff3aaeb9ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/5bedec7e9fd8594bb6ffcbff3aaeb9ad.png -------------------------------------------------------------------------------- /content/part 3/media/5da5401739ea707110ad5dc81ec4dccb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/5da5401739ea707110ad5dc81ec4dccb.png -------------------------------------------------------------------------------- /content/part 3/media/5e2747f029d59b61ef5679111441d9f9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/5e2747f029d59b61ef5679111441d9f9.png -------------------------------------------------------------------------------- /content/part 3/media/622608171636a9037067b25cf12705d8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/622608171636a9037067b25cf12705d8.png -------------------------------------------------------------------------------- /content/part 3/media/64c31945914440261b6cb043f65ef314.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/64c31945914440261b6cb043f65ef314.png -------------------------------------------------------------------------------- /content/part 3/media/67c8b523ac8b06b694441c1702516ce9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/67c8b523ac8b06b694441c1702516ce9.png -------------------------------------------------------------------------------- /content/part 3/media/6fb3430619d35fecc4267b24f0edf6cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/6fb3430619d35fecc4267b24f0edf6cd.png -------------------------------------------------------------------------------- /content/part 3/media/7e1c50f8956fc87ee61fda566f09c5f8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/7e1c50f8956fc87ee61fda566f09c5f8.png -------------------------------------------------------------------------------- /content/part 3/media/8b535f71d0c840167cf2a882b955b01d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/8b535f71d0c840167cf2a882b955b01d.jpg -------------------------------------------------------------------------------- /content/part 3/media/8c18a8760406f32ff5a66be9aed14e91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/8c18a8760406f32ff5a66be9aed14e91.png -------------------------------------------------------------------------------- /content/part 3/media/8c2a369a71823ccc85df0aced1b46131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/8c2a369a71823ccc85df0aced1b46131.png -------------------------------------------------------------------------------- /content/part 3/media/9c611a836080f04d7c064b0e52930398.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/9c611a836080f04d7c064b0e52930398.png -------------------------------------------------------------------------------- /content/part 3/media/a49a4c5075a08c4e5d2b98fb9c4a9a23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/a49a4c5075a08c4e5d2b98fb9c4a9a23.png -------------------------------------------------------------------------------- /content/part 3/media/b4b78d318fffffa1d4a34238f838cfaa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/b4b78d318fffffa1d4a34238f838cfaa.jpg -------------------------------------------------------------------------------- /content/part 3/media/b5b38788d5067a00c7e957791394692b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/b5b38788d5067a00c7e957791394692b.png -------------------------------------------------------------------------------- /content/part 3/media/b6ab34debdd0317c0308751a307118cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/b6ab34debdd0317c0308751a307118cf.png -------------------------------------------------------------------------------- /content/part 3/media/becba69c354266eb02e9ec41bafed88d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/becba69c354266eb02e9ec41bafed88d.png -------------------------------------------------------------------------------- /content/part 3/media/c1b2fc1ec5d1e5c6380ffacfb31cff28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/c1b2fc1ec5d1e5c6380ffacfb31cff28.png -------------------------------------------------------------------------------- /content/part 3/media/cab428cf33e54a71d70cc9fc05c856c3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/cab428cf33e54a71d70cc9fc05c856c3.png -------------------------------------------------------------------------------- /content/part 3/media/cb40bb5b457d25f410ed23820bab6135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/cb40bb5b457d25f410ed23820bab6135.png -------------------------------------------------------------------------------- /content/part 3/media/ce169fd7f8b4b9eb1ac8f68d35e3a570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/ce169fd7f8b4b9eb1ac8f68d35e3a570.png -------------------------------------------------------------------------------- /content/part 3/media/ce9a54817238b292f9c6d4b001ce5096.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/ce9a54817238b292f9c6d4b001ce5096.jpg -------------------------------------------------------------------------------- /content/part 3/media/d14f3ca5eaacb5257aabf828e0b41c86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/d14f3ca5eaacb5257aabf828e0b41c86.png -------------------------------------------------------------------------------- /content/part 3/media/d3c9e65c45ecfc8b65e3a328b5c500de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/d3c9e65c45ecfc8b65e3a328b5c500de.png -------------------------------------------------------------------------------- /content/part 3/media/d51eb799258c0c639e2f5350f8ce24fc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/d51eb799258c0c639e2f5350f8ce24fc.png -------------------------------------------------------------------------------- /content/part 3/media/d614155fb47253a0ee9e4a4ef2ac1126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/d614155fb47253a0ee9e4a4ef2ac1126.png -------------------------------------------------------------------------------- /content/part 3/media/d9a44d23769175e75a0b768d1a73bf30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/d9a44d23769175e75a0b768d1a73bf30.png -------------------------------------------------------------------------------- /content/part 3/media/da734f49bb6c39761b60a5e655caeecd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/da734f49bb6c39761b60a5e655caeecd.png -------------------------------------------------------------------------------- /content/part 3/media/e747c131163d0a2f3476d8483e0f4b3d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/e747c131163d0a2f3476d8483e0f4b3d.jpg -------------------------------------------------------------------------------- /content/part 3/media/e7f8349e326040400f36d6de724d1871.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/e7f8349e326040400f36d6de724d1871.png -------------------------------------------------------------------------------- /content/part 3/media/f98c4db0e139f70918098b8075a4a98e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 3/media/f98c4db0e139f70918098b8075a4a98e.png -------------------------------------------------------------------------------- /content/part 4/media/095a45e8f23445af3972e83fd7f44f2e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/095a45e8f23445af3972e83fd7f44f2e.png -------------------------------------------------------------------------------- /content/part 4/media/1115872096ef1ef2b2183fa73728d9d9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/1115872096ef1ef2b2183fa73728d9d9.png -------------------------------------------------------------------------------- /content/part 4/media/114d4ea1b14c7046a8a79fced705346b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/114d4ea1b14c7046a8a79fced705346b.png -------------------------------------------------------------------------------- /content/part 4/media/13314b886dd537cf8751192404bb0737.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/13314b886dd537cf8751192404bb0737.png -------------------------------------------------------------------------------- /content/part 4/media/144e1c903c72b63bd13ac790781a397d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/144e1c903c72b63bd13ac790781a397d.png -------------------------------------------------------------------------------- /content/part 4/media/149da3a02441727ca067c8e096c65432.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/149da3a02441727ca067c8e096c65432.png -------------------------------------------------------------------------------- /content/part 4/media/17cae6f22b66b9ae231c991298d234ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/17cae6f22b66b9ae231c991298d234ae.png -------------------------------------------------------------------------------- /content/part 4/media/1922402f33d58220c8759b93c44d791d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/1922402f33d58220c8759b93c44d791d.png -------------------------------------------------------------------------------- /content/part 4/media/24404380aa0494eb462b18a20a9bc9da.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/24404380aa0494eb462b18a20a9bc9da.jpg -------------------------------------------------------------------------------- /content/part 4/media/24a90bab8564b57770b042030909bd3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/24a90bab8564b57770b042030909bd3d.png -------------------------------------------------------------------------------- /content/part 4/media/254319e5df9f46d20c6f22e274ba0a01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/254319e5df9f46d20c6f22e274ba0a01.png -------------------------------------------------------------------------------- /content/part 4/media/27838985083a7ad0d27e10957ea27dad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/27838985083a7ad0d27e10957ea27dad.png -------------------------------------------------------------------------------- /content/part 4/media/2d6ab4c1432bec1539d4fd5941ba13e0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/2d6ab4c1432bec1539d4fd5941ba13e0.png -------------------------------------------------------------------------------- /content/part 4/media/2f1cc5427fbda5ed55c46ddde836b982.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/2f1cc5427fbda5ed55c46ddde836b982.png -------------------------------------------------------------------------------- /content/part 4/media/36bd80224cd22376a215c3571cdb34db.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/36bd80224cd22376a215c3571cdb34db.png -------------------------------------------------------------------------------- /content/part 4/media/36f5fdc6deeed190682e936b3af105cc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/36f5fdc6deeed190682e936b3af105cc.jpg -------------------------------------------------------------------------------- /content/part 4/media/3c17ccb94346e3c1f05d48c399c13135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/3c17ccb94346e3c1f05d48c399c13135.png -------------------------------------------------------------------------------- /content/part 4/media/3c87d9808b9979b7a94360d5b0b040b5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/3c87d9808b9979b7a94360d5b0b040b5.png -------------------------------------------------------------------------------- /content/part 4/media/3ea6d5d943135c43e1ac1263cbea0596.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/3ea6d5d943135c43e1ac1263cbea0596.png -------------------------------------------------------------------------------- /content/part 4/media/412751ef2bd1a069fd1a7e62d3d9cb13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/412751ef2bd1a069fd1a7e62d3d9cb13.png -------------------------------------------------------------------------------- /content/part 4/media/5014f22fe57bd5759d518fcfea82a702.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/5014f22fe57bd5759d518fcfea82a702.png -------------------------------------------------------------------------------- /content/part 4/media/57f577ef5254474624eb5b764dff801a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/57f577ef5254474624eb5b764dff801a.png -------------------------------------------------------------------------------- /content/part 4/media/59ab02da40cef22dced04ea27286b21f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/59ab02da40cef22dced04ea27286b21f.png -------------------------------------------------------------------------------- /content/part 4/media/5a3723bf4f3d937028e2c2e48e27e2d4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/5a3723bf4f3d937028e2c2e48e27e2d4.jpg -------------------------------------------------------------------------------- /content/part 4/media/62897a12b6720be9f8e1dae88ba61679.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/62897a12b6720be9f8e1dae88ba61679.png -------------------------------------------------------------------------------- /content/part 4/media/66a5b06ece63afc6318f4954c7fbd570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/66a5b06ece63afc6318f4954c7fbd570.png -------------------------------------------------------------------------------- /content/part 4/media/71b6479206efb0d0adf0bd41f78bac0a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/71b6479206efb0d0adf0bd41f78bac0a.jpg -------------------------------------------------------------------------------- /content/part 4/media/81ef59221428713a415eb6baf07785ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/81ef59221428713a415eb6baf07785ec.png -------------------------------------------------------------------------------- /content/part 4/media/8607e94794adfbb9609e55939d118628.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/8607e94794adfbb9609e55939d118628.jpg -------------------------------------------------------------------------------- /content/part 4/media/899c522b364f9e5fd3b979024af18b66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/899c522b364f9e5fd3b979024af18b66.png -------------------------------------------------------------------------------- /content/part 4/media/95128d435001df4c866cb8655186d844.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/95128d435001df4c866cb8655186d844.png -------------------------------------------------------------------------------- /content/part 4/media/96cfde9628680bc6d9b5934b5a804316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/96cfde9628680bc6d9b5934b5a804316.png -------------------------------------------------------------------------------- /content/part 4/media/97153e46022402eae28c35cff2115560.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/97153e46022402eae28c35cff2115560.png -------------------------------------------------------------------------------- /content/part 4/media/9d47949153104746535bfae0cc104856.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/9d47949153104746535bfae0cc104856.png -------------------------------------------------------------------------------- /content/part 4/media/a37df8beacef3ac35412950464b3e051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/a37df8beacef3ac35412950464b3e051.png -------------------------------------------------------------------------------- /content/part 4/media/af556c96fad50d619cd333de3ef99649.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/af556c96fad50d619cd333de3ef99649.png -------------------------------------------------------------------------------- /content/part 4/media/b2629e0d92a57838fc460817500f60bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/b2629e0d92a57838fc460817500f60bb.png -------------------------------------------------------------------------------- /content/part 4/media/b2896135ea6c44e8d003a3994e6a9978.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/b2896135ea6c44e8d003a3994e6a9978.png -------------------------------------------------------------------------------- /content/part 4/media/b6a70732fd616c56ad51468b2d5630cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/b6a70732fd616c56ad51468b2d5630cc.png -------------------------------------------------------------------------------- /content/part 4/media/ba6a65435aaf4a40ef8b15f06751f49f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/ba6a65435aaf4a40ef8b15f06751f49f.png -------------------------------------------------------------------------------- /content/part 4/media/bbdad3dd39ac9893992b3181457454fe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/bbdad3dd39ac9893992b3181457454fe.png -------------------------------------------------------------------------------- /content/part 4/media/c18c1570c624fe787a90b20f54b4d2f8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/c18c1570c624fe787a90b20f54b4d2f8.png -------------------------------------------------------------------------------- /content/part 4/media/c84bd49deac90adca3e4de59c925c56b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/c84bd49deac90adca3e4de59c925c56b.png -------------------------------------------------------------------------------- /content/part 4/media/c987a44799425ef32e8bc5f7c91b5e90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/c987a44799425ef32e8bc5f7c91b5e90.png -------------------------------------------------------------------------------- /content/part 4/media/cacf5f5ed2c03c26264584c4489a8e38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/cacf5f5ed2c03c26264584c4489a8e38.png -------------------------------------------------------------------------------- /content/part 4/media/cd0a575e04fa663d5f8eb136c63c4ca2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/cd0a575e04fa663d5f8eb136c63c4ca2.png -------------------------------------------------------------------------------- /content/part 4/media/d91df4cfd42b0c74184cc4b788135893.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/d91df4cfd42b0c74184cc4b788135893.png -------------------------------------------------------------------------------- /content/part 4/media/dbaf951c7d11c0e96218a508f77feff5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/dbaf951c7d11c0e96218a508f77feff5.png -------------------------------------------------------------------------------- /content/part 4/media/e03ebc1188cdbae484ab01ec48a2f838.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/e03ebc1188cdbae484ab01ec48a2f838.png -------------------------------------------------------------------------------- /content/part 4/media/e154b08649b46b118f6fd65ffc32f742.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/e154b08649b46b118f6fd65ffc32f742.png -------------------------------------------------------------------------------- /content/part 4/media/eb4e252e203e5dbeacba42e3a9d70c70.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/eb4e252e203e5dbeacba42e3a9d70c70.jpg -------------------------------------------------------------------------------- /content/part 4/media/ee5db5d3e940d75ce024fb5041caa1e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/ee5db5d3e940d75ce024fb5041caa1e6.png -------------------------------------------------------------------------------- /content/part 4/media/eedbcb7b8e49ef5ad09f0c8bd8e001ee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/eedbcb7b8e49ef5ad09f0c8bd8e001ee.jpg -------------------------------------------------------------------------------- /content/part 4/media/f20190617091939.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/f20190617091939.png -------------------------------------------------------------------------------- /content/part 4/media/f5fa35dcb31a083990c8e037f66097a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/f5fa35dcb31a083990c8e037f66097a2.png -------------------------------------------------------------------------------- /content/part 4/media/f5fcb39583ae41e90aa577ec11a531df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/f5fcb39583ae41e90aa577ec11a531df.jpg -------------------------------------------------------------------------------- /content/part 4/media/f64e74a70d320b2a0144dd67ee06a499.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/f64e74a70d320b2a0144dd67ee06a499.png -------------------------------------------------------------------------------- /content/part 4/media/f85cad285577173cfacfbb341aac7b59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/f85cad285577173cfacfbb341aac7b59.png -------------------------------------------------------------------------------- /content/part 4/media/fabf5085896395a2aa5010c1c60ca23a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 4/media/fabf5085896395a2aa5010c1c60ca23a.png -------------------------------------------------------------------------------- /content/part 5/README.md: -------------------------------------------------------------------------------- 1 | # 【基于物理的渲染(PBR)白皮书】(五)几何函数相关总结 2 | 3 | 4 | ![](media/2b06ef1685e6df43021b423980b93d48.jpg) 5 | 6 | 在基于物理的渲染中,几何函数(Geometry Function)是保证Microfacet BRDF理论上能量守恒,逻辑上自洽的重要一环。其描述了微平面自阴影的属性,表示具有半矢量法线的微平面(microfacet)中,同时被入射方向和反射方向可见(没有被遮挡的)的比例,即未被遮挡的m 7 | = h微表面的百分比。 8 | 9 | 在Microfacet Specular 10 | BRDF的D,G,F三项中,如果说法线分布函数是最核心的一项,那么几何函数则是核心的辅助项,而且是三项中最复杂的一项。 11 | 12 | 历史上主流的几何函数建模,按提出或归纳的时间进行排序,可以总结为: 13 | 14 | - Smith [1967] 15 | 16 | - V-cavity(Cook-Torrance)[1982] 17 | 18 | - Schlick-Smith [1994] 19 | 20 | - Neumann [1999] 21 | 22 | - Kelemen [2001] 23 | 24 | - Implicit [2010] 25 | 26 | 其中,Smith遮蔽函数(Smith masking 27 | function)是现在业界所采用的主流遮蔽函数,Eric Heitz在2014年[Heitz 28 | 2014]将其拓展为Smith联合遮蔽阴影函数(Smith Joint Masking-Shadowing 29 | Function),该函数具有四种形式: 30 | 31 | - 分离遮蔽阴影型(Separable Masking and Shadowing) 32 | 33 | - 高度相关遮蔽阴影型(Height-Correlated Masking and Shadowing) 34 | 35 | - 方向相关遮蔽阴影型(Direction-Correlated Masking and Shadowing) 36 | 37 | - 高度-方向相关遮蔽阴影型(Height-Direction-Correlated Masking and Shadowing) 38 | 39 | 其中,高度相关遮蔽阴影型(Height-Correlated Masking and 40 | Shadowing),以及其近似,是目前业界采用的主流遮蔽阴影函数。 41 | 42 |
43 | 44 | # 核心要点与思维导图 45 | 46 | 47 | 本文将从如下方面,对基于物理的渲染中几何函数(Geometry 48 | Function)的相关内容进行一个系统的总结: 49 | 50 | - 一、几何函数的定义与要点总结 51 | 52 | - 1.1 几何函数的定义与主要属性 53 | 54 | - 1.2 几何函数的两种主要形式:G1和G2 55 | 56 | - 1.3 几何函数与法线分布函数的联系 57 | 58 | - 1.4 业界对几何函数模型的选择 59 | 60 | - 二、从微平面理论到遮蔽阴影函数 61 | 62 | - 2.1 从微平面理论引出几何函数 63 | 64 | - 2.2 选择合适的微表面轮廓(microsurface profile) 65 | 66 | - 2.3 Smith遮蔽函数的性质 67 | 68 | - 2.4 Smith联合遮蔽-阴影函数 69 | 70 | - 2.4.1 分离的遮蔽阴影函数(Separable Masking and Shadowing Function) 71 | 72 | - 2.4.2 高度相关的遮蔽阴影函数(Height-Correlated Masking and Shadowing Function) 73 | 74 | - 2.4.3 方向相关的遮蔽阴影函数(Direction-Correlated Masking and Shadowing Function) 75 | 76 | - 2.4.4 高度方向相关的遮蔽阴影函数(Height-Direction-Correlated Masking and Shadowing Function) 77 | 78 | - 2.5 多重散射微平面BRDF 79 | 80 | - 三、几何函数的基本性质 81 | 82 | - 3.1 标量性 83 | 84 | - 3.2 对称性 85 | 86 | - 3.3 同向可见性 87 | 88 | - 3.4 拉伸不变性(Stretch Invariance) 89 | 90 | - 四、从法线分布函数导出的Smith遮蔽函数 91 | 92 | - 4.1 主流法线分布函数导出的Smith遮蔽函数 93 | 94 | - 4.1.1 Beckmann法线分布的Λ函数 95 | 96 | - 4.1.2 Blinn-Phong法线分布的Λ函数 97 | 98 | - 4.1.3 GGX法线分布的Λ函数 99 | 100 | - 4.2 Smith GGX的演变和发展 101 | 102 | - 4.2.1 SIGGRAPH 2012:Disney 103 | 104 | - 4.2.2 SIGGRAPH 2013:UE4 105 | 106 | - 4.2.3 SIGGRAPH 2014至今:业界转向Smith Joint Masking-Shadowing Function 107 | 108 | - 4.2.3.1 Frostbite 的GGX-Smith Joint近似方案 109 | 110 | - 4.2.3.2 UE4的 GGX-Smith Correlated Joint 近似方案 111 | 112 | - 4.2.3.3 Unity HDRP 的GGX-Smith Correlated Joint近似方案 113 | 114 | - 4.2.3.4 Google Filament渲染器 的GGX-Smith Joint近似方案 115 | 116 | - 4.2.3.5 Respawn Entertainment的 GGX-Smith Joint近似方案 117 | 118 | - 五、BRDF标准化测试:白炉测试与弱白炉测试 119 | 120 | - 5.1 白炉测试(The White Furnace Test) 121 | 122 | - 5.2 弱白炉测试(The Weak White Furnace Test) 123 | 124 | 本来还想聊到Microfacet Specular BRDF的推导,分母中的4的来历,以及Smith遮蔽函数的推导,高度相关的Smith遮蔽阴影函数的推导的。但还没加上这些内容,字数统计就已经1万多字了。没事,后面有机会再一起聊吧。 125 | 126 | OK, 按照惯例,开始正文前,先放出本文内容总结的思维导图: 127 | 128 | ![](media/161b0caae09c258a64dccfadbda6b62d.png) 129 | 130 | 131 | 132 |
133 |
134 | 135 | # 一、几何函数的定义与要点总结 136 | 137 | 138 | 139 |
140 |
141 | 142 | ## 1.1 几何函数的定义与主要属性 143 | 144 | 145 | - 在基于物理的渲染中,几何函数(Geometry Function)是一个0到1之间的标量,描述了微平面自阴影的属性,表示了具有半矢量法线的微平面(microfacet)中,同时被入射方向和反射方向可见(没有被遮挡的)的比例,即未被遮挡的m= h微表面的百分比。几何函数(Geometry Function)即是对能顺利完成对光线的入射和出射交互的微平面概率进行建模的函数。 146 | 147 | - 在microfacet BRDF中,单纯的法线分布函数得到数值不是有效的微表面的法线强度,需结合几何函数,才能得到有效入射和出射法线,得到能对microfacet BRDF产生贡献的强度。 148 | 149 | - 在各种文献中,几何函数(Geometry Function)还有大量不同的别名。一些主要的常见叫法有: 150 | 151 | - 几何项(Geometry Term) 152 | 153 | - Specular G 154 | 155 | - 几何衰减因子(Geometric Attenuation) 156 | 157 | - 阴影因子(Shadowing Factor) 158 | 159 | - 遮蔽函数(Masking Function) 160 | 161 | - 阴影函数(Shadowing Function) 162 | 163 | - 遮蔽阴影函数(Masking-Shadowing Function) 164 | 165 | - 双向遮蔽阴影函数(Bidirectional Shadowing-Masking Function) 166 | 167 | - 其中,在部分游戏引擎和文献中,几何函数G(l,v,h)和分母中的校正因子4(n·l)(n·v)会合并为可见性项(The Visibility Term),Vis项,简称V项。其也经常作为几何函数的代指: 168 | 169 | ![](media/e2aaf9d6c96b1a523342dd006bfe3114.png) 170 | 171 | 172 | - 通常,除了近掠射角或非常粗糙的表面,几何函数对BRDF的形状影响相对较小,但对于BRDF保持能量守恒而言,几何函数至关重要。 173 | 174 | - 几何函数取决于微表面的细节,并且很少有精确的表达式。很多情况下,各类文献会使用各种统计模型和简化假设推导出近似值。 175 | 176 | 177 |
178 |
179 | 180 | ## 1.2 几何函数的两种主要形式:G1和G2 181 | 182 | 183 | 几何函数具有两种主要形式:G1和G2,其中: 184 | 185 | - G1为微平面在单个方向(光照方向L或观察方向V)上可见比例,一般代表遮蔽函数(masking function)或阴影函数(shadowing function) 186 | 187 | - G2为微平面在光照方向L和观察方向V两个方向上可见比例,一般代表联合遮蔽阴影函数(joint masking-shadowing function) 188 | 189 | - 在实践中,G2由G1推导而来 190 | 191 | - 默认情况下,microfacet BRDF中使用的几何函数代指G2 192 | 193 | ![](media/3dc9d15f986d71b8dc739b242f09302a.png) 194 | 195 | 图 几何函数的两种主要形式:G1和G2。G1为微平面在单个方向(光照方向L或观察方向V)上可见比例。G2为微平面在光照方向L和观察方向V两个方向上可见比例(图片来自GDC 2017, PBR Diffuse Lighting for GGX+SmithMicrosurfaces, Earl Hammon ) 196 | 197 | 198 |
199 |
200 | 201 | ## 1.3 几何函数与法线分布函数的联系 202 | 203 | 204 | 几何函数与法线分布函数作为Microfacet Specular BRDF中的重要两项,两者之间具有紧密的联系: 205 | 206 | - **几何函数的解析形式的确认依赖于法线分布函数。** 在微平面理论中,通过可见微平面的投影面积之和等于宏观表面的投影面积的恒等式,选定法线分布函数,并选定几何函数的模型,就可以唯一确认几何函数的准确形式。在选定几何函数的模型后(一般为Smith),几何函数的解析形式的确认则由对应的法线分布函数决定。 207 | 208 | - **法线分布函数需要结合几何函数,得到有效的法线分布强度。** 单纯的法线分布函数的输出值并不是能产生有效反射的法线强度,因为光线的入射和出射会被微平面部分遮挡,即并不是所有朝向m=h的微表面,能在给定光照方向L和观察方向V时可以顺利完成有效的反射。几何函数即是对能顺利完成入射和出射的微平面概率进行建模的函数。法线分布函数需要结合几何函数,得到最终对microfacet 209 | BRDF能产生贡献的有效法线分布强度。 210 | 211 |
212 |
213 | 214 | ## 1.4 业界对几何函数模型的选择 215 | 216 | 217 | - 自2014年之后,游戏和电影业界主流的遮蔽函数为Smith高度相关遮蔽阴影函数(Smith height-correlated masking-shadowing function)以及其近似,因为其具有与不相关形式相似的成本和更高的精度: 218 | 219 | ![](media/17e47c4a8d38caf5eb9746123317ee4e.png) 220 | 221 | 222 | - 另外,如果追求性价比,可以选择部分游戏和电影制作中采用的隐式遮蔽函数(The Implicit Masking Function): 223 | 224 | ![](media/3bc3edc1eb122f07d910907a1f3d8336.png) 225 | 226 | 隐式遮蔽函数 (The Implicit Masking Function)可以和Specular的分母校正因子4(n·l)(n·v)相消为1,虽然不是严格基于物理,但具有非常好的性价比。 227 | 228 | 229 |
230 |
231 | 232 | ## 二、从微平面理论到遮蔽阴影函数 233 | 234 | 235 | 本节将从微平面理论讲起,引出几何函数,随后聊到业界对于众多几何函数模型的选择, 236 | 237 | Smith遮蔽函数成为业界主流的原因,以及从Smith遮蔽函数拓展到Smith联合遮蔽-阴影函数,最后聊到业界主流Microfacet BRDF的缺陷,以及采用Image Work能量补偿的方式解决该缺陷的方案。 238 | 239 |
240 |
241 | 242 | ## 2.1 从微平面理论引出几何函数 243 | 244 | 245 | - 微平面理论(microfacet theory)作为一种研究微观几何(microgeometry)对反射率影响的数学分析方法,基于将微观几何(microgeometry)建模为微平面(microfacets)的集合的思想。其最初由光学物理领域开发,用于研究统计表面上的散射[Beckmann Spizzichino 1963]。在图形社区中,我们使用它来推导基于物理的BRDF。 246 | 247 | - 在微平面中,正确朝向(即m = h)的微平面法线m的统计分布由法线分布函数D(m)进行建模。若将D(m)在整个微平面法线上积分,会得到微表面的面积。但并非所有m = h的微平面都会对microfacet BRDF有所贡献:有些微平面会被光照方向或视图方向遮挡,这些被遮挡的光线在业界主流的微平面理论中被忽略不计。所以需要引入几何项G来对这种现象进行建模,得到最终对microfacet BRDF能产生贡献的法线分布。 248 | 249 | ![](media/96cfde9628680bc6d9b5934b5a804316.png) 250 | 251 | 图 仅m = h的表面点的朝向才会将光线l反射到视线v的方向,其他表面点对BRDF没有贡献(图片来自《Real-Time Rendering 4th》) 252 | 253 | - 实际上,虽然阴影区域没有从l接收任何直射光,但它们确实接收(并因此反射)从其他表面区域反射的光(如右图所示)。Microfacet理论忽略了这些相互反射。 254 | 255 | - 对此,可以引出阴影(Shadowing)和遮蔽(Masking)两种不同的光与微表面的交互行为: 256 | 257 | - 阴影(Shadowing)表示微平面对入射光的遮挡,一般为对光源方向L而言。 258 | 259 | - 遮蔽(masking)表示微平面对出射光的遮挡,一般为对观察方向V而言。 260 | 261 | ![](media/818d632360b2960edd42579b0dd96621.png) 262 | 263 | - 图 左图:光线被微表面从l的方向进行遮挡,右图:光线被微表面从v的方向进行遮挡。在这两种情况下,这些表面点对BRDF没有贡献。(图片来自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016) 264 | 265 | ![](media/1115872096ef1ef2b2183fa73728d9d9.png) 266 | 267 | 图 对可见微平面的投影区域(亮红色)进行积分,得到宏观表面在垂直于v的平面上的投影面积 268 | 269 | - 从上篇文章可以得知,可见微平面的投影面积之和等于宏观表面的投影面积。我们可以通过定义遮蔽函数(masking function)G1(m,v)来对其进行数学表达,它给出了沿着视图向量v可见的具有法线m的微平面的比率。 270 | 271 | - G1(m, v)D(m)(v · m)+在球体上的积分然后给出投影到垂直于v的平面上的宏观表面的面积: 272 | 273 | ![](media/53d113963044bd1e8a8908c0b1dec0b4.png) 274 | 275 | 276 | - 上式中,通过x+的表示方法表达将v · m限制为大于等于0。背面微平面不可见,因此在这种情况下不对其进行计算。乘积G1(m,v)D(m)则表示了可见法线的分布。 277 | 278 | - 上式对G1(m,v)施加约束,但并不能唯一地确定它。有无数个函数满足给定微平面法线分布D(m)的约束。这是因为D(m)没有完全指定微表面(microsurface)。它仅告诉我们有多少百分比的微平面(microfacets)的法线指向了某些方向,而没有告诉我们这些法线是如何进行排列。而且对于固定的输出方向v,遮蔽函数(masking functions)是二维,存在无限多个函数满足等式(1)。 279 | 280 |
281 |
282 | 283 | ## 2.2 选择合适的微表面轮廓(microsurface profile) 284 | 285 | 286 | - 为了确定唯一的G项,Heitz在[Heitz 2014]中引入了第二个约束:选择合适的微表面轮廓(microsurface profile),从而对G项进行具象化建模。 287 | 288 | 如下所示,轮廓的选择可对所得BRDF的形状产生强烈影响。 289 | 290 | ![](media/4f40c0ebc4718baeac07348b8d4240a6.png) 291 | 292 | 图 具有相同法线分布但具有不同轮廓(profiles)的微表面导致不同的BRDF 293 | 294 | 一旦选择好合适的微表面轮廓(microsurface profile),即选择了合适的微表面模型,加上等式(1)的约束,就可以完全确定遮蔽函数,用于BRDF中的实际使用。 295 | 296 | 业界提出的表面轮廓/模型,按照提出或归纳的时间,可以总结如下: 297 | 298 | - Smith [1967] 299 | 300 | - V-cavity(Cook-Torrance)[1982] 301 | 302 | - Schlick-Smith [1994] 303 | 304 | - Neumann [1999] 305 | 306 | - Kelemen [2001] 307 | 308 | - Implicit [2010] 309 | 310 | Heitz在[Heitz 2014]中进行了证明,在上述几种模型中仅如下两种是基于物理的: 311 | 312 | - Smith遮蔽函数(Smith masking function) 313 | 314 | - V腔遮蔽函数(V-cavity masking function) 315 | 316 | 两者的微表面轮廓(microsurface profile)建模可以通过下面两幅图进行表达。 317 | 318 | ![](media/f2048f675c3dbdd5d5d250c92b5663fa.png) 319 | 320 | 图 Smith模型和真世界连续微表面的对比。左图:具有大自相关距离的真实世界连续微表面。右图:Smith模型,其具有不相关的表面,即每个微平面与其邻域不相关。(图片来自[Heitz 2014]) 321 | 322 | ![](media/e12d888024f898f0f269532e5f28eed0.png) 323 | 324 | 图 V腔散射模型(V-cavity scattering mode)。该模型不是对一个微表面上的散射进行建模,而是计算单独微表面上的散射并混合结果。(图片来自[Heitz 2014]) 325 | 326 | Heitz还证明了Smith遮蔽函数是唯一既遵循公式(1),又具有法线遮蔽独立性(normal-masking independence)便利特性的函数。且Smith遮蔽函数具有比Cook-Torrance使用的V腔遮蔽函数(V-cavity masking function)更好地匹配真实世界的反射现象,这也是业界在两种基于物理的遮蔽函数中,更加青睐Smith遮蔽函数的原因。如下图所示。 327 | 328 | ![](media/905d804603235594b4a930479943f359.png) 329 | 330 | 图 使用V-cavity和Smith遮蔽阴影函数的各向同性Beckmann分布产生的BRDF,以及Reference 331 | BRDF的对比。其中,Smith遮蔽函数随着粗糙度的增加,分布向输出方向移动,更匹配Reference 332 | BRDF。(图片来自[Heitz 2014]) 333 | 334 | 335 | 336 |
337 |
338 | 339 | # 2.3 Smith遮蔽函数的性质 340 | 341 | 342 | - Smith遮蔽函数(Smith masking function)是现在业界所采用的主流遮蔽函数。Smith系列遮蔽函数被广泛认为比Cook-Torrance使用的V腔遮蔽函数(V-cavity masking function)函数更准确,并且考虑了法线分布的粗糙度和形状。 343 | 344 | - 最初的Smith函数是为Beckmann NDF所设计,但Brown [Brown 1980]和后来的Bourlier等人 [Bourlier 2002]将Smith函数推广到计算几何函数以匹配任何NDF的方法中。 345 | 346 | - Smith遮蔽函数(Smith masking function),该函数最初是为高斯正态分布(Gaussian normal distributions)导出的,后来推广到任意NDF。 347 | 348 | - Smith G1函数的形式如下: 349 | 350 | ![](media/10f722446ced22ec649e65a9641bcabb.png) 351 | 352 | 其中,χ+(x)表示正特征函数: 353 | 354 | ![](media/94e36a9dc49a1b4297703d7a805b64b2.png) 355 | 356 | 357 | - 而 ![](media/72a36cc312878ceffc9c67199a25e673.png)是Smith遮蔽函数的广义形式 [Brown 1980; Walter 2007]。对于许多随机曲面,其具有闭合形式的解。因此,在法线/遮蔽独立(normal/masking independence)的假设下,Smith遮蔽函数是精确的。![](media/cf5196dc3e1df843a9895279cc8e45b6.png)表示微表面斜率上的积分(integral over the slopes of the microsurface) 358 | 359 | - ![](media/cf5196dc3e1df843a9895279cc8e45b6.png)的表达式为: 360 | 361 | ![](media/20459061ec81d1ef8ebfb1f417852045.png) 362 | 363 | 在上式中: 364 | 365 | ![](media/e9704bb54e9ac08859dfeab6709a0e5c.png)是视图方向上斜率的1D分布。 366 | 367 | - ![](media/01a8a1d6669af50097f7e392e6196e06.png)为微表面的斜率分布(distribution of slopes of the microsurface)。 368 | 369 | - 而![](media/e24f10abd36c00821d421eb9d99b5c64.png)为与法线![](media/6ae3a91e739a5ba62cb7c3c4830e3eb6.png)相关的斜率: 370 | 371 | ![](media/8b8f0ff7a30c1e3288cb1c72a17006e0.png) 372 | 373 | 374 | - 斜率的分布必然是标准化的: 375 | 376 | ![](media/cf91540798512916297e8ff29d2daeb0.png) 377 | 378 | 379 | - 且斜率分布与法线分布的关系为: 380 | 381 | ![](media/77ac214f5a4f615a65d09e576d0230d4.png) 382 | 383 | 384 | - Smith遮蔽函数的每个法线分布函数会导出不同的Λ(lambda)函数。需要注意,仅具有形状不变性的法线分布函数(如GGX、Beckmann)可以导出具有解析形式的Λ函数,而且不具备形状不变性的函数(Blinn-Phong),则Λ不存在解析形式。 385 | 386 | - 在[Walter 2007]和[Heitz 2014]中都有描述推导出给定NDF的Λ的过程。 387 | 388 | - Smith遮蔽函数是常见遮蔽函数中,唯一既满足能量守恒又具有法线遮蔽独立性(Normal/Masking Independence)便利特性的函数。 389 | 390 | - 法线/遮蔽独立(Normal/Masking Independence)作为Smith遮蔽函数的一大特点,源自Smith微表面轮廓假设微曲面不是自相关的(autocorrelated),即在微表面的一个点处的高度(或法线)与任何相邻点处的高度(或法线)之间没有相关性。 391 | 这意味着一组随机的微平面并不是连续的表面,微表面的高度和法线是独立的随机变量。 如下图所示。 392 | 393 | ![](media/f2048f675c3dbdd5d5d250c92b5663fa.png) 394 | 395 | 图 微表面及其自相关函数。(左)具有大自相关距离的真实连续微表面(右)不相关型表面,其中每个微平面与其邻域不相关,如Smith模型(图片来自[Heitz 396 | 2014]) 397 | 398 | - Smith遮蔽函数(Smith masking function)对非随机表面与重复或结构化图案(例如布料(fabric))的相关性的影响可能非常显著。因此,对于布料之类的非随机表面或结构化图案,推荐使用专用模型,如专门的布料shading model。 399 | 400 | - 需要注意的是,业界选择Smith遮蔽函数的原因其实并不是因为它是由法线分布参数化的物理上可信的近似。真正原因在于Smith公式是在所选择的微表面轮廓(即法线/遮蔽独立性)的假设下的精确遮蔽函数。 401 | 402 | - Smith遮蔽函数确实也有一些缺点。从理论角度来看,其假设是与实际表面的结构不一致的,甚至可能在物理上无法实现。从实际的角度来看,虽然它对于随机表面非常准确,但是对于在法线方向和遮蔽之间具有更强依赖性的表面,例如下图中所示的表面,其预期精度会降低,特别是如果表面具有一些重复结构(如多数面料)。然而,在找到更好的替代方案之前,Smith遮蔽函数目前依然是业界的最佳选择。 403 | 404 | ![](media/1ce971169127255d925251e0fc44cafa.png) 405 | 406 | 图 图中所示的微观几何体在高度和表面法线之间具有很强的相关性,其中凸起区域是平滑的而下部区域是粗糙的。 407 | 在图示的上半部分中,表面从接近宏观表面法线的角度照射。 408 | 在这个角度,许多入射光线可以触及粗糙的凹坑,并且许多光线在不同的方向上散射。 409 | 在图示下半部分中,表面从掠射角入射。阴影(Shadowing)阻挡了大部分凹坑,因此很少有光线触及到它们,所以大多数光线都从表面的光滑部分反射。在这种情况下,表面粗糙度的作用很大程度上取决于光照角度,这就是Smith遮蔽的函数的缺陷所在。(图片来自《Real-Time Rendering 4th》) 410 | 411 | 412 | 413 |
414 |
415 | 416 | ## 2.4 Smith联合遮蔽-阴影函数 417 | 418 | 419 | - 除了G1之外,业界常常使用Eric Heitz在[Heitz 2014]中提出的Smith联合遮蔽阴影函数(Smith Joint Masking-Shadowing Function)G2(l, v, m)来代替遮蔽函数G1(m, v)。 420 | 421 | - 该函数具有四种形式: 422 | 423 | - 分离的遮蔽阴影型(Separable Masking and Shadowing) 424 | 425 | - 高度相关的遮蔽阴影型(Height-Correlated Masking and Shadowing) 426 | 427 | - 方向相关的遮蔽阴影型(Direction-Correlated Masking and Shadowing) 428 | 429 | - 高度-方向相关遮蔽阴影型(Height-Direction-Correlated Masking and Shadowing) 430 | 431 | 下文将分别进行总结。 432 | 433 |
434 | 435 | 436 | ### 2.4.1 分离的遮蔽阴影函数(Separable Masking and Shadowing Function) 437 | 438 | - 最简单和最广泛使用的遮蔽阴影函数的变体是Walter等人推广的可分离形式[Walter 2007]。 439 | 在这种情况下,遮蔽(masking)和阴影(shadowing)是独立的,并且分别计算并相乘: 440 | 441 | ![](media/08ba8c587b69d1d4c78bd0d0e2404c4d.png) 442 | 443 | 444 | - 这种形式不模拟遮蔽和阴影之间的相关性,因此总会多估算阴影,因为一些相关性总是存在的。 445 | 446 |
447 | 448 | ### 2.4.2 高度相关的遮蔽阴影函数(Height-Correlated Masking and Shadowing Function) 449 | 450 | - 更精确形式的遮蔽阴影函数模拟了由于微表面高度引起的遮蔽和阴影之间的相关性[Ross et al. 2005]。 451 | 直观来说,微平面(microfacet)在微表面(microsurface)内升高得越多,对于出射方向未被遮蔽(unmasked)和入射方向未被掩蔽(unshadowed)的可见概率会同时增加。 452 | 因此,遮蔽和阴影通过微平面的升高而相关。 这种相关性以联合遮蔽阴影函数(joint masking-shadowing function)的高度相关形式进行表达: 453 | 454 | ![](media/5dbee4a8d68561d61c726d925eb6084d.png) 455 | 456 | - 需要注意的是,当出射方向和入射方向彼此远离时,此形式是准确的,但是当方向接近时,此形式会估算出更多的阴影。 457 | 458 | - Heitz建议在实践中使用此版本的遮蔽阴影函数,因为它比可分离的遮蔽阴影函数更精确,却同时具有相同的计算复杂度。 459 | 460 |
461 | 462 | ### 2.4.3 方向相关的遮蔽阴影函数(Direction-Correlated Masking and Shadowing Function) 463 | 464 | - Ashikhmin等 [Ashikhmin 465 | 2000]通过混合可分离的遮蔽阴影函数与两个方向完全相关的情形来表达方向相关: 466 | 467 | ![](media/17e47c4a8d38caf5eb9746123317ee4e.png) 468 | 469 | 470 | - 其中λ(φ)是类似于Ginneken等人的经验因子。 471 | 472 | - 作者没有找到函数Λ的Smith解析表达式,所以必须分别计算遮蔽和阴影。 473 | 这就是为什么他们必须混合可分离的形式和方向相关的形式,并且无法将高度相关性结合到他们的模型中。 474 | 475 |
476 | 477 | ### 2.4.4 高度方向相关的遮蔽阴影函数(Height-Direction-Correlated Masking and Shadowing Function) 478 | 479 | - 遮蔽和阴影之间的方向相关可以通过将方向相关因子λ纳入高度相关形式来进行建模: 480 | 481 | ![](media/97619cda5b984d54d02e2a3fdad85ff9.png) 482 | 483 | 484 | - 这里,当出射和入射方向平行且λ= 485 | 0时,遮蔽和阴影完全相关。相关性随着方向之间的角度增加而减小,并且随着λ增加到1,遮蔽和阴影不再是方向相关,公式返回高度相关的形式。 486 | 487 | - Ginneken等人[Ginneken 1998]提出了一个经验因子![](media/2acc4c4315241e2213e4cd37636b7185.png),此因子取决于φ,即v和l之间的方位角,此因子与表面粗糙度无关。 488 | 489 | - Heitz等人在2014年[Heitz 2014]对这个问题进行了更深入的研究,并对λ(v,l)进行了解析近似,当D是Beckmann分布时,其结合了表面粗糙度。他们仅给出了各向同性Beckmann分布的结果, 490 | 491 | 492 |
493 |
494 | 495 | 496 | ## 2.5 多重散射微平面BRDF 497 | 498 | 499 | - 通过包含G2函数,Microfacet BRDF能够考虑遮蔽(masking)和阴影(shadowing),但依然没有考虑微平面之间的互反射(interreflection),或多表面反射(multiple surface bounce)。 而缺少微平面互反射(interreflection)是业界主流Microfacet BRDF的共有的限制。 500 | 501 | ![](media/9497aca5b2f105c11f46144c4389268f.png) 502 | 503 | 图 现有Microfacet建模未考虑图中蓝色部分的multiple surface bounce反射(图片来自Naty Hoffman, Recent Advances in Physically Based Shading, SIGGRAPH 2016) 504 | 505 | - 即标准Microfacet BRDF模型的最大问题,是虽然它们能量守恒(即不会产生任何能量),但它们也不能在高粗糙度时维持能量。 506 | 这是由于建模微平面模型时所做出的单散射假设,没有模拟微表面上的多次散射,即缺少微平面互反射(interreflection)。单散射的在高粗糙度时会有较大的能量损失,从而显得过暗。尤其对于高粗糙度的金属而言,如下图所示。 507 | 508 | ![](media/aba1577114eefcd2f27dbceca5315485.png) 509 | 510 | 图 由于单次散射,反射随着粗糙度增加而变暗 511 | 512 | ![](media/bb45dc7379db0ec3834025b741647f5b.png) 513 | 514 | 图 多散射则是能量守恒的 515 | 516 | ![](media/bd15454f3ae41288230778d489802b09.png) 517 | 518 | 图 GGX + height-correlated masking & shadowing,在粗糙度1时会损失接近一半的入射能量(图片来自[Kulla 2017]) 519 | 520 | - 对此Heitz在[Heitz 2016]中深入讨论了多重散射微平面BRDF(Multiple-scattering microfacet BRDF),但该文章仅介绍了多尺度BRDF的随机计算,并不适用于实时渲染。 521 | 522 | ![](media/c654f777e7eb79e3a19ea8a371cfa904.png) 523 | 524 | 图 SIGGRAPH 2017, Revisiting Physically Based Shading at Imageworks 525 | 526 | - 随后,Sony ImageWork的Kulla和Conty[Kulla 2017]在SIGGRPAPH 2017上中提出了一项新的技术方案,创建一个模拟多次反射表面反射的附加BRDF波瓣,作为能量补偿项(Energy Compensation Term): 527 | 528 | ![](media/ec9afdc4d80dbace6a7b5dac37ff1cdb.png) 529 | 530 | 531 | 其中: 532 | 533 | - fsF1是F0设置为1的镜面BRDF项。 534 | 535 | - RsF1是fsF1的方向反照率(Directional albedo),取决于粗糙度α和仰角θ。它相对平滑,因此可以在数值上预计算,并存储在一个小的二维纹理中。32×32分辨率就已足够。 536 | 537 | - 函数![](media/85b98bad3af89f555f687b05c3d888d8.png)是半球上*R*sF1的余弦加权平均值。其仅依赖于α,因此可以存储在一维纹理中,或者可以将廉价的曲线拟合到数据中。 538 | 539 | - ![](media/f5507496e6ccb676adea455919b6367f.png)是菲涅尔项的余弦加权平均值,如果使用原始Schlick近似,则![](media/f5507496e6ccb676adea455919b6367f.png)可以表示为![](media/5c9fb838c042314971d323de811ff431.png) 540 | 541 | 以下为有无Imagework基于能量补偿的多反射镜面反射项(multiple-bounce specular term)的渲染对比图。可以发现,具有能量补偿的渲染过程,可以很好的解决高粗糙度下的能量损失问题。 542 | 543 | ![](media/663beeeae84b200c36c6309d44945015.png) 544 | 545 | 图 GGX单散射 546 | 547 | ![](media/0ca448a5d7b9a7d5fb237cca1a311e55.png) 548 | 549 | 图 GGX单散射+能量补偿 550 | 551 | ![](media/a86ecb7ba6bf1fdea6ce1541ad6d034e.png) 552 | 553 | 图 GGX单散射 554 | 555 | ![](media/9eaa4556d5beae73b22fba780791b548.png) 556 | 557 | 图 GGX单散射+能量补偿 558 | 559 | 560 |
561 |
562 | 563 | 564 | # 三、几何函数的基本性质 565 | 566 | 567 | 几何函数的基本性质可以总结为如下四条: 568 | 569 | - 标量性 570 | 571 | - 对称性 572 | 573 | - 同向可见性 574 | 575 | - 拉伸不变性(Stretch Invariance) 576 | 577 | 下面分别进行说明。 578 | 579 |
580 |
581 | 582 | ## 3.1 标量性 583 | 584 | 585 | - 几何函数是0和1之间的一个标量: 586 | 587 | ![](media/1c69324b9bccde57fe48776e21728833.png) 588 | 589 | 590 | - 低粗糙度下几何函数大多情况下数值接近1,如下图所示。 591 | 592 | ![](media/1e12b8fa8f3f7b3088c127c7952a16bb.png) 593 | 594 | 图 GGX对应的遮蔽阴影函数,增加表面粗糙度(更高的值)会使函数更快地降至零。(图片来自[Physically 595 | Based Rendering 3rd]) 596 | 597 | ![](media/ae5e69d7d0ebb20dcf15fd46832ca4c0.jpg) 598 | 599 | 图 GGX-Smith几何项,从左到右的粗糙度为 0.0, 0.2, 0.5, 0.8, 1.0 600 | 601 | 602 |
603 |
604 | 605 | ## 3.2 对称性 606 | 607 | 608 | 几何函数在两个可见方向(出射和入射)上是对称的: 609 | 610 | ![](media/58c40ea15cdebebbcae2042c779b7f28.png) 611 | 612 | 613 | 614 |
615 |
616 | 617 | 618 | 619 | ## 3.3 同向可见性 620 | 621 | 几何函数从宏观表面正面方向上无法看到微表面的背面,反之亦然: 622 | 623 | ![](media/48276e2b4ffdc7d2572b3ec5f184fbb8.png) 624 | 625 | 626 |
627 |
628 | 629 | 630 | ## 3.4 拉伸不变性(Stretch Invariance) 631 | 632 | - 微表面几何轮廓具有拉伸不变性(Stretch Invariance)。拉伸微表面轮廓就像拉伸一张图片,即在一个维度上乘以常数因子,不会更改微表面轮廓的拓扑结构:拉伸后,遮挡的光线仍会被遮挡,未遮挡的光线仍未被遮挡。 633 | 634 | - 当微表面轮廓中涉及的所有斜率同时缩放时,遮蔽概率对于配置拉伸是不变的。这包括微表面的斜率和与出射方向相关的斜率。它们都是通过拉伸因子的倒数来缩放的。因此,斜率宽度的分布也被反向拉伸因子拉伸。如下图。 635 | 636 | ![](media/fd86da1bb84c510ca0454473f97964d4.png) 637 | 638 | 图 将1D的微表面配置拉伸2倍不会改变遮蔽概率,但是配置的所有斜率都会缩放1倍,包括微表面的斜率以及与出射方向相关的斜率(图片来自[Heitz 2014]) 639 | 640 |
641 |
642 | 643 | 644 | # 四、从法线分布函数导出的Smith遮蔽函数 645 | 646 | 647 |
648 |
649 | 650 | 651 | ## 4.1 主流法线分布函数导出的Smith遮蔽函数 652 | 653 | 由上文可知,Smith G1函数的形式如下: 654 | 655 | ![](media/10f722446ced22ec649e65a9641bcabb.png) 656 | 657 | 658 | 其中,χ+(x)表示正特征函数: 659 | 660 | ![](media/94e36a9dc49a1b4297703d7a805b64b2.png) 661 | 662 | 663 | 下面将总结主流各项同性法线分布函数对应的Λ函数的解析形式。 664 | 665 | 666 |
667 | 668 | 669 | ### 4.1.1 Beckmann法线分布的Λ函数 670 | 671 | Beckmann法线分布函数具备形状不变性,其Smith遮蔽函数对应的Λ解析形式为: 672 | 673 | ![](media/4e12503e69717887547c2afaab348a52.png) 674 | 675 | 676 | 677 | 其中![](media/ddad80315ee2d5266556f35cea64bc11.png) 678 | 679 | 680 | 上式的计算成本很高,因为它包括误差函数erf,于是Walter 等人[Walter et al. 2007] 为其提出了精确的有理逼近,可以用于近似![](media/994c0a59072f0b0b228fb52a49caf261.png): 681 | 682 | 683 | ![](media/0d1d1778e2527fd1da0a5e4231aedbae.png) 684 | 685 | 686 | 687 |
688 | 689 | ### 4.1.2 Blinn-Phong法线分布的Λ函数 690 | 691 | Blinn-Phong NDF不具备形状不变的(shape-invariant),所以其Λ函数不存在解析形式。Walter等人建议使用贝克曼Λ函数结合![](media/c31e7e28b7c69f0978c1ee140bb8a64b.png)参数进行等价。 692 | 693 |
694 | 695 | 696 | ### 4.1.3 GGX法线分布的Λ函数 697 | 698 | GGX法线分布函数具备形状不变性,其Smith遮蔽函数对应的Λ解析形式相对简单,为: 699 | 700 | ![](media/0ded91dcd6abad112f15eafa63512a36.png) 701 | 702 | 703 | 其中,![](media/416c42413c063fcaf8d730deb543e916.png) 704 | 705 | 706 | GGX分布和GGX –Smith遮蔽阴影函数的组合,是目前游戏和电影业界主流的方案。且业界一直致力于优化两者的组合。下面将对Smith GGX的演变和发展做一个总结。 707 | 708 | 709 |
710 | 711 |
712 | 713 | 714 | ## 4.2 Smith GGX的演变和发展 715 | 716 | 717 | 游戏和电影工业对GGX-Smith遮蔽函数的选用方面,可以总结为两个主要阶段: 718 | 719 | - SIGGRAPH 2014之前,Smith分离的遮蔽阴影函数 720 | 721 | - SIGGRAPH 2014之后,Smith相关的遮蔽阴影函数 722 | 723 | 而这两个阶段的演变,主要在于2014年Eric Heitz于JCGT 2014上发表了著名的paper 《Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs》,以及其后续在SIGGPRAPH 2014上进行的同名的talk。 724 | 725 | 下面将以此为线索,对2012年至今,业界有代表性的Smith GGX选用的演变和发展做一个盘点。 726 | 727 | 728 |
729 |
730 | 731 | ### 4.2.1 SIGGRAPH 2012:Disney 732 | 733 | Disney参考了 [Walter 2007]的近似方法,使用Smith GGX导出的G项,并将粗糙度参数进行重映射以减少光泽表面的极端增益,即将α 从[0,1]重映射到[0.5, 1],α的值为(0.5 + roughness/2)\^2。从而使几何项的粗糙度变化更加平滑,更便于美术人员的使用。 734 | 735 | 以下为Disney 实现的Smith GGX的几何项的表达式: 736 | 737 | ![](media/9294022b2fc76e73163cc85424e3bb15.png) 738 | 739 | ![](media/40518e0fb158d755d23e5cbabf10a41a.png) 740 | 741 | ![](media/79ec3dcce92fbd439b533a6d9dc68f39.png) 742 | 743 | 744 |
745 |
746 | 747 | ### 4.2.2 SIGGRAPH 2013:UE4 748 | 749 | 其中UE4在SIGGRAPH 2013上公布的方案为基于Schlick近似,将k映射为k=a/2,去匹配GGX 750 | Smith方程,并采用了Disney对粗糙度的重映射: 751 | 752 | 753 | ![](media/982e3672c32998079331a1186dc61e77111.png) 754 | 755 | 756 |
757 |
758 | 759 | 760 | ### 4.2.3 SIGGRAPH 2014至今:业界转向Smith Joint Masking-Shadowing Function 761 | 762 | - 在2014年,Heitz在JCGT 2014发表了著名的paper 《Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs》,以及后续在SIGGPRAPH 2014上进行了同名的talk,将游戏和电影业界对遮蔽阴影函数(The Smith Joint Masking-Shadowing Function)的理解上升到了一个新的层次。 763 | 764 | ![](media/4aa3efe02540cb54a6866226e97220ab.png) 765 | 766 | 图 SIGGPRAPH 2014,Understanding the Masking-Shadowing Function in Microfacet-Based BRDF 767 | 768 | - UE4 ,Frostbite 和Unity等引擎都受到Heitz的启发,为了得到更精确的几何遮挡关系,开始考虑入射阴影和出射遮蔽之间的相关性,并在后续更新中各自转向了Smith联合遮蔽阴影函数(The Smith Joint Masking-Shadowing Function)的高度相关遮蔽阴影形式(Height-Correlated Masking and Shadowing),并相应地都做了一些近似与优化。 769 | 770 | 下面将分别对其进行总结。 771 | 772 | 773 |
774 |
775 | 776 | #### 4.2.3.1 Frostbite的GGX-Smith Joint近似方案 777 | 778 | Frostbite的Lagarde[Lagarde 2014 ]观察到对GGX高度相关的Smith G2(height-correlated Smith G2)具有与镜面微平面BRDF的分母组合时抵消的项, 因此可以简化组合项为: 779 | 780 | ![](media/62d1799f476094490925e6fd1d0f31b7.png) 781 | 782 | 783 | 其中,![](media/a8214a5984a80de8f3dfde1cf9de4941.png) 784 | 785 | 786 | 787 |
788 |
789 | 790 | #### 4.2.3.2 UE4的GGX-Smith Correlated Joint 近似方案 791 | 792 | UE4采用的 GGX-Smith Correlated Joint Approximate为: 793 | 794 | ![](media/566a04f49f1efbf6912b05047d8b1a74.png) 795 | 796 | 797 | 798 | 实现代码如下: 799 | 800 | ```` 801 | // Appoximation of joint Smith term for GGX 802 | // [Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs"] 803 | float Vis_SmithJointApprox( float a2, float NoV, float NoL ) 804 | { 805 | float a = sqrt(a2);// a2 = Pow4( Roughness ) 806 | float Vis_SmithV = NoL * ( NoV * ( 1 - a ) + a ); 807 | float Vis_SmithL = NoV * ( NoL * ( 1 - a ) + a ); 808 | return 0.5 * rcp( Vis_SmithV + Vis_SmithL ); 809 | } 810 | 811 | ```` 812 | 813 |
814 | 815 | #### 4.2.3.3 Unity HDRP 的GGX-Smith Correlated Joint近似方案 816 | 817 | Unity HDRP采用的GGX-Smith Correlated Joint Approximate为: 818 | 819 | ![](media/a4cba0214565f4928e8b793b0ee4f6b1.png) 820 | 821 | 822 | 实现代码如下: 823 | 824 | ```` 825 | // Note: V = G / (4 * NdotL * NdotV) 826 | // [Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs"] 827 | float V_SmithJointGGX(float NdotL, float NdotV, float roughness, float partLambdaV) 828 | { 829 | float a2 = Sq(roughness); 830 | 831 | // Original formulation: 832 | // lambda_v = (-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5 833 | // lambda_l = (-1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5 834 | // G = 1 / (1 + lambda_v + lambda_l); 835 | 836 | // Reorder code to be more optimal: 837 | float lambdaV = NdotL * partLambdaV; 838 | float lambdaL = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2); 839 | 840 | // Simplify visibility term: (2.0 * NdotL * NdotV) / ((4.0 * NdotL * NdotV) * (lambda_v + lambda_l)) 841 | return 0.5 / (lambdaV + lambdaL); 842 | } 843 | 844 | float V_SmithJointGGX(float NdotL, float NdotV, float roughness) 845 | { 846 | float partLambdaV = GetSmithJointGGXPartLambdaV(NdotV, roughness); 847 | return V_SmithJointGGX(NdotL, NdotV, roughness, partLambdaV); 848 | } 849 | 850 | float GetSmithJointGGXPartLambdaVApprox(float NdotV, float roughness) 851 | { 852 | float a = roughness; 853 | return NdotV * (1 - a) + a; 854 | } 855 | ```` 856 | 857 | 858 |
859 | 860 | 861 | #### 4.2.3.4 Google Filament渲染器 的GGX-Smith Joint近似方案 862 | 863 | Google Filament渲染器采用的 GGX-Smith Correlated Joint Approximate为: 864 | 865 | ![](media/5655445200dfccdbb4a1bccb6b54991c.png) 866 | 867 | 868 | 869 | 实现代码如下: 870 | ```` 871 | float V_SmithGGXCorrelated(float NoV, float NoL, float a) 872 | { 873 | float a2 = a * a; 874 | float GGXL = NoV * sqrt((-NoL * a2 + NoL) * NoL + a2); 875 | float GGXV = NoL * sqrt((-NoV * a2 + NoV) * NoV + a2); 876 | return 0.5 / (GGXV + GGXL); 877 | } 878 | ```` 879 | 880 | 881 |
882 | 883 | 884 | #### 4.2.3.5 Respawn Entertainment的 GGX-Smith Joint近似方案 885 | 886 | - Hammon[Hammon 2017]在GDC 2017上提出,UE4在2013年提出的近似G1可以导出由高度相关的Vis项的高效近似: 887 | 888 | ![](media/fce3e995db0385149e4baa1d757f4982.png) 889 | 890 | 其中,lerp表示线性插值算子, lerp(x, y, s) = x * (1 − s) + y * s 891 | 892 | ![](media/c5ffe7b536cf62e6247c546e577824e9.png) 893 | 894 | 图 GDC 2017, PBR Diffuse Lighting for GGX+Smith Microsurfaces ,Earl 895 | 896 | 897 |
898 |
899 | 900 |
901 | 902 | 903 | # 五、BRDF标准化测试:白炉测试与弱白炉测试 904 | 905 | 906 | Eric Heitz在[Heitz 2014]中提出了白炉测试与弱白炉测试,作为BSDF和BRDF是否能量守恒的标准化测试方法。 907 | 908 | ![](media/e40ac370b65fcc6e47db51ebe4a1934e.png) 909 | 910 | 图 GGX Furnace Test。可以看到在高粗糙度有能量损失。 911 | 912 | ![](media/45eee9845aa940ab19b5c467c3a10462.png) 913 | 914 | 图 GGX + Energy Compensation Furnace Test。可以看到基本可以保持能量守恒 915 | 916 | 917 |
918 | 919 |
920 | 921 | 922 | ## 5.1 白炉测试(The White Furnace Test) 923 | 924 | - 白炉测试(The White Furnace Test)的思路为验证入射总能量为1的光线的反射光线分布是否归一化的测试。 925 | 926 | - 可以将白炉测试理解为一束辉度(irrandiance)为1的光线从上往下照到菲涅尔反射项为1的材质表面,并测定反射光线总能量是否为1的过程。若反射光线总能量为1,则通过白炉测试,否则,便不通过白炉测试。 927 | 928 | ![](media/3262c1635fb17d7a60e12ff5882ca3cc.png) 929 | 930 | 图 白炉测试:将光线投射到微表面上,并测试反射光线的总能量是否为1 931 | 932 | - 在白炉测试中,菲涅尔反射项始终为1,则光线永远不会透射,即所有的入射光线都会被全部反射,则表示投射的光线将被散射一次或多次并最终离开表面。 933 | 934 | - 白炉测试(The White Furnace Test)方程由下式给出: 935 | 936 | ![](media/2f562488048892e6747a2965b67a25d8.png) 937 | 其中,ρ即为待测试的BRDF。 938 | 939 | - 白炉测试的一版代码实现可见: 940 | 941 | ![](media/c4248dbc5f76cf88458fa01b90bf1dc3.png) 942 | 943 | 图 不同microfacet材质的白炉试验。 944 | 945 | 946 |
947 | 948 |
949 | 950 | 951 | ## 5.2 弱白炉测试(The Weak White Furnace Test) 952 | 953 | 954 | - 因为在2014年白炉测试被提出时,主流的BRDF模拟微表面上的单次反射,并不能多次散射,具有能量损失。所以业界主流的BRDF模型即使在“完美的反射表面(perfect reflector)”微表面上进行参数化时也不会积分到1,并且不满足白炉测试方程。对此,Eric Heitz在[Heitz 2014]中设计了另一个限制性较小的,用于测试常见的基于microfacet的BRDF是否标准化的测试:弱白炉测试(The 955 | Weak White Furnace Test)。 956 | 957 | - 弱白炉测试(The Weak White Furnace Test)的主要思路为验证在第一次反弹之后和离开表面之前反射的光线分布是否归一化。对几何项而言,即没有入射的阴影(shadowing)项,只有出射的遮蔽(masking)项。可以通过用遮蔽(masking)函数替换遮蔽阴影(masking-shadowing)函数,即G2(l,v,h) = G1(v,h)来实现。 958 | 959 | - 弱白炉测试方程(Weak White Furnace Test)由下式给出: 960 | 961 | ![](media/eaf7e5178449352eb816e9f4f5d3fcec.png) 962 | 963 | 964 | - 弱白炉测试对于漫反射微平面BRDF也同样适用,具体方案可见[Heitz 2014]。 965 | 966 | - [Heitz 2014]的附录中也有实现弱白炉测试的Matlab代码。 967 | 968 | 对微平面Specular BRDF的弱白炉测试的具体过程如下: 969 | 970 | ![](media/2e80630608297d9328d0561b507bbefc.png) 971 | 972 | 图 微平面Specular BRDF的弱白炉测试的具体过程 973 | 974 | 975 | 976 |
977 | 978 |
979 | 980 | # 六、总结 981 | 982 | 983 | 正文到这里已经结束。不妨使用本文主要内容提炼出的思维导图作为全文的内容总结: 984 | 985 | ![](media/79fc3da5e278aac26866b728eb17351a.png) 986 | 987 | 988 |
989 | 990 |
991 | 992 | # Reference 993 | 994 | 995 | [1] Akenine-Moller T, Haines E, Hoffman N. Real-Time Rendering 4th[M]. AK Peters CRC Press, 2018 996 | 997 | [2] Pharr M, Jakob W, Humphreys G. Physically based rendering: From theory to implementation[M]. Morgan Kaufmann, 2016. 998 | 999 | [3] Kulla C, Conty A. Revisiting physically based shading at Imageworks[J]. SIGGRAPH Course, Physically Based Shading, 2017. 1000 | 1001 | [4] Hoffman N. Background: physics and math of shading[J]. Physically Based Shading in Theory and Practice, 2013 1002 | 1003 | [5] Sébastien Lagarde , Physically Based Material Where Are We , SIGGRAPH 2017 1004 | 1005 | [6] Heitz E. Understanding the masking-shadowing function in microfacet-based BRDFs[J]. Journal of Computer Graphics Techniques, 2014 1006 | 1007 | [7] Walter, Bruce, Stephen R. Marschner, Hongsong Li, and Kenneth E. Torrance, "Microfacet Models for Refraction through Rough Surfaces," Rendering Techniques 2007, Eurographics Association, pp. 195-206, June 2007. 1008 | 1009 | [8] Burley, Brent, "Physically Based Shading at Disney," SIGGRAPH Practical Physically Based Shading in Film and Game Production course, Aug. 2012. 1010 | 1011 | 1012 | [9] https://github.com/EpicGames/UnrealEngine 1013 | 1014 | [10] https://github.com/Unity-Technologies/ScriptableRenderPipeline 1015 | 1016 | [11] https://google.github.io/filament/Filament.md.html 1017 | 1018 | [12] 题图来自《Anthem》 1019 | 1020 | 1021 | ![](media/b59b08616b23ebbf44460fd8e94acc6a.jpg) 1022 | -------------------------------------------------------------------------------- /content/part 5/media/01a8a1d6669af50097f7e392e6196e06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/01a8a1d6669af50097f7e392e6196e06.png -------------------------------------------------------------------------------- /content/part 5/media/08ba8c587b69d1d4c78bd0d0e2404c4d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/08ba8c587b69d1d4c78bd0d0e2404c4d.png -------------------------------------------------------------------------------- /content/part 5/media/0ca448a5d7b9a7d5fb237cca1a311e55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/0ca448a5d7b9a7d5fb237cca1a311e55.png -------------------------------------------------------------------------------- /content/part 5/media/0d1d1778e2527fd1da0a5e4231aedbae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/0d1d1778e2527fd1da0a5e4231aedbae.png -------------------------------------------------------------------------------- /content/part 5/media/0ded91dcd6abad112f15eafa63512a36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/0ded91dcd6abad112f15eafa63512a36.png -------------------------------------------------------------------------------- /content/part 5/media/10f722446ced22ec649e65a9641bcabb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/10f722446ced22ec649e65a9641bcabb.png -------------------------------------------------------------------------------- /content/part 5/media/1115872096ef1ef2b2183fa73728d9d9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/1115872096ef1ef2b2183fa73728d9d9.png -------------------------------------------------------------------------------- /content/part 5/media/161b0caae09c258a64dccfadbda6b62d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/161b0caae09c258a64dccfadbda6b62d.png -------------------------------------------------------------------------------- /content/part 5/media/17e47c4a8d38caf5eb9746123317ee4e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/17e47c4a8d38caf5eb9746123317ee4e.png -------------------------------------------------------------------------------- /content/part 5/media/1c69324b9bccde57fe48776e21728833.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/1c69324b9bccde57fe48776e21728833.png -------------------------------------------------------------------------------- /content/part 5/media/1ce971169127255d925251e0fc44cafa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/1ce971169127255d925251e0fc44cafa.png -------------------------------------------------------------------------------- /content/part 5/media/1e12b8fa8f3f7b3088c127c7952a16bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/1e12b8fa8f3f7b3088c127c7952a16bb.png -------------------------------------------------------------------------------- /content/part 5/media/20459061ec81d1ef8ebfb1f417852045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/20459061ec81d1ef8ebfb1f417852045.png -------------------------------------------------------------------------------- /content/part 5/media/2acc4c4315241e2213e4cd37636b7185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/2acc4c4315241e2213e4cd37636b7185.png -------------------------------------------------------------------------------- /content/part 5/media/2b06ef1685e6df43021b423980b93d48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/2b06ef1685e6df43021b423980b93d48.jpg -------------------------------------------------------------------------------- /content/part 5/media/2e80630608297d9328d0561b507bbefc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/2e80630608297d9328d0561b507bbefc.png -------------------------------------------------------------------------------- /content/part 5/media/2f562488048892e6747a2965b67a25d8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/2f562488048892e6747a2965b67a25d8.png -------------------------------------------------------------------------------- /content/part 5/media/3262c1635fb17d7a60e12ff5882ca3cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/3262c1635fb17d7a60e12ff5882ca3cc.png -------------------------------------------------------------------------------- /content/part 5/media/3bc3edc1eb122f07d910907a1f3d8336.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/3bc3edc1eb122f07d910907a1f3d8336.png -------------------------------------------------------------------------------- /content/part 5/media/3dc9d15f986d71b8dc739b242f09302a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/3dc9d15f986d71b8dc739b242f09302a.png -------------------------------------------------------------------------------- /content/part 5/media/40518e0fb158d755d23e5cbabf10a41a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/40518e0fb158d755d23e5cbabf10a41a.png -------------------------------------------------------------------------------- /content/part 5/media/416c42413c063fcaf8d730deb543e916.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/416c42413c063fcaf8d730deb543e916.png -------------------------------------------------------------------------------- /content/part 5/media/45eee9845aa940ab19b5c467c3a10462.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/45eee9845aa940ab19b5c467c3a10462.png -------------------------------------------------------------------------------- /content/part 5/media/48276e2b4ffdc7d2572b3ec5f184fbb8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/48276e2b4ffdc7d2572b3ec5f184fbb8.png -------------------------------------------------------------------------------- /content/part 5/media/4aa3efe02540cb54a6866226e97220ab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/4aa3efe02540cb54a6866226e97220ab.png -------------------------------------------------------------------------------- /content/part 5/media/4e12503e69717887547c2afaab348a52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/4e12503e69717887547c2afaab348a52.png -------------------------------------------------------------------------------- /content/part 5/media/4f40c0ebc4718baeac07348b8d4240a6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/4f40c0ebc4718baeac07348b8d4240a6.png -------------------------------------------------------------------------------- /content/part 5/media/53d113963044bd1e8a8908c0b1dec0b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/53d113963044bd1e8a8908c0b1dec0b4.png -------------------------------------------------------------------------------- /content/part 5/media/5655445200dfccdbb4a1bccb6b54991c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/5655445200dfccdbb4a1bccb6b54991c.png -------------------------------------------------------------------------------- /content/part 5/media/566a04f49f1efbf6912b05047d8b1a74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/566a04f49f1efbf6912b05047d8b1a74.png -------------------------------------------------------------------------------- /content/part 5/media/58c40ea15cdebebbcae2042c779b7f28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/58c40ea15cdebebbcae2042c779b7f28.png -------------------------------------------------------------------------------- /content/part 5/media/5c9fb838c042314971d323de811ff431.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/5c9fb838c042314971d323de811ff431.png -------------------------------------------------------------------------------- /content/part 5/media/5dbee4a8d68561d61c726d925eb6084d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/5dbee4a8d68561d61c726d925eb6084d.png -------------------------------------------------------------------------------- /content/part 5/media/62d1799f476094490925e6fd1d0f31b7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/62d1799f476094490925e6fd1d0f31b7.png -------------------------------------------------------------------------------- /content/part 5/media/663beeeae84b200c36c6309d44945015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/663beeeae84b200c36c6309d44945015.png -------------------------------------------------------------------------------- /content/part 5/media/6ae3a91e739a5ba62cb7c3c4830e3eb6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/6ae3a91e739a5ba62cb7c3c4830e3eb6.png -------------------------------------------------------------------------------- /content/part 5/media/72a36cc312878ceffc9c67199a25e673.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/72a36cc312878ceffc9c67199a25e673.png -------------------------------------------------------------------------------- /content/part 5/media/77ac214f5a4f615a65d09e576d0230d4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/77ac214f5a4f615a65d09e576d0230d4.png -------------------------------------------------------------------------------- /content/part 5/media/79ec3dcce92fbd439b533a6d9dc68f39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/79ec3dcce92fbd439b533a6d9dc68f39.png -------------------------------------------------------------------------------- /content/part 5/media/79fc3da5e278aac26866b728eb17351a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/79fc3da5e278aac26866b728eb17351a.png -------------------------------------------------------------------------------- /content/part 5/media/818d632360b2960edd42579b0dd96621.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/818d632360b2960edd42579b0dd96621.png -------------------------------------------------------------------------------- /content/part 5/media/85b98bad3af89f555f687b05c3d888d8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/85b98bad3af89f555f687b05c3d888d8.png -------------------------------------------------------------------------------- /content/part 5/media/8b8f0ff7a30c1e3288cb1c72a17006e0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/8b8f0ff7a30c1e3288cb1c72a17006e0.png -------------------------------------------------------------------------------- /content/part 5/media/905d804603235594b4a930479943f359.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/905d804603235594b4a930479943f359.png -------------------------------------------------------------------------------- /content/part 5/media/9294022b2fc76e73163cc85424e3bb15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/9294022b2fc76e73163cc85424e3bb15.png -------------------------------------------------------------------------------- /content/part 5/media/9497aca5b2f105c11f46144c4389268f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/9497aca5b2f105c11f46144c4389268f.png -------------------------------------------------------------------------------- /content/part 5/media/94e36a9dc49a1b4297703d7a805b64b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/94e36a9dc49a1b4297703d7a805b64b2.png -------------------------------------------------------------------------------- /content/part 5/media/96cfde9628680bc6d9b5934b5a804316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/96cfde9628680bc6d9b5934b5a804316.png -------------------------------------------------------------------------------- /content/part 5/media/97619cda5b984d54d02e2a3fdad85ff9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/97619cda5b984d54d02e2a3fdad85ff9.png -------------------------------------------------------------------------------- /content/part 5/media/982e3672c32998079331a1186dc61e77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/982e3672c32998079331a1186dc61e77.png -------------------------------------------------------------------------------- /content/part 5/media/982e3672c32998079331a1186dc61e77111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/982e3672c32998079331a1186dc61e77111.png -------------------------------------------------------------------------------- /content/part 5/media/994c0a59072f0b0b228fb52a49caf261.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/994c0a59072f0b0b228fb52a49caf261.png -------------------------------------------------------------------------------- /content/part 5/media/9eaa4556d5beae73b22fba780791b548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/9eaa4556d5beae73b22fba780791b548.png -------------------------------------------------------------------------------- /content/part 5/media/a4cba0214565f4928e8b793b0ee4f6b1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/a4cba0214565f4928e8b793b0ee4f6b1.png -------------------------------------------------------------------------------- /content/part 5/media/a8214a5984a80de8f3dfde1cf9de4941.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/a8214a5984a80de8f3dfde1cf9de4941.png -------------------------------------------------------------------------------- /content/part 5/media/a86ecb7ba6bf1fdea6ce1541ad6d034e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/a86ecb7ba6bf1fdea6ce1541ad6d034e.png -------------------------------------------------------------------------------- /content/part 5/media/aba1577114eefcd2f27dbceca5315485.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/aba1577114eefcd2f27dbceca5315485.png -------------------------------------------------------------------------------- /content/part 5/media/ae5e69d7d0ebb20dcf15fd46832ca4c0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/ae5e69d7d0ebb20dcf15fd46832ca4c0.jpg -------------------------------------------------------------------------------- /content/part 5/media/b59b08616b23ebbf44460fd8e94acc6a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/b59b08616b23ebbf44460fd8e94acc6a.jpg -------------------------------------------------------------------------------- /content/part 5/media/bb45dc7379db0ec3834025b741647f5b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/bb45dc7379db0ec3834025b741647f5b.png -------------------------------------------------------------------------------- /content/part 5/media/bd15454f3ae41288230778d489802b09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/bd15454f3ae41288230778d489802b09.png -------------------------------------------------------------------------------- /content/part 5/media/c31e7e28b7c69f0978c1ee140bb8a64b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/c31e7e28b7c69f0978c1ee140bb8a64b.png -------------------------------------------------------------------------------- /content/part 5/media/c4248dbc5f76cf88458fa01b90bf1dc3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/c4248dbc5f76cf88458fa01b90bf1dc3.png -------------------------------------------------------------------------------- /content/part 5/media/c5ffe7b536cf62e6247c546e577824e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/c5ffe7b536cf62e6247c546e577824e9.png -------------------------------------------------------------------------------- /content/part 5/media/c654f777e7eb79e3a19ea8a371cfa904.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/c654f777e7eb79e3a19ea8a371cfa904.png -------------------------------------------------------------------------------- /content/part 5/media/cf5196dc3e1df843a9895279cc8e45b6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/cf5196dc3e1df843a9895279cc8e45b6.png -------------------------------------------------------------------------------- /content/part 5/media/cf91540798512916297e8ff29d2daeb0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/cf91540798512916297e8ff29d2daeb0.png -------------------------------------------------------------------------------- /content/part 5/media/ddad80315ee2d5266556f35cea64bc11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/ddad80315ee2d5266556f35cea64bc11.png -------------------------------------------------------------------------------- /content/part 5/media/e12d888024f898f0f269532e5f28eed0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/e12d888024f898f0f269532e5f28eed0.png -------------------------------------------------------------------------------- /content/part 5/media/e24f10abd36c00821d421eb9d99b5c64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/e24f10abd36c00821d421eb9d99b5c64.png -------------------------------------------------------------------------------- /content/part 5/media/e2aaf9d6c96b1a523342dd006bfe3114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/e2aaf9d6c96b1a523342dd006bfe3114.png -------------------------------------------------------------------------------- /content/part 5/media/e40ac370b65fcc6e47db51ebe4a1934e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/e40ac370b65fcc6e47db51ebe4a1934e.png -------------------------------------------------------------------------------- /content/part 5/media/e9704bb54e9ac08859dfeab6709a0e5c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/e9704bb54e9ac08859dfeab6709a0e5c.png -------------------------------------------------------------------------------- /content/part 5/media/eaf7e5178449352eb816e9f4f5d3fcec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/eaf7e5178449352eb816e9f4f5d3fcec.png -------------------------------------------------------------------------------- /content/part 5/media/ec9afdc4d80dbace6a7b5dac37ff1cdb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/ec9afdc4d80dbace6a7b5dac37ff1cdb.png -------------------------------------------------------------------------------- /content/part 5/media/f2048f675c3dbdd5d5d250c92b5663fa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/f2048f675c3dbdd5d5d250c92b5663fa.png -------------------------------------------------------------------------------- /content/part 5/media/f5507496e6ccb676adea455919b6367f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/f5507496e6ccb676adea455919b6367f.png -------------------------------------------------------------------------------- /content/part 5/media/fce3e995db0385149e4baa1d757f4982.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/fce3e995db0385149e4baa1d757f4982.png -------------------------------------------------------------------------------- /content/part 5/media/fd86da1bb84c510ca0454473f97964d4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/content/part 5/media/fd86da1bb84c510ca0454473f97964d4.png -------------------------------------------------------------------------------- /media/2-PBR-Core-Theory-and-Rendering-Principle-Knowledge-Architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/2-PBR-Core-Theory-and-Rendering-Principle-Knowledge-Architecture.png -------------------------------------------------------------------------------- /media/3-PBR-Disney-Principled-BRDF-BSDF-Knowledge-Architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/3-PBR-Disney-Principled-BRDF-BSDF-Knowledge-Architecture.png -------------------------------------------------------------------------------- /media/4-PBR-The-NDF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/4-PBR-The-NDF.png -------------------------------------------------------------------------------- /media/5-PBR-The-Geometry-Function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/5-PBR-The-Geometry-Function.png -------------------------------------------------------------------------------- /media/PBR-White-Paper-Knowledge-Architecture-1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/PBR-White-Paper-Knowledge-Architecture-1.0.png -------------------------------------------------------------------------------- /media/title.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QianMo/PBR-White-Paper/fd2f3d3523a8cff102db9e726bf7b558fd405a42/media/title.jpg -------------------------------------------------------------------------------- /process.dct: -------------------------------------------------------------------------------- 1 | {'time_freq':3515630, 'bits':64} --------------------------------------------------------------------------------