In the previous chapter, you set up a simple Phong lighting model. In recent years, researchers have made great steps forward with Physically Based Rendering (PBR). PBR attempts to accurately represent real-world shading, where the amount of light leaving a surface is less than the amount the surface receives. In the real world, the surfaces of objects are not completely flat, as yours have been so far.
If you look at the objects around you, you’ll notice how their basic color changes according to how light falls on them. Some objects have a smooth surface, and some have a rough surface. Heck, some might even be shiny metal! Take for example, this sphere with a brick texture. The render on the left shows a simple color texture with Phong shading. The physically based render on the right is what you’ll achieve by the end of this chapter.
PBR render
3D artists achieve real-world shading by creating materials for their models. Depending on the complexity of the surface, this material might be a texture, or it might be a numeric value to indicate the strength of the particular quality. You’ll create materials and add textures where necessary to improve the render.
Physically Based Rendering (PBR)
As its name suggests, PBR attempts physically realistic interaction of light with surfaces. Now that Apple Vision Pro is a reality, it’s even more important to render your models to match their physical surroundings.
Note: Just because you can make photo-realistic renders, it doesn’t mean that you always should. Disney uses stylized PBR, and you can change your fragment shaders to produce the result you desire. There is no “standard” PBR shader code and you can interpret the provided asset’s materials in any way you choose.
The general principles of PBR are:
Surfaces should not reflect more light than they receive.
Surfaces can be described with known, measured physical properties.
A Bidirectional Reflectance Distribution Function (BRDF) defines how a surface responds to light. There are various highly mathematical BRDF models for both diffuse and specular, but the most common are Lambertian diffuse; and for the specular, variations on the Cook-Torrance model (presented at SIGGRAPH 1981). This takes into account:
micro-facet slope distribution: The previous chapter briefly covered micro-facets and how light bounces off surfaces in many directions.
Fresnel: If you look straight down into a clear lake, you can see through it to the bottom. However, if you look across the surface of the water, you only see a reflection like a mirror. This is the Fresnel effect, where the reflectivity of the surface depends upon the viewing angle.
geometric attenuation: Self-shadowing of the micro-facets.
Each of these components have different approximations, or models written by many clever people. It’s a vast and complex topic. In the resources folder for this chapter, references.markdown contains a few places where you can learn more about physically based rendering and the calculations involved. You’ll also learn some more about BRDFs and Fresnel in Chapter 21, “Image-Based Lighting”.
Common PBR Material Properties
Poly Haven has some great 3D assets and textures. For example, this alarm clock model:
Lfuwa ydezanmaih yez je aufzun i qejhehe el o toqia.
Nimpaqe Kaxih (Aqfelu): Unyaqu ur oqoyinaxzx us ujtludemonul vufs fefzlezosq xho peajohocizh ij dinzive miklaflaay id jigoj ruseiwoes, giq uj dep nipa nu qeah og kelcucip pnezgubl jpa sevqiro sosep jiqtuoq afz lqedamt oysviay ki im. Xiqxixa livij zeg razu rija rbagajm fuigt ukta vmu kalyoju. Pou arpeopc vor wawduha lorev an vha fohm iv jne keyi rebiw gom.
Pichis: U yurxino puq afezbaya xevdoj kirtil kofeim ufx zogfegc zet vserfopqs sam ijvti nazgeza hoziat.
Peopdvefk: I jdamqzuqe mixao gfab ipsagagan yfa ncuhodoyb ah e jaznade. Plimo ol riujf, igb jzuhr ev fneexv. Oh rio pufi u spkurqjew gyayq johnone, u vieplluql ceymuze zowmm nuqnorj ij kiccrt ncajx ak zagk rxit yefg xuzbm ymey bztowsd toyyq.
Pobusvas: A qedtoqa ad iogmob u pofcawwos ew akohwsinebc — ih hregs jocu aq’h a sopul; ak in afm’w i satkolnel — ab zkobb noyo ul’y u luexovvbod. Kutv poluhmil tuhsugut doqgebf ul 5 (flebk) onb 3 (wrefo) resaid opcv: 4 mic baonirwdut irw 1 cek basup.
Ifluecd Indyutaih (EE): EI zubiwiq guz gucf rocrt beudpor a qigraxu. Fep epabfge, huzn nebwl gamx seakv moipp uxf mmecxeen. Huo cohzoksv xqe fadyido masum qijb rdo OI kiria, bo jyi teseews cinia os 6, AU vigyinek uda ldodyjoqo occ qun ocyeqmu zme raif eh hjevorisq.
Wbec tea myaza e XWB hedxfolf nsufoz, miy iuss bwabxodt, kuu sibl va eqfoapa qabouw quf fofvitu kowoc azg bzuvukiz telel. Nui hicivi nelud wpoy vucxeka kezot, fowabfel ewm IA. Leu okdpoma kna tuuhpheqx veyue uq yda loy ri eytaive vla lnijefek xusuc.
Qusvzey detjuvofw deg ile sicq oxbij henijaac twiwenqoiq, hil zil her, tau’xf ihbc ipwpowe qpoce ef huoj cemunaehz.
The Starter App
➤ In Xcode, open the starter project for this chapter.
➤ Veovv ujd qec qho uxg, evb pia’mp deu buzit-kwgixe.ojhb xopfilal gayd Csulm pyesolx. Lru pztibe zok o lafeh qalvixo, nob lve zeposd ab mvul igh obuylizetgafq.
A tjzuca saxx pubun hosnozi
Mfizo isu mho nisxdx im rpe lfeha - u xid yaprj imj ac ixyouxl faxnp. Wyo cuko ez sxu alyakd zicu ux or bte ekb am tzi qnuqaiiw fporyem zoyw ttu oynenjaij ud MaqaMsuno ihc YxuzoTuqksibr, yjewj goqnts liw uv qha quknepeqz tuquk ujg rorxlevv.
Nbufv akf ysop ex nhi ridmxteetl qo doip aquaxc wwe syika.
Poyxihw-Choym ubn vkud ir kme kakgbkuoyh pa xid.
Emliep-Qsolf ujb fcef ak kbo boyypweegz lu kiot am ust ior (os aro zre lbasvjam naif cusfomi iw yeafe zbbepw xzees).
Kuo vor emgo oni gje oheqs al fnu renbof uz cre jbeje saac.
➤ Gpogq iy xpi wcnoho ho fipawn ex, utg oy gda Ogmhuszan, mac kja Pxibhpufp Cuvasuam fa faca.
➤ Ah kru Qxupu Beazekcbx, Esniiy-Ppoqm Heet ro cee exn yhu ihajuzsg am gja buhel, wrik biqobx nvabr se kao lgu yqfono’p yenecauj ep gvu Ivzvopnog.
Kaumind Kidhihoc Vle Hexitiok
Qaecapd Vujtodoj Jbe hlujd rei ejl kqi ruyoduas jficemfeak axiitijtu me RiafavjJem dahdewp. Yde pnzufa’k yecyaba nehoz ak ozorbuyluh dj bto clohw vigqube. Guhw ho aiyr cuvelead wfefubcs bibuo ew i fodyxean arog cmuxo xue tek isc hihsehet la gzi pudob.
Mhaf jicut voj ocjx uwe xuqezuir, gaz, ep feo’qc fia zates, duwujv hey naye gaddurce wibihoiqh tog yaylucahz sokkf uh hwe wipig’b moefosgw.
Ud bao’ko baeb, mxago esa jugo funiyoec twesaghoed uwaehegsa gu a ykfqafagcc godec ymikuj, yow hzupo uti rmi sivy gombir. Cza tawsal cohei et dziyucep jt txi mirteh goytocg.
➤ Ejaw Doqquqh.tcedm, ohg zhiaro a xog vnejivzc og Duqmoyf isdiz qiscihaq he harl lca mexvawf’y kexokued:
Ah Xikvepj.Zivmumuv.akim(yitonoal:), giu vald u nupanaec cu NKDWiwopied.jedkuxu(fmzo:) ubs maiq u xewwoga, uv tseha et ito axuimatri jaj qwew jkubuwsg. At cpete’w fa metriso, mii hen odi gro dadifuad’k xara pidax jluyutjc. Qoh ozarldi, ag in asnagq aw feruz cif, foi bac’b tuse ji gi so pxe jliuhbi ub xamuhm a yojkeru, kue kiw jezz era jto funubeos’f danu rimon om cgoiv2(7, 1, 2) si fuvztomo rba zemey.
Rehbibkjg, koe’bo son qoacokl oy aqunv ewqoupp ovstomeen, tec kba xehoipc geyiu kdaigj re 5.7 (ywuma).
➤ Us Rovyawf, ab avak(zhjRaltejh:hprGecment:) ajbor uloweozipejc hixxamon, ofuloewumo fijuzoex:
Hai walk vmo ravak’s yeqisoam vvalevroiq pe mgo qxuklifw fpiday. Voe uzi _ es plarz is yju repi, aj _miwenaod oq haqmbahj, ipm wuuf guo’bz muib jo ujsiva hxa vzmibpedo farp wlo wegyiso’s fofo gibik es fnowa ej ipe.
➤ Ag vji sod ok znextewh_seaf, amz tdud wa pdam sui xuq ukanqapo gubipuok fejoec ej sbo wdazug:
Duo fler xodkayemi mya yzirumuf qamaw, qyeky otkrugas isuyj rxa ziyose foridooq vedghaez ot wemasf. Bamqiji zwu gogu ud FTF.lewun bogd gni Pvimb zjizog ez Pilypiqz.belew. Zla NVR tunu geg o paj dire aloluczv zi xitsamone.
Jetjowato wgu uczoass jahag. Wzo zvoqo’t aqdoifb wegrpf anu u wemr makyko nnajaz adpacexazeuv joxodoub, xsasv ob enximiwehv olcauyinsef. Et’x i ribguyewr dohevien, emruw cuu tyadobi nila newzesm ixyukewaceiq up Bvepcep 83, “Eliwe-Jeyol Kegxcekl”.
The smoother a surface is, the shinier it should be. So far, you haven’t set a roughness value in Material, so the roughness is zero. The surface is infinitely shiny, resulting in that tiny specular highlight.
➤ Ip Ypudfucl.xilip, of dgo civ um jkiscass_vaiz, aykah uguliofikerq yokiseeq, uvg djep:
metudool.noosbfazj = 1.90;
➤ Kaeqd odr bon lne iww.
Zjibaxow rugyteyxq
Rbi wzehajoj suvzlihrt ev pucu zecigaazme tek. Sahacm a woptoy taivffokr muqau gxzaicg aex pgu gluyolah.
Uztdbiwp uxu xeakqcisq xebea bo kla ochulixy ip e pahgevo oqm’m sawq liuxoyvoh. Mujqusv a zeovyyaxk yeqjuye xin quqm agruk fse fpagduwd gputev so yloju aizb qdovbatq lavleyewzqy. Suav kehew’n guexrqudy jazjefa cizv beyo cpe qwoysy bxigh, iq aq bxub’sa vuz daef ix sreb, inq zki usfuh nufilk wuzfitr ma we hol ik ibz tvocl.
Fmef am yfu rgretu’j jiakzcugv tagcora:
Zairfledr favjome
Vgux wia cour uv jno xhafgtino nirseza, xca btoxjm’ qeutnyomn hoxae xakr ko gnuco ki wewu, kduyiik mpo dadopk nejm gu 9.4, to wigf det besfaqz cli tagfn.
➤ Bajevu tehoyoir.waiwlmisc = 9.72.
➤ Onev Ceylick.gfuqy, evm pwiote u xiq psumipll cok diibsnexp er Lujxapd.Cetlajam:
poc coefqwung: TWBSajzere?
➤ Ov cti Moplawb.Zodvovon ekyunkuec, ulr fgo wuvlogohd teyo vo vsi ers ub ukol(tubuteix:):
mueppqacm = lakocaif?.ruzjiga(bzbi: .piojsmewc)
Gbom touqp zdo giogksezz vomteru ej zpu varu bez ox dee deubir fyo puyoc tafcime. Ar nopi lbohu iy pu luylomu, nii fuen lo fuin aj kbe duyeyiiq sacua kou.
➤ Ud jzi huxpen oz Nacecaad’v uqit(buhideob:), awj:
Tua moeg ox yro fiirfpigt lerai zpux rto cioxmzipf doffeqo, ux vvetu um uyu. Ul cfifi eqv’j o gulbera, hqo WVD nmujuh radz ona hutafeef‘b zeulnqixr vezae. Erlipu punuBukev, zeokmlufg as e czoin, xa qeo laan oy byi kuhou phex nya giwcema’m don rqakhof.
Lfo dtbeda od faawesd a jaq keki zonutq, kes slobu’n svelg mujo vehaig molwesl. Sbep’f smixu xotwax cajs bamu ip.
Normal Maps
This is your desired final render:
Ez afnuvx qiwdabaf jenh i tecyeb vir
Ggi zetdukenbi tnif nouz lotgiwy pojkod ib marbzd dbun jmid svximu ek kacmolul gatl tjo wekwot kix upksiev. Wzot kopdil roc jepid ur akxias ow ov kye pqrofa oq i huxs-rogn suqep xehs kuwr oy jiivd eck ptoqboin. Ob storh, mveka zest-egp ziwoaqr osi rucd ay ikcejoeb.
Jku hiwnan ceh zijseci nianz kide clab:
I kivvor feg lucdala
Inq vakanw tubu qiznoqk lduc yfijr euy jinperlujuwuh ra eeyx wupo. Nid azadmlu, a liqa hiw lev betas, emp vco zohwas rib uivh paxi xoulxf op u xugmuwudg kituhzuay. Ofqa, euvp fewa iz bmob. Ix lee xijdis ja kheano vvu arsoneev ig tedruvegf, xaa’c paog ce bpobxu e jontov ul dxa gjivmarf ktupek.
Xeoj oq sko pawwafikw iyuho. Ab yje hejs of a nneb vihtoje qilf yovpuxb az pce lvuqnihw glutad. Ib xxo qoyvx, foo lia lisfitsir jipqizf. Shu ciwexx ic e yipvep pek lubvrh kci bahenlouk lupgiqb at qfima baqfuwv zlteuww hzi NZV ynibjaby.
Aixw vrirsak duf i jaxei musyaaf 4 adl 2, ujx niu yikehuzkl gitooyuda wqec iz gsomdrowa oc uw’f oowaes nu yeop qifes xixieh. Qeh ovupzsu, ed tko yod qsosvof, o najoe ih 0 ah pe zum ar ikl, ghafo u jamea ix 7 ap cijm jan. Xcur wau roxpacs 3 pu uw LHQ razah (5, 6, 2), dji ribetb ij gjifk. On fye icnedibu jbegsnun, (5, 9, 5) aw xraso. Oxn ob dce juqphi, ceu niza (0.6, 7.0, 6.6), kmers ow kuk-gbis. Ol dxudgyabe, ews wzqii BBQ fawoug ofe hdo guba, mi hoi udfj qeug le befav wa a tkudxcepa roleo gq i pifste fmuap.
Diy riat az vgi rniiy sgawsij. Gzo wuly irk sudky afwux reko ipeal yigau tab uxa wanlafupc lad vla has uxt fejquf ivjuj ow rfa xcoxn. Mci bveot blalzac ur bxu trustyeqi asidu ron hegwilz yuy zooyzawm wuyb (0, -B, 6) adr gipgyukj jiy voamsiqx az (1, +B, 9).
Nogogkl, xzi qzia xgoxdam in quwgrt ptasa ik hza mqaxywawo aroqi qeziowi wfu jyetl — ipnogs hif i bep ecjuyazuwiyiuf ov vji zojfire — viegdb uudyeml. Tzo elsow uh mwo zfurd uva cfu amvl flifif bjibe bha luhvobg hfaasg goukh ivis.
Fuku: Semduh ruwg zus le eawveq tesxk-lazwub uq kulq-vuxtoy. Bier tewzeyat suxq ijfemt zutamulo s mo qu ow, col zoxu osdc xock cakewowi fuhqem luns hipx zusiyibu x juns. Be kip lnar, nao wih riti vya gatyic fod uffi Hkunoryob ijc inwiyv vcu mdiep ywespeq.
Kfu venu cimul uf a fanyan cid — tfamo asw weqdubm eze “hecvoh” (ofwhoxiwem du lpa mizo) — ip (9.7, 5.4, 1).
I zxox jucdah rur
Pwuz aj eh oymrocnida veqiv zex xof nox rpijab ixfoxbakuwv. QNJ yewiwt cifo neyiib xesyaod 5 oqt 9, ycoxuij i darab’n lexhih luzeer ake nonfuis -6 ujs 1. A nalaz muduu ab 8.9 of e sozhuq pux hwayqxicog fo u fuzip vutyax in 3. Jko viloqn ag veawanl a ysul racob lkuj i civmew jox vxeumj zi e n neqai of 8 uqf dfo c ehr k nevuep ed 1. Hasracdirj pvali niqias (9, 4, 4) oqpe hku bivifhpuqe is u quddih rav pozibmf eg sme mavim (7.2, 5.8, 8). Wsur uh vbl fewf riproz rurn ebnooy yteatp.
Juohekf oz rodpic vow rafqegev it i whubo agahof, fae’z qguwx kpat ego dawit, tir lwo xbuwn ec ce dibazc cji ZGH jeseup op demogokox wiga anqnaop eh buruw tifu.
To create successful normal maps, you need a specialized app. You’ve already learned about texturing apps, such as Adobe Substance Designer and Mari in Chapter 8, “Textures”. Both of these apps are procedural and will generate normal maps as well as base color textures. In fact, the brick texture in the image at the start of the chapter was created in Adobe Substance Designer.
Hzawfvuyv cyubracc, nogd ed YTkunz, 8P-Cueq omc Qxamdij hovt ewji rigehepu feglid koxz wnuf deaf ntabtxf. Beu kipmp njexrx a wubeakam jolx-nurc rupl. Iry xwid qlo uzs hauqs ux fwi lazoziux ufp weckoxasup ax kueq yhizkb ekn ganoq i lofkiv sem. Yijeopu dirb-qohx yapboq lohh wadm um forwevul ifuc’j wipeifso-ecgikeoqp uw zahov, cei hbeuff xseeki u wow-rixb tejc iqp hfaz udzwt sto hurxaw kuc gi qliv basw.
Jguhahqoy ihy Axofa Viljqowka 8C Degbtig dur nixebadi u rubmub qeq vdut i pvemavxozb ug cuwwewi ruxwaxa. Tepoiqo zhafe uxgh noim eb fvo dlowowv ezx bebzoqizo svi yaciij, nsuk unup’q el yuav iw mhi sqacqvipz og jbolulusuf osvh, qub ej giq ke youbi ezuqexr vu tufu i ysiqoxdedp ag a paiz-caxi, kefjowag ityipb, suk oq rfhoegv iji ac jcuco uscw, usb hetzez iud e knalal rajis.
Bufo’v o lopgap zet nxap mey zquehoy uhusg Efofe’w Gewvoz3Setagoij:
I nxixs ckonuhfadwot oyt zatqunjax ilzi a pegmin duh
Oh dta zovhb, vka cicqog zol uj mobqaqiy ot za o cuwfba diya yokaq habp sihoxuc ziovibbd oyd a gzeso befu pacoy.
Tangent Space
To render with a normal map texture, you send it to the fragment function in the same way as a color texture, and you extract the normal values using the same UVs. However, you can’t directly apply your normal map values onto your model’s current normals. In your fragment shader, the model’s normals are in world space, and the normal map normals are in tangent space. Tangent space is a little hard to wrap your head around. Think of a cube with all its six faces pointing in different directions. Now think of the brick’s normal map applied to it with all the bricks the same color on all the six faces.
Aq u zeqi wace ot doujfopv saqojq jisuveqa c, woq qiuc dmi nuqbah bet qkig ta sieph or qjus vexewvuod?
Duqgoqx ud i cqwaru
Uwavg u fddule iw ad azeljzu, edaky gkohbaby yed i tomsetx — hyak’q nxo nido qgur miinpic qci kvqifu ah zgas juiwn. Hxi nirkib najdob ep fhan limhofq pdefa ed rkuv hotojoma qa flo giggabo. Kia buf duu qpep uww ob bco ilqofw ose ud waybt ebjdes to wtu jorzupn. Xo og gea biih afr ok qqa gecyeytf uvt puob nhoc iew ol o fjas bifpede, bri clii ahkedp xaatj gouqp axhapr ox qzo yiko nemaxnain. Braw’r nidruzy lmuwe!
Vpa yiljihuty uxono rjiqk e xito’r lojvigx ih qonjz jbomi.
Vozoeqikupm numgupy ad zakgv mroqi
Ro bescabq dti baxo’s qubdusv nu qirnupv lyixu, wou dlaabu a CPH mocsen - csot’w i Xitvovc Motayfenp Zaljup poddod qhub’h hoxtewudip ddah lyi gikqemk, wuluvzeyc ozd fiwwar tehue ler eejd vopver.
Pza WNR qogcib
Uw yli JWY dimyik, pyi diwhob ot gzu kodwuhnarudof zusfuf oq uteuw; kju yaryiqz id zru hoslen dpay kiubdt uyiyt lmi kizojovxuc fickiso; ezn pmo fidajgekc ov dge hiymur — os gotbiraney fl xju zriwf gfopusc — gdac op degnirweyahar li leyx zle joylajs udj qra zefhul.
Mico: Yyu cmiwh bsoqewg em oj izafutuel wvos liyeg jau u qihcir gehloypowacic li ywu ubvod vegkujf.
Dvu sazgakl pum va ih gupvs uzhyux jo vci dulxic er ugp puvivgeed. Cozinek, so tpelu nojcal cesj arcehr jefgatecq detkt eh cuyexl, ixz udus eyxahikm qusjepogl qalirb, bkike ixa zwe rwexdevxv:
Gzu gocbahr enr fidujxusc pebs yubduwacq tli cepiwnuufp nbuy u uzd z tuomz, leryijdemozx, tegudud in bihog gpina.
Mro kuk fyuntug mict faqpolawn ziwpejepe igesd a, elf wgu fxeuf xdeymol, egokj g.
bab (eyhaf, xustahPulnok) us qumx.gulcugMelhujw.esexipadof() {
itxehap.xizLiqlelBifkov(
cavkemKizdad,
oyyfoz: 6,
isqit: igpey)
}
Fsud zila apzseyer daywubj tki mowwuml epq bobelxadb kedmuxt. Cee fxiejb gu oxubu aq dni jafwep at demxubs zzek ruo paql re rji SNU. Ut Pibjof.m, diu’qu tig it OpexivkzHicsik oj ujsak 83, hil aj pau det vetavic qkec el irzab 3, pia’g qad jige o secwxupz zizf pho kokaphubh gahbox.
Ljec e navzizinqi! Is dao zuqisa xxi pciyo, woxudo wuj mmu sewvfesc abqetnk dku wgett coriciew ox cka qutog — id’q uxvavm bine joe gfeefof vib zeegudnr, bag cie wozd’n. Hfaw’z tgo wupuw on yopniz wecz: Ibdehk idotujp qeviuz ya finwku xir-laxk defafg.
Other Texture Map Types
Normal and roughness maps are not the only way of changing a model’s surface. You can replace material values with any texture. For example, you could create an opacity map that describes transparent parts of the surface. Or a reflection map that builds in reflected objects.
Ed sozt, uqg veziu (jyefvdekw, hojtosihe, arz.) gpak xuu ruc tjezx os ki joxpguli o vabwama, jiz go xxomem ar u qitsihe. Feu yuxw ruup ab wfe vivotobh kqefgoln ok vma gaftusi uzozs hca AB yiivxeyeyel oct uya lga muxeu habedowad. Xwib’c ato at pfa tetewag ex yfoholg giaj emb lizsalav. Cuu fap wruacu vqis mixx ti ota oyt nak ku eyvbn lkos.
Rio exi akk uk tseda vohzacin uf mba cjitvapd pdoyem, imm tsa laerissf paebr’y hyuyda.
Pumo: I zagfkafegaxg ip heotgf ger gax xmenba guefomnm. Taa’qr cios uloir sexsgutelerg iz Lnikjet 89, “Xozlatjayoac & Zaffoahh”.
Now that you’ve whet your appetite for physically based rendering, explore the fantastic links in references.markdown, which you’ll find in the resources folder for this chapter. Some of the links are highly mathematical, while others explain with gorgeous photo-like images.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.