Difference between revisions of "ShaderMirror"
From SimsWiki
(EP5-SS) |
(Teko Murano 200708) |
||
Line 1: | Line 1: | ||
<pre> | <pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
version 4 | version 4 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
set reflectionRenderTarget "ScreenReflection" | set reflectionRenderTarget "ScreenReflection" | ||
− | + | set mvAspect 1 | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
define SimpleMirrorReflection() | define SimpleMirrorReflection() | ||
material | material | ||
Line 39: | Line 14: | ||
else | else | ||
if (viewerRenderType = $kRenderTypeThumbnail) | if (viewerRenderType = $kRenderTypeThumbnail) | ||
− | create BlankMirrorMaterial( | + | create BlankMirrorMaterial($kRenderTypeThumbnail) |
− | + | ||
− | + | ||
else | else | ||
if (not $mirrorReflectionsEnabled) | if (not $mirrorReflectionsEnabled) | ||
set currentType (viewerRenderType) | set currentType (viewerRenderType) | ||
− | create BlankMirrorMaterial($currentType | + | create BlankMirrorMaterial($currentType) |
else | else | ||
create MirrorReflectionMaterial() | create MirrorReflectionMaterial() | ||
Line 53: | Line 26: | ||
end | end | ||
enddef | enddef | ||
− | |||
− | define BlankMirrorMaterial(renderType | + | define BlankMirrorMaterial(renderType) |
− | + | ||
shader | shader | ||
validateRenderShaderContext -viewerRenderType &renderType | validateRenderShaderContext -viewerRenderType &renderType | ||
Line 70: | Line 41: | ||
end | end | ||
− | colorScalar | + | colorScalar (0.5,0.6,0.75, 1) |
stage | stage | ||
textureBlend select(colorScalar) select(colorScalar) | textureBlend select(colorScalar) select(colorScalar) | ||
Line 78: | Line 49: | ||
enddef | enddef | ||
− | + | ||
− | + | ||
− | + | ||
define MirrorReflectionMaterial() | define MirrorReflectionMaterial() | ||
− | + | ||
− | + | ||
− | + | ||
shader -layer -9998 # this material must render first | shader -layer -9998 # this material must render first | ||
validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render | validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render | ||
− | + | ||
− | + | pass -renderEachFrame | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext | renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext | ||
− | |||
depthTest true -enableDepthWrite true | depthTest true -enableDepthWrite true | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
applyStencilStateForOverlappingReflections | applyStencilStateForOverlappingReflections | ||
− | + | ||
− | + | ||
− | + | ||
alphaBlend srcFactor(zero) add dstFactor(one) | alphaBlend srcFactor(zero) add dstFactor(one) | ||
− | + | ||
− | + | ||
cullmode none | cullmode none | ||
− | + | ||
− | + | ||
shaderProgram -target vertexProgram -method assemble | shaderProgram -target vertexProgram -method assemble | ||
− | bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 | + | bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 |
− | + | ||
shaderSource | shaderSource | ||
vs_1_1 | vs_1_1 | ||
dcl_position v0 | dcl_position v0 | ||
− | |||
− | |||
def c5, 1,0,0,1 | def c5, 1,0,0,1 | ||
− | |||
− | |||
m4x4 r0, v0, c0 | m4x4 r0, v0, c0 | ||
− | |||
− | |||
mov oPos.x, -r0 | mov oPos.x, -r0 | ||
mov oPos.yzw, r0 | mov oPos.yzw, r0 | ||
endShaderSource | endShaderSource | ||
end | end | ||
− | end | + | end |
− | end | + | end |
− | + | shader -layer 6 | |
− | shader -layer | + | |
validateRenderShaderContext -viewerRenderType $kRenderTypeNormal | validateRenderShaderContext -viewerRenderType $kRenderTypeNormal | ||
− | + | pass -modifiedEachFrameHint | |
− | pass -modifiedEachFrameHint | + | |
− | + | ||
shaderProgram -target vertexProgram -method assemble | shaderProgram -target vertexProgram -method assemble | ||
bindConstants 0 -bindingID geomToClip -constantCount 4 | bindConstants 0 -bindingID geomToClip -constantCount 4 | ||
Line 151: | Line 91: | ||
def c8, -0.5, -0.5, 1, 1 | def c8, -0.5, -0.5, 1, 1 | ||
def c9, 0.5, 0.5, 0, 0 | def c9, 0.5, 0.5, 0, 0 | ||
− | |||
def c10, 0.25, 0.25, 0, 0 | def c10, 0.25, 0.25, 0, 0 | ||
− | |||
− | |||
m4x4 r0, v0, c0 | m4x4 r0, v0, c0 | ||
mov oPos, r0 | mov oPos, r0 | ||
− | |||
− | |||
mul r2, c9, r0.w | mul r2, c9, r0.w | ||
− | |||
− | |||
mad r4, r0, c8, r2 | mad r4, r0, c8, r2 | ||
− | + | rcp r3.x, c4.x | |
− | + | rcp r3.y, c5.y | |
− | + | mov r3.zw, c9.zw | |
− | + | mul r3, r3, c10 | |
− | + | ||
− | + | ||
− | + | ||
− | rcp r3.x, c4.x | + | |
− | rcp r3.y, c5.y | + | |
− | mov r3.zw, c9.zw | + | |
− | + | ||
− | mul r3, r3, c10 | + | |
mad r6, r0, r3, r4 | mad r6, r0, r3, r4 | ||
− | mov oT0, r6.xyww | + | mov oT0, r6.xyww |
endShaderSource | endShaderSource | ||
end | end | ||
stage | stage | ||
− | textureTransformType vector3 homogeneous | + | textureTransformType vector3 homogeneous |
textureAddressing clamp clamp | textureAddressing clamp clamp | ||
texture $reflectionRenderTarget | texture $reflectionRenderTarget | ||
textureBlend select(texture) select(texture) | textureBlend select(texture) select(texture) | ||
− | end | + | end |
− | end | + | end |
− | end | + | end |
− | + | shader -layer 6 | |
− | shader -layer | + | validateRenderShaderContext -viewerRenderType $kRenderTypeNormal |
− | validateRenderShaderContext -viewerRenderType $kRenderTypeNormal | + | pass -modifiedEachFrameHint |
− | + | ||
− | pass -modifiedEachFrameHint | + | |
− | + | ||
shaderProgram -target vertexProgram -method assemble | shaderProgram -target vertexProgram -method assemble | ||
bindConstants 0 -bindingID geomToClip -constantCount 4 | bindConstants 0 -bindingID geomToClip -constantCount 4 | ||
bindConstants 4 -bindingID clipToViewTarget -constantCount 4 | bindConstants 4 -bindingID clipToViewTarget -constantCount 4 | ||
− | |||
shaderSource | shaderSource | ||
vs_1_1 | vs_1_1 | ||
dcl_position v0 | dcl_position v0 | ||
def c8, -0.5, -0.5, 1, 1 | def c8, -0.5, -0.5, 1, 1 | ||
− | def c9, 0.5, 0.5, 0, 0 | + | def c9, 0.5, 0.5, 0, 0 |
− | + | ||
def c10, 0.25, 0.25, 0, 0 | def c10, 0.25, 0.25, 0, 0 | ||
− | |||
− | |||
m4x4 r0, v0, c0 | m4x4 r0, v0, c0 | ||
mov oPos, r0 | mov oPos, r0 | ||
− | |||
− | |||
mul r2, c9, r0.w | mul r2, c9, r0.w | ||
− | |||
− | |||
mad r4, r0, c8, r2 | mad r4, r0, c8, r2 | ||
− | + | rcp r3.x, c4.x | |
− | + | rcp r3.y, c5.y | |
− | + | mov r3.zw, c9.zw | |
− | + | mul r3, r3, c10 | |
− | + | mad r1, r0, r3, r4 | |
− | + | rcp r1.w, r1.w | |
− | + | mul oT0.xy, r1.w, r1.xy | |
− | rcp r3.x, c4.x | + | |
− | rcp r3.y, c5.y | + | |
− | mov r3.zw, c9.zw | + | |
− | + | ||
− | mul r3, r3, c10 | + | |
− | + | ||
− | mad r1, r0, r3, r4 | + | |
− | + | ||
− | rcp r1.w, r1.w | + | |
− | + | ||
− | mul oT0.xy, r1.w, r1.xy | + | |
− | + | ||
endShaderSource | endShaderSource | ||
− | end | + | end |
stage | stage | ||
Line 243: | Line 145: | ||
texture $reflectionRenderTarget | texture $reflectionRenderTarget | ||
textureBlend select(texture) select(texture) | textureBlend select(texture) select(texture) | ||
− | end | + | end |
− | end | + | end |
− | end | + | end |
enddef | enddef | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
define SetSpecifiedZOnMirrorRTT(zValue) | define SetSpecifiedZOnMirrorRTT(zValue) | ||
material | material | ||
Line 266: | Line 157: | ||
pass | pass | ||
renderClipSpaceRect | renderClipSpaceRect | ||
− | renderTarget $reflectionRenderTarget -setViewport fullRenderTargetViewport | + | renderTarget $reflectionRenderTarget -setViewport fullRenderTargetViewport |
− | + | ||
− | + | ||
stencil false | stencil false | ||
− | |||
− | |||
depthTest true -enableDepthWrite true | depthTest true -enableDepthWrite true | ||
depthTestFunction accept | depthTestFunction accept | ||
− | |||
− | |||
alphaBlend srcFactor(zero) add dstFactor(one) | alphaBlend srcFactor(zero) add dstFactor(one) | ||
− | |||
− | |||
shaderProgram -target vertexProgram -method compile -version 1_1 | shaderProgram -target vertexProgram -method compile -version 1_1 | ||
bindConstants 0 -bindingID immediateData -data (0,0,&zValue, 0) | bindConstants 0 -bindingID immediateData -data (0,0,&zValue, 0) | ||
− | |||
shaderSource | shaderSource | ||
float4 zValue : register(c0); | float4 zValue : register(c0); | ||
− | |||
void VertexMain(float4 position : POSITION, out float4 oPosition : POSITION) | void VertexMain(float4 position : POSITION, out float4 oPosition : POSITION) | ||
{ | { | ||
Line 290: | Line 171: | ||
oPosition.z = zValue.z; // set specified z value | oPosition.z = zValue.z; // set specified z value | ||
} | } | ||
− | |||
endShaderSource | endShaderSource | ||
end | end | ||
− | end | + | end |
− | end | + | end |
− | end | + | end |
enddef | enddef | ||
− | |||
define SetNearZOnMirrorRTT() | define SetNearZOnMirrorRTT() | ||
create SetSpecifiedZOnMirrorRTT(0) | create SetSpecifiedZOnMirrorRTT(0) | ||
enddef | enddef | ||
− | |||
define SetFarZOnMirrorRTT() | define SetFarZOnMirrorRTT() | ||
create SetSpecifiedZOnMirrorRTT(1) | create SetSpecifiedZOnMirrorRTT(1) | ||
enddef | enddef | ||
− | |||
define SetStencilOnCensorRTT() | define SetStencilOnCensorRTT() | ||
material | material | ||
Line 314: | Line 191: | ||
pass | pass | ||
renderClipSpaceRect | renderClipSpaceRect | ||
− | |||
− | |||
stencil true | stencil true | ||
stencilFunction accept -refValue 1 | stencilFunction accept -refValue 1 | ||
stencilOperation -onPass writeRef | stencilOperation -onPass writeRef | ||
− | |||
− | |||
depthTest false -enableDepthWrite false | depthTest false -enableDepthWrite false | ||
depthTestFunction accept | depthTestFunction accept | ||
− | |||
− | |||
alphaBlend srcFactor(zero) add dstFactor(one) | alphaBlend srcFactor(zero) add dstFactor(one) | ||
− | |||
shaderProgram -target vertexProgram -method assemble | shaderProgram -target vertexProgram -method assemble | ||
shaderSource | shaderSource | ||
Line 339: | Line 209: | ||
end | end | ||
− | end | + | end |
− | end | + | end |
− | end | + | end |
enddef | enddef | ||
− | + | defaultState $kRenderTypeMirror | |
− | defaultState $kRenderTypeMirror | + | |
− | + | ||
stencil true | stencil true | ||
stencilFunction acceptIfEqual -refValue 1 | stencilFunction acceptIfEqual -refValue 1 | ||
Line 352: | Line 220: | ||
end | end | ||
− | + | defaultState $kRenderTypeNormal | |
− | + | stencil true | |
− | + | stencilFunction acceptIfEqual -refValue 0 | |
− | + | stencilOperation -onPass noWrite | |
− | + | end | |
− | + | ||
+ | #---------------------------------------------------------------------------------------------------------------# | ||
+ | |||
+ | define TransparentMirrorReflection() | ||
+ | material | ||
+ | if (viewerRenderType = $kRenderTypeShadow) | ||
+ | create StandardShaderShadow() | ||
+ | else | ||
+ | if (viewerRenderType = $kRenderTypeThumbnail) | ||
+ | create TransparentBlankMirrorMaterial($kRenderTypeThumbnail) | ||
+ | else | ||
+ | if (not $mirrorReflectionsEnabled) | ||
+ | set currentType (viewerRenderType) | ||
+ | create TransparentBlankMirrorMaterial($currentType) | ||
+ | else | ||
+ | create TransparentMirrorReflectionMaterial() | ||
+ | endif | ||
+ | endif | ||
+ | endif | ||
end | end | ||
− | + | enddef | |
− | # | + | define TransparentBlankMirrorMaterial(renderType) |
− | # | + | shader |
+ | validateRenderShaderContext -viewerRenderType &renderType | ||
+ | |||
+ | pass | ||
+ | shaderProgram -target vertexProgram -method assemble | ||
+ | bindConstants 0 -bindingID geomToClip -constantCount 4 | ||
+ | shaderSource | ||
+ | vs_1_1 | ||
+ | dcl_position v0 | ||
+ | m4x4 oPos, v0, c0 | ||
+ | endShaderSource | ||
+ | end | ||
+ | |||
+ | colorScalar (0,0,0) 0.5 | ||
+ | stage | ||
+ | textureBlend select(colorScalar) select(colorScalar) | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | enddef | ||
+ | |||
+ | define TransparentMirrorReflectionMaterial() | ||
+ | |||
+ | shader -layer -9998 # this material must render first | ||
+ | validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render | ||
+ | |||
+ | pass -renderEachFrame | ||
+ | renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext | ||
+ | |||
+ | depthTest true -enableDepthWrite true | ||
+ | |||
+ | applyStencilStateForOverlappingReflections | ||
+ | |||
+ | alphaBlend srcFactor(zero) add dstFactor(one) | ||
+ | |||
+ | cullmode none | ||
+ | |||
+ | shaderProgram -target vertexProgram -method assemble | ||
+ | bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 | ||
+ | shaderSource | ||
+ | vs_1_1 | ||
+ | dcl_position v0 | ||
+ | def c5, 1,0,0,1 | ||
+ | m4x4 r0, v0, c0 | ||
+ | mov oPos.x, -r0 | ||
+ | mov oPos.yzw, r0 | ||
+ | endShaderSource | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | shader -layer 6 | ||
+ | validateRenderShaderContext -viewerRenderType $kRenderTypeNormal | ||
+ | pass -modifiedEachFrameHint | ||
+ | shaderProgram -target vertexProgram -method assemble | ||
+ | bindConstants 0 -bindingID geomToClip -constantCount 4 | ||
+ | bindConstants 4 -bindingID clipToViewTarget -constantCount 4 | ||
+ | shaderSource | ||
+ | vs_1_1 | ||
+ | dcl_position v0 | ||
+ | def c8, -0.5, -0.5, 1, 1 | ||
+ | def c9, 0.5, 0.5, 0, 0 | ||
+ | def c10, 0.25, 0.25, 0, 0 | ||
+ | m4x4 r0, v0, c0 | ||
+ | mov oPos, r0 | ||
+ | mul r2, c9, r0.w | ||
+ | mad r4, r0, c8, r2 | ||
+ | rcp r3.x, c4.x | ||
+ | rcp r3.y, c5.y | ||
+ | mov r3.zw, c9.zw | ||
+ | mul r3, r3, c10 | ||
+ | mad r6, r0, r3, r4 | ||
+ | mov oT0, r6.xyww | ||
+ | endShaderSource | ||
+ | end | ||
+ | |||
+ | alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) | ||
+ | depthTest true -enableDepthWrite false | ||
+ | colorScalar (0,0,0) 0.25 | ||
+ | |||
+ | stage | ||
+ | textureTransformType vector3 homogeneous | ||
+ | textureAddressing clamp clamp | ||
+ | texture $reflectionRenderTarget | ||
+ | textureBlend select(texture) select(colorScalar) | ||
+ | end | ||
+ | |||
+ | end | ||
+ | end | ||
+ | |||
+ | shader -layer 6 | ||
+ | validateRenderShaderContext -viewerRenderType $kRenderTypeNormal | ||
+ | pass -modifiedEachFrameHint | ||
+ | shaderProgram -target vertexProgram -method assemble | ||
+ | bindConstants 0 -bindingID geomToClip -constantCount 4 | ||
+ | bindConstants 4 -bindingID clipToViewTarget -constantCount 4 | ||
+ | shaderSource | ||
+ | vs_1_1 | ||
+ | dcl_position v0 | ||
+ | def c8, -0.5, -0.5, 1, 1 | ||
+ | def c9, 0.5, 0.5, 0, 0 | ||
+ | def c10, 0.25, 0.25, 0, 0 | ||
+ | m4x4 r0, v0, c0 | ||
+ | mov oPos, r0 | ||
+ | mul r2, c9, r0.w | ||
+ | mad r4, r0, c8, r2 | ||
+ | rcp r3.x, c4.x | ||
+ | rcp r3.y, c5.y | ||
+ | mov r3.zw, c9.zw | ||
+ | mul r3, r3, c10 | ||
+ | mad r1, r0, r3, r4 | ||
+ | rcp r1.w, r1.w | ||
+ | mul oT0.xy, r1.w, r1.xy | ||
+ | endShaderSource | ||
+ | end | ||
+ | |||
+ | alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) | ||
+ | depthTest true -enableDepthWrite false | ||
+ | colorScalar (0,0,0) 0.25 | ||
+ | |||
+ | stage | ||
+ | textureAddressing clamp clamp | ||
+ | texture $reflectionRenderTarget | ||
+ | textureBlend select(texture) select(colorScalar) | ||
+ | end | ||
+ | |||
+ | end | ||
+ | end | ||
+ | enddef | ||
+ | |||
+ | #---------------------------------------------------------------------------------------------------------------# | ||
+ | |||
+ | materialDefinition transparent_mirror_reflection | ||
+ | setDefinition TransparentMirrorReflection | ||
+ | end | ||
− | # | + | #---------------------------------------------------------------------------------------------------------------# |
− | # | + | |
materialDefinition simple_mirror_reflection | materialDefinition simple_mirror_reflection |
Revision as of 07:04, 16 August 2007
version 4 set reflectionRenderTarget "ScreenReflection" set mvAspect 1 define SimpleMirrorReflection() material if (viewerRenderType = $kRenderTypeShadow) create StandardShaderShadow() else if (viewerRenderType = $kRenderTypeThumbnail) create BlankMirrorMaterial($kRenderTypeThumbnail) else if (not $mirrorReflectionsEnabled) set currentType (viewerRenderType) create BlankMirrorMaterial($currentType) else create MirrorReflectionMaterial() endif endif endif end enddef define BlankMirrorMaterial(renderType) shader validateRenderShaderContext -viewerRenderType &renderType pass shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 shaderSource vs_1_1 dcl_position v0 m4x4 oPos, v0, c0 endShaderSource end colorScalar (0.5,0.6,0.75, 1) stage textureBlend select(colorScalar) select(colorScalar) end end end enddef define MirrorReflectionMaterial() shader -layer -9998 # this material must render first validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render pass -renderEachFrame renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext depthTest true -enableDepthWrite true applyStencilStateForOverlappingReflections alphaBlend srcFactor(zero) add dstFactor(one) cullmode none shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c5, 1,0,0,1 m4x4 r0, v0, c0 mov oPos.x, -r0 mov oPos.yzw, r0 endShaderSource end end end shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r6, r0, r3, r4 mov oT0, r6.xyww endShaderSource end stage textureTransformType vector3 homogeneous textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(texture) end end end shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r1, r0, r3, r4 rcp r1.w, r1.w mul oT0.xy, r1.w, r1.xy endShaderSource end stage textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(texture) end end end enddef define SetSpecifiedZOnMirrorRTT(zValue) material shader pass renderClipSpaceRect renderTarget $reflectionRenderTarget -setViewport fullRenderTargetViewport stencil false depthTest true -enableDepthWrite true depthTestFunction accept alphaBlend srcFactor(zero) add dstFactor(one) shaderProgram -target vertexProgram -method compile -version 1_1 bindConstants 0 -bindingID immediateData -data (0,0,&zValue, 0) shaderSource float4 zValue : register(c0); void VertexMain(float4 position : POSITION, out float4 oPosition : POSITION) { oPosition = position; oPosition.z = zValue.z; // set specified z value } endShaderSource end end end end enddef define SetNearZOnMirrorRTT() create SetSpecifiedZOnMirrorRTT(0) enddef define SetFarZOnMirrorRTT() create SetSpecifiedZOnMirrorRTT(1) enddef define SetStencilOnCensorRTT() material shader pass renderClipSpaceRect stencil true stencilFunction accept -refValue 1 stencilOperation -onPass writeRef depthTest false -enableDepthWrite false depthTestFunction accept alphaBlend srcFactor(zero) add dstFactor(one) shaderProgram -target vertexProgram -method assemble shaderSource vs_1_1 dcl_position v0 mov oPos, v0 endShaderSource end stage textureBlend select(colorScalar) select(colorScalar) end end end end enddef defaultState $kRenderTypeMirror stencil true stencilFunction acceptIfEqual -refValue 1 stencilOperation -onPass noWrite end defaultState $kRenderTypeNormal stencil true stencilFunction acceptIfEqual -refValue 0 stencilOperation -onPass noWrite end #---------------------------------------------------------------------------------------------------------------# define TransparentMirrorReflection() material if (viewerRenderType = $kRenderTypeShadow) create StandardShaderShadow() else if (viewerRenderType = $kRenderTypeThumbnail) create TransparentBlankMirrorMaterial($kRenderTypeThumbnail) else if (not $mirrorReflectionsEnabled) set currentType (viewerRenderType) create TransparentBlankMirrorMaterial($currentType) else create TransparentMirrorReflectionMaterial() endif endif endif end enddef define TransparentBlankMirrorMaterial(renderType) shader validateRenderShaderContext -viewerRenderType &renderType pass shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 shaderSource vs_1_1 dcl_position v0 m4x4 oPos, v0, c0 endShaderSource end colorScalar (0,0,0) 0.5 stage textureBlend select(colorScalar) select(colorScalar) end end end enddef define TransparentMirrorReflectionMaterial() shader -layer -9998 # this material must render first validateRenderShaderContext -viewerRenderType $kRenderTypeMirror # reflection render pass -renderEachFrame renderTarget $reflectionRenderTarget -setViewport viewportFromParentRenderContext depthTest true -enableDepthWrite true applyStencilStateForOverlappingReflections alphaBlend srcFactor(zero) add dstFactor(one) cullmode none shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClipFromParentView -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c5, 1,0,0,1 m4x4 r0, v0, c0 mov oPos.x, -r0 mov oPos.yzw, r0 endShaderSource end end end shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r6, r0, r3, r4 mov oT0, r6.xyww endShaderSource end alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite false colorScalar (0,0,0) 0.25 stage textureTransformType vector3 homogeneous textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(colorScalar) end end end shader -layer 6 validateRenderShaderContext -viewerRenderType $kRenderTypeNormal pass -modifiedEachFrameHint shaderProgram -target vertexProgram -method assemble bindConstants 0 -bindingID geomToClip -constantCount 4 bindConstants 4 -bindingID clipToViewTarget -constantCount 4 shaderSource vs_1_1 dcl_position v0 def c8, -0.5, -0.5, 1, 1 def c9, 0.5, 0.5, 0, 0 def c10, 0.25, 0.25, 0, 0 m4x4 r0, v0, c0 mov oPos, r0 mul r2, c9, r0.w mad r4, r0, c8, r2 rcp r3.x, c4.x rcp r3.y, c5.y mov r3.zw, c9.zw mul r3, r3, c10 mad r1, r0, r3, r4 rcp r1.w, r1.w mul oT0.xy, r1.w, r1.xy endShaderSource end alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite false colorScalar (0,0,0) 0.25 stage textureAddressing clamp clamp texture $reflectionRenderTarget textureBlend select(texture) select(colorScalar) end end end enddef #---------------------------------------------------------------------------------------------------------------# materialDefinition transparent_mirror_reflection setDefinition TransparentMirrorReflection end #---------------------------------------------------------------------------------------------------------------# materialDefinition simple_mirror_reflection setDefinition SimpleMirrorReflection end materialDefinition MirrorBackPostReflectionRenderMaterial setDefinition MirrorBackClearStencilAndSetDepth end # bound to the bounding mesh around the mirror plane that prevents the mirror from being # undesirably culled materialDefinition MirrorBoundingBoxMaterial setDefinition Null end # used to clear the mirror render target to z = 0 wherever the stencil has been set to 1 materialDefinition ZClearToNearPlaneMaterial setDefinition SetNearZOnMirrorRTT end # used to clear the mirror render target to z = 0 wherever the stencil has been set to 1 materialDefinition ZClearToFarPlaneMaterial setDefinition SetFarZOnMirrorRTT end # bound to a compositing pass geometry that preps the stencil buffer for rendering into # the censor render target from the mirror view materialDefinition CensorInMirrorStencilPrepMaterial setDefinition SetStencilOnCensorRTT end # End DO NOT MODIFY THIS BLOCK