发明名称 一种差分阴影优化方法
摘要 一种差分阴影优化方法,在渲染中,通过预分层函数以达到对深度值的“分辖”控制,对深度值进行分段,判断它属于哪一层管辖的深度,然后由其管辖的层通过差分阴影贴图VSM算法计算其对应的阴影。本发明能够解决现有技术采用的算法出现的漏光问题,为三维场景仿真度的提高奠定良好的应用基础。
申请公布号 CN106530387A 申请公布日期 2017.03.22
申请号 CN201611068816.3 申请日期 2016.11.29
申请人 国家电网公司;国网浙江省电力公司培训中心 发明人 邓益民;潘王新;吴宝贵;任志强;李健;颜秉超;祝小会;徐梦霞;张笑
分类号 G06T15/60(2006.01)I 主分类号 G06T15/60(2006.01)I
代理机构 南京天翼专利代理有限责任公司 32112 代理人 奚铭
主权项 一种差分阴影优化方法,其特征是用于仿真场景渲染,包括以下步骤:1)首先获取光源来绘制场景,使用方差阴影贴图VSM方法第一次对场景进行渲染,渲染场景所有物体得到深度值,并存储为两个分量,分别写入深度值z‑Depth和深度值平方z‑Depth<sup>2</sup>,计算深度值在[z‑Depth,z‑Depth<sup>2</sup>]范围内的物体深度值期望μ和方差σ<sup>2</sup>,如公式(1)和(2)所示,μ=E(x)=M<sub>1</sub>   (1)σ<sup>2</sup>=E(x<sup>2</sup>)‑E(x)<sup>2</sup>=M<sub>2</sub>‑M<sub>1</sub><sup>2</sup>   (2)x表示像素点的深度值;2)利用切比雪夫不等式对深度值进行滤波处理,对任意常数ε:<maths num="0001"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><mi>P</mi><mrow><mo>(</mo><mo>|</mo><mi>x</mi><mo>-</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>|</mo><mo>&GreaterEqual;</mo><mi>&epsiv;</mi><mo>)</mo><mo>&le;</mo><mi>&sigma;</mi><mo>/</mo><mi>&epsiv;</mi></mrow></mtd></mtr><mtr><mtd><mrow><mo>&DoubleLeftRightArrow;</mo><mi>P</mi><mo>&lsqb;</mo><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>&GreaterEqual;</mo><mi>&epsiv;</mi><mo>)</mo><mo>&cup;</mo><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>&GreaterEqual;</mo><mo>-</mo><mi>&epsiv;</mi><mo>)</mo><mo>&rsqb;</mo><mo>&le;</mo><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>/</mo><msup><mi>&epsiv;</mi><mn>2</mn></msup></mrow></mtd></mtr><mtr><mtd><mrow><mo>&DoubleLeftRightArrow;</mo><mi>P</mi><mo>&lsqb;</mo><mrow><mo>(</mo><mi>x</mi><mo>&GreaterEqual;</mo><mi>&epsiv;</mi><mo>+</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>)</mo></mrow><mo>&cup;</mo><mrow><mo>(</mo><mi>x</mi><mo>&le;</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>-</mo><mi>&epsiv;</mi><mo>)</mo><mo>&rsqb;</mo><mo>&le;</mo><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>/</mo><msup><mi>&epsiv;</mi><mn>2</mn></msup></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001164837330000011.GIF" wi="1342" he="231" /></maths>P()表示概率函数,令t=E(x)+ε,且[t‑E(x)]<sup>2</sup>≥E(x‑E(x)<sup>2</sup>)=σ<sup>2</sup>,得:<maths num="0002"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><mi>P</mi><mrow><mo>(</mo><mi>x</mi><mo>&GreaterEqual;</mo><mi>t</mi><mo>)</mo></mrow><mo>&le;</mo><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>/</mo><mo>&lsqb;</mo><mn>2</mn><msup><mrow><mo>(</mo><mi>t</mi><mo>-</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>)</mo></mrow><mn>2</mn></msup><mo>&rsqb;</mo></mrow></mtd></mtr><mtr><mtd><mrow><mo>&DoubleLeftRightArrow;</mo><mi>P</mi><mrow><mo>(</mo><mi>x</mi><mo>&GreaterEqual;</mo><mi>t</mi><mo>)</mo></mrow><mo>&le;</mo><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>/</mo><mo>&lsqb;</mo><msup><mi>&sigma;</mi><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><mi>t</mi><mo>-</mo><mi>E</mi><mo>(</mo><mi>x</mi><mo>)</mo><mo>)</mo></mrow><mn>2</mn></msup><mo>&rsqb;</mo></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001164837330000012.GIF" wi="1293" he="205" /></maths>公式(4)不等式右半部分为Pmax(t),得到深度值大于t的点,如果该点的经过第一次渲染得到的深度值小于t,那么将该点表示为阴影;3)设置一个预分层函数,如公式(5),在进行差分阴影贴图计算前,先根据像素深度值的大小进行预分层处理:<img file="FDA0001164837330000013.GIF" wi="1166" he="270" />式中:x为深度值;m<sub>i</sub>,n<sub>i</sub>为设定的第i层的上下界的值,通过预分层函数<img file="FDA0001164837330000014.GIF" wi="104" he="70" />将所有像素深度值都压缩在单位空间中;4)每层单独存储各自的方差阴影贴图VSM,根据分层后深度值所在的范围来划分渲染过程中像素所属层,在对每一层的渲染处理中,如果当前层的深度值比t大,表示它没有遮挡;5)输出整体场景的阴影效果。
地址 100045 北京市西城区西长安街86号