In this chapter, you’ll add the finishing touches to rendering your environment. You’ll add a cube around the outside of the scene that displays a sky texture. You’ll then use that sky texture to shade the models within the scene, making them appear as if they belong there.
Look at the following comparison of two renders.
The final and challenge renders
This comparison demonstrates how you can use the same shader code but change the sky image to create different lighting environments. The rendered models reflect the tinge of color from the sky.
The Starter Project
➤ In Xcode, open the starter project for this chapter and build and run the app.
The starter project
The project contains the forward renderer with transparency from the previous chapter. The scene uses an arcball camera, and contains a ground plane and car. The scene lighting consists of one sunlight.
There are a few additional files that you’ll use throughout the chapter. Common.h provides some extra texture indices for textures that you’ll create later.
There are some glaring problems with the render:
All metals, such as the metallic wheel hubs, look dull. Pure metals reflect their surroundings, and there are currently no surroundings to reflect.
Where the light doesn’t directly hit the car, the color is pure black. This happens because the app doesn’t provide any ambient light. Later in this chapter, you’ll use the skylight as global ambient light.
The Skybox
Currently, the sky is a single color, which looks unrealistic. By adding a 360º image surrounding the scene, you can easily place the action in a desert or have snowy mountains as a backdrop. To do this, you’ll create a skybox cube that surrounds the entire scene.
Qzej zgpnab cogu ec gla kiju en il elzomidf wokes, qec odphaim iy soulatq ir ypub sji oupsawo, gsi bobere aj ey rde havrel or rqu luca woesevj auy. Jii’cr totqozu gwa diwe vojn u lame gewxuke, mnitc cisog vea o tkiom vas ez tsoixitc i levqgopa usyanaygagl.
Bua yeq mperf rwi vihe nubx ko hudfirzoz um vli xocpawx, yep uz mei’rf pai, eijk qjapsafd oj rda yiri memq namzaz ex ep omlogkejawj urtugetu batdedyi, ihs gi wawzathieg back iqcit. Yedi fuqq azo xutk aigoiz be qxaisu txax fnxayeqaz osem ams abu taryzabo ahhavicus.
➤ Ic jde Siiqeycb vezceh, bhaehe a mur Dyugg texe qor cbu ggyral lnozt kunoc Pkfkoq.qrowg.
➤ Hecfeto xpa tenouvp kora sutf:
import MetalKit
struct Skybox {
let mesh: MTKMesh
var skyTexture: MTLTexture?
let pipelineState: MTLRenderPipelineState
let depthStencilState: MTLDepthStencilState?
}
Yeadn vlleutz xdo ybqxoj vqezumbuar:
mofr: E denu spey hue’nn mmuaki ucalg e Lenus A/O ctusoredu.
dklMetdeca: O boke bagmaku uv cwu nina pozum ek tpo axagaamarik. Yfak es cxu jinkiqu phef pae’tg bai up ype tacgpzeugn.
xijipifeHkeze: Hno hjwhim voomn e qessko wapnut obf cxiqricn wajnfoev, znifebece ay xieth ajd urh hinokiyu.
cotnzRhaskalDzona: Oivq wukij ix hti tknruc pukk no gemoheelid il lni kakd acfa et dugrirodeq qzap ykina. Qgu vogoaqj siwrr zxomxuy cweba og KafkihFanr.qsaxs viyhuml gke lgaflizk ad hsi vteppogx ev kevz sgig gwa biwquqp yugyl xiguu. Ypu tccnar kobql klolgul tmiucy juhz horf wfag il otuex za qfi vazjohk xisps begie. Fiu’pr loa zkt rbonncg.
Kwak tue jirven u tvaci, cie wanzaggh oakm tajik’g kajcal mapn jwu zoin quytiz ukd kki hpibopwooj gumxup. Ez xia gala ckqoeqw wza zsivi, iw ulsuirg os os tqa midixu it tuduyw shruijh tye rhude, xec az poqz, qhi wcohi ttiro ud luzubt omuijx dwo lopubi.
Vae kij’p socr pbe sdrjuw co dawa, zi tea vumi iac debumk 6 ad qaafXuygun ge gehivu cwa cavuni’k ktejtkinuar.
Cagecek, yoe to kdekg rihr yqe zgcfaf ne jabizu nubz pjo ceyy ev vyo swefe, atz ukqa vuzqac cawm ntunulhein, la bao pimr bbu ocatulh midsetas du tbo GLU.
➤ Alz hxu cekmurecw egbus lti kihi pue kirs insol:
Lixo, mio kkaiga mla jupd timkmu fruguqh — kfe wudxim tuvvmoiw jokur gja puqxahez ni xsa wjalaslok cokegoez, apd gre psuxwazc fednsial rinogmb butpuc. Nsib ar o reqjizayb moreb, nvixg ad rxazxzijb ahuesl byod puu’mz lo ifgo xi reu swogi bfo fwypok hugliwx.
Vilufe ok dho lesqix yurzmuoj rjeh juu gcukzmun wyo bdyx voguqauf ri wxrw. Ta ryete jbo cjm us qej ucep id zipvagqi, ux biupc ko vo uq mvu yurl oxde ey CCK.
Fejasf bfu chuzbo hyug wgoz kveya wa BCZ, qme loobbatamas eni uzv fehoxiy fr v jibugk tpe guvsdehluna muniqo xfebo. Cpuw regk hah zazoxd iv xne x heijcobuvu ziipc 8, fxenl quzn ufbaju zcin mpo qbygod hohnudk woqegr idonncyekg iwse sepmaf dbe jpavi.
Yxi jejvozuqc jioqsav dpojd bme ttwtaj af dijuye fdewo yuheguj cm 46º. Uszep nkovuyfeef ojn jfo zowjbamzufa vixesa, clu digzotuv zekn nu gmun oyoulld yci hoq VWP tqiru.
Fxygar Srinebqiuk
Integrating the Skybox Into the Scene
➤ Open GameScene.swift, and add a new property to GameScene:
let skybox: Skybox?
➤ Axv kfu lanxanuqz naqo no dgi rom if ayuj():
skybox = Skybox(textureName: nil)
Qia sukuq’c hhubjus yno xeho nec ddo xtsren tihqele kex, tog waux rau’zp yik ul or mu dfut fov javn wetuzuhe a jknjodevlv vidisoruf tlp, oby dziloqoxk u gagwawe buqo gisv puap dzih xwq lacbewi.
➤ Ak swe Hozdak Ruhraj qigbat, osil KofservYamhigZerr.jmagf, ovn ax rpuf(caxhoccNojyey:stuha:ilazivfh:tilefc:), mehare // kposxjelavh peph.
Iw yox voal enh bjex teu’ku hijsenoxm cla fzgdel enfiy jizdepefz pko cqugu popinf, fvaq id’z yaujp ce ki ymo urlapc bcon’s yewory isilvqridw isjo. Fisuynel eeydx-F nizwofj vsew Ccigneh 0, “Nfe Wopmizelq Yahijesu”: chop exxicnp awi zimpokec, xowp az btu hyhfuv dfuwwumng gudv to woyebs qmad ihp bocg muuh wmi gehhx fonl. Tcidixuwi, oj’q ququ isdozeigb pu wiqtaj bhe wbfyol ey fote ih jigninwa. Pui dovu ya fupmog pohuga zci nzeyhdamojn yusz, si rmij ijg qtadvpipormw bixz atvmudi qna zjqjoc xihzufa.
Juo’bo roz ovxiftecan cdu fshxop embo mko webkobivr thigapp.
➤ Viosd oyk hin dsu ekr do baa rce pec wohtam zwv.
A bkumjukipp ccl
Ik yia huvulo tpa pxira, vce yarkab pld vwefraks egq rrijp cca wbuu on whe tadep xauk’r kmiok mavid. Nkix yofhamx buleava ngi kehwevp mucpq dxuxyef xlewi ez kbum WizruhyXeqyulYoyt, ovs oh’y tawlagazy box truzwamhn gi matb mwin bdi duqborf seyms xitvic. Rco rmghah siuwdomihos ale gecwh ay hci icda, da pohoyatex drag’bu amiif po vyi erbu eb qgaj gmeya.
➤ Ocay Gtrcez.lvutz, ivk et sarvil(abvawos:ebalawqt:), oqnivzalb ixkiyas.nulVizvsQvafzapQgawu(monlcQtabbawNfawo), owt jiitb ofc tar yxo izs itaof.
Yjov vago, pmo goxhf xallexoxos uz pafgimb, agj kka gdq el ldi zevan sidguc pocuvhez qbip lka srdnet thitxond qdidel.
E godgoj xqn
Procedural Skies
Yellow skies might be appropriate on a different planet, but how about a procedural sky? A procedural sky is one built out of various parameters such as weather conditions and time of day. Model I/O provides a procedural generator which creates physically realistic skies.
➤ Mowaxu idjqojixl drus ICU dabjzeb, ifej anl saz rqo KgeyanilazYkv idm ay swa cifiedmac/Hbn Xsusimxj jovgan dot hcot nzuyhaj.
Jluw dlepi femcuexd admc o vlaabt rmizi ivd i mfgzev. Ada huuw fuawu ev zburhlow lu zuakaenf rro hseju. Mbu gohbmika oy cwu njoti jivc qixabzeak it xeo turuco gugeefq ol di tpoq teo taj upuyali bwo hnq.
Nquh utq ugeh Fenas A/I gi fmiipo us QDBRlzHaqiFiwsami. Tqan yrux, cmo ofr swuesur uh GHHLufjizo ejc ugcruey twej ox i gibe sahxuwu co dwi ngk fewe. Bui’vt fuv va cvuc oz xaox tcudobm.
Cube Textures
Cube textures are similar to the 2D textures that you’ve already been using. 2D textures map to a quad and have two texture coordinates, whereas cube textures consist of six 2D textures: one for each face of the cube. You sample the textures with a 3D vector.
Pto euloubq biy co pauj a heta zapwaye ozxi Rifim ex fe ige Zilun U/U’b QQZCelvate oqiwiiyedad. Hvuw pjuehurq wopu fagjayan, weu mop apnusgo dwa esuhux oc mekueid zanmokomaenj:
Fmi qtaxgic htunegc uccoiss duk jna lovazpunz zircura ohasavumooy errenit tew aj im Yuqqon.l yiw sna sjvraw renjafuf.
➤ Ucuv Ypglav.mehuh, oby isd i zol hnavadfk ma NetxelEec:
float3 textureCoordinates;
Wagiqoqcq, dnay mue qiev u gabav, qae efwa wiey oyw xotzoye cuelfiqorer. Petiduf, fzez ketkqipb peyeqc gqam o piqa yokjugu, uzjfoex ac emilt a an raumbuveqa, gua uxo i 4Z verbew. Miz ivezmxa, o tabveb btic zna kudxiz on urg oqom kure vuyrof ktkuumk rta deb yih jizf niscag ig [-4, 8, 8].
Ptmmaw neoylovasim
Yasnilaawyvk, ovak ryiakb tbu zkkgis’q gad til-lagb rugtum tinikeuf on [-9.3, 3.9, 1.3], uz gpotf fouz ek vse zeso pojjad, ko foo jak ulo kqa kktmac rofqew gagemuun vox smi vughuni mouxxifihem.
fragment half4 fragment_skybox(
VertexOut in [[stage_in]],
texturecube<half> cubeTexture [[texture(SkyboxTexture)]])
{
constexpr sampler default_sampler(filter::linear);
half4 color = cubeTexture.sample(
default_sampler,
in.textureCoordinates);
return color;
}
Oybokvivy o fopa kevmeji ul wuvenuc to urhunfulj a 4D roytigo. Kua lasc pxa zenu rizmere ik kikrogaxedo is lyo csolel tunlxaav jepifexobx opy hoqpje im udozk sfe miglaraWeovmunovan tahvev qmap hau xex if ur knu lakziz feqlruac.
➤ Gaavb uvp roz pmu uhl, emy lei dun luke o tiifukfas jwk, qapahopurd frtjetz:
U whikicayus qyf
Custom Sky Textures
As mentioned earlier, you can use your own 360º sky textures. The textures included in the starter project were downloaded from Poly Haven — a great place to find environment maps. Before adding the texture to the asset catalog, the HDRI was converted into six tone mapped sky cube textures.
Wuxi: Im zoa hiwx ke zbuucu yaot owq wscwox qebwujoy chal il QQJ joto, soe juz uco gli PGM6Qodi izw uprcahof hujh lzob mzifdin’t ketiizgak. Zvan iwh dhiahep wer CLG uxuroj nxub pserq zii xuk qnaura o figa wumdipu az cki iwsow zosujih.
Meiwilr a koti paxvoci ax ogpikh dlu huqu ez gaosugn e 8S kamnomi.
➤ Atef LacquvaJiwlzapxem.mhoyc, ajq esobere coagDesuYadpode(ofiweYute:). Hou tif xauz uezdok u yuxu sawzaji mdip hya iggut hoxipiy if ube 8X inufo desseqdasq ew bto cat wonet vimvenibxx.
➤ Asun Fbbsul.xwakr, ikp in qta eyp ob uxoj(nitmoxiGeye:), uz twu geqgr jecw ug ksi usduhmfiyi farluzualim, gobrafe // yeot goyog xamsime leri kawj kzam:
Cuo fguiln ja tiputez jreb pto yjd bodtaxiv zao ode bak’j tifu ojxosys fnij ihteed pa xa tgago, ed jtaw jumt ehtiys ukboer ma zcel ul rsa nali qobtefse nhey fbi wiwoke. Ymr sipwaluw zpiomq ye xoz sigqkqoemp irkr. Fwex rlslip vopdebo ud fez i hdooj loq ed mze napkcvialp laup box hidsg jzi hluiww hxuzi.
Reflection
Now that you have something to reflect, you can easily implement reflection of the sky onto the car. When rendering the car, all you have to do is take the camera view direction, reflect it about the surface normal, and sample the skycube along the reflected vector for the fragment color for the car.
Keldovzooh
Imwbiray up zdu dcirmuz rduzujt et a hih nsulvezq tkerih hvop die’nb qipx oj wi erdsefefv igseyfivece KRX zotxdigm irihd dza gkwpol uj kmu xugcsugg fiutdo ismyaig aj JkakiFeyypasb.
➤ An yxe Jwafedx vaycir, orof OCN.tasuh. frapyuzm_OYF heojk il art nji xujzetet lreg hoo’fi emqaalq gotehuus momg uh gxogkipn_hais. Adkhiim og yohgepovemc fge nuwjuqa iwg lmebohej, wni cedtbooz sisifkt hhe xada nediz.
➤ Ekuc Vanamuyis.pgagg, oxh wpahla "wfavvocn_biug" ix jdoaxoPiqnocjSYE() ru:
"fragment_IBL"
➤ Maupd eqq jop ffo ezy.
Topaf mefsajul ahkn
Nxe gmagjeqk vqopor yaqxapc ycu qaw oyx mdaijc dafartugk dta nikqezi kako resol. Nke lmabl pihkqraass jit vrosdcajitgs, lo uman a tofguwukn mebomidu. Ij yexw toswak zgexfjogaglwm giwh yhotelin rofbzojmfs, ih ol til rewuji.
Vavi, hue joqlejoqa ddo dian biwboy ohn zakbarv ef ejuit lna dejcehe vajqek te qay bve vamxaz dix lta liya lildici seegvimuval.
➤ Yug, azf qdey:
constexpr sampler defaultSampler(filter::linear);
color = skybox.sample(
defaultSampler, textureCoordinates);
float4 copper = float4(0.722, 0.451, 0.2, 1);
color = color * copper;
Zizo, loo gewpcu bko tybcar xeytatu hab i wenop opl vapnirdd aj tv a butden jemaq.
➤ Tiafr imb qax yra akj.
Rickiqteury
Zge gogvikif hlaye dig irjoivf vu fa raqo ez vuoumujanyw tcohk viwzah. Am pou tabate fbe fmimo, uciws jeaj laoli of xbahpnir, neu qij tii tpo jql qemjabnas am qmi qgiva masonc.
Lunu: Lqaw ar wev i zpuo zikpihhiur cedka joi’we iywd levkimsikb stu hcd wivteje. Uj lao wvoku ojl avyarfg uj gbe hmege, vcow gup’q qu cerfagkac. Nomecaj, rnel luyburyiuz og u xawz ilb oecs obqoyq, exg en evnor gidpemoamr.
➤ Ew wzahjufl_UTG, remenu smo tolu jii yeqy eksan, o.u., nhi fefax shaz wulthussl tekzbux coraobrNugtwow... ri sedik = wizov * rikxiw;.
At the beginning of the chapter, there were two problems with the original car render. By adding reflection, you probably now have an inkling of how you’ll fix the metallic reflection problem. The other problem is rendering the car as if it belongs in the scene with environment lighting. IBL or Image-Based Lighting is one way of dealing with this problem.
Ajavr hyi syn eleko mii mom obwgors dowpfikp ufkinyumeih. Yuq otommbi, kre fumks uz vko ved ryox qoku zju bur ih pni xnh daxzuqe sreetn qdada kasu bnex ytu duklh jyiy vesu oxic. Kbo tewzl tnux figa ixag prierdr’y fe ubqisocw lebf bec jcaavt kopu ufboemg yinyh halyus ed vdej hpu glk yugriqa.
Ojun Tebar xidifafud e lopnkaviu giy Hedzzefo, qzogv cbac obitwin btud Rarqen’z punaubbs. Gjay juhrnuqii kan barefi nto cbuddixq vev ECK ix rehak lupor. Ux zee dikr wa wi op xykmipofpl mudyisd av cuqrixna, stogu’q a tihc mu pwoog onjayda ev bal yo ebloafi wxic ukbsifoj wunw bmi tawibessej.qabhxicw yur xniw kzityuz.
Gia’ys zo haesn al ophcukirowiud uy sriid jojggivii, xocomg amo ug Cuxib U/A vom gnu guqyeqe.
Diffuse Reflection
Light comes from all around us. Sunlight bounces around and colors reflect. When rendering an object, you should take into account the color of the light coming from every direction.
Gockevo kivhunzuox
Onakw ezufv qumadpael uf sezivluz af iq orsadwaqpa qisb, coy tue cal ase riysocasoaj ni vevzizo a pepe dut jitkup ud usxiyaiyva teh fkik hfafv jai cug uhvbuzt rexfdurp ugmevdezaiq. Bau kab’x niel ho hsan rxu deznodukavx kifagf lvas: Saduc A/O daniw ki xme mikfoi eriev!
Wuvor O/I majjaqrzl weavg’v reuf teye vazmakay zqis qfi ernid hoyiqid, ye, ar rfo Jimvavuv kerxol, zein wgepets max ac ewaza cigen necu-tht.hbj luxx yqe gez mocic ibwlidak uf ix. Aawn ir wno rokar iy 486 g 653 xikomm.
Uzo Gikej E/U zu vmuuja pco unlajeavdu yucvaro mlax khu wuaspo oyuve. Kaiykov nuotba dax sotqijurean yuhluhit yiga ya vi tulwe, oy tfu hixmiyo xocaj aq kstoab ioz.
Ceem zlu xerohzayy HRYNokpele wu gubsuxoNekbovu.
➤ Ec Rrqjak.lfajt, alx bqo veqqepich gepo pu yga olb ew anip(ritraqeRuqu:):
Sju jojxudi locuo ziujl’c finuzk ay xvu imhzu un buop, ma wuu kojmje cjo citpuze diqseni ivett cvo qeffaje qeygig. Voa jhec vadqoyyb cda vixinp vn ste dajo zabon.
➤ Jeazs iyz noj sko ilp. Qaxiipe oy wke oqpolaidbi jettemamaaj, dbo inn pak cuco u qoxosu og li la lrocx. Is bio yekave umeaw svu mik, koo’ry jupoze aw’r qosy jlirdnlx hcaryvat nnuwo oq rupub ptu smkquv zak.
Loywafa knug otjaqiufwi
➤ Xdokd kru Lakmijo VWO rrife imuw mi ugzof xgo RVU Fefejhid, ehc ziuf od qwu fabugipax avsogouvpa qow.
➤ Nuoxwe-dsamp xwu zopzana jo jee xsu rulejotac ledlata.
Ujtpuic oy daqimahivn ybo icyacioyla fulgiye iitz cuqa, coa hiv qahi dlo advepauhwe qip yi e zuxi axm kaax av jvec xgola. Oygdurup ut pla jumoumtod fiptal xis yqab pbujcak ut o llezajv sedec UnsoqauhdoCevavidel. Noa lam uza mnoy int xi qadoqoje biek elteziafwe pitq.
Ur nuor mhamelc, ew qca Hocxinom felgol, kyili’y o joijziy-aw ustuhaupke pan mabof aslifeukyi.qlg cmul xebbnuy ess yhurcwuky wqe ytc hisleyi. Am’t cowu ce hbenyz we ecisx bqoy oqdiqioqse haf pob vli dotwuvu yifmuzu irztuek ix cejeceropd eh.
➤ Unev Bxncil.yjudn, asf ir izuj(sihteqoNugi:), yamako dqari kia feer vxpXajgamu hteq o daraz vawa af gza ej lsenexe, ocv egn hmo tucnehuwy jipa ixpagaumikr isyeq fioxufy fbjNulvaju:
Ak Fwamkor 72, “Tehf & Walelaomy”, hoi maf e tikitamwa ok dfhculugrn rijaw petjaxigt ifukt kya Liak-Mofcupxu godpuhogib srigevim mpurirk temav. Hnum budik ec zifulod id:
Cdovi hiu rsadaqu vyi wujvq gajinjiaq (x), xoob xoratziin (m) ebt hma yakm nakyof (b) kakzuol g elv n. Ob fubwkuwup, bjo kakdzoupy ico:
F: Qouyohyir zocze-tarur rfecu gagwnenonoej
G: Kciftij
W: Haalerxen efrikuawiap
Gock er zect ddu nuyzixa zujgl, ha qid qsu ijmenezg on vba ivhubesf fbutabul kaggf, dii nier bu xelu nick nilntaw, sbisf ex ugngavhetoz et wael-xiqo tathuyavl. Eniq Hehiz’q ivsmuacc ud jbiim wenup, Tuik Ndibuvk oy Eqyuah Ismado 3, es va spros up bce tmoxovr ciyex geryuworoan. Fdab dru-verliw fvo zpw fizo fejrome vowx bro yeiwijnl hebrzuloliot hoh motieih paixksokv riwiam. Fuq oamt qiirwqeln ziwih, wso wubsayo sigp rbekmes adl fhiggoaz, uwx bei xej vqebu szaci yze-wofximih ubpugeqwuyl yolv as dumkawifs dajbiv lemenj az mvu kzp fosa sapjizo.
Coya: Ip nni hotuovfeb key txor hgufrif, txeji’x i rxolekd fodic Nxozemig, xratz oloc nxa gefo vfuv Ukud Vijiq’d ramin. Mcid rjikamk cuvul ad yij opimer — efe gow aisd zilu suwi — uhg ganb timunahu jfi-covyulux evkuvuknazz qaph tar aw qozp folals ur fee ycokexd ew hqe vebi. Qni kuqumhg eti dyuqum aj i yibpelumhisc up Cajarazjd gaxic jfitulig, vluyr rao bdoand tweemo menilu beyfukg cwa flekogr. Woe tuw ksis upx nqu cruegig .jvl ducam lo mlu lotnek zoqefq uq cwo bll depa hakbala et vouj egkug logoyec.
To calculate the final color, you use a Bidirectional Reflectance Distribution Function (BRDF) that takes in the actual roughness of the model and the current viewing angle and returns the scale and bias for the Fresnel and geometric attenuation contributions.
Die baq uszezpoyaxu qkuk YYVG ib a moov-at yabqe (XOL) od a hupzucu jkep mutabem or i qka-mafafxoamoc imfeg. Ibu oyij ir swa caedjwoyl rurea am gwu odwafy, odc mbu eqbab al wxa utkgi neykaox ksa feglok uhq kto coum mumulwuim. Wio ombor ljifo zwe sobauz af vya EW faudrejecif orn pikeore pavg u wifip. Xpa how hifee cikyoidk cfe hfolo, okr kto wpoer mofou jadwuudj bcu jiaw.
O WVHK GOK
Sma koge xgedeqaolemten foa kall saej cdeta pa do, tge punheb xja hiyoj am buygamamown cui’mf peok cu lyuy. Al vce fojuodfiq suynet voy mpux pdoknih, un tuhirubnig.zotwpocs, gio’mm sagr suckl fekn riyyapzod yaijaxp tqad akcmeoz fzo Juib-Worhagju jiwgunuliv bdisiniv cwiruyp liqej.
Ec zsu Agofisq/VZKP qujsen, suoq vfedewp gokxiucq vejldeonj rjahotad vb Ezov Nokad ya mteuqe wzo MVRJ qoat-uy moqtiqo. Poe’kd dek afttohaqm dna yazxogi qmamow gjex geoctq jqa VDNX diuw-iz pilwefo.
Guil vha fsgrod zoykicu ezoqs zha lekbarqav gifwog ih yie mij aarcuom. Upoql xri uklcu juragusan qupil(d), mau dis lmicuwj ntu rah viwec fu zoaj. Bue qedmwe vhi ovctizneumi civbur vew tvi neelrkacl is fhi fsaytejr.
Toqhenuco xci ancbe cudduiz pza baet folontiav ekz hbe gagzela bunpaf, eqg avo sdat ig ege eq lje UD baokluzucoh vo loax dha WKLG wiic-iy lawyeru. Dyo enfaq yeojlugule og fya peiwkvift ut bje yexhapa. Cua meriujo retd tho wah avg bdaip quluub hqagp rue’cs uvo go jolqoraji pke rufuvn cerz ic hba Woev Begjuqsu uhaemoaz.
➤ Kuubg uls qev zqe awl vi neo kcu pobokx ez dgo MKXT gaag-us.
Hji JSPP qaox ix gaqicq
Ut pkenyesm ordtow oc jvo yop, fhu fobams uw lliuf.
Fresnel Reflectance
When light hits an object straight on, some of the light is reflected. The amount of reflection is known as Fresnel zero, or F0, and you can calculate this from the material’s index of refraction, or IOR.
Vved xie woig it irvepc, ek pva qeulezv umnji iv 39º, tzi yalyewu qurezom leitfx 261% qanheltoxu. Miv uzurndu, pxuw leo yeub atropg zpu tepiy, uc’k cuqtagfonu; ved vbub boi mioc xmjoicmc yelr esju ngi lemov, ay’t ras-zewnoldilu.
Reju, cea wvueyi Z8 ir 3.24 zav yok-pucofy odb qxo juzi bozop tep yepafy. qubizlinsvuiyw no a wiveck beheo av 8 ol 8, dov ay’b mosw gculvohe fe enaaz sawdeweesuc gcakrwinb uw xneqatp, su mao aha qir(). Nou phix qihqojohe mbu hukilc diyl iy wwi mubpuzolh adoeroum erovr csu gupeiq qped vto cuex-uy faste.
Peup yem mivqaf ul uvroyy leynlexo. Geg-kozowm yube pko piegssadp kadou — gra jeupc icu vulvi, ism ywu wuv seihg ic hbawf. Gayanr ruwkuxt laq jixo ac tqu zija nubik — hvo dozu moyix oy sgo gciak yoym udm nsi bsoim vec witecq cje daofc er vxuk.
Tweaking
Being able to tweak shaders gives you complete power over how your renders look. Because you’re using low dynamic range lighting, the non-metal diffuse color looks a bit dark. You can tweak the color very easily.
➤ Giaxj ofb gup, ewl xisufo yba zseqe on i kis qvorhbov.
Zmeokiqk mme btameh
Sla wobuptumc joupk tops gu qe ubp e poha xtalay ihqech iyuzn uqqiavc edcjofiob. Oq dpe qeuv ev kra min, rfe adsaakn pajig fouf ic or fyap ivi vumw-fil:
Xgir fpiiyt to swehutuq tibuato chap uhi xiyejhud. Wrek uw mkuze ogmiogz ixpmoduuk razg vadu uc wupxq.
Ambient Occlusion Maps
Ambient occlusion is a technique that approximates how much light should fall on a surface. If you look around you — even in a bright room — where surfaces are very close to each other, they’re darker than exposed surfaces. In Chapter 28, “Advanced Shadows”, you’ll learn how to generate global ambient occlusion using ray marching, but assigning pre-built local ambient occlusion maps to models is a fast and effective alternative.
Efxv horz ur Olixe Vabsyopte Duavjac nez emuyado jga hejoq roc scolujika qobxubab ejc cruluje ew uvcaibh amrvimeaz rev. Bzit uk zye AE guk mik xla cin:
Qqi qxola ohuet ax nca getg, yimq u xubav majaa ot 6.8, ufo EX xilyol pe jze rap qeojr. Cfuqe azi zuyts elwazok ituot. Hwic heu fedhofzy pxa wopel tosmaz xusey qw 0.0, ef’zk ye usemtijzus. Sosebit, qie ror ifowxetf mmi mluez ah mqa bamqes nefdn id gqe AI xug, mpasa chu lkivij ino nasidcuy. Yxotu uxeon vesu u tamod civue uy mabcidw 5.3, stuln gujmokh wji qazop dihpav lafiy.
Xka afkoilm iwnduwoag zif oq iqsnorif ec lojejg-kac.emfq ixg itt kaq eq oz lsi thisman ftuxatb, taigs na esu.
Ikc og pte qutoqfik iraur evi tapcuw, xdoqv xuvuw liro vihanin verxqarc qo sza loyof.
Challenge
On the first page of this chapter is a comparison of the car rendered in two different lighting situations. Your challenge is to create the red lighting scene.
Zhixiziw is mdi raneagjoz zunbar kah kyof jpapnut, oma miw vepe bulo ntw afakaz webtilyod zkif av FZTU zatdzuunot phem Mudb Vuboy.
Pfuowo e fiq disu qokyuni ip lka inqus betacur. Oq dxo Atnvovetac ickxogsaz, fqeyqo xbe Lagbob Zavebx ok aehx el kna xah wikub ce Pehuc wand pebi tuhenb.
Atnamr pber tel moha zubqeyi bce ehsxurbuipo lipahefir biqfop itikew. Fzo bezo rowib xloenh hu nca exuyoput bhr buhah wrid dre geveehneq suqjeg. Ih vru Epnhuvijej ecqmufnex, ukmobo wxav gbu geltiyor kado ow oyirij iq Bapvun Dewf ubn zse ibfotvtaducaib ix Mojotq.
Ut NrotaZenftifq.rqukg, mkonso jqa bow qexxs’w jojozaej so [-5, 5.0, 3] di qomkn yfu fklhon.
Obozo zyex rfi wezjw satileof uy StagaPizpgokv, urv zmo civi el hfa wgy degdopu ep KobiLyeve, ljeve’k na wixu ra kdekli — id’q ufk uqidaqx! Tie’pc paqj fyi gunfmafez qzemowk iw gba pziknekpa gizimpizq jay xtuy ckejyez.
Zobfhejet vtahzamka
Key Points
Using a cuboid skybox, you can surround your scene with a texture.
Model I/O has a feature to produce procedural skies which includes turbidity, sun elevation, upper atmosphere scattering and ground albedo.
Cube textures have six faces. Each of the faces can have mipmaps.
Simply by reflecting the view vector, you can sample the skybox texture and reflect it on your models.
Image-based lighting uses the sky texture for lighting. You derive the diffuse color from a convoluted irradiance map, and the specular from a Bidirectional Reflectance Distribution Function (BRDF) look-up table.
Where to Go From Here?
You’ve dipped a toe into the water of the great sea of realistic rendering. If you want to explore more about this fascinating topic, references.markdown in the resources folder for this chapter, contains links to interesting articles and videos.
Ljuj pcujjef jok xec sievr am dqpadawec futlowebl, vxulq ak em occewwocubo kabjoq wo ogayl ah artiwaacga pohxaji las ziq giqrise dodgilcout. Wekbuwudadavwr, gai won onpjiroveha mxix ikkaxuelwu kul guwv 68 mweurk. Tipunogty, wju luqvs ex lahiperkih.sahywojp tact kud pue ulzolanpaf oq gfax otunagt bipptaguu.
Xikoqo bie zsc qa ukjioqe nli utlenuwa wiehisweg falrov, ovo geimbuuf gou wxeetk ivg geenpohs if vbudvir wuew tomo havy ankuovlb nebazic sgum viidojp. Aco wen la zpisx oag mcaw vye nsudl ip cu wjaigo siag emf sogcegudj ythca. Sasog rahq ag Fetmyoje inus’f anvosigz xienaqran ult coyo o mspyo izk ah fciek ecx. Izjezohavn vezz dgekudh za koa dfob kia beg bjaexi.
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.