import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{c as a,b as Q,a as m,e as l,o as t}from"./app-DkPs9iUo.js";const n="/assets/ibl_01-fcR9UjtL.png",d={},e={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},r={style:{"vertical-align":"-2.028ex"},xmlns:"http://www.w3.org/2000/svg",width:"46.687ex",height:"5.107ex",role:"img",focusable:"false",viewBox:"0 -1361 20635.8 2257.4","aria-hidden":"true"},o={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},i={style:{"vertical-align":"-2.028ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.098ex",height:"5.107ex",role:"img",focusable:"false",viewBox:"0 -1361 14629.5 2257.4","aria-hidden":"true"},h={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},g={style:{"vertical-align":"-2.028ex"},xmlns:"http://www.w3.org/2000/svg",width:"20.416ex",height:"5.107ex",role:"img",focusable:"false",viewBox:"0 -1361 9023.7 2257.4","aria-hidden":"true"},p={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},H={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"38.1ex",height:"2.48ex",role:"img",focusable:"false",viewBox:"0 -846 16840.4 1096","aria-hidden":"true"},c={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},L={style:{"vertical-align":"-12.603ex"},xmlns:"http://www.w3.org/2000/svg",width:"42.323ex",height:"26.336ex",role:"img",focusable:"false",viewBox:"0 -6070.3 18706.7 11640.6","aria-hidden":"true"},u={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},M={style:{"vertical-align":"-4.69ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.974ex",height:"10.511ex",role:"img",focusable:"false",viewBox:"0 -2573 4850.4 4646","aria-hidden":"true"},f={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},Z={style:{"vertical-align":"-2.819ex"},xmlns:"http://www.w3.org/2000/svg",width:"28.933ex",height:"6.74ex",role:"img",focusable:"false",viewBox:"0 -1733 12788.3 2978.9","aria-hidden":"true"},V={class:"MathJax",jax:"SVG",style:{position:"relative"}},k={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.262ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2768 1000","aria-hidden":"true"},D={class:"MathJax",jax:"SVG",style:{position:"relative"}},x={style:{"vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.348ex",height:"2.034ex",role:"img",focusable:"false",viewBox:"0 -694 596 899","aria-hidden":"true"},y={class:"MathJax",jax:"SVG",style:{position:"relative"}},A={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.816ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2570.7 1000","aria-hidden":"true"},B={class:"MathJax",jax:"SVG",style:{position:"relative"}},w={style:{"vertical-align":"-0.023ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.061ex",height:"1.618ex",role:"img",focusable:"false",viewBox:"0 -705 469 715","aria-hidden":"true"},b={class:"MathJax",jax:"SVG",style:{position:"relative"}},j={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.947ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 3070.7 1000","aria-hidden":"true"},v={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},F={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"29.382ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 12986.8 1000","aria-hidden":"true"},O={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},C={style:{"vertical-align":"-13.611ex"},xmlns:"http://www.w3.org/2000/svg",width:"46.284ex",height:"28.353ex",role:"img",focusable:"false",viewBox:"0 -6516 20457.4 12532","aria-hidden":"true"},R={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},E={style:{"vertical-align":"-2.933ex"},xmlns:"http://www.w3.org/2000/svg",width:"8.517ex",height:"6.998ex",role:"img",focusable:"false",viewBox:"0 -1796.5 3764.5 3093","aria-hidden":"true"},X={class:"MathJax",jax:"SVG",style:{position:"relative"}},N={style:{"vertical-align":"-0.464ex"},xmlns:"http://www.w3.org/2000/svg",width:"0.991ex",height:"2.057ex",role:"img",focusable:"false",viewBox:"0 -704 438 909","aria-hidden":"true"},S={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},P={style:{"vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"31.429ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 13891.8 1000","aria-hidden":"true"},J={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},G={style:{"vertical-align":"-13.611ex"},xmlns:"http://www.w3.org/2000/svg",width:"39.033ex",height:"28.353ex",role:"img",focusable:"false",viewBox:"0 -6516 17252.6 12532","aria-hidden":"true"},z={class:"MathJax",jax:"SVG",display:"true",style:{position:"relative"}},I={style:{"vertical-align":"-2.036ex"},xmlns:"http://www.w3.org/2000/svg",width:"17.803ex",height:"5.204ex",role:"img",focusable:"false",viewBox:"0 -1400 7869 2300","aria-hidden":"true"};function q(U,T){return t(),a("div",null,[T[49]||(T[49]=Q("h1",{id:"环境光渲染-一",tabindex:"-1"},[Q("a",{class:"header-anchor",href:"#环境光渲染-一"},[Q("span",null,"环境光渲染(一)")])],-1)),T[50]||(T[50]=Q("hr",null,null,-1)),T[51]||(T[51]=Q("h2",{id:"_1-定义",tabindex:"-1"},[Q("a",{class:"header-anchor",href:"#_1-定义"},[Q("span",null,"1. 定义")])],-1)),T[52]||(T[52]=Q("p",null,"使用一张HDR环境图片作为环境光源,每个像素表示一个光源和入射方向,回顾一下渲染方程",-1)),Q("mjx-container",e,[(t(),a("svg",r,[...T[0]||(T[0]=[m('',1)])])),T[1]||(T[1]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"o")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"o")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("msub",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",{mathvariant:"normal"},"Ω")])]),Q("mrow",{"data-mjx-texclass":"INNER"},[Q("mo",{"data-mjx-texclass":"OPEN"},"("),Q("msub",null,[Q("mi",null,"k"),Q("mi",null,"d")]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"c"),Q("mi",null,"π")])]),Q("mo",null,"+"),Q("msub",null,[Q("mi",null,"f"),Q("mi",null,"s")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",null,","),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"o")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",{"data-mjx-texclass":"CLOSE"},")")]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"ω"),Q("mo",{stretchy:"false"},"→")])]),Q("mi",null,"i")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"n"),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")])])],-1))]),T[53]||(T[53]=Q("p",null,"显然在实时渲染系统中,针对环境贴图做完整的积分运算代价非常昂贵,所以需要做预处理",-1)),T[54]||(T[54]=Q("h2",{id:"_2-漫反射部分",tabindex:"-1"},[Q("a",{class:"header-anchor",href:"#_2-漫反射部分"},[Q("span",null,"2.漫反射部分")])],-1)),T[55]||(T[55]=Q("h3",{id:"_2-1-原理",tabindex:"-1"},[Q("a",{class:"header-anchor",href:"#_2-1-原理"},[Q("span",null,"2.1 原理")])],-1)),T[56]||(T[56]=Q("p",null,"只考虑渲染方程中的漫反射部分",-1)),Q("mjx-container",o,[(t(),a("svg",i,[...T[2]||(T[2]=[m('',1)])])),T[3]||(T[3]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("msub",null,[Q("mi",null,"L"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"o"),Q("mi",null,"d")])]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"o")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("msub",null,[Q("mi",null,"k"),Q("mi",null,"d")]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"c"),Q("mi",null,"π")])]),Q("msub",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",{mathvariant:"normal"},"Ω")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"ω"),Q("mo",{stretchy:"false"},"→")])]),Q("mi",null,"i")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"n"),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")])])],-1))]),T[57]||(T[57]=Q("p",null,"将其中之和光照贴图相关的部分做一个预计算,针对所有球面方向,每个方向做一个半球积分",-1)),Q("mjx-container",h,[(t(),a("svg",g,[...T[4]||(T[4]=[m('',1)])])),T[5]||(T[5]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("msub",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",{mathvariant:"normal"},"Ω")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"ω"),Q("mo",{stretchy:"false"},"→")])]),Q("mi",null,"i")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"n"),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")])])],-1))]),T[58]||(T[58]=Q("p",null,"将结果存成一张新的环境贴图Irradiance,那么最终实时渲染时,漫反射部分可以这个贴图来计算",-1)),Q("mjx-container",p,[(t(),a("svg",H,[...T[6]||(T[6]=[m('',1)])])),T[7]||(T[7]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("msub",null,[Q("mi",null,"L"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"o"),Q("mi",null,"d")])]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"o")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("mtext",null,"TexCube"),Q("mo",{stretchy:"false"},"("),Q("mtext",null,"IrrMap"),Q("mo",null,","),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"n"),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",null,"∗"),Q("msub",null,[Q("mi",null,"k"),Q("mi",null,"d")]),Q("mo",null,"∗"),Q("mi",null,"c")])],-1))]),T[59]||(T[59]=m('

将立体角转换为球坐标
',4)),Q("mjx-container",c,[(t(),a("svg",L,[...T[8]||(T[8]=[m('',1)])])),T[9]||(T[9]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd"),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("msub",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",{mathvariant:"normal"},"Ω")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"ω"),Q("mo",{stretchy:"false"},"→")])]),Q("mi",null,"i")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mover",null,[Q("mi",null,"n"),Q("mo",{stretchy:"false"},"→")])]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("msub",null,[Q("mi",null,"ω"),Q("mi",null,"i")])])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"ϕ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mn",null,"2"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"θ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"π"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mn",null,"2")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mi",null,"ϕ"),Q("mo",null,","),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("mi",null,"θ"),Q("mi",null,"d"),Q("mi",null,"ϕ")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"≈")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mrow",null,[Q("mn",null,"2"),Q("mi",null,"π")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mrow",null,[Q("mn",null,"2"),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mrow",null,[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])])])])],-1))]),T[60]||(T[60]=Q("p",null,"其中:",-1)),Q("mjx-container",u,[(t(),a("svg",M,[...T[10]||(T[10]=[m('',1)])])),T[11]||(T[11]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right",columnspacing:"",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,"="),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"j"),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("mn",null,"2"),Q("mi",null,"π")])]),Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",null,"="),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"i"),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mn",null,"2")])])])])])])],-1))]),T[61]||(T[61]=m(`代码:
vec3 irradiance = vec3(0.0);
// tangent space calculation from origin point(x'=up, y'=N, z'=left)(left-hand)
vec3 up = vec3(0.0, 1.0, 0.0); //x'
vec3 left = cross(up, N); //z'
up = cross(N, left); //x'
float sampleDelta = 0.025;
float nrSamples = 0.0;
for(float phi = 0.0; phi < 2.0 * PI; phi += sampleDelta)
{
for(float theta = 0.0; theta < 0.5 * PI; theta += sampleDelta)
{
float cosTheta = cos(theta);
float sinTheta = sin(theta);
// spherical to cartesian (in tangent space)
vec3 tangentSample = vec3(cos(phi) * sinTheta, cosTheta, sin(phi) * sinTheta);
// tangent space to world
vec3 sampleVec = tangentSample.x * up + tangentSample.y * N + tangentSample.z * left;
irradiance += texture(environmentMap, sampleVec).rgb * cosTheta * sinTheta;
nrSamples++;
}
}
irradiance = PI * irradiance * float(nrSamples);
使用蒙特卡洛采样估算积分
`,4)),Q("mjx-container",f,[(t(),a("svg",Z,[...T[12]||(T[12]=[m('',1)])])),T[13]||(T[13]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"a")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"b")])]),Q("mi",null,"f"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"x"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("mi",null,"x"),Q("mo",null,"≈"),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"N")])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"1")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"N")])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mrow",null,[Q("mi",null,"f"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"X"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")]),Q("mrow",null,[Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"X"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])])])])])],-1))]),Q("p",null,[T[24]||(T[24]=l("其中",-1)),Q("mjx-container",V,[(t(),a("svg",k,[...T[14]||(T[14]=[m('',1)])])),T[15]||(T[15]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"x"),Q("mo",{stretchy:"false"},")")])],-1))]),T[25]||(T[25]=l("函数是采样时使用的概率分布函数。",-1)),T[26]||(T[26]=Q("br",null,null,-1)),T[27]||(T[27]=l(" 方法1:",-1)),T[28]||(T[28]=Q("br",null,null,-1)),T[29]||(T[29]=l(" 对于要计算的这个二维积分,如果使用的随机采样是",-1)),Q("mjx-container",D,[(t(),a("svg",x,[...T[16]||(T[16]=[Q("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[Q("g",{"data-mml-node":"math"},[Q("g",{"data-mml-node":"mi"},[Q("path",{"data-c":"1D719",d:"M409 688Q413 694 421 694H429H442Q448 688 448 686Q448 679 418 563Q411 535 404 504T392 458L388 442Q388 441 397 441T429 435T477 418Q521 397 550 357T579 260T548 151T471 65T374 11T279 -10H275L251 -105Q245 -128 238 -160Q230 -192 227 -198T215 -205H209Q189 -205 189 -198Q189 -193 211 -103L234 -11Q234 -10 226 -10Q221 -10 206 -8T161 6T107 36T62 89T43 171Q43 231 76 284T157 370T254 422T342 441Q347 441 348 445L378 567Q409 686 409 688ZM122 150Q122 116 134 91T167 53T203 35T237 27H244L337 404Q333 404 326 403T297 395T255 379T211 350T170 304Q152 276 137 237Q122 191 122 150ZM500 282Q500 320 484 347T444 385T405 400T381 404H378L332 217L284 29Q284 27 285 27Q293 27 317 33T357 47Q400 66 431 100T475 170T494 234T500 282Z"})])])],-1)])])),T[17]||(T[17]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mi",null,"ϕ")])],-1))]),T[30]||(T[30]=l("在",-1)),Q("mjx-container",y,[(t(),a("svg",A,[...T[18]||(T[18]=[m('',1)])])),T[19]||(T[19]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mo",{stretchy:"false"},"["),Q("mn",null,"0"),Q("mo",null,","),Q("mn",null,"2"),Q("mi",null,"π"),Q("mo",{stretchy:"false"},"]")])],-1))]),T[31]||(T[31]=l("之间均匀分布,",-1)),Q("mjx-container",B,[(t(),a("svg",w,[...T[20]||(T[20]=[Q("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[Q("g",{"data-mml-node":"math"},[Q("g",{"data-mml-node":"mi"},[Q("path",{"data-c":"1D703",d:"M35 200Q35 302 74 415T180 610T319 704Q320 704 327 704T339 705Q393 701 423 656Q462 596 462 495Q462 380 417 261T302 66T168 -10H161Q125 -10 99 10T60 63T41 130T35 200ZM383 566Q383 668 330 668Q294 668 260 623T204 521T170 421T157 371Q206 370 254 370L351 371Q352 372 359 404T375 484T383 566ZM113 132Q113 26 166 26Q181 26 198 36T239 74T287 161T335 307L340 324H145Q145 321 136 286T120 208T113 132Z"})])])],-1)])])),T[21]||(T[21]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mi",null,"θ")])],-1))]),T[32]||(T[32]=l("在",-1)),Q("mjx-container",b,[(t(),a("svg",j,[...T[22]||(T[22]=[m('',1)])])),T[23]||(T[23]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mo",{stretchy:"false"},"["),Q("mn",null,"0"),Q("mo",null,","),Q("mi",null,"π"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mn",null,"2"),Q("mo",{stretchy:"false"},"]")])],-1))]),T[33]||(T[33]=l("之间均匀分布,那么",-1))]),Q("mjx-container",v,[(t(),a("svg",F,[...T[34]||(T[34]=[m('',1)])])),T[35]||(T[35]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"ϕ"),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("mn",null,"1"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mo",{stretchy:"false"},"("),Q("mn",null,"2"),Q("mi",null,"π"),Q("mo",{stretchy:"false"},")"),Q("mo",null,","),Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("mn",null,"2"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mi",null,"π")])],-1))]),Q("mjx-container",O,[(t(),a("svg",C,[...T[36]||(T[36]=[m('',1)])])),T[37]||(T[37]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd"),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"ϕ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mn",null,"2"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"θ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"π"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mn",null,"2")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mi",null,"ϕ"),Q("mo",null,","),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("mi",null,"θ"),Q("mi",null,"d"),Q("mi",null,"ϕ")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mrow",null,[Q("mn",null,"2"),Q("mi",null,"π")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("mrow",{"data-mjx-texclass":"INNER"},[Q("mo",{"data-mjx-texclass":"OPEN"},"("),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mrow",null,[Q("mn",null,"2"),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mo",{"data-mjx-texclass":"CLOSE"},")")])])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mrow",null,[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mi",null,"N")])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"N")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"i")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])])])])],-1))]),T[62]||(T[62]=Q("p",null,"其中",-1)),Q("mjx-container",R,[(t(),a("svg",E,[...T[38]||(T[38]=[m('',1)])])),T[39]||(T[39]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"i")])]),Q("mtd",null,[Q("mi"),Q("mo",null,"="),Q("mn",null,"2"),Q("mi",null,"π"),Q("mi",null,"ξ")])]),Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")])]),Q("mtd",null,[Q("mi"),Q("mo",null,"="),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mi",null,"π"),Q("mn",null,"2")])]),Q("mi",null,"ξ")])])])])],-1))]),Q("p",null,[Q("mjx-container",X,[(t(),a("svg",N,[...T[40]||(T[40]=[Q("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[Q("g",{"data-mml-node":"math"},[Q("g",{"data-mml-node":"mi"},[Q("path",{"data-c":"1D709",d:"M268 632Q268 704 296 704Q314 704 314 687Q314 682 311 664T308 635T309 620V616H315Q342 619 360 619Q443 619 443 586Q439 548 358 546H344Q326 546 317 549T290 566Q257 550 226 505T195 405Q195 381 201 364T211 342T218 337Q266 347 298 347Q375 347 375 314Q374 297 359 288T327 277T280 275Q234 275 208 283L195 286Q149 260 119 214T88 130Q88 116 90 108Q101 79 129 63T229 20Q238 17 243 15Q337 -21 354 -33Q383 -53 383 -94Q383 -137 351 -171T273 -205Q240 -205 202 -190T158 -167Q156 -163 156 -159Q156 -151 161 -146T176 -140Q182 -140 189 -143Q232 -168 274 -168Q286 -168 292 -165Q313 -151 313 -129Q313 -112 301 -104T232 -75Q214 -68 204 -64Q198 -62 171 -52T136 -38T107 -24T78 -8T56 12T36 37T26 66T21 103Q21 149 55 206T145 301L154 307L148 313Q141 319 136 323T124 338T111 358T103 382T99 413Q99 471 143 524T259 602L271 607Q268 618 268 632Z"})])])],-1)])])),T[41]||(T[41]=Q("mjx-assistive-mml",{unselectable:"on",display:"inline"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[Q("mi",null,"ξ")])],-1))]),T[42]||(T[42]=l("表示均匀分布在[0,1]之间的随机变量",-1))]),T[63]||(T[63]=Q("p",null,[l("方法2:"),Q("br"),l(" 上面的采样方法在极点位置会比较密集,在赤道位置比较稀疏,由于漫反射是均匀分布的,如果采样点也是均匀分布在半球面上的,收敛速度会比较快,这种情况下")],-1)),Q("mjx-container",S,[(t(),a("svg",P,[...T[43]||(T[43]=[m('',1)])])),T[44]||(T[44]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"ϕ"),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("mn",null,"1"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mo",{stretchy:"false"},"("),Q("mn",null,"2"),Q("mi",null,"π"),Q("mo",{stretchy:"false"},")"),Q("mo",null,","),Q("mtext",null,"pdf"),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mo",null,"="),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")")])],-1))]),Q("mjx-container",J,[(t(),a("svg",G,[...T[45]||(T[45]=[m('',1)])])),T[46]||(T[46]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd"),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"ϕ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mn",null,"2"),Q("mi",null,"π")])]),Q("msubsup",null,[Q("mo",{"data-mjx-texclass":"OP"},"∫"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"θ"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"π"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mo",null,"/")]),Q("mn",null,"2")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("mi",null,"ϕ"),Q("mo",null,","),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"sin"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mi",null,"θ"),Q("mo",{stretchy:"false"},")"),Q("mi",null,"d"),Q("mi",null,"θ"),Q("mi",null,"d"),Q("mi",null,"ϕ")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("mi",null,"π")])]),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mrow",null,[Q("mn",null,"2"),Q("mi",null,"π")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("mrow",{"data-mjx-texclass":"INNER"},[Q("mo",{"data-mjx-texclass":"OPEN"},"("),Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"1"),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mo",{"data-mjx-texclass":"CLOSE"},")")])])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"2"),Q("mrow",null,[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")]),Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"j"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"1")])])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("msub",null,[Q("mi",null,"n"),Q("mn",null,"2")])])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"j")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])]),Q("mtr",null,[Q("mtd",null,[Q("mo",null,"=")]),Q("mtd",null,[Q("mstyle",{displaystyle:"true",scriptlevel:"0"},[Q("mfrac",null,[Q("mn",null,"2"),Q("mi",null,"N")])]),Q("munderover",null,[Q("mo",{"data-mjx-texclass":"OP"},"∑"),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"i"),Q("mo",null,"="),Q("mn",null,"0")]),Q("mrow",{"data-mjx-texclass":"ORD"},[Q("mi",null,"N")])]),Q("msub",null,[Q("mi",null,"L"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"i")]),Q("mo",null,","),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")"),Q("mi",null,"cos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")]),Q("mo",{stretchy:"false"},")")])])])])],-1))]),T[64]||(T[64]=Q("p",null,"其中",-1)),Q("mjx-container",z,[(t(),a("svg",I,[...T[47]||(T[47]=[m('',1)])])),T[48]||(T[48]=Q("mjx-assistive-mml",{unselectable:"on",display:"block"},[Q("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[Q("mtable",{displaystyle:"true",columnalign:"right left",columnspacing:"0em",rowspacing:"3pt"},[Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"ϕ"),Q("mi",null,"i")])]),Q("mtd",null,[Q("mi"),Q("mo",null,"="),Q("mn",null,"2"),Q("mi",null,"π"),Q("mi",null,"ξ")])]),Q("mtr",null,[Q("mtd",null,[Q("msub",null,[Q("mi",null,"θ"),Q("mi",null,"i")])]),Q("mtd",null,[Q("mi"),Q("mo",null,"="),Q("mi",null,"arccos"),Q("mo",{"data-mjx-texclass":"NONE"},""),Q("mo",{stretchy:"false"},"("),Q("mn",null,"1"),Q("mo",null,"−"),Q("mi",null,"ξ"),Q("mo",{stretchy:"false"},")")])])])])],-1))]),T[65]||(T[65]=m(`vec3 irradiance = vec3(0.0);
vec3 up = vec3(0.0, 1.0, 0.0); //x'
vec3 left = cross(up, N); //z'
up = cross(N, left); //x'
for(uint i=0; i<sampleCounts; i++)
{
//http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
vec2 uv = Hammersley(i, totalCounts);
// tangent space sample point
float phi = uv.y * 2.0 * PI;
float cosTheta = 1.0 - uv.x;
float sinTheta = sqrt(1-cosTheta*cosTheta);
vec3 tangentSample = vec3(cos(phi) * sinTheta, cosTheta, sin(phi) * sinTheta);
// tangent space to world
vec3 sampleVec = tangentSample.x * up + tangentSample.y * N + tangentSample.z * left;
irradiance += texture2D(s_texSkybox, sampleVec).rgb * cosTheta;
}
irradiance = 2*irradiance / float(sampleCounts);
`,1))])}const Y=s(d,[["render",q]]),$=JSON.parse('{"path":"/note/graphics/image_based_lighting/ibl_01.html","title":"环境光渲染(一)","lang":"zh-CN","frontmatter":{"description":"环境光渲染(一) 1. 定义 使用一张HDR环境图片作为环境光源,每个像素表示一个光源和入射方向,回顾一下渲染方程 显然在实时渲染系统中,针对环境贴图做完整的积分运算代价非常昂贵,所以需要做预处理 2.漫反射部分 2.1 原理 只考虑渲染方程中的漫反射部分 将其中之和光照贴图相关的部分做一个预计算,针对所有球面方向,每个方向做一个半球积分 将结果存成一...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"环境光渲染(一)\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2025-02-24T08:28:33.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"JinChao\\",\\"url\\":\\"https://thecodeway.com\\"}]}"],["meta",{"property":"og:url","content":"https://thejinchao.github.io/note/graphics/image_based_lighting/ibl_01.html"}],["meta",{"property":"og:site_name","content":"我的博客和笔记"}],["meta",{"property":"og:title","content":"环境光渲染(一)"}],["meta",{"property":"og:description","content":"环境光渲染(一) 1. 定义 使用一张HDR环境图片作为环境光源,每个像素表示一个光源和入射方向,回顾一下渲染方程 显然在实时渲染系统中,针对环境贴图做完整的积分运算代价非常昂贵,所以需要做预处理 2.漫反射部分 2.1 原理 只考虑渲染方程中的漫反射部分 将其中之和光照贴图相关的部分做一个预计算,针对所有球面方向,每个方向做一个半球积分 将结果存成一..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2025-02-24T08:28:33.000Z"}],["meta",{"property":"article:modified_time","content":"2025-02-24T08:28:33.000Z"}]]},"git":{"createdTime":1740235322000,"updatedTime":1740385713000,"contributors":[{"name":"thejinchao","username":"thejinchao","email":"thejinchao@gmail.com","commits":2,"url":"https://github.com/thejinchao"},{"name":"neochaojin","username":"neochaojin","email":"neochaojin@tencent.com","commits":1,"url":"https://github.com/neochaojin"}]},"readingTime":{"minutes":3.38,"words":1015},"filePathRelative":"note/graphics/image_based_lighting/ibl_01.md","autoDesc":true}');export{Y as comp,$ as data};